From a55687d5f5b53b9568a393d6549d9a7cbd9cad58 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Wed, 3 Jun 2020 15:11:50 -0700 Subject: [PATCH] browser(webkit): pass proxy url as is for https support (#2460) --- browser_patches/webkit/BUILD_NUMBER | 2 +- .../embedder/Playwright/mac/AppDelegate.m | 21 ++++--- browser_patches/webkit/patches/bootstrap.diff | 58 ++++++------------- 3 files changed, 28 insertions(+), 53 deletions(-) diff --git a/browser_patches/webkit/BUILD_NUMBER b/browser_patches/webkit/BUILD_NUMBER index 659c71f3c8..39eb8283b0 100644 --- a/browser_patches/webkit/BUILD_NUMBER +++ b/browser_patches/webkit/BUILD_NUMBER @@ -1 +1 @@ -1260 +1261 diff --git a/browser_patches/webkit/embedder/Playwright/mac/AppDelegate.m b/browser_patches/webkit/embedder/Playwright/mac/AppDelegate.m index 337c597b61..2a6117e2ae 100644 --- a/browser_patches/webkit/embedder/Playwright/mac/AppDelegate.m +++ b/browser_patches/webkit/embedder/Playwright/mac/AppDelegate.m @@ -141,22 +141,21 @@ const NSActivityOptions ActivityOptions = #pragma clang diagnostic ignored "-Wdeprecated-declarations" NSMutableDictionary *dictionary = [[[NSMutableDictionary alloc] init] autorelease]; + NSURL *proxyURL = [NSURL URLWithString:proxyServer]; + NSString *host = [proxyURL host]; + NSNumber *port = [proxyURL port]; if ([proxyServer hasPrefix:@"socks5://"]) { - NSURL *socksProxy = [NSURL URLWithString:proxyServer]; - [dictionary setObject:[socksProxy host] forKey:(NSString *)kCFStreamPropertySOCKSProxyHost]; - NSNumber *port = [socksProxy port]; + [dictionary setObject:host forKey:(NSString *)kCFStreamPropertySOCKSProxyHost]; 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]; + } else if ([proxyServer hasPrefix:@"https://"]) { [dictionary setObject:host forKey:(NSString *)kCFStreamPropertyHTTPSProxyHost]; - if (port) { - [dictionary setObject:port forKey:(NSString *)kCFStreamPropertyHTTPProxyPort]; + if (port) [dictionary setObject:port forKey:(NSString *)kCFStreamPropertyHTTPSProxyPort]; - } + } else { + [dictionary setObject:host forKey:(NSString *)kCFStreamPropertyHTTPProxyHost]; + if (port) + [dictionary setObject:port forKey:(NSString *)kCFStreamPropertyHTTPProxyPort]; } #pragma clang diagnostic pop diff --git a/browser_patches/webkit/patches/bootstrap.diff b/browser_patches/webkit/patches/bootstrap.diff index cf2a162e73..844fc57f1a 100644 --- a/browser_patches/webkit/patches/bootstrap.diff +++ b/browser_patches/webkit/patches/bootstrap.diff @@ -12760,10 +12760,10 @@ index 31d29091985f34a65134a2b0e7cb3ace1dae441d..571ceac8a4b291fa6e91eb8b17065c0a }; diff --git a/Source/WebKit/UIProcess/glib/InspectorPlaywrightAgentClientGLib.cpp b/Source/WebKit/UIProcess/glib/InspectorPlaywrightAgentClientGLib.cpp new file mode 100644 -index 0000000000000000000000000000000000000000..1619f5b10ea9a3dc2f7de22d4018acc462f46013 +index 0000000000000000000000000000000000000000..79aa5407901c07f63a53ac0e441cd6a9b9c65d07 --- /dev/null +++ b/Source/WebKit/UIProcess/glib/InspectorPlaywrightAgentClientGLib.cpp -@@ -0,0 +1,156 @@ +@@ -0,0 +1,150 @@ +/* + * Copyright (C) 2019 Microsoft Corporation. + * @@ -12814,13 +12814,7 @@ index 0000000000000000000000000000000000000000..1619f5b10ea9a3dc2f7de22d4018acc4 + return settings; + + settings.mode = WebCore::SoupNetworkProxySettings::Mode::Custom; -+ -+ if (proxyServer.startsWith("socks5://")) { -+ settings.defaultProxyURL = proxyServer.utf8(); -+ } else { -+ settings.proxyMap.set("http", String("http://" + proxyServer).utf8()); -+ settings.proxyMap.set("https", String("https://" + proxyServer).utf8()); -+ } ++ settings.defaultProxyURL = proxyServer.utf8(); + settings.ignoreHosts.reset(g_strdupv(const_cast(ignoreHosts))); + return settings; +} @@ -13766,10 +13760,10 @@ index 0000000000000000000000000000000000000000..78bd14ef515e4022dbc251945d60248a +} // namespace WebKit diff --git a/Source/WebKit/UIProcess/win/InspectorPlaywrightAgentClientWin.cpp b/Source/WebKit/UIProcess/win/InspectorPlaywrightAgentClientWin.cpp new file mode 100644 -index 0000000000000000000000000000000000000000..ac82d055b9a544502ab5e4bda7fd3a003e595992 +index 0000000000000000000000000000000000000000..4e5910f0f1d1b237b7c5637ccbc4fe3f374ff391 --- /dev/null +++ b/Source/WebKit/UIProcess/win/InspectorPlaywrightAgentClientWin.cpp -@@ -0,0 +1,94 @@ +@@ -0,0 +1,90 @@ +/* + * Copyright (C) 2020 Microsoft Corporation. + * @@ -13845,11 +13839,7 @@ index 0000000000000000000000000000000000000000..ac82d055b9a544502ab5e4bda7fd3a00 + browserContext.dataStore = WebKit::WebsiteDataStore::createNonPersistent(); + 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); ++ URL proxyURL = URL(URL(), proxyServer); + WebCore::CurlProxySettings settings(WTFMove(proxyURL), String(proxyBypassList)); + browserContext.dataStore->setNetworkProxySettings(WTFMove(settings)); + } @@ -15143,7 +15133,7 @@ index 1570d65effb5d601ee3c44a2a7461436f4691c2c..65e62adad0c3684e5cec2f6bc8e7f528 #endif diff --git a/Tools/MiniBrowser/gtk/main.c b/Tools/MiniBrowser/gtk/main.c -index 2ff45b938cffabe95fe17137393b8b6c506d4993..ec7ac8bbe174e0c1edbe425b392c9fd6695cb4b8 100644 +index 2ff45b938cffabe95fe17137393b8b6c506d4993..79180075025fd323cc9e818c76603d0fcea74c1d 100644 --- a/Tools/MiniBrowser/gtk/main.c +++ b/Tools/MiniBrowser/gtk/main.c @@ -54,6 +54,10 @@ static const char *cookiesFile; @@ -15237,23 +15227,16 @@ index 2ff45b938cffabe95fe17137393b8b6c506d4993..ec7ac8bbe174e0c1edbe425b392c9fd6 g_object_unref(manager); if (cookiesPolicy) { -@@ -572,7 +628,14 @@ int main(int argc, char *argv[]) +@@ -572,7 +628,7 @@ int main(int argc, char *argv[]) } if (proxy) { - WebKitNetworkProxySettings *webkitProxySettings = webkit_network_proxy_settings_new(proxy, ignoreHosts); -+ WebKitNetworkProxySettings* webkitProxySettings; -+ if (g_str_has_prefix(proxy, "socks5://")) { -+ webkitProxySettings = webkit_network_proxy_settings_new(proxy, ignoreHosts); -+ } else { -+ webkitProxySettings = webkit_network_proxy_settings_new("", ignoreHosts); -+ webkit_network_proxy_settings_add_proxy_for_scheme(webkitProxySettings, "http", g_strconcat("http", proxy)); -+ webkit_network_proxy_settings_add_proxy_for_scheme(webkitProxySettings, "https", g_strconcat("https", proxy)); -+ } ++ WebKitNetworkProxySettings* webkitProxySettings = webkit_network_proxy_settings_new(proxy, ignoreHosts); webkit_web_context_set_network_proxy_settings(webContext, WEBKIT_NETWORK_PROXY_MODE_CUSTOM, webkitProxySettings); webkit_network_proxy_settings_free(webkitProxySettings); } -@@ -633,9 +696,7 @@ int main(int argc, char *argv[]) +@@ -633,9 +689,7 @@ int main(int argc, char *argv[]) WebKitWebView *webView = createBrowserTab(mainWindow, webkitSettings, userContentManager); if (!i) firstTab = GTK_WIDGET(webView); @@ -15264,7 +15247,7 @@ index 2ff45b938cffabe95fe17137393b8b6c506d4993..ec7ac8bbe174e0c1edbe425b392c9fd6 } } else { WebKitWebView *webView = createBrowserTab(mainWindow, webkitSettings, userContentManager); -@@ -657,8 +718,7 @@ int main(int argc, char *argv[]) +@@ -657,8 +711,7 @@ int main(int argc, char *argv[]) browser_main(); @@ -15275,7 +15258,7 @@ index 2ff45b938cffabe95fe17137393b8b6c506d4993..ec7ac8bbe174e0c1edbe425b392c9fd6 return 0; } diff --git a/Tools/MiniBrowser/wpe/main.cpp b/Tools/MiniBrowser/wpe/main.cpp -index fde24a7cc8ceb8cc6d7810e3548a5129d1c0a187..02756b2bbdb664d0445eec83eeeee8e0c9590720 100644 +index fde24a7cc8ceb8cc6d7810e3548a5129d1c0a187..9344a1edd2f9931583c04de2a25a2ec71b2702e8 100644 --- a/Tools/MiniBrowser/wpe/main.cpp +++ b/Tools/MiniBrowser/wpe/main.cpp @@ -43,6 +43,9 @@ static gboolean headlessMode; @@ -15426,23 +15409,16 @@ index fde24a7cc8ceb8cc6d7810e3548a5129d1c0a187..02756b2bbdb664d0445eec83eeeee8e0 if (cookiesPolicy) { auto* cookieManager = webkit_web_context_get_cookie_manager(webContext); -@@ -238,7 +321,14 @@ int main(int argc, char *argv[]) +@@ -238,7 +321,7 @@ int main(int argc, char *argv[]) } if (proxy) { - auto* webkitProxySettings = webkit_network_proxy_settings_new(proxy, ignoreHosts); -+ WebKitNetworkProxySettings* webkitProxySettings; -+ if (g_str_has_prefix(proxy, "socks5://")) { -+ webkitProxySettings = webkit_network_proxy_settings_new(proxy, ignoreHosts); -+ } else { -+ webkitProxySettings = webkit_network_proxy_settings_new("", ignoreHosts); -+ webkit_network_proxy_settings_add_proxy_for_scheme(webkitProxySettings, "http", g_strconcat("http", proxy)); -+ webkit_network_proxy_settings_add_proxy_for_scheme(webkitProxySettings, "https", g_strconcat("https", proxy)); -+ } ++ WebKitNetworkProxySettings* webkitProxySettings = webkit_network_proxy_settings_new(proxy, ignoreHosts); webkit_web_context_set_network_proxy_settings(webContext, WEBKIT_NETWORK_PROXY_MODE_CUSTOM, webkitProxySettings); webkit_network_proxy_settings_free(webkitProxySettings); } -@@ -301,8 +391,6 @@ int main(int argc, char *argv[]) +@@ -301,8 +384,6 @@ int main(int argc, char *argv[]) backendPtr->setAccessibleChild(ATK_OBJECT(accessible)); #endif @@ -15451,7 +15427,7 @@ index fde24a7cc8ceb8cc6d7810e3548a5129d1c0a187..02756b2bbdb664d0445eec83eeeee8e0 webkit_web_context_set_automation_allowed(webContext, automationMode); g_signal_connect(webContext, "automation-started", G_CALLBACK(automationStartedCallback), webView); g_signal_connect(webView, "permission-request", G_CALLBACK(decidePermissionRequest), nullptr); -@@ -318,16 +406,9 @@ int main(int argc, char *argv[]) +@@ -318,16 +399,9 @@ int main(int argc, char *argv[]) webkit_web_view_set_background_color(webView, &color); if (uriArguments) { @@ -15471,7 +15447,7 @@ index fde24a7cc8ceb8cc6d7810e3548a5129d1c0a187..02756b2bbdb664d0445eec83eeeee8e0 webkit_web_view_load_uri(webView, "about:blank"); else webkit_web_view_load_uri(webView, "https://wpewebkit.org"); -@@ -337,8 +418,7 @@ int main(int argc, char *argv[]) +@@ -337,8 +411,7 @@ int main(int argc, char *argv[]) g_hash_table_destroy(openViews);