From 8c2302d6ec15c806280c7fc0ea5969aa04e6b359 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Fri, 7 Feb 2020 08:27:25 -0800 Subject: [PATCH] browser(webkit): do not navigate popups to about:blank on Win (#886) --- browser_patches/webkit/BUILD_NUMBER | 2 +- browser_patches/webkit/patches/bootstrap.diff | 36 +++++++++++-------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/browser_patches/webkit/BUILD_NUMBER b/browser_patches/webkit/BUILD_NUMBER index 3393c6ddc7..91d0f8a3f5 100644 --- a/browser_patches/webkit/BUILD_NUMBER +++ b/browser_patches/webkit/BUILD_NUMBER @@ -1 +1 @@ -1137 +1138 diff --git a/browser_patches/webkit/patches/bootstrap.diff b/browser_patches/webkit/patches/bootstrap.diff index b908a182cc..063372f749 100644 --- a/browser_patches/webkit/patches/bootstrap.diff +++ b/browser_patches/webkit/patches/bootstrap.diff @@ -12054,7 +12054,7 @@ index fba7f670f8953563d8d0d2b8d42a636c653f9d5f..2514c7d942384af1f3114c9008af499c RefPtr m_browserWindow; }; diff --git a/Tools/MiniBrowser/win/WebKitBrowserWindow.cpp b/Tools/MiniBrowser/win/WebKitBrowserWindow.cpp -index 71c43e6691395b787140ca0603550aac1c8513d5..889e8284e75d37c5d02de4103517db552b65d4da 100644 +index 71c43e6691395b787140ca0603550aac1c8513d5..1de905c3227315d6099c19fcd25880124b220610 100644 --- a/Tools/MiniBrowser/win/WebKitBrowserWindow.cpp +++ b/Tools/MiniBrowser/win/WebKitBrowserWindow.cpp @@ -39,6 +39,8 @@ @@ -12164,21 +12164,21 @@ index 71c43e6691395b787140ca0603550aac1c8513d5..889e8284e75d37c5d02de4103517db55 void WebKitBrowserWindow::setUserAgent(_bstr_t& customUAString) { auto page = WKViewGetPage(m_view.get()); -@@ -381,21 +384,99 @@ bool WebKitBrowserWindow::canTrustServerCertificate(WKProtectionSpaceRef protect +@@ -381,21 +384,106 @@ bool WebKitBrowserWindow::canTrustServerCertificate(WKProtectionSpaceRef protect return false; } -WKPageRef WebKitBrowserWindow::createNewPage(WKPageRef page, WKPageConfigurationRef configuration, WKNavigationActionRef navigationAction, WKWindowFeaturesRef windowFeatures, const void *clientInfo) +// static +void WebKitBrowserWindow::setHeadless(bool headless) -+{ + { +- auto& newWindow = MainWindow::create().leakRef(); +- auto factory = [configuration](BrowserWindowClient& client, HWND mainWnd, bool) -> auto { + s_headless = headless; +} + +void WebKitBrowserWindow::closeWindow(WKPageRef page, const void* clientInfo) - { -- auto& newWindow = MainWindow::create().leakRef(); -- auto factory = [configuration](BrowserWindowClient& client, HWND mainWnd, bool) -> auto { ++{ + auto& thisWindow = toWebKitBrowserWindow(clientInfo); + PostMessage(thisWindow.m_hMainWnd, WM_CLOSE, 0, 0); +} @@ -12241,6 +12241,11 @@ index 71c43e6691395b787140ca0603550aac1c8513d5..889e8284e75d37c5d02de4103517db55 + +WKPageRef WebKitBrowserWindow::createPageCallback(WKPageConfigurationRef configuration) +{ ++ return WebKitBrowserWindow::createViewCallback(configuration, true); ++} ++ ++WKPageRef WebKitBrowserWindow::createViewCallback(WKPageConfigurationRef configuration, bool navigate) ++{ + auto context = WKPageConfigurationGetContext(configuration); + auto dataStore = WKPageConfigurationGetWebsiteDataStore(configuration); + auto& newWindow = MainWindow::create(context, dataStore).leakRef(); @@ -12255,23 +12260,25 @@ index 71c43e6691395b787140ca0603550aac1c8513d5..889e8284e75d37c5d02de4103517db55 + SetMenu(newWindow.hwnd(), NULL); + else + ShowWindow(newWindow.hwnd(), SW_SHOW); -+ newWindow.browserWindow()->loadURL(_bstr_t("about:blank").GetBSTR()); ++ if (navigate) ++ newWindow.browserWindow()->loadURL(_bstr_t("about:blank").GetBSTR()); + auto& newBrowserWindow = *static_cast(newWindow.browserWindow()); WKRetainPtr newPage = WKViewGetPage(newBrowserWindow.m_view.get()); return newPage.leakRef(); } ++ +WKPageRef WebKitBrowserWindow::createNewPage(WKPageRef, WKPageConfigurationRef configuration, WKNavigationActionRef, WKWindowFeaturesRef, const void*) +{ -+ return createPageCallback(configuration); ++ return createViewCallback(configuration, false); +} + void WebKitBrowserWindow::didNotHandleKeyEvent(WKPageRef, WKNativeEventPtr event, const void* clientInfo) { auto& thisWindow = toWebKitBrowserWindow(clientInfo); diff --git a/Tools/MiniBrowser/win/WebKitBrowserWindow.h b/Tools/MiniBrowser/win/WebKitBrowserWindow.h -index e8efe3c2838a9bb553a1c59ff6c1fb25d2f96500..94b9353a91f40a0dc84dc3ec28a40d06d5dba9c0 100644 +index e8efe3c2838a9bb553a1c59ff6c1fb25d2f96500..9131c6e8259772c8e8c066125acfac82f408ddb9 100644 --- a/Tools/MiniBrowser/win/WebKitBrowserWindow.h +++ b/Tools/MiniBrowser/win/WebKitBrowserWindow.h @@ -26,6 +26,7 @@ @@ -12282,7 +12289,7 @@ index e8efe3c2838a9bb553a1c59ff6c1fb25d2f96500..94b9353a91f40a0dc84dc3ec28a40d06 #include #include #include -@@ -33,10 +34,13 @@ +@@ -33,10 +34,14 @@ class WebKitBrowserWindow : public BrowserWindow { public: @@ -12292,12 +12299,13 @@ index e8efe3c2838a9bb553a1c59ff6c1fb25d2f96500..94b9353a91f40a0dc84dc3ec28a40d06 + static WKPageRef createPageCallback(WKPageConfigurationRef); private: ++ static WKPageRef createViewCallback(WKPageConfigurationRef, bool navigate); WebKitBrowserWindow(BrowserWindowClient&, WKPageConfigurationRef, HWND mainWnd); + ~WebKitBrowserWindow() override; HRESULT init() override; HWND hwnd() override; -@@ -49,7 +53,6 @@ private: +@@ -49,7 +54,6 @@ private: void print() override; void launchInspector() override; @@ -12305,7 +12313,7 @@ index e8efe3c2838a9bb553a1c59ff6c1fb25d2f96500..94b9353a91f40a0dc84dc3ec28a40d06 _bstr_t userAgent() override; void setUserAgent(_bstr_t&) override; -@@ -61,8 +64,6 @@ private: +@@ -61,8 +65,6 @@ private: void zoomIn() override; void zoomOut() override; @@ -12314,7 +12322,7 @@ index e8efe3c2838a9bb553a1c59ff6c1fb25d2f96500..94b9353a91f40a0dc84dc3ec28a40d06 bool canTrustServerCertificate(WKProtectionSpaceRef); static void didChangeTitle(const void*); -@@ -71,6 +72,12 @@ private: +@@ -71,6 +73,12 @@ private: static void didChangeActiveURL(const void*); static void didReceiveAuthenticationChallenge(WKPageRef, WKAuthenticationChallengeRef, const void*); static WKPageRef createNewPage(WKPageRef, WKPageConfigurationRef, WKNavigationActionRef, WKWindowFeaturesRef, const void *); @@ -12327,7 +12335,7 @@ index e8efe3c2838a9bb553a1c59ff6c1fb25d2f96500..94b9353a91f40a0dc84dc3ec28a40d06 static void didNotHandleKeyEvent(WKPageRef, WKNativeEventPtr, const void*); BrowserWindowClient& m_client; -@@ -78,4 +85,8 @@ private: +@@ -78,4 +86,8 @@ private: HWND m_hMainWnd { nullptr }; ProxySettings m_proxy { }; std::unordered_map m_acceptedServerTrustCerts;