browser(webkit): allow setting proxy per browser context (#2445)

This commit is contained in:
Pavel Feldman 2020-06-03 08:41:43 -07:00 committed by GitHub
parent a82139bc98
commit abfd278461
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 130 additions and 43 deletions

View file

@ -1 +1 @@
1256 1257

View file

@ -39,6 +39,7 @@
NSMutableSet *_dialogs; NSMutableSet *_dialogs;
NSString* _initialURL; NSString* _initialURL;
NSString* _userDataDir; NSString* _userDataDir;
NSString* _proxyServer;
IBOutlet NSMenuItem *_newWebKit2WindowItem; IBOutlet NSMenuItem *_newWebKit2WindowItem;
} }

View file

@ -89,6 +89,7 @@ const NSActivityOptions ActivityOptions =
_initialURL = nil; _initialURL = nil;
_userDataDir = nil; _userDataDir = nil;
_proxyServer = nil;
NSArray *arguments = [[NSProcessInfo processInfo] arguments]; NSArray *arguments = [[NSProcessInfo processInfo] arguments];
NSRange subargs = NSMakeRange(1, [arguments count] - 1); NSRange subargs = NSMakeRange(1, [arguments count] - 1);
NSArray *subArray = [arguments subarrayWithRange:subargs]; NSArray *subArray = [arguments subarrayWithRange:subargs];
@ -100,6 +101,10 @@ const NSActivityOptions ActivityOptions =
NSRange range = NSMakeRange(16, [argument length] - 16); NSRange range = NSMakeRange(16, [argument length] - 16);
_userDataDir = [[argument substringWithRange:range] copy]; _userDataDir = [[argument substringWithRange:range] copy];
} }
if ([argument hasPrefix:@"--proxy="]) {
NSRange range = NSMakeRange(8, [argument length] - 8);
_proxyServer = [[argument substringWithRange:range] copy];
}
} }
_headless = [arguments containsObject: @"--headless"]; _headless = [arguments containsObject: @"--headless"];
@ -126,6 +131,39 @@ const NSActivityOptions ActivityOptions =
[NSApp setAutomaticCustomizeTouchBarMenuItemEnabled:YES]; [NSApp setAutomaticCustomizeTouchBarMenuItemEnabled:YES];
} }
- (NSDictionary *)proxyConfiguration:(NSString *)proxyServer
{
if (!proxyServer)
return nil;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
NSMutableDictionary *dictionary = [[[NSMutableDictionary alloc] init] autorelease];
if ([proxyServer hasPrefix:@"socks5://"]) {
NSURL *socksProxy = [NSURL URLWithString:proxyServer];
[dictionary setObject:[socksProxy host] forKey:(NSString *)kCFStreamPropertySOCKSProxyHost];
NSNumber *port = [socksProxy port];
if (port)
[dictionary setObject:port forKey:(NSString *)kCFStreamPropertySOCKSProxyPort];
} else {
NSURL *httpProxy = [NSURL URLWithString: [NSString stringWithFormat:@"http://%@", proxyServer]];
NSString *host = [httpProxy host];
NSNumber *port = [httpProxy port];
[dictionary setObject:host forKey:(NSString *)kCFStreamPropertyHTTPProxyHost];
[dictionary setObject:host forKey:(NSString *)kCFStreamPropertyHTTPSProxyHost];
if (port) {
[dictionary setObject:port forKey:(NSString *)kCFStreamPropertyHTTPProxyPort];
[dictionary setObject:port forKey:(NSString *)kCFStreamPropertyHTTPSProxyPort];
}
}
#pragma clang diagnostic pop
return dictionary;
}
- (WKWebsiteDataStore *)persistentDataStore - (WKWebsiteDataStore *)persistentDataStore
{ {
static WKWebsiteDataStore *dataStore; static WKWebsiteDataStore *dataStore;
@ -166,6 +204,7 @@ const NSActivityOptions ActivityOptions =
NSURL *webSqlDirectory = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/WebSQL", _userDataDir]]; NSURL *webSqlDirectory = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/WebSQL", _userDataDir]];
[configuration _setWebSQLDatabaseDirectory:webSqlDirectory]; [configuration _setWebSQLDatabaseDirectory:webSqlDirectory];
} }
[configuration setProxyConfiguration:[self proxyConfiguration:_proxyServer]];
dataStore = [[WKWebsiteDataStore alloc] _initWithConfiguration:configuration]; dataStore = [[WKWebsiteDataStore alloc] _initWithConfiguration:configuration];
} }
@ -275,12 +314,16 @@ const NSActivityOptions ActivityOptions =
return [webView autorelease]; return [webView autorelease];
} }
- (_WKBrowserContext *)createBrowserContext - (_WKBrowserContext *)createBrowserContext:(NSString *)proxyServer
{ {
_WKBrowserContext *browserContext = [[_WKBrowserContext alloc] init]; _WKBrowserContext *browserContext = [[_WKBrowserContext alloc] init];
_WKProcessPoolConfiguration *processConfiguration = [[[_WKProcessPoolConfiguration alloc] init] autorelease]; _WKProcessPoolConfiguration *processConfiguration = [[[_WKProcessPoolConfiguration alloc] init] autorelease];
processConfiguration.forceOverlayScrollbars = YES; processConfiguration.forceOverlayScrollbars = YES;
browserContext.dataStore = [WKWebsiteDataStore nonPersistentDataStore]; _WKWebsiteDataStoreConfiguration *dataStoreConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] initNonPersistentConfiguration] autorelease];
if (!proxyServer || ![proxyServer length])
proxyServer = _proxyServer;
[dataStoreConfiguration setProxyConfiguration:[self proxyConfiguration:proxyServer]];
browserContext.dataStore = [[WKWebsiteDataStore alloc] _initWithConfiguration:dataStoreConfiguration];
browserContext.processPool = [[[WKProcessPool alloc] _initWithConfiguration:processConfiguration] autorelease]; browserContext.processPool = [[[WKProcessPool alloc] _initWithConfiguration:processConfiguration] autorelease];
[browserContext.processPool _setDownloadDelegate:self]; [browserContext.processPool _setDownloadDelegate:self];
[_browserContexts addObject:browserContext]; [_browserContexts addObject:browserContext];

View file

@ -1028,10 +1028,10 @@ index 4f709771dc3d0611fffc95921e38b20649aebd9c..76b728d56d9977616e8b3f9c6e2952b8
} }
diff --git a/Source/JavaScriptCore/inspector/protocol/Playwright.json b/Source/JavaScriptCore/inspector/protocol/Playwright.json diff --git a/Source/JavaScriptCore/inspector/protocol/Playwright.json b/Source/JavaScriptCore/inspector/protocol/Playwright.json
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..31806fde2a7df437ad9f604ad7df15f53555e9af index 0000000000000000000000000000000000000000..18dbf54b9b825907a0693b40ef06c25b82aef2ae
--- /dev/null --- /dev/null
+++ b/Source/JavaScriptCore/inspector/protocol/Playwright.json +++ b/Source/JavaScriptCore/inspector/protocol/Playwright.json
@@ -0,0 +1,243 @@ @@ -0,0 +1,247 @@
+{ +{
+ "domain": "Playwright", + "domain": "Playwright",
+ "availability": ["web"], + "availability": ["web"],
@ -1121,6 +1121,10 @@ index 0000000000000000000000000000000000000000..31806fde2a7df437ad9f604ad7df15f5
+ { + {
+ "name": "createContext", + "name": "createContext",
+ "description": "Creates new ephemeral browser context.", + "description": "Creates new ephemeral browser context.",
+ "parameters": [
+ { "name": "proxyServer", "type": "string", "optional": true, "description": "Proxy server, similar to the one passed to --proxy-server" },
+ { "name": "proxyBypassList", "type": "string", "optional": true, "description": "Proxy bypass list, similar to the one passed to --proxy-bypass-list" }
+ ],
+ "returns": [ + "returns": [
+ { "name": "browserContextId", "$ref": "ContextID", "description": "Unique identifier of the context." } + { "name": "browserContextId", "$ref": "ContextID", "description": "Unique identifier of the context." }
+ ] + ]
@ -7439,7 +7443,7 @@ index 591428f7f579e76ff01bc94b83f5994af8e48e00..03fc6cf2d3074d9227d7815ac5c72fdb
Vector<WebKit::WebsiteDataRecord> result; Vector<WebKit::WebsiteDataRecord> result;
diff --git a/Source/WebKit/UIProcess/API/Cocoa/_WKBrowserInspector.h b/Source/WebKit/UIProcess/API/Cocoa/_WKBrowserInspector.h diff --git a/Source/WebKit/UIProcess/API/Cocoa/_WKBrowserInspector.h b/Source/WebKit/UIProcess/API/Cocoa/_WKBrowserInspector.h
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..b64d1a6d54ec15a99164294706543cee626d1050 index 0000000000000000000000000000000000000000..2d7788193f85ce53860d2996650560a7dcc73457
--- /dev/null --- /dev/null
+++ b/Source/WebKit/UIProcess/API/Cocoa/_WKBrowserInspector.h +++ b/Source/WebKit/UIProcess/API/Cocoa/_WKBrowserInspector.h
@@ -0,0 +1,55 @@ @@ -0,0 +1,55 @@
@ -7485,7 +7489,7 @@ index 0000000000000000000000000000000000000000..b64d1a6d54ec15a99164294706543cee
+ +
+@protocol _WKBrowserInspectorDelegate <NSObject> +@protocol _WKBrowserInspectorDelegate <NSObject>
+- (WKWebView *)createNewPage:(uint64_t)sessionID; +- (WKWebView *)createNewPage:(uint64_t)sessionID;
+- (_WKBrowserContext *)createBrowserContext; +- (_WKBrowserContext *)createBrowserContext:(NSString *)proxyServer;
+- (void)deleteBrowserContext:(uint64_t)sessionID; +- (void)deleteBrowserContext:(uint64_t)sessionID;
+- (void)quit; +- (void)quit;
+@end +@end
@ -10222,7 +10226,7 @@ index 0000000000000000000000000000000000000000..f356c613945fd263889bc74166bef2b2
+} // namespace WebKit +} // namespace WebKit
diff --git a/Source/WebKit/UIProcess/InspectorPlaywrightAgent.cpp b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.cpp diff --git a/Source/WebKit/UIProcess/InspectorPlaywrightAgent.cpp b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.cpp
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..4d8217108bd02f5efb2351adca1038d607ade7ea index 0000000000000000000000000000000000000000..cf42d771f07a944dfb5654161f18a072b109aa77
--- /dev/null --- /dev/null
+++ b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.cpp +++ b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.cpp
@@ -0,0 +1,796 @@ @@ -0,0 +1,796 @@
@ -10673,9 +10677,9 @@ index 0000000000000000000000000000000000000000..4d8217108bd02f5efb2351adca1038d6
+ +
+} +}
+ +
+void InspectorPlaywrightAgent::createContext(ErrorString& errorString, String* browserContextID) +void InspectorPlaywrightAgent::createContext(ErrorString& errorString, const String* proxyServer, const String* proxyBypassList, String* browserContextID)
+{ +{
+ BrowserContext browserContext = m_client->createBrowserContext(errorString); + BrowserContext browserContext = m_client->createBrowserContext(errorString, proxyServer ? *proxyServer : String(), proxyBypassList ? *proxyBypassList : String());
+ if (!errorString.isEmpty()) + if (!errorString.isEmpty())
+ return; + return;
+ browserContext.processPool->setPrimaryDataStore(*browserContext.dataStore); + browserContext.processPool->setPrimaryDataStore(*browserContext.dataStore);
@ -11024,7 +11028,7 @@ index 0000000000000000000000000000000000000000..4d8217108bd02f5efb2351adca1038d6
+#endif // ENABLE(REMOTE_INSPECTOR) +#endif // ENABLE(REMOTE_INSPECTOR)
diff --git a/Source/WebKit/UIProcess/InspectorPlaywrightAgent.h b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.h diff --git a/Source/WebKit/UIProcess/InspectorPlaywrightAgent.h b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.h
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..25d91f9aca7835d08106797cb10652515a4d6a09 index 0000000000000000000000000000000000000000..510bf2b25ff7953aab8af77232568b629fe9846e
--- /dev/null --- /dev/null
+++ b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.h +++ b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.h
@@ -0,0 +1,119 @@ @@ -0,0 +1,119 @@
@ -11110,7 +11114,7 @@ index 0000000000000000000000000000000000000000..25d91f9aca7835d08106797cb1065251
+ void enable(Inspector::ErrorString&) override; + void enable(Inspector::ErrorString&) override;
+ void disable(Inspector::ErrorString&) override; + void disable(Inspector::ErrorString&) override;
+ void close(Ref<CloseCallback>&&) override; + void close(Ref<CloseCallback>&&) override;
+ void createContext(Inspector::ErrorString&, String* browserContextID) override; + void createContext(Inspector::ErrorString&, const String* proxyServer, const String* proxyBypassList, String* browserContextID) override;
+ void deleteContext(const String& browserContextID, Ref<DeleteContextCallback>&& callback) override; + void deleteContext(const String& browserContextID, Ref<DeleteContextCallback>&& callback) override;
+ void createPage(Inspector::ErrorString&, const String* browserContextID, String* pageProxyID) override; + void createPage(Inspector::ErrorString&, const String* browserContextID, String* pageProxyID) override;
+ void navigate(const String& url, const String& pageProxyID, const String* frameId, const String* referrer, Ref<NavigateCallback>&&) override; + void navigate(const String& url, const String& pageProxyID, const String* frameId, const String* referrer, Ref<NavigateCallback>&&) override;
@ -11149,7 +11153,7 @@ index 0000000000000000000000000000000000000000..25d91f9aca7835d08106797cb1065251
+#endif // ENABLE(REMOTE_INSPECTOR) +#endif // ENABLE(REMOTE_INSPECTOR)
diff --git a/Source/WebKit/UIProcess/InspectorPlaywrightAgentClient.h b/Source/WebKit/UIProcess/InspectorPlaywrightAgentClient.h diff --git a/Source/WebKit/UIProcess/InspectorPlaywrightAgentClient.h b/Source/WebKit/UIProcess/InspectorPlaywrightAgentClient.h
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..d2f02082007b41b9e20dc6bb4751743835d60fce index 0000000000000000000000000000000000000000..b254875dc7404aed56680db05bac65b6d5f9c50a
--- /dev/null --- /dev/null
+++ b/Source/WebKit/UIProcess/InspectorPlaywrightAgentClient.h +++ b/Source/WebKit/UIProcess/InspectorPlaywrightAgentClient.h
@@ -0,0 +1,56 @@ @@ -0,0 +1,56 @@
@ -11202,7 +11206,7 @@ index 0000000000000000000000000000000000000000..d2f02082007b41b9e20dc6bb47517438
+ virtual ~InspectorPlaywrightAgentClient() = default; + virtual ~InspectorPlaywrightAgentClient() = default;
+ virtual RefPtr<WebKit::WebPageProxy> createPage(WTF::String& error, const BrowserContext& context) = 0; + virtual RefPtr<WebKit::WebPageProxy> createPage(WTF::String& error, const BrowserContext& context) = 0;
+ virtual void closeBrowser() = 0; + virtual void closeBrowser() = 0;
+ virtual BrowserContext createBrowserContext(WTF::String& error) = 0; + virtual BrowserContext createBrowserContext(WTF::String& error, const WTF::String& proxyServer, const WTF::String& proxyBypassList) = 0;
+ virtual void deleteBrowserContext(WTF::String& error, PAL::SessionID) = 0; + virtual void deleteBrowserContext(WTF::String& error, PAL::SessionID) = 0;
+}; +};
+ +
@ -12792,10 +12796,10 @@ index 31d29091985f34a65134a2b0e7cb3ace1dae441d..571ceac8a4b291fa6e91eb8b17065c0a
}; };
diff --git a/Source/WebKit/UIProcess/glib/InspectorPlaywrightAgentClientGLib.cpp b/Source/WebKit/UIProcess/glib/InspectorPlaywrightAgentClientGLib.cpp diff --git a/Source/WebKit/UIProcess/glib/InspectorPlaywrightAgentClientGLib.cpp b/Source/WebKit/UIProcess/glib/InspectorPlaywrightAgentClientGLib.cpp
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..df004bb6b16fe69773d7a664b3633ea421cafc62 index 0000000000000000000000000000000000000000..1619f5b10ea9a3dc2f7de22d4018acc462f46013
--- /dev/null --- /dev/null
+++ b/Source/WebKit/UIProcess/glib/InspectorPlaywrightAgentClientGLib.cpp +++ b/Source/WebKit/UIProcess/glib/InspectorPlaywrightAgentClientGLib.cpp
@@ -0,0 +1,127 @@ @@ -0,0 +1,156 @@
+/* +/*
+ * Copyright (C) 2019 Microsoft Corporation. + * Copyright (C) 2019 Microsoft Corporation.
+ * + *
@ -12839,20 +12843,43 @@ index 0000000000000000000000000000000000000000..df004bb6b16fe69773d7a664b3633ea4
+ +
+namespace WebKit { +namespace WebKit {
+ +
+InspectorPlaywrightAgentClientGlib::InspectorPlaywrightAgentClientGlib(GMainLoop* mainLoop, const WTF::CString& proxyURI, const char* const* ignoreHosts) +static WebCore::SoupNetworkProxySettings parseRawProxySettings(const String& proxyServer, const char* const* ignoreHosts)
+ : m_mainLoop(mainLoop)
+{ +{
+ if (!proxyURI.isNull()) { + WebCore::SoupNetworkProxySettings settings;
+ String proxy = String::fromUTF8(proxyURI); + if (proxyServer.isEmpty())
+ m_proxySettings.mode = WebCore::SoupNetworkProxySettings::Mode::Custom; + return settings;
+ if (proxy.startsWith("socks5://")) { +
+ m_proxySettings.defaultProxyURL = proxyURI; + settings.mode = WebCore::SoupNetworkProxySettings::Mode::Custom;
+
+ if (proxyServer.startsWith("socks5://")) {
+ settings.defaultProxyURL = proxyServer.utf8();
+ } else { + } else {
+ m_proxySettings.proxyMap.set("http", String("http://" + proxy).utf8()); + settings.proxyMap.set("http", String("http://" + proxyServer).utf8());
+ m_proxySettings.proxyMap.set("https", String("https://" + proxy).utf8()); + settings.proxyMap.set("https", String("https://" + proxyServer).utf8());
+ } + }
+ m_proxySettings.ignoreHosts.reset(g_strdupv(const_cast<char**>(ignoreHosts))); + settings.ignoreHosts.reset(g_strdupv(const_cast<char**>(ignoreHosts)));
+ return settings;
+}
+
+static WebCore::SoupNetworkProxySettings parseProxySettings(const String& proxyServer, const String& proxyBypassList)
+{
+ Vector<const char*> ignoreHosts;
+ if (!proxyBypassList.isEmpty()) {
+ Vector<String> tokens = proxyBypassList.split(',');
+ Vector<CString> protectTokens;
+ for (String token : tokens) {
+ CString cstr = token.utf8();
+ ignoreHosts.append(cstr.data());
+ protectTokens.append(WTFMove(cstr));
+ } + }
+ }
+ return parseRawProxySettings(proxyServer, ignoreHosts.data());
+}
+
+InspectorPlaywrightAgentClientGlib::InspectorPlaywrightAgentClientGlib(GMainLoop* mainLoop, const WTF::String& proxyURI, const char* const* ignoreHosts)
+ : m_mainLoop(mainLoop)
+ , m_proxySettings(parseRawProxySettings(proxyURI, ignoreHosts))
+{
+} +}
+ +
+RefPtr<WebPageProxy> InspectorPlaywrightAgentClientGlib::createPage(WTF::String& error, const BrowserContext& browserContext) +RefPtr<WebPageProxy> InspectorPlaywrightAgentClientGlib::createPage(WTF::String& error, const BrowserContext& browserContext)
@ -12898,7 +12925,7 @@ index 0000000000000000000000000000000000000000..df004bb6b16fe69773d7a664b3633ea4
+ return websiteDataStore.sessionID(); + return websiteDataStore.sessionID();
+} +}
+ +
+BrowserContext InspectorPlaywrightAgentClientGlib::createBrowserContext(WTF::String& error) +BrowserContext InspectorPlaywrightAgentClientGlib::createBrowserContext(WTF::String& error, const WTF::String& proxyServer, const WTF::String& proxyBypassList)
+{ +{
+ BrowserContext browserContext; + BrowserContext browserContext;
+ GRefPtr<WebKitWebsiteDataManager> data_manager = adoptGRef(webkit_website_data_manager_new_ephemeral()); + GRefPtr<WebKitWebsiteDataManager> data_manager = adoptGRef(webkit_website_data_manager_new_ephemeral());
@ -12911,7 +12938,13 @@ index 0000000000000000000000000000000000000000..df004bb6b16fe69773d7a664b3633ea4
+ browserContext.dataStore = &webkitWebsiteDataManagerGetDataStore(data_manager.get()); + browserContext.dataStore = &webkitWebsiteDataManagerGetDataStore(data_manager.get());
+ PAL::SessionID sessionID = sessionIDFromContext(context.get()); + PAL::SessionID sessionID = sessionIDFromContext(context.get());
+ m_idToContext.set(sessionID, WTFMove(context)); + m_idToContext.set(sessionID, WTFMove(context));
+
+ if (!proxyServer.isEmpty()) {
+ WebCore::SoupNetworkProxySettings contextProxySettings = parseProxySettings(proxyServer, proxyBypassList);
+ browserContext.processPool->setNetworkProxySettings(contextProxySettings);
+ } else {
+ browserContext.processPool->setNetworkProxySettings(m_proxySettings); + browserContext.processPool->setNetworkProxySettings(m_proxySettings);
+ }
+ return browserContext; + return browserContext;
+} +}
+ +
@ -12925,7 +12958,7 @@ index 0000000000000000000000000000000000000000..df004bb6b16fe69773d7a664b3633ea4
+#endif // ENABLE(REMOTE_INSPECTOR) +#endif // ENABLE(REMOTE_INSPECTOR)
diff --git a/Source/WebKit/UIProcess/glib/InspectorPlaywrightAgentClientGLib.h b/Source/WebKit/UIProcess/glib/InspectorPlaywrightAgentClientGLib.h diff --git a/Source/WebKit/UIProcess/glib/InspectorPlaywrightAgentClientGLib.h b/Source/WebKit/UIProcess/glib/InspectorPlaywrightAgentClientGLib.h
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..df62288c96e8ffda5b318b2c28beb2d70e2bdaa3 index 0000000000000000000000000000000000000000..a073a77390b206deb794efe937df4f35d7198608
--- /dev/null --- /dev/null
+++ b/Source/WebKit/UIProcess/glib/InspectorPlaywrightAgentClientGLib.h +++ b/Source/WebKit/UIProcess/glib/InspectorPlaywrightAgentClientGLib.h
@@ -0,0 +1,61 @@ @@ -0,0 +1,61 @@
@ -12971,12 +13004,12 @@ index 0000000000000000000000000000000000000000..df62288c96e8ffda5b318b2c28beb2d7
+class InspectorPlaywrightAgentClientGlib : public InspectorPlaywrightAgentClient { +class InspectorPlaywrightAgentClientGlib : public InspectorPlaywrightAgentClient {
+ WTF_MAKE_FAST_ALLOCATED; + WTF_MAKE_FAST_ALLOCATED;
+public: +public:
+ InspectorPlaywrightAgentClientGlib(GMainLoop* mainLoop, const WTF::CString& proxyURI, const char* const* ignoreHosts); + InspectorPlaywrightAgentClientGlib(GMainLoop* mainLoop, const WTF::String& proxyURI, const char* const* ignoreHosts);
+ ~InspectorPlaywrightAgentClientGlib() override = default; + ~InspectorPlaywrightAgentClientGlib() override = default;
+ +
+ RefPtr<WebPageProxy> createPage(WTF::String& error, const BrowserContext&) override; + RefPtr<WebPageProxy> createPage(WTF::String& error, const BrowserContext&) override;
+ void closeBrowser() override; + void closeBrowser() override;
+ BrowserContext createBrowserContext(WTF::String& error) override; + BrowserContext createBrowserContext(WTF::String& error, const WTF::String& proxyServer, const WTF::String& proxyBypassList) override;
+ void deleteBrowserContext(WTF::String& error, PAL::SessionID) override; + void deleteBrowserContext(WTF::String& error, PAL::SessionID) override;
+ +
+private: +private:
@ -13255,7 +13288,7 @@ index 9badecb2a422c837c5d33e22a44467b8159b4a37..3ebddb7a281ecc488d0896e47e4ad701
diff --git a/Source/WebKit/UIProcess/mac/InspectorPlaywrightAgentClientMac.h b/Source/WebKit/UIProcess/mac/InspectorPlaywrightAgentClientMac.h diff --git a/Source/WebKit/UIProcess/mac/InspectorPlaywrightAgentClientMac.h b/Source/WebKit/UIProcess/mac/InspectorPlaywrightAgentClientMac.h
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..b75c2ce5ce9e9da3a33bca41ab548ec7a2f819ed index 0000000000000000000000000000000000000000..bce31b16fe37dc2a981389a6160e4094bf2b0f74
--- /dev/null --- /dev/null
+++ b/Source/WebKit/UIProcess/mac/InspectorPlaywrightAgentClientMac.h +++ b/Source/WebKit/UIProcess/mac/InspectorPlaywrightAgentClientMac.h
@@ -0,0 +1,51 @@ @@ -0,0 +1,51 @@
@ -13301,7 +13334,7 @@ index 0000000000000000000000000000000000000000..b75c2ce5ce9e9da3a33bca41ab548ec7
+ +
+ RefPtr<WebPageProxy> createPage(WTF::String& error, const BrowserContext&) override; + RefPtr<WebPageProxy> createPage(WTF::String& error, const BrowserContext&) override;
+ void closeBrowser() override; + void closeBrowser() override;
+ BrowserContext createBrowserContext(WTF::String& error) override; + BrowserContext createBrowserContext(WTF::String& error, const WTF::String& proxyServer, const WTF::String& proxyBypassList) override;
+ void deleteBrowserContext(WTF::String& error, PAL::SessionID) override; + void deleteBrowserContext(WTF::String& error, PAL::SessionID) override;
+ +
+private: +private:
@ -13312,7 +13345,7 @@ index 0000000000000000000000000000000000000000..b75c2ce5ce9e9da3a33bca41ab548ec7
+} // namespace API +} // namespace API
diff --git a/Source/WebKit/UIProcess/mac/InspectorPlaywrightAgentClientMac.mm b/Source/WebKit/UIProcess/mac/InspectorPlaywrightAgentClientMac.mm diff --git a/Source/WebKit/UIProcess/mac/InspectorPlaywrightAgentClientMac.mm b/Source/WebKit/UIProcess/mac/InspectorPlaywrightAgentClientMac.mm
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..5db92c0580fd4f216ac86ede56eaac2eabec27da index 0000000000000000000000000000000000000000..b20118cb4bcd3bc962d5b5b052e408c2a0881aae
--- /dev/null --- /dev/null
+++ b/Source/WebKit/UIProcess/mac/InspectorPlaywrightAgentClientMac.mm +++ b/Source/WebKit/UIProcess/mac/InspectorPlaywrightAgentClientMac.mm
@@ -0,0 +1,77 @@ @@ -0,0 +1,77 @@
@ -13378,9 +13411,9 @@ index 0000000000000000000000000000000000000000..5db92c0580fd4f216ac86ede56eaac2e
+ [delegate_ quit]; + [delegate_ quit];
+} +}
+ +
+BrowserContext InspectorPlaywrightAgentClientMac::createBrowserContext(WTF::String& error) +BrowserContext InspectorPlaywrightAgentClientMac::createBrowserContext(WTF::String& error, const WTF::String& proxyServer, const WTF::String& proxyBypassList)
+{ +{
+ _WKBrowserContext* wkBrowserContext = [[delegate_ createBrowserContext] autorelease]; + _WKBrowserContext* wkBrowserContext = [[delegate_ createBrowserContext:proxyServer] autorelease];
+ BrowserContext browserContext; + BrowserContext browserContext;
+ browserContext.processPool = &static_cast<WebProcessPool&>([[wkBrowserContext processPool] _apiObject]); + browserContext.processPool = &static_cast<WebProcessPool&>([[wkBrowserContext processPool] _apiObject]);
+ browserContext.dataStore = &static_cast<WebsiteDataStore&>([[wkBrowserContext dataStore] _apiObject]); + browserContext.dataStore = &static_cast<WebsiteDataStore&>([[wkBrowserContext dataStore] _apiObject]);
@ -13769,10 +13802,10 @@ index 0000000000000000000000000000000000000000..78bd14ef515e4022dbc251945d60248a
+} // namespace WebKit +} // namespace WebKit
diff --git a/Source/WebKit/UIProcess/win/InspectorPlaywrightAgentClientWin.cpp b/Source/WebKit/UIProcess/win/InspectorPlaywrightAgentClientWin.cpp diff --git a/Source/WebKit/UIProcess/win/InspectorPlaywrightAgentClientWin.cpp b/Source/WebKit/UIProcess/win/InspectorPlaywrightAgentClientWin.cpp
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..aec85e2cb5748511b0fb0dacf08542f76653bbd3 index 0000000000000000000000000000000000000000..ac82d055b9a544502ab5e4bda7fd3a003e595992
--- /dev/null --- /dev/null
+++ b/Source/WebKit/UIProcess/win/InspectorPlaywrightAgentClientWin.cpp +++ b/Source/WebKit/UIProcess/win/InspectorPlaywrightAgentClientWin.cpp
@@ -0,0 +1,84 @@ @@ -0,0 +1,94 @@
+/* +/*
+ * Copyright (C) 2020 Microsoft Corporation. + * Copyright (C) 2020 Microsoft Corporation.
+ * + *
@ -13812,6 +13845,7 @@ index 0000000000000000000000000000000000000000..aec85e2cb5748511b0fb0dacf08542f7
+#include "WebProcessPool.h" +#include "WebProcessPool.h"
+#include "WebView.h" +#include "WebView.h"
+#include "WKAPICast.h" +#include "WKAPICast.h"
+#include <WebCore/CurlProxySettings.h>
+#include <wtf/HashMap.h> +#include <wtf/HashMap.h>
+#include <wtf/RefPtr.h> +#include <wtf/RefPtr.h>
+#include <wtf/text/StringView.h> +#include <wtf/text/StringView.h>
@ -13839,13 +13873,22 @@ index 0000000000000000000000000000000000000000..aec85e2cb5748511b0fb0dacf08542f7
+ m_quit(); + m_quit();
+} +}
+ +
+BrowserContext InspectorPlaywrightAgentClientWin::createBrowserContext(WTF::String& error) +BrowserContext InspectorPlaywrightAgentClientWin::createBrowserContext(WTF::String& error, const WTF::String& proxyServer, const WTF::String& proxyBypassList)
+{ +{
+ auto config = API::ProcessPoolConfiguration::create(); + auto config = API::ProcessPoolConfiguration::create();
+ BrowserContext browserContext; + BrowserContext browserContext;
+ browserContext.processPool = WebKit::WebProcessPool::create(config); + browserContext.processPool = WebKit::WebProcessPool::create(config);
+ browserContext.dataStore = WebKit::WebsiteDataStore::createNonPersistent(); + browserContext.dataStore = WebKit::WebsiteDataStore::createNonPersistent();
+ m_configureDataStore(toAPI(browserContext.dataStore.get())); + m_configureDataStore(toAPI(browserContext.dataStore.get()));
+ if (!proxyServer.isEmpty()) {
+ URL proxyURL;
+ if (proxyServer.startsWith("socks5://"))
+ proxyURL = URL(URL(), proxyServer);
+ else if (!proxyServer.startsWith("http"))
+ proxyURL = URL(URL(), "http://" + proxyServer);
+ WebCore::CurlProxySettings settings(WTFMove(proxyURL), String(proxyBypassList));
+ browserContext.dataStore->setNetworkProxySettings(WTFMove(settings));
+ }
+ PAL::SessionID sessionID = browserContext.dataStore->sessionID(); + PAL::SessionID sessionID = browserContext.dataStore->sessionID();
+ return browserContext; + return browserContext;
+} +}
@ -13859,7 +13902,7 @@ index 0000000000000000000000000000000000000000..aec85e2cb5748511b0fb0dacf08542f7
+#endif // ENABLE(REMOTE_INSPECTOR) +#endif // ENABLE(REMOTE_INSPECTOR)
diff --git a/Source/WebKit/UIProcess/win/InspectorPlaywrightAgentClientWin.h b/Source/WebKit/UIProcess/win/InspectorPlaywrightAgentClientWin.h diff --git a/Source/WebKit/UIProcess/win/InspectorPlaywrightAgentClientWin.h b/Source/WebKit/UIProcess/win/InspectorPlaywrightAgentClientWin.h
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..a6ddbceee54ae59f29c89f5f6c8680ff554ecd35 index 0000000000000000000000000000000000000000..e18db39e5e9fe3e70658b4596c636eac083222b4
--- /dev/null --- /dev/null
+++ b/Source/WebKit/UIProcess/win/InspectorPlaywrightAgentClientWin.h +++ b/Source/WebKit/UIProcess/win/InspectorPlaywrightAgentClientWin.h
@@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
@ -13911,7 +13954,7 @@ index 0000000000000000000000000000000000000000..a6ddbceee54ae59f29c89f5f6c8680ff
+ +
+ RefPtr<WebPageProxy> createPage(WTF::String& error, const BrowserContext&) override; + RefPtr<WebPageProxy> createPage(WTF::String& error, const BrowserContext&) override;
+ void closeBrowser() override; + void closeBrowser() override;
+ BrowserContext createBrowserContext(WTF::String& error) override; + BrowserContext createBrowserContext(WTF::String& error, const WTF::String& proxyServer, const WTF::String& proxyBypassList) override;
+ void deleteBrowserContext(WTF::String& error, PAL::SessionID) override; + void deleteBrowserContext(WTF::String& error, PAL::SessionID) override;
+ +
+private: +private: