1 /* 2 * Copyright (C) 2007 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #include "config.h" 27 #include "WebKitDLL.h" 28 #include "WebURLCredential.h" 29 30 #include "WebKit.h" 31 #include <WebCore/BString.h> 32 33 using namespace WebCore; 34 35 // WebURLCredential ---------------------------------------------------------------- 36 37 WebURLCredential::WebURLCredential(const Credential& credential) 38 : m_refCount(0) 39 , m_credential(credential) 40 { 41 gClassCount++; 42 gClassNameCount.add("WebURLCredential"); 43 } 44 45 WebURLCredential::~WebURLCredential() 46 { 47 gClassCount--; 48 gClassNameCount.remove("WebURLCredential"); 49 } 50 51 WebURLCredential* WebURLCredential::createInstance() 52 { 53 WebURLCredential* instance = new WebURLCredential(Credential()); 54 instance->AddRef(); 55 return instance; 56 } 57 58 WebURLCredential* WebURLCredential::createInstance(const Credential& credential) 59 { 60 WebURLCredential* instance = new WebURLCredential(credential); 61 instance->AddRef(); 62 return instance; 63 } 64 65 // IUnknown ------------------------------------------------------------------- 66 67 HRESULT STDMETHODCALLTYPE WebURLCredential::QueryInterface(REFIID riid, void** ppvObject) 68 { 69 *ppvObject = 0; 70 if (IsEqualGUID(riid, IID_IUnknown)) 71 *ppvObject = static_cast<IUnknown*>(this); 72 else if (IsEqualGUID(riid, __uuidof(WebURLCredential))) 73 *ppvObject = static_cast<WebURLCredential*>(this); 74 else if (IsEqualGUID(riid, IID_IWebURLCredential)) 75 *ppvObject = static_cast<IWebURLCredential*>(this); 76 else 77 return E_NOINTERFACE; 78 79 AddRef(); 80 return S_OK; 81 } 82 83 ULONG STDMETHODCALLTYPE WebURLCredential::AddRef(void) 84 { 85 return ++m_refCount; 86 } 87 88 ULONG STDMETHODCALLTYPE WebURLCredential::Release(void) 89 { 90 ULONG newRef = --m_refCount; 91 if (!newRef) 92 delete(this); 93 94 return newRef; 95 } 96 97 // IWebURLCredential ------------------------------------------------------------------- 98 HRESULT STDMETHODCALLTYPE WebURLCredential::hasPassword( 99 /* [out, retval] */ BOOL* result) 100 { 101 *result = m_credential.hasPassword(); 102 return S_OK; 103 } 104 105 HRESULT STDMETHODCALLTYPE WebURLCredential::initWithUser( 106 /* [in] */ BSTR user, 107 /* [in] */ BSTR password, 108 /* [in] */ WebURLCredentialPersistence persistence) 109 { 110 CredentialPersistence corePersistence = CredentialPersistenceNone; 111 switch (persistence) { 112 case WebURLCredentialPersistenceNone: 113 break; 114 case WebURLCredentialPersistenceForSession: 115 corePersistence = CredentialPersistenceForSession; 116 break; 117 case WebURLCredentialPersistencePermanent: 118 corePersistence = CredentialPersistencePermanent; 119 break; 120 default: 121 ASSERT_NOT_REACHED(); 122 return E_FAIL; 123 } 124 125 m_credential = Credential(String(user, SysStringLen(user)), String(password, SysStringLen(password)), corePersistence); 126 return S_OK; 127 } 128 129 HRESULT STDMETHODCALLTYPE WebURLCredential::password( 130 /* [out, retval] */ BSTR* password) 131 { 132 BString str = m_credential.password(); 133 *password = str.release(); 134 return S_OK; 135 } 136 137 HRESULT STDMETHODCALLTYPE WebURLCredential::persistence( 138 /* [out, retval] */ WebURLCredentialPersistence* result) 139 { 140 switch (m_credential.persistence()) { 141 case CredentialPersistenceNone: 142 *result = WebURLCredentialPersistenceNone; 143 break; 144 case CredentialPersistenceForSession: 145 *result = WebURLCredentialPersistenceForSession; 146 break; 147 case CredentialPersistencePermanent: 148 *result = WebURLCredentialPersistencePermanent; 149 break; 150 default: 151 ASSERT_NOT_REACHED(); 152 return E_FAIL; 153 } 154 return S_OK; 155 } 156 157 HRESULT STDMETHODCALLTYPE WebURLCredential::user( 158 /* [out, retval] */ BSTR* result) 159 { 160 BString str = m_credential.user(); 161 *result = str.release(); 162 return S_OK; 163 } 164 165 const WebCore::Credential& WebURLCredential::credential() const 166 { 167 return m_credential; 168 } 169 170