diff options
| author | Steve Block <steveblock@google.com> | 2011-05-25 19:08:45 +0100 |
|---|---|---|
| committer | Steve Block <steveblock@google.com> | 2011-06-08 13:51:31 +0100 |
| commit | 2bde8e466a4451c7319e3a072d118917957d6554 (patch) | |
| tree | 28f4a1b869a513e565c7760d0e6a06e7cf1fe95a /Source/WebKit2/Shared/win | |
| parent | 6939c99b71d9372d14a0c74a772108052e8c48c8 (diff) | |
| download | external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.zip external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.tar.gz external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.tar.bz2 | |
Merge WebKit at r82507: Initial merge by git
Change-Id: I60ce9d780725b58b45e54165733a8ffee23b683e
Diffstat (limited to 'Source/WebKit2/Shared/win')
| -rw-r--r-- | Source/WebKit2/Shared/win/PlatformCertificateInfo.cpp | 21 | ||||
| -rw-r--r-- | Source/WebKit2/Shared/win/PlatformCertificateInfo.h | 1 | ||||
| -rw-r--r-- | Source/WebKit2/Shared/win/WebCoreArgumentCodersWin.cpp | 37 |
3 files changed, 53 insertions, 6 deletions
diff --git a/Source/WebKit2/Shared/win/PlatformCertificateInfo.cpp b/Source/WebKit2/Shared/win/PlatformCertificateInfo.cpp index ade2291..0d1ca36 100644 --- a/Source/WebKit2/Shared/win/PlatformCertificateInfo.cpp +++ b/Source/WebKit2/Shared/win/PlatformCertificateInfo.cpp @@ -65,14 +65,23 @@ PlatformCertificateInfo::PlatformCertificateInfo(const ResourceResponse& respons PCERT_SIMPLE_CHAIN firstSimpleChain = chainContext->rgpChain[0]; for (unsigned i = 0; i < firstSimpleChain->cElement; ++i) { PCCERT_CONTEXT certificateContext = firstSimpleChain->rgpElement[i]->pCertContext; - ::CertDuplicateCertificateContext(certificateContext); - m_certificateChain.append(certificateContext); + PCCERT_CONTEXT certificateContextCopy = ::CertDuplicateCertificateContext(certificateContext); + m_certificateChain.append(certificateContextCopy); } #else // FIXME: WinCairo implementation #endif } +PlatformCertificateInfo::PlatformCertificateInfo(PCCERT_CONTEXT certificateContext) +{ + if (!certificateContext) + return; + + PCCERT_CONTEXT certificateContextCopy = ::CertDuplicateCertificateContext(certificateContext); + m_certificateChain.append(certificateContextCopy); +} + PlatformCertificateInfo::~PlatformCertificateInfo() { clearCertificateChain(); @@ -81,8 +90,8 @@ PlatformCertificateInfo::~PlatformCertificateInfo() PlatformCertificateInfo::PlatformCertificateInfo(const PlatformCertificateInfo& other) { for (size_t i = 0; i < other.m_certificateChain.size(); ++i) { - ::CertDuplicateCertificateContext(other.m_certificateChain[i]); - m_certificateChain.append(other.m_certificateChain[i]); + PCCERT_CONTEXT certificateContextCopy = ::CertDuplicateCertificateContext(other.m_certificateChain[i]); + m_certificateChain.append(certificateContextCopy); } } @@ -90,8 +99,8 @@ PlatformCertificateInfo& PlatformCertificateInfo::operator=(const PlatformCertif { clearCertificateChain(); for (size_t i = 0; i < other.m_certificateChain.size(); ++i) { - ::CertDuplicateCertificateContext(other.m_certificateChain[i]); - m_certificateChain.append(other.m_certificateChain[i]); + PCCERT_CONTEXT certificateContextCopy = ::CertDuplicateCertificateContext(other.m_certificateChain[i]); + m_certificateChain.append(certificateContextCopy); } return *this; } diff --git a/Source/WebKit2/Shared/win/PlatformCertificateInfo.h b/Source/WebKit2/Shared/win/PlatformCertificateInfo.h index e483d37..dd999ef 100644 --- a/Source/WebKit2/Shared/win/PlatformCertificateInfo.h +++ b/Source/WebKit2/Shared/win/PlatformCertificateInfo.h @@ -43,6 +43,7 @@ class PlatformCertificateInfo { public: PlatformCertificateInfo(); explicit PlatformCertificateInfo(const WebCore::ResourceResponse&); + explicit PlatformCertificateInfo(PCCERT_CONTEXT); ~PlatformCertificateInfo(); PlatformCertificateInfo(const PlatformCertificateInfo&); diff --git a/Source/WebKit2/Shared/win/WebCoreArgumentCodersWin.cpp b/Source/WebKit2/Shared/win/WebCoreArgumentCodersWin.cpp index 9513e90..d659ac4 100644 --- a/Source/WebKit2/Shared/win/WebCoreArgumentCodersWin.cpp +++ b/Source/WebKit2/Shared/win/WebCoreArgumentCodersWin.cpp @@ -28,6 +28,8 @@ #if USE(CFNETWORK) #include "ArgumentCodersCF.h" +#include "PlatformCertificateInfo.h" +#include <WebCore/CertificateCFWin.h> #include <WebKitSystemInterface/WebKitSystemInterface.h> #endif @@ -117,4 +119,39 @@ bool decodeResourceResponse(ArgumentDecoder* decoder, WebCore::ResourceResponse& #endif } +void encodeResourceError(ArgumentEncoder* encoder, const WebCore::ResourceError& resourceError) +{ + encoder->encode(CoreIPC::In(resourceError.domain(), resourceError.errorCode(), resourceError.failingURL(), resourceError.localizedDescription())); + +#if USE(CFNETWORK) + encoder->encode(WebKit::PlatformCertificateInfo(resourceError.certificate())); +#endif +} + +bool decodeResourceError(ArgumentDecoder* decoder, WebCore::ResourceError& resourceError) +{ + String domain; + int errorCode; + String failingURL; + String localizedDescription; + if (!decoder->decode(CoreIPC::Out(domain, errorCode, failingURL, localizedDescription))) + return false; + +#if USE(CFNETWORK) + WebKit::PlatformCertificateInfo certificate; + if (!decoder->decode(certificate)) + return false; + + const Vector<PCCERT_CONTEXT> certificateChain = certificate.certificateChain(); + if (!certificateChain.isEmpty()) { + ASSERT(certificateChain.size() == 1); + resourceError = WebCore::ResourceError(domain, errorCode, failingURL, localizedDescription, WebCore::copyCertificateToData(certificateChain.first()).get()); + return true; + } +#endif + + resourceError = WebCore::ResourceError(domain, errorCode, failingURL, localizedDescription); + return true; +} + } // namespace CoreIPC |
