browser(webkit): release GTK app only if it has been referenced (#2885)

This commit is contained in:
Yury Semikhatsky 2020-07-08 16:13:58 -07:00 committed by GitHub
parent 83bba08cc4
commit f5911de93d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 11 deletions

View File

@ -1,2 +1,2 @@
1304 1305
Changed: yurys@chromium.org Wed Jul 8 14:22:16 PDT 2020 Changed: yurys@chromium.org Wed Jul 8 15:26:58 PDT 2020

View File

@ -15037,7 +15037,7 @@ index 62629b4c1c25ae82bd797b39bbf9de0331f8eed2..5de7900a29b0e629f1ac404bbb0dc5b4
typedef struct _BrowserWindow BrowserWindow; typedef struct _BrowserWindow BrowserWindow;
diff --git a/Tools/MiniBrowser/gtk/main.c b/Tools/MiniBrowser/gtk/main.c diff --git a/Tools/MiniBrowser/gtk/main.c b/Tools/MiniBrowser/gtk/main.c
index 61cb729e9e8e24d85c0d678c64a3dbae1c085f63..0efc11a6565ce3e4ec8e5bea6e12216f9d04e4c1 100644 index 61cb729e9e8e24d85c0d678c64a3dbae1c085f63..52f1f175cfd5c0e73cd74eca95a46b085ac98b37 100644
--- a/Tools/MiniBrowser/gtk/main.c --- a/Tools/MiniBrowser/gtk/main.c
+++ b/Tools/MiniBrowser/gtk/main.c +++ b/Tools/MiniBrowser/gtk/main.c
@@ -55,7 +55,12 @@ static const char *cookiesPolicy; @@ -55,7 +55,12 @@ static const char *cookiesPolicy;
@ -15064,7 +15064,7 @@ index 61cb729e9e8e24d85c0d678c64a3dbae1c085f63..0efc11a6565ce3e4ec8e5bea6e12216f
{ G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &uriArguments, 0, "[URL…]" }, { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &uriArguments, 0, "[URL…]" },
{ 0, 0, 0, 0, 0, 0, 0 } { 0, 0, 0, 0, 0, 0, 0 }
}; };
@@ -530,6 +539,41 @@ static void filterSavedCallback(WebKitUserContentFilterStore *store, GAsyncResul @@ -530,6 +539,48 @@ static void filterSavedCallback(WebKitUserContentFilterStore *store, GAsyncResul
g_main_loop_quit(data->mainLoop); g_main_loop_quit(data->mainLoop);
} }
@ -15094,11 +15094,18 @@ index 61cb729e9e8e24d85c0d678c64a3dbae1c085f63..0efc11a6565ce3e4ec8e5bea6e12216f
+ g_application_release(G_APPLICATION(browserApplication)); + g_application_release(G_APPLICATION(browserApplication));
+} +}
+ +
+static void keepApplicationAliveUntilQuit(GApplication *application)
+{
+ // Reference the application, it will be released in quitBroserApplication.
+ g_application_hold(application);
+ WebKitBrowserInspector* browserInspector = webkit_browser_inspector_get_default();
+ g_signal_connect(browserInspector, "quit-application", G_CALLBACK(quitBroserApplication), NULL);
+}
+
+static void configureBrowserInspectorPipe() +static void configureBrowserInspectorPipe()
+{ +{
+ WebKitBrowserInspector* browserInspector = webkit_browser_inspector_get_default(); + WebKitBrowserInspector* browserInspector = webkit_browser_inspector_get_default();
+ g_signal_connect(browserInspector, "create-new-page", G_CALLBACK(createNewPage), NULL); + g_signal_connect(browserInspector, "create-new-page", G_CALLBACK(createNewPage), NULL);
+ g_signal_connect(browserInspector, "quit-application", G_CALLBACK(quitBroserApplication), NULL);
+ +
+ webkit_browser_inspector_initialize_pipe(proxy, ignoreHosts); + webkit_browser_inspector_initialize_pipe(proxy, ignoreHosts);
+} +}
@ -15106,7 +15113,7 @@ index 61cb729e9e8e24d85c0d678c64a3dbae1c085f63..0efc11a6565ce3e4ec8e5bea6e12216f
static void startup(GApplication *application) static void startup(GApplication *application)
{ {
const char *actionAccels[] = { const char *actionAccels[] = {
@@ -560,23 +604,37 @@ static void startup(GApplication *application) @@ -560,23 +611,36 @@ static void startup(GApplication *application)
static void activate(GApplication *application, WebKitSettings *webkitSettings) static void activate(GApplication *application, WebKitSettings *webkitSettings)
{ {
@ -15114,8 +15121,7 @@ index 61cb729e9e8e24d85c0d678c64a3dbae1c085f63..0efc11a6565ce3e4ec8e5bea6e12216f
+ configureBrowserInspectorPipe(); + configureBrowserInspectorPipe();
+ +
+ if (noStartupWindow) { + if (noStartupWindow) {
+ // Reference the application, it will be released in quitBroserApplication. + keepApplicationAliveUntilQuit(application);
+ g_application_hold(application);
+ g_clear_object(&webkitSettings); + g_clear_object(&webkitSettings);
+ return; + return;
+ } + }
@ -15147,7 +15153,7 @@ index 61cb729e9e8e24d85c0d678c64a3dbae1c085f63..0efc11a6565ce3e4ec8e5bea6e12216f
g_object_unref(manager); g_object_unref(manager);
if (cookiesPolicy) { if (cookiesPolicy) {
@@ -595,7 +653,7 @@ static void activate(GApplication *application, WebKitSettings *webkitSettings) @@ -595,7 +659,7 @@ static void activate(GApplication *application, WebKitSettings *webkitSettings)
} }
if (proxy) { if (proxy) {
@ -15156,7 +15162,7 @@ index 61cb729e9e8e24d85c0d678c64a3dbae1c085f63..0efc11a6565ce3e4ec8e5bea6e12216f
webkit_web_context_set_network_proxy_settings(webContext, WEBKIT_NETWORK_PROXY_MODE_CUSTOM, webkitProxySettings); webkit_web_context_set_network_proxy_settings(webContext, WEBKIT_NETWORK_PROXY_MODE_CUSTOM, webkitProxySettings);
webkit_network_proxy_settings_free(webkitProxySettings); webkit_network_proxy_settings_free(webkitProxySettings);
} }
@@ -661,9 +719,7 @@ static void activate(GApplication *application, WebKitSettings *webkitSettings) @@ -661,9 +725,7 @@ static void activate(GApplication *application, WebKitSettings *webkitSettings)
WebKitWebView *webView = createBrowserTab(mainWindow, webkitSettings, userContentManager, defaultWebsitePolicies); WebKitWebView *webView = createBrowserTab(mainWindow, webkitSettings, userContentManager, defaultWebsitePolicies);
if (!i) if (!i)
firstTab = GTK_WIDGET(webView); firstTab = GTK_WIDGET(webView);
@ -15167,7 +15173,7 @@ index 61cb729e9e8e24d85c0d678c64a3dbae1c085f63..0efc11a6565ce3e4ec8e5bea6e12216f
} }
} else { } else {
WebKitWebView *webView = createBrowserTab(mainWindow, webkitSettings, userContentManager, defaultWebsitePolicies); WebKitWebView *webView = createBrowserTab(mainWindow, webkitSettings, userContentManager, defaultWebsitePolicies);
@@ -739,9 +795,11 @@ int main(int argc, char *argv[]) @@ -739,9 +801,11 @@ int main(int argc, char *argv[])
} }
GtkApplication *application = gtk_application_new(NULL, G_APPLICATION_FLAGS_NONE); GtkApplication *application = gtk_application_new(NULL, G_APPLICATION_FLAGS_NONE);