summaryrefslogtreecommitdiffstats
path: root/Source/WebKit2/Shared/win
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/Shared/win')
-rw-r--r--Source/WebKit2/Shared/win/PlatformCertificateInfo.cpp21
-rw-r--r--Source/WebKit2/Shared/win/PlatformCertificateInfo.h1
-rw-r--r--Source/WebKit2/Shared/win/WebCoreArgumentCodersWin.cpp37
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