Modified: trunk/Tools/ChangeLog (258210 => 258211)
--- trunk/Tools/ChangeLog 2020-03-10 15:12:19 UTC (rev 258210)
+++ trunk/Tools/ChangeLog 2020-03-10 16:11:25 UTC (rev 258211)
@@ -1,3 +1,17 @@
+2020-03-10 Lauro Moura <lmo...@igalia.com>
+
+ [WPE] MiniBrowser: Close child WebViews when exiting
+ https://bugs.webkit.org/show_bug.cgi?id=208689
+
+ Reviewed by Carlos Garcia Campos.
+
+ Store created views so we can release them before exiting.
+
+ * MiniBrowser/wpe/main.cpp:
+ (webViewClose):
+ (createWebView):
+ (main):
+
2020-03-10 Aakash Jain <aakash_j...@apple.com>
Add ValidateCommiterAndReviewer and ValidateChangeLogAndReviewer build steps in commit-queue
Modified: trunk/Tools/MiniBrowser/wpe/main.cpp (258210 => 258211)
--- trunk/Tools/MiniBrowser/wpe/main.cpp 2020-03-10 15:12:19 UTC (rev 258210)
+++ trunk/Tools/MiniBrowser/wpe/main.cpp 2020-03-10 16:11:25 UTC (rev 258211)
@@ -49,6 +49,7 @@
static const char* proxy;
const char* bgColor;
static gboolean printVersion;
+static GHashTable* openViews;
static const GOptionEntry commandLineOptions[] =
{
@@ -149,7 +150,8 @@
static void webViewClose(WebKitWebView* webView, gpointer)
{
- g_object_unref(webView);
+ // Hash table key delete func takes care of unref'ing the view
+ g_hash_table_remove(openViews, webView);
}
static WebKitWebView* createWebView(WebKitWebView* webView, WebKitNavigationAction*, gpointer)
@@ -169,6 +171,8 @@
g_signal_connect(newWebView, "close", G_CALLBACK(webViewClose), nullptr);
+ g_hash_table_add(openViews, newWebView);
+
return newWebView;
}
@@ -288,7 +292,6 @@
"is-controlled-by-automation", automationMode,
nullptr));
g_object_unref(settings);
- g_object_add_weak_pointer(G_OBJECT(webView), reinterpret_cast<void**>(&webView));
backendPtr->setInputClient(std::make_unique<InputClient>(loop, webView));
#if defined(HAVE_ACCESSIBILITY) && HAVE_ACCESSIBILITY
@@ -297,11 +300,14 @@
backendPtr->setAccessibleChild(ATK_OBJECT(accessible));
#endif
+ openViews = g_hash_table_new_full(nullptr, nullptr, g_object_unref, nullptr);
+
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);
g_signal_connect(webView, "create", G_CALLBACK(createWebView), nullptr);
g_signal_connect(webView, "close", G_CALLBACK(webViewClose), nullptr);
+ g_hash_table_add(openViews, webView);
if (ignoreTLSErrors)
webkit_web_context_set_tls_errors_policy(webContext, WEBKIT_TLS_ERRORS_POLICY_IGNORE);
@@ -327,10 +333,9 @@
g_main_loop_run(loop);
- if (webView) {
- g_object_remove_weak_pointer(G_OBJECT(webView), reinterpret_cast<void**>(&webView));
- g_object_unref(webView);
- }
+ g_hash_table_destroy(openViews);
+
+
if (privateMode || automationMode)
g_object_unref(webContext);
g_main_loop_unref(loop);