📄 weburlauthenticationchallenge.cpp
字号:
/* * Copyright (C) 2007 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */#include "config.h"#include "WebKitDLL.h"#include "WebURLAuthenticationChallenge.h"#include "COMPtr.h"#include "WebError.h"#include "WebKit.h"#include "WebURLAuthenticationChallengeSender.h"#include "WebURLCredential.h"#include "WebURLProtectionSpace.h"#include "WebURLResponse.h"#include "WebKit.h"#pragma warning(push, 0)#include <WebCore/BString.h>#include <WebCore/ResourceHandle.h>#pragma warning(pop)using namespace WebCore;// WebURLAuthenticationChallenge ----------------------------------------------------------------WebURLAuthenticationChallenge::WebURLAuthenticationChallenge(const AuthenticationChallenge& authenticationChallenge, IWebURLAuthenticationChallengeSender* sender) : m_refCount(0) , m_authenticationChallenge(authenticationChallenge) , m_sender(sender){ gClassCount++; gClassNameCount.add("WebURLAuthenticationChallenge");}WebURLAuthenticationChallenge::~WebURLAuthenticationChallenge(){ gClassCount--; gClassNameCount.remove("WebURLAuthenticationChallenge");}WebURLAuthenticationChallenge* WebURLAuthenticationChallenge::createInstance(const AuthenticationChallenge& authenticationChallenge){ WebURLAuthenticationChallenge* instance = new WebURLAuthenticationChallenge(authenticationChallenge, 0); instance->AddRef(); return instance;}WebURLAuthenticationChallenge* WebURLAuthenticationChallenge::createInstance(const AuthenticationChallenge& authenticationChallenge, IWebURLAuthenticationChallengeSender* sender){ WebURLAuthenticationChallenge* instance = new WebURLAuthenticationChallenge(authenticationChallenge, sender); instance->AddRef(); return instance;}// IUnknown -------------------------------------------------------------------HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallenge::QueryInterface(REFIID riid, void** ppvObject){ *ppvObject = 0; if (IsEqualGUID(riid, IID_IUnknown)) *ppvObject = static_cast<IUnknown*>(this); else if (IsEqualGUID(riid, __uuidof(this))) *ppvObject = static_cast<WebURLAuthenticationChallenge*>(this); else if (IsEqualGUID(riid, IID_IWebURLAuthenticationChallenge)) *ppvObject = static_cast<IWebURLAuthenticationChallenge*>(this); else return E_NOINTERFACE; AddRef(); return S_OK;}ULONG STDMETHODCALLTYPE WebURLAuthenticationChallenge::AddRef(void){ return ++m_refCount;}ULONG STDMETHODCALLTYPE WebURLAuthenticationChallenge::Release(void){ ULONG newRef = --m_refCount; if (!newRef) delete(this); return newRef;}// IWebURLAuthenticationChallenge -------------------------------------------------------------------HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallenge::initWithProtectionSpace( /* [in] */ IWebURLProtectionSpace* space, /* [in] */ IWebURLCredential* proposedCredential, /* [in] */ int previousFailureCount, /* [in] */ IWebURLResponse* failureResponse, /* [in] */ IWebError* error, /* [in] */ IWebURLAuthenticationChallengeSender* sender){ LOG_ERROR("Calling the ala carte init for WebURLAuthenticationChallenge - is this really what you want to do?"); if (!space || !proposedCredential || !failureResponse || !sender) return E_POINTER; HRESULT hr = S_OK; COMPtr<WebURLProtectionSpace> webSpace; hr = space->QueryInterface(&webSpace); if (FAILED(hr)) return hr; COMPtr<WebURLCredential> webCredential(Query, proposedCredential); if (!webCredential) return E_NOINTERFACE; COMPtr<WebURLResponse> webResponse; hr = failureResponse->QueryInterface(&webResponse); if (FAILED(hr)) return hr; COMPtr<WebError> webError; hr = error->QueryInterface(CLSID_WebError, (void**)&webError); if (FAILED(hr)) return hr; COMPtr<WebURLAuthenticationChallengeSender> webSender(Query, sender); if (!webSender) return E_NOINTERFACE; // FIXME: After we change AuthenticationChallenge to use "ResourceHandle" as the abstract "Sender" or "Source of this Auth Challenge", then we'll // construct the AuthenticationChallenge with that as obtained from the webSender#if USE(CFNETWORK) m_authenticationChallenge = AuthenticationChallenge(webSpace->protectionSpace(), webCredential->credential(), previousFailureCount, webResponse->resourceResponse(), webError->resourceError());#endif return S_OK;}HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallenge::initWithAuthenticationChallenge( /* [in] */ IWebURLAuthenticationChallenge* challenge, /* [in] */ IWebURLAuthenticationChallengeSender* sender){ if (!challenge || !sender) return E_POINTER; COMPtr<WebURLAuthenticationChallenge> webChallenge(Query, challenge); if (!webChallenge) return E_NOINTERFACE; COMPtr<WebURLAuthenticationChallengeSender> webSender(Query, sender); if (!webSender) return E_NOINTERFACE;#if USE(CFNETWORK) m_authenticationChallenge = AuthenticationChallenge(webChallenge->authenticationChallenge().cfURLAuthChallengeRef(), webSender->resourceHandle()); return S_OK;#else return E_FAIL;#endif}HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallenge::error( /* [out, retval] */ IWebError** result){ *result = WebError::createInstance(m_authenticationChallenge.error()); return S_OK;}HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallenge::failureResponse( /* [out, retval] */ IWebURLResponse** result){ *result = WebURLResponse::createInstance(m_authenticationChallenge.failureResponse()); return S_OK;}HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallenge::previousFailureCount( /* [out, retval] */ UINT* result){ *result = m_authenticationChallenge.previousFailureCount(); return S_OK;}HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallenge::proposedCredential( /* [out, retval] */ IWebURLCredential** result){ *result = WebURLCredential::createInstance(m_authenticationChallenge.proposedCredential()); return S_OK;}HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallenge::protectionSpace( /* [out, retval] */ IWebURLProtectionSpace** result){ *result = WebURLProtectionSpace::createInstance(m_authenticationChallenge.protectionSpace()); return S_OK;}HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallenge::sender( /* [out, retval] */ IWebURLAuthenticationChallengeSender** sender){ if (!m_sender) { ResourceHandle* handle = m_authenticationChallenge.sourceHandle(); m_sender.adoptRef(WebURLAuthenticationChallengeSender::createInstance(handle)); } return m_sender.copyRefTo(sender);}// WebURLAuthenticationChallenge -------------------------------------------------------------------const AuthenticationChallenge& WebURLAuthenticationChallenge::authenticationChallenge() const{ return m_authenticationChallenge;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -