WebKit Bugzilla
Attachment 348321 Details for
Bug 189053
: [Curl][WebKit] Implement Proxy configuration API.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
PATCH
189053.diff (text/plain), 29.41 KB, created by
Basuke Suzuki
on 2018-08-28 12:24:54 PDT
(
hide
)
Description:
PATCH
Filename:
MIME Type:
Creator:
Basuke Suzuki
Created:
2018-08-28 12:24:54 PDT
Size:
29.41 KB
patch
obsolete
>diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index f6b8722228a..70ddb035a76 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,52 @@ >+2018-08-28 Basuke Suzuki <Basuke.Suzuki@sony.com> >+ >+ [Curl][WebKit] Implement Proxy and TLS related features. >+ https://bugs.webkit.org/show_bug.cgi?id=189053 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Implement proxy and TLS related features on WebKit NetworkProcess. Separate WebProcessPoolWin and WebProcessPoolCurl >+ for differences of initialization among platform layer and network layer. >+ Actual implementations have been in WebCore already and used in WebKitLegacy for a while. >+ >+ * NetworkProcess/NetworkProcess.h: >+ * NetworkProcess/NetworkProcess.messages.in: >+ * NetworkProcess/NetworkProcessCreationParameters.cpp: >+ (WebKit::NetworkProcessCreationParameters::encode const): >+ (WebKit::NetworkProcessCreationParameters::decode): >+ * NetworkProcess/NetworkProcessCreationParameters.h: >+ * NetworkProcess/curl/NetworkDataTaskCurl.cpp: >+ * NetworkProcess/curl/NetworkProcessCurl.cpp: >+ (WebKit::NetworkProcess::platformInitializeNetworkProcessCurl): >+ (WebKit::NetworkProcess::setNetworkProxySettings): >+ (WebKit::NetworkProcess::setSslAlgorithms): >+ (WebKit::NetworkProcess::setSslCACertPath): >+ (WebKit::NetworkProcess::platformInitializeNetworkProcess): Deleted. >+ * NetworkProcess/win/NetworkProcessWin.cpp: Copied from Source/WebKit/UIProcess/win/WebProcessPoolWin.cpp. >+ (WebKit::NetworkProcess::platformInitializeNetworkProcess): >+ * PlatformWin.cmake: >+ * Shared/WebCoreArgumentCoders.h: >+ * Shared/curl/WebCoreArgumentCodersCurl.cpp: >+ (IPC::ArgumentCoder<CurlProxySettings>::encode): >+ (IPC::ArgumentCoder<CurlProxySettings>::decode): >+ * UIProcess/API/C/curl/WKContextCurl.cpp: Added. >+ (WKContextSetNetworkProxySettings): >+ (WKContextSetSslAlgorithms): >+ (WKContextSetSslCACertPath): >+ (WKContextGetSslCACertPath): >+ * UIProcess/API/C/curl/WKContextCurl.h: Copied from Source/WebKit/UIProcess/win/WebProcessPoolWin.cpp. >+ * UIProcess/WebProcessPool.h: >+ * UIProcess/curl/WebProcessPoolCurl.cpp: Added. >+ (WebKit::WebProcessPool::platformInitializeNetworkProcessCurl): >+ (WebKit::WebProcessPool::setNetworkProxySettings): >+ (WebKit::WebProcessPool::setSslAlgorithms): >+ (WebKit::WebProcessPool::setSslCACertPath): >+ (WebKit::WebProcessPool::getSslCACertPath): >+ * UIProcess/win/WebProcessPoolWin.cpp: >+ (WebKit::WebProcessPool::platformInitializeNetworkProcess): >+ (WebKit::WebProcessPool::platformInitializeWebProcess): >+ (WebKit::WebProcessPool::platformResolvePathsForSandboxExtensions): >+ > 2018-08-24 Basuke Suzuki <Basuke.Suzuki@sony.com> > > [Curl] Match the interface used in NetworkDataTask and ResourceHandle. >diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.h b/Source/WebKit/NetworkProcess/NetworkProcess.h >index caec53c3c5f..8e86ab22722 100644 >--- a/Source/WebKit/NetworkProcess/NetworkProcess.h >+++ b/Source/WebKit/NetworkProcess/NetworkProcess.h >@@ -55,6 +55,10 @@ class URL; > enum class StoredCredentialsPolicy; > struct SecurityOriginData; > struct SoupNetworkProxySettings; >+ >+#if USE(CURL) >+class CurlProxySettings; >+#endif > } > > namespace WebKit { >@@ -244,6 +248,13 @@ private: > void setNetworkProxySettings(const WebCore::SoupNetworkProxySettings&); > #endif > >+#if USE(CURL) >+ void platformInitializeNetworkProcessCurl(const NetworkProcessCreationParameters&); >+ void setNetworkProxySettings(const WebCore::CurlProxySettings&); >+ void setSslAlgorithms(String cipherList, String signatureAlgorithmsList, String curvesList); >+ void setSslCACertPath(String); >+#endif >+ > #if PLATFORM(MAC) > static void setSharedHTTPCookieStorage(const Vector<uint8_t>& identifier); > #endif >diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.messages.in b/Source/WebKit/NetworkProcess/NetworkProcess.messages.in >index baa34d09ff6..f889d8ba40f 100644 >--- a/Source/WebKit/NetworkProcess/NetworkProcess.messages.in >+++ b/Source/WebKit/NetworkProcess/NetworkProcess.messages.in >@@ -33,6 +33,12 @@ messages -> NetworkProcess LegacyReceiver { > SetNetworkProxySettings(struct WebCore::SoupNetworkProxySettings settings) > #endif > >+#if USE(CURL) >+ SetNetworkProxySettings(WebCore::CurlProxySettings settings) >+ SetSslAlgorithms(String cipherList, String signatureAlgorithmsList, String curvesList) >+ SetSslCACertPath(String caCertPath) >+#endif >+ > ClearCachedCredentials() > > AddWebsiteDataStore(struct WebKit::WebsiteDataStoreParameters websiteDataStoreParameters); >diff --git a/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp b/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp >index cd7dba8e9a3..2718e9794e5 100644 >--- a/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp >+++ b/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp >@@ -89,6 +89,13 @@ void NetworkProcessCreationParameters::encode(IPC::Encoder& encoder) const > #elif USE(CURL) > encoder << cookiePersistentStorageFile; > #endif >+#if USE(CURL) >+ encoder << proxySettings; >+ encoder << cipherList; >+ encoder << signatureAlgorithmsList; >+ encoder << curvesList; >+ encoder << caCertPath; >+#endif > #if HAVE(CFNETWORK_STORAGE_PARTITIONING) && !RELEASE_LOG_DISABLED > encoder << logCookieInformation; > #endif >@@ -214,6 +221,19 @@ bool NetworkProcessCreationParameters::decode(IPC::Decoder& decoder, NetworkProc > return false; > #endif > >+#if USE(CURL) >+ if (!decoder.decode(result.proxySettings)) >+ return false; >+ if (!decoder.decode(result.cipherList)) >+ return false; >+ if (!decoder.decode(result.signatureAlgorithmsList)) >+ return false; >+ if (!decoder.decode(result.curvesList)) >+ return false; >+ if (!decoder.decode(result.caCertPath)) >+ return false; >+#endif >+ > #if HAVE(CFNETWORK_STORAGE_PARTITIONING) && !RELEASE_LOG_DISABLED > if (!decoder.decode(result.logCookieInformation)) > return false; >diff --git a/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h b/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h >index 54e6ab04c64..24c4bc90b2f 100644 >--- a/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h >+++ b/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h >@@ -38,6 +38,10 @@ > #include <WebCore/SoupNetworkProxySettings.h> > #endif > >+#if USE(CURL) >+#include <WebCore/CurlProxySettings.h> >+#endif >+ > namespace IPC { > class Decoder; > class Encoder; >@@ -104,6 +108,14 @@ struct NetworkProcessCreationParameters { > String cookiePersistentStorageFile; > #endif > >+#if USE(CURL) >+ WebCore::CurlProxySettings proxySettings; >+ String cipherList; >+ String signatureAlgorithmsList; >+ String curvesList; >+ String caCertPath; >+#endif >+ > #if HAVE(CFNETWORK_STORAGE_PARTITIONING) && !RELEASE_LOG_DISABLED > bool logCookieInformation { false }; > #endif >diff --git a/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp b/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp >index 29b528e1c79..b7eccbd4391 100644 >--- a/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp >+++ b/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp >@@ -27,6 +27,7 @@ > #include "NetworkDataTaskCurl.h" > > #include "AuthenticationManager.h" >+#include "NetworkProcess.h" > #include "NetworkSessionCurl.h" > #include <WebCore/AuthenticationChallenge.h> > #include <WebCore/CookiesStrategy.h> >diff --git a/Source/WebKit/NetworkProcess/curl/NetworkProcessCurl.cpp b/Source/WebKit/NetworkProcess/curl/NetworkProcessCurl.cpp >index 19131c67322..a5af6b5bfbf 100644 >--- a/Source/WebKit/NetworkProcess/curl/NetworkProcessCurl.cpp >+++ b/Source/WebKit/NetworkProcess/curl/NetworkProcessCurl.cpp >@@ -26,29 +26,23 @@ > #include "config.h" > #include "NetworkProcess.h" > >-#include "NetworkCache.h" > #include "NetworkProcessCreationParameters.h" >-#include "ResourceCachesToClear.h" >-#include "WebCookieManager.h" >-#include <WebCore/CertificateInfo.h> >-#include <WebCore/FileSystem.h> >-#include <WebCore/NetworkStorageSession.h> > #include "WebCookieManager.h" > #include <WebCore/CurlContext.h> > #include <WebCore/NotImplemented.h> >-#include <WebCore/ResourceHandle.h> >-#include <wtf/RAMSize.h> >-#include <wtf/text/CString.h> >-#include <wtf/text/StringBuilder.h> > > using namespace WebCore; > > namespace WebKit { > >-void NetworkProcess::platformInitializeNetworkProcess(const NetworkProcessCreationParameters& parameters) >+void NetworkProcess::platformInitializeNetworkProcessCurl(const NetworkProcessCreationParameters& parameters) > { > if (!parameters.cookiePersistentStorageFile.isEmpty()) > supplement<WebCookieManager>()->setCookiePersistentStorage(parameters.cookiePersistentStorageFile); >+ setNetworkProxySettings(parameters.proxySettings); >+ setSslAlgorithms(parameters.cipherList, parameters.signatureAlgorithmsList, parameters.curvesList); >+ if (!parameters.caCertPath.isEmpty()) >+ setSslCACertPath(parameters.caCertPath); > } > > void NetworkProcess::allowSpecificHTTPSCertificateForHost(const CertificateInfo& certificateInfo, const String& host) >@@ -92,4 +86,31 @@ void NetworkProcess::platformProcessDidTransitionToBackground() > notImplemented(); > } > >+void NetworkProcess::setNetworkProxySettings(const WebCore::CurlProxySettings& settings) >+{ >+ CurlContext::singleton().setProxySettings(settings); >+} >+ >+void NetworkProcess::setSslAlgorithms(String cipherList, String signatureAlgorithmsList, String curvesList) >+{ >+ auto& sslHandle = CurlContext::singleton().sslHandle(); >+ sslHandle.setCipherList(WTFMove(cipherList)); >+ sslHandle.setSignatureAlgorithmsList(WTFMove(signatureAlgorithmsList)); >+ sslHandle.setCurvesList(WTFMove(curvesList)); >+} >+ >+void NetworkProcess::setSslCACertPath(String caCertPath) >+{ >+ static const char* onMemoryIdentifier = ":memory:"; >+ >+ if (caCertPath.startsWith(onMemoryIdentifier)) { >+ Vector<uint8_t> caCertData; >+ auto body = caCertPath.substring(strlen(onMemoryIdentifier)).utf8(); >+ caCertData.append(reinterpret_cast<const uint8_t*>(body.data()), body.length()); >+ CurlContext::singleton().sslHandle().setCACertData(WTFMove(caCertData)); >+ } else { >+ CurlContext::singleton().sslHandle().setCACertPath(WTFMove(caCertPath)); >+ } >+} >+ > } // namespace WebKit >diff --git a/Source/WebKit/NetworkProcess/win/NetworkProcessWin.cpp b/Source/WebKit/NetworkProcess/win/NetworkProcessWin.cpp >new file mode 100644 >index 00000000000..44707a99436 >--- /dev/null >+++ b/Source/WebKit/NetworkProcess/win/NetworkProcessWin.cpp >@@ -0,0 +1,42 @@ >+/* >+ * Copyright (C) 2018 Sony Interactive Entertainment Inc. >+ * >+ * 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 INC. AND ITS CONTRIBUTORS ``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 INC. OR ITS 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 "NetworkProcess.h" >+ >+#include "NetworkProcessCreationParameters.h" >+ >+using namespace WebCore; >+ >+namespace WebKit { >+ >+void NetworkProcess::platformInitializeNetworkProcess(const NetworkProcessCreationParameters& parameters) >+{ >+#if USE(CURL) >+ platformInitializeNetworkProcessCurl(parameters); >+#endif >+} >+ >+} // namespace WebKit >diff --git a/Source/WebKit/PlatformWin.cmake b/Source/WebKit/PlatformWin.cmake >index 5c99d5aa5a7..0e412b658ac 100644 >--- a/Source/WebKit/PlatformWin.cmake >+++ b/Source/WebKit/PlatformWin.cmake >@@ -10,6 +10,7 @@ add_definitions(-DBUILDING_WEBKIT) > > list(APPEND WebKit_SOURCES > NetworkProcess/win/NetworkProcessMainWin.cpp >+ NetworkProcess/win/NetworkProcessWin.cpp > > Platform/IPC/win/AttachmentWin.cpp > Platform/IPC/win/ConnectionWin.cpp >@@ -63,6 +64,12 @@ list(APPEND WebKit_SOURCES > UIProcess/win/WebProcessPoolWin.cpp > UIProcess/win/WebView.cpp > >+ UIProcess/API/C/curl/WKContextCurl.cpp >+ >+ UIProcess/curl/WebProcessPoolCurl.cpp >+ >+ UIProcess/win/WebProcessPoolWin.cpp >+ > WebProcess/InjectedBundle/win/InjectedBundleWin.cpp > > WebProcess/MediaCache/WebMediaKeyStorageManager.cpp >diff --git a/Source/WebKit/Shared/WebCoreArgumentCoders.h b/Source/WebKit/Shared/WebCoreArgumentCoders.h >index 8ca760fcffd..0204b91a609 100644 >--- a/Source/WebKit/Shared/WebCoreArgumentCoders.h >+++ b/Source/WebKit/Shared/WebCoreArgumentCoders.h >@@ -146,6 +146,10 @@ struct SoupNetworkProxySettings; > struct PasteboardWebContent; > #endif > >+#if USE(CURL) >+class CurlProxySettings; >+#endif >+ > #if ENABLE(CONTENT_FILTERING) > class ContentFilterUnblockHandler; > #endif >@@ -448,6 +452,13 @@ template<> struct ArgumentCoder<WebCore::PasteboardWebContent> { > }; > #endif > >+#if USE(CURL) >+template<> struct ArgumentCoder<WebCore::CurlProxySettings> { >+ static void encode(Encoder&, const WebCore::CurlProxySettings&); >+ static bool decode(Decoder&, WebCore::CurlProxySettings&); >+}; >+#endif >+ > template<> struct ArgumentCoder<WebCore::CompositionUnderline> { > static void encode(Encoder&, const WebCore::CompositionUnderline&); > static std::optional<WebCore::CompositionUnderline> decode(Decoder&); >diff --git a/Source/WebKit/Shared/curl/WebCoreArgumentCodersCurl.cpp b/Source/WebKit/Shared/curl/WebCoreArgumentCodersCurl.cpp >index 36676d03c1a..4f1ab8d6a1c 100644 >--- a/Source/WebKit/Shared/curl/WebCoreArgumentCodersCurl.cpp >+++ b/Source/WebKit/Shared/curl/WebCoreArgumentCodersCurl.cpp >@@ -28,9 +28,11 @@ > > #include "DataReference.h" > #include <WebCore/CertificateInfo.h> >+#include <WebCore/CurlProxySettings.h> > #include <WebCore/ResourceError.h> > #include <WebCore/ResourceRequest.h> > #include <WebCore/ResourceResponse.h> >+#include <WebCore/URL.h> > #include <wtf/text/CString.h> > > using namespace WebCore; >@@ -127,4 +129,38 @@ bool ArgumentCoder<Credential>::decodePlatformData(Decoder&, Credential&) > return false; > } > >+void ArgumentCoder<CurlProxySettings>::encode(Encoder& encoder, const CurlProxySettings& settings) >+{ >+ ASSERT(!settings.isEmpty()); >+ encoder.encodeEnum(settings.mode()); >+ if (settings.mode() != CurlProxySettings::Mode::Custom) >+ return; >+ >+ encoder << settings.url(); >+ encoder << settings.ignoreHosts(); >+} >+ >+bool ArgumentCoder<CurlProxySettings>::decode(Decoder& decoder, CurlProxySettings& settings) >+{ >+ CurlProxySettings::Mode mode; >+ if (!decoder.decodeEnum(mode)) >+ return false; >+ >+ if (mode != CurlProxySettings::Mode::Custom) { >+ settings = CurlProxySettings(mode); >+ return true; >+ } >+ >+ String url; >+ if (!decoder.decode(url)) >+ return false; >+ >+ String ignoreHosts; >+ if (!decoder.decode(ignoreHosts)) >+ return false; >+ >+ settings = CurlProxySettings(URL(URL(), url), WTFMove(ignoreHosts)); >+ return true; >+} >+ > } >diff --git a/Source/WebKit/UIProcess/API/C/curl/WKContextCurl.cpp b/Source/WebKit/UIProcess/API/C/curl/WKContextCurl.cpp >new file mode 100644 >index 00000000000..279fa464b51 >--- /dev/null >+++ b/Source/WebKit/UIProcess/API/C/curl/WKContextCurl.cpp >@@ -0,0 +1,65 @@ >+/* >+ * Copyright (C) 2018 Sony Interactive Entertainment Inc. >+ * >+ * 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 INC. AND ITS CONTRIBUTORS ``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 INC. OR ITS 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 "WKContextCurl.h" >+ >+#include "WKAPICast.h" >+#include "WebProcessPool.h" >+#include "WebCore/CurlProxySettings.h" >+#include "WebCore/URL.h" >+#include <wtf/text/WTFString.h> >+ >+using namespace WebKit; >+ >+void WKContextSetNetworkProxySettings(WKContextRef context, WKNetworkProxyMode mode, WKURLRef proxyUrl, WKStringRef ignoreHosts) >+{ >+ switch (mode) { >+ case WKNetworkProxyMode::kWKNetworkProxyModeDefault : >+ toImpl(context)->setNetworkProxySettings(WebCore::CurlProxySettings(WebCore::CurlProxySettings::Mode::Default)); >+ break; >+ case WKNetworkProxyMode::kWKNetworkProxyModeNoProxy : >+ toImpl(context)->setNetworkProxySettings(WebCore::CurlProxySettings(WebCore::CurlProxySettings::Mode::NoProxy)); >+ break; >+ case WKNetworkProxyMode::kWKNetworkProxyModeCustom : >+ toImpl(context)->setNetworkProxySettings(WebCore::CurlProxySettings(WebCore::URL(WebCore::URL(), toWTFString(proxyUrl)), toWTFString(ignoreHosts))); >+ break; >+ } >+} >+ >+void WKContextSetSslAlgorithms(WKContextRef context, WKStringRef cipherList, WKStringRef signatureAlgorithmsList, WKStringRef curvesList) >+{ >+ toImpl(context)->setSslAlgorithms(toWTFString(cipherList), toWTFString(signatureAlgorithmsList), toWTFString(curvesList)); >+} >+ >+void WKContextSetSslCACertPath(WKContextRef context, WKStringRef caCertPath) >+{ >+ toImpl(context)->setSslCACertPath(toWTFString(caCertPath)); >+} >+ >+WKStringRef WKContextGetSslCACertPath(WKContextRef context) >+{ >+ return toCopiedAPI(toImpl(context)->getSslCACertPath()); >+} >diff --git a/Source/WebKit/UIProcess/API/C/curl/WKContextCurl.h b/Source/WebKit/UIProcess/API/C/curl/WKContextCurl.h >new file mode 100644 >index 00000000000..8a49333921a >--- /dev/null >+++ b/Source/WebKit/UIProcess/API/C/curl/WKContextCurl.h >@@ -0,0 +1,48 @@ >+/* >+ * Copyright (C) 2018 Sony Interactive Entertainment Inc. >+ * >+ * 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 INC. AND ITS CONTRIBUTORS ``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 INC. OR ITS 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. >+ */ >+ >+#pragma once >+ >+#include <WebKit/WKBase.h> >+#include <WebKit/WKContext.h> >+ >+#ifdef __cplusplus >+extern "C" { >+#endif >+ >+enum WKNetworkProxyMode { >+ kWKNetworkProxyModeDefault, >+ kWKNetworkProxyModeNoProxy, >+ kWKNetworkProxyModeCustom >+}; >+ >+WK_EXPORT void WKContextSetNetworkProxySettings(WKContextRef, WKNetworkProxyMode, WKURLRef proxyUrl, WKStringRef ignoreHosts); >+WK_EXPORT void WKContextSetSslAlgorithms(WKContextRef, WKStringRef cipherList, WKStringRef signatureAlgorithmsList, WKStringRef curvesList); >+WK_EXPORT void WKContextSetSslCACertPath(WKContextRef, WKStringRef caCertPath); >+WK_EXPORT WKStringRef WKContextGetSslCACertPath(WKContextRef); >+ >+#ifdef __cplusplus >+} >+#endif >diff --git a/Source/WebKit/UIProcess/WebProcessPool.h b/Source/WebKit/UIProcess/WebProcessPool.h >index 08ddb1f550c..2f6070c0582 100644 >--- a/Source/WebKit/UIProcess/WebProcessPool.h >+++ b/Source/WebKit/UIProcess/WebProcessPool.h >@@ -65,6 +65,10 @@ > #include <WebCore/SoupNetworkProxySettings.h> > #endif > >+#if USE(CURL) >+#include <WebCore/CurlProxySettings.h> >+#endif >+ > #if PLATFORM(COCOA) > OBJC_CLASS NSMutableDictionary; > OBJC_CLASS NSObject; >@@ -100,7 +104,7 @@ class WebPageProxy; > struct NetworkProcessCreationParameters; > struct StatisticsData; > struct WebProcessCreationParameters; >- >+ > typedef GenericCallback<API::Dictionary*> DictionaryCallback; > > #if PLATFORM(COCOA) >@@ -116,7 +120,7 @@ class WebProcessPool final : public API::ObjectImpl<API::Object::Type::ProcessPo > public: > static Ref<WebProcessPool> create(API::ProcessPoolConfiguration&); > >- explicit WebProcessPool(API::ProcessPoolConfiguration&); >+ explicit WebProcessPool(API::ProcessPoolConfiguration&); > virtual ~WebProcessPool(); > > void notifyThisWebProcessPoolWasCreated(); >@@ -226,7 +230,7 @@ public: > > void setAlwaysUsesComplexTextCodePath(bool); > void setShouldUseFontSmoothing(bool); >- >+ > void registerURLSchemeAsEmptyDocument(const String&); > void registerURLSchemeAsSecure(const String&); > void registerURLSchemeAsBypassingContentSecurityPolicy(const String&); >@@ -257,7 +261,7 @@ public: > void setNetworkProxySettings(const WebCore::SoupNetworkProxySettings&); > #endif > void setEnhancedAccessibility(bool); >- >+ > // Downloads. > DownloadProxy* createDownloadProxy(const WebCore::ResourceRequest&, WebPageProxy* originatingPage); > API::DownloadClient& downloadClient() { return *m_downloadClient; } >@@ -272,7 +276,7 @@ public: > unsigned wkPageCount; > unsigned wkFrameCount; > }; >- static Statistics& statistics(); >+ static Statistics& statistics(); > > void useTestingNetworkSession(); > bool isUsingTestingNetworkSession() const { return m_shouldUseTestingNetworkSession; } >@@ -312,8 +316,8 @@ public: > void setHTTPPipeliningEnabled(bool); > bool httpPipeliningEnabled() const; > >- void getStatistics(uint32_t statisticsMask, Function<void (API::Dictionary*, CallbackBase::Error)>&&); >- >+ void getStatistics(uint32_t statisticsMask, Function<void(API::Dictionary*, CallbackBase::Error)>&&); >+ > bool javaScriptConfigurationFileEnabled() { return m_javaScriptConfigurationFileEnabled; } > void setJavaScriptConfigurationFileEnabled(bool flag); > #if PLATFORM(IOS) >@@ -455,6 +459,14 @@ public: > void unregisterSuspendedPageProxy(SuspendedPageProxy&); > void didReachGoodTimeToPrewarm(); > >+#if USE(CURL) >+ void platformInitializeNetworkProcessCurl(NetworkProcessCreationParameters&); >+ void setNetworkProxySettings(const WebCore::CurlProxySettings&); >+ void setSslAlgorithms(const String& cipherList, const String& signatureAlgorithmsList, const String& curvesList); >+ void setSslCACertPath(const String&); >+ String getSslCACertPath(); >+#endif >+ > void screenPropertiesStateChanged(); > > void addMockMediaDevice(const WebCore::MockMediaDevice&); >@@ -571,7 +583,7 @@ private: > bool m_visitedLinksPopulated { false }; > > PlugInAutoStartProvider m_plugInAutoStartProvider { this }; >- >+ > HashSet<String> m_schemesToRegisterAsEmptyDocument; > HashSet<String> m_schemesToRegisterAsSecure; > HashSet<String> m_schemesToRegisterAsBypassingContentSecurityPolicy; >@@ -708,6 +720,14 @@ private: > > HashMap<WebCore::SecurityOriginData, Vector<SuspendedPageProxy*>> m_suspendedPages; > HashMap<WebCore::SecurityOriginData, RefPtr<WebProcessProxy>> m_swappedProcesses; >+ >+#if USE(CURL) >+ WebCore::CurlProxySettings m_curlProxySettings; >+ String m_cipherList; >+ String m_signatureAlgorithmsList; >+ String m_curvesList; >+ String m_caCertPath; >+#endif > }; > > template<typename T> >diff --git a/Source/WebKit/UIProcess/curl/WebProcessPoolCurl.cpp b/Source/WebKit/UIProcess/curl/WebProcessPoolCurl.cpp >new file mode 100644 >index 00000000000..84fae26fd2a >--- /dev/null >+++ b/Source/WebKit/UIProcess/curl/WebProcessPoolCurl.cpp >@@ -0,0 +1,72 @@ >+/* >+ * Copyright (C) 2018 Sony Interactive Entertainment Inc. >+ * >+ * 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 INC. AND ITS CONTRIBUTORS ``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 INC. OR ITS 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 "WebProcessPool.h" >+ >+#include "NetworkProcessCreationParameters.h" >+#include "NetworkProcessMessages.h" >+ >+namespace WebKit { >+ >+void WebProcessPool::platformInitializeNetworkProcessCurl(NetworkProcessCreationParameters& parameters) >+{ >+ parameters.proxySettings = m_curlProxySettings; >+ parameters.cipherList = m_cipherList; >+ parameters.signatureAlgorithmsList = m_signatureAlgorithmsList; >+ parameters.curvesList = m_curvesList; >+ parameters.caCertPath = m_caCertPath; >+} >+ >+void WebProcessPool::setNetworkProxySettings(const WebCore::CurlProxySettings& settings) >+{ >+ m_curlProxySettings = settings; >+ if (m_networkProcess) >+ m_networkProcess->send(Messages::NetworkProcess::SetNetworkProxySettings(m_curlProxySettings), 0); >+} >+ >+void WebProcessPool::setSslAlgorithms(const String& cipherList, const String& signatureAlgorithmsList, const String& curvesList) >+{ >+ m_cipherList = cipherList; >+ m_signatureAlgorithmsList = signatureAlgorithmsList; >+ m_curvesList = curvesList; >+ if (m_networkProcess) >+ m_networkProcess->send(Messages::NetworkProcess::SetSslAlgorithms(m_cipherList, m_signatureAlgorithmsList, m_curvesList), 0); >+} >+ >+void WebProcessPool::setSslCACertPath(const String& caCertPath) >+{ >+ m_caCertPath = caCertPath; >+ if (m_networkProcess) >+ m_networkProcess->send(Messages::NetworkProcess::SetSslCACertPath(m_caCertPath), 0); >+} >+ >+String WebProcessPool::getSslCACertPath() >+{ >+ return m_caCertPath; >+} >+ >+} // namespace WebKit >diff --git a/Source/WebKit/UIProcess/win/WebProcessPoolWin.cpp b/Source/WebKit/UIProcess/win/WebProcessPoolWin.cpp >index 1015ff0606c..69bd12a477b 100644 >--- a/Source/WebKit/UIProcess/win/WebProcessPoolWin.cpp >+++ b/Source/WebKit/UIProcess/win/WebProcessPoolWin.cpp >@@ -30,6 +30,8 @@ > #include "WebProcessCreationParameters.h" > #include <WebCore/FileSystem.h> > #include <WebCore/NotImplemented.h> >+#include "NetworkProcessCreationParameters.h" >+#include "NetworkProcessMessages.h" > > namespace WebKit { > >@@ -38,12 +40,14 @@ void WebProcessPool::platformInitialize() > notImplemented(); > } > >-void WebProcessPool::platformInitializeNetworkProcess(NetworkProcessCreationParameters&) >+void WebProcessPool::platformInitializeNetworkProcess(NetworkProcessCreationParameters& parameters) > { >- notImplemented(); >+#if USE(CURL) >+ platformInitializeNetworkProcessCurl(parameters); >+#endif > } > >-void WebProcessPool::platformInitializeWebProcess(WebProcessCreationParameters& parameters) >+void WebProcessPool::platformInitializeWebProcess(WebProcessCreationParameters&) > { > notImplemented(); > } >@@ -55,6 +59,7 @@ void WebProcessPool::platformInvalidateContext() > > void WebProcessPool::platformResolvePathsForSandboxExtensions() > { >+ notImplemented(); > } > > } // namespace WebKit
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 189053
:
348321
|
348333
|
348334
|
348339
|
352390
|
353191
|
353430
|
354367