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 33using namespace WebCore; 34 35// WebURLCredential ---------------------------------------------------------------- 36 37WebURLCredential::WebURLCredential(const Credential& credential) 38 : m_refCount(0) 39 , m_credential(credential) 40{ 41 gClassCount++; 42 gClassNameCount.add("WebURLCredential"); 43} 44 45WebURLCredential::~WebURLCredential() 46{ 47 gClassCount--; 48 gClassNameCount.remove("WebURLCredential"); 49} 50 51WebURLCredential* WebURLCredential::createInstance() 52{ 53 WebURLCredential* instance = new WebURLCredential(Credential()); 54 instance->AddRef(); 55 return instance; 56} 57 58WebURLCredential* WebURLCredential::createInstance(const Credential& credential) 59{ 60 WebURLCredential* instance = new WebURLCredential(credential); 61 instance->AddRef(); 62 return instance; 63} 64 65// IUnknown ------------------------------------------------------------------- 66 67HRESULT 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 83ULONG STDMETHODCALLTYPE WebURLCredential::AddRef(void) 84{ 85 return ++m_refCount; 86} 87 88ULONG STDMETHODCALLTYPE WebURLCredential::Release(void) 89{ 90 ULONG newRef = --m_refCount; 91 if (!newRef) 92 delete(this); 93 94 return newRef; 95} 96 97// IWebURLCredential ------------------------------------------------------------------- 98HRESULT STDMETHODCALLTYPE WebURLCredential::hasPassword( 99 /* [out, retval] */ BOOL* result) 100{ 101 *result = m_credential.hasPassword(); 102 return S_OK; 103} 104 105HRESULT 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 129HRESULT 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 137HRESULT 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 157HRESULT 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 165const WebCore::Credential& WebURLCredential::credential() const 166{ 167 return m_credential; 168} 169 170