diff options
| Commit | 7d53dec8431147f6ab07319df4b419b355e3b343 (patch) | |
|---|---|---|
| Author | 2022-07-21 11:18:19 +0300 | |
| Committer | 2022-07-21 11:18:19 +0300 | |
| Files | 0cfc5a331c08839169cf290ee9d1fc37f60d1591 | |
| goodwolf-7d53dec8431147f6ab07319df4b419b355e3b343.tar goodwolf-7d53dec8431147f6ab07319df4b419b355e3b343.tar.gz goodwolf-7d53dec8431147f6ab07319df4b419b355e3b343.zip | ||
| Parent | 3da85d7b51a9a562092d0ab41a04200eed407c38 (diff) | |
goodwolf: Implemented sharing of WebView between all tabs. Added switch to disable it.
1 files changed, 39 insertions, 22 deletions
| -rw-r--r-- | goodwolf.c | 61 |
@@ -35,6 +35,7 @@ static int custom_favicon_size = 30; static gboolean persistent_storage = FALSE; static gboolean separated_storage = FALSE; static gboolean enabled_javascript = FALSE; +static gboolean no_global_webview = FALSE; static gboolean WebViewCb_close(WebKitWebView *webView, gpointer user_data); static gboolean WebViewCb_web_process_terminated(WebKitWebView *webView, @@ -710,6 +711,8 @@ widgetCb_drop_button3_event(GtkWidget *widget, GdkEvent *event, gpointer user_da return ((GdkEventButton *)event)->button == 3; } +static struct Client *global_browser = NULL; + struct Client * new_browser(struct Window *window, const gchar *target_url, struct Client *old_browser) { @@ -779,23 +782,7 @@ new_browser(struct Window *window, const gchar *target_url, struct Client *old_b WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES); webkit_web_context_set_web_extensions_directory(web_context, web_extensions_directory); webkit_web_context_set_favicon_database_directory(web_context, NULL); - if (persistent_storage) { - char context_id_str[GOODWOLF_CTX_SIZ] = {0, 0, 0, 0, 0, 0, 0}; - if (separated_storage) { - fmt_context_id(browser->context_id, context_id_str, 0); - g_mkdir_with_parents( - g_build_filename(g_get_user_config_dir(), "goodwolf", context_id_str, NULL), - 0755); - } - webkit_cookie_manager_set_persistent_storage( - webkit_website_data_manager_get_cookie_manager(website_data_manager), - g_build_filename(g_get_user_config_dir(), "goodwolf", context_id_str, "cookies.txt", NULL), - WEBKIT_COOKIE_PERSISTENT_STORAGE_TEXT); - webkit_cookie_manager_set_accept_policy( - webkit_website_data_manager_get_cookie_manager(website_data_manager), - WEBKIT_COOKIE_POLICY_ACCEPT_ALWAYS); - } g_signal_connect(G_OBJECT(web_context), "download-started", @@ -821,7 +808,8 @@ new_browser(struct Window *window, const gchar *target_url, struct Client *old_b WebKitSettings *settings = webkit_settings_new_with_settings(GOODWOLF_WEBKIT_SETTINGS); if (alt_useragent == TRUE) - webkit_settings_set_user_agent(settings, "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:74.0) Gecko/20100101 Firefox/74.0"); + webkit_settings_set_user_agent(settings, + "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:74.0) Gecko/20100101 Firefox/74.0"); if (enabled_javascript == TRUE) webkit_settings_set_enable_javascript_markup(settings, enabled_javascript); @@ -840,6 +828,25 @@ new_browser(struct Window *window, const gchar *target_url, struct Client *old_b "user-content-manager", window->content_manager, NULL)); + + if (persistent_storage) { + char context_id_str[GOODWOLF_CTX_SIZ] = {0, 0, 0, 0, 0, 0, 0}; + if (separated_storage) { + fmt_context_id(browser->context_id, context_id_str, 0); + g_mkdir_with_parents( + g_build_filename(g_get_user_config_dir(), "goodwolf", context_id_str, NULL), + 0755); + } + + webkit_cookie_manager_set_persistent_storage( + webkit_website_data_manager_get_cookie_manager(webkit_web_view_get_website_data_manager(browser->webView)), + g_build_filename(g_get_user_config_dir(), "goodwolf", context_id_str, "cookies.txt", NULL), + WEBKIT_COOKIE_PERSISTENT_STORAGE_TEXT); + webkit_cookie_manager_set_accept_policy( + webkit_website_data_manager_get_cookie_manager(webkit_web_view_get_website_data_manager(browser->webView)), + WEBKIT_COOKIE_POLICY_ACCEPT_ALWAYS); + } + gtk_widget_set_name(GTK_WIDGET(browser->webView), "browser__webView"); if(old_browser == NULL) { @@ -1017,7 +1024,8 @@ new_browser(struct Window *window, const gchar *target_url, struct Client *old_b /* signals for box container */ g_signal_connect(browser->box, "key-press-event", G_CALLBACK(boxCb_key_press_event), browser); - if(old_browser == NULL) webkit_web_view_load_uri(browser->webView, target_url); + if(old_browser == NULL || old_browser == global_browser) + webkit_web_view_load_uri(browser->webView, target_url); return browser; } @@ -1062,7 +1070,7 @@ new_tabCb_clicked(GtkButton *new_tab, gpointer user_data) { (void)new_tab; struct Window *window = (struct Window *)user_data; - struct Client *browser = new_browser(window, NULL, NULL); + struct Client *browser = new_browser(window, NULL, global_browser); goodwolf_new_tab(GTK_NOTEBOOK(window->notebook), browser, TRUE); } @@ -1201,7 +1209,11 @@ Options:\n\ -ps Enables persistent storage, meaning non-session cookies will be stored on drive\n\ -st Enables separated storage, meaning cookie storage will be separated between tabs by\n\ their context label.\n\ - Doesn't do anything if the -sp option isn't selected.\n"); + Doesn't do anything if the -sp option isn't selected.\n\ + -ng Disables global browser WebView. This significantly increases memory usage, roughly to\n\ + 200-300MB per tab, but separates each tab into it's own process.\n\ + Useful for debugging purposes and might improve security. Significantly increases page\n\ + load speed when multiple pages need to be loaded at once.\n"); return 0; } @@ -1328,6 +1340,8 @@ Options:\n\ persistent_storage = TRUE; else if (argv[1][1] == 's' && argv[1][2] == 't') separated_storage = TRUE; + else if (argv[1][1] == 'n' && argv[1][2] == 'g') + no_global_webview = TRUE; else if (argv[1][1] == 'f' && argv[1][2] == 's') { argv++; argc--; @@ -1342,11 +1356,14 @@ Options:\n\ gtk_widget_show(window->new_tab); gtk_widget_show_all(window->main_window); + if (!no_global_webview) + global_browser = new_browser(window, NULL, NULL); + if(argc == 1) - goodwolf_new_tab(GTK_NOTEBOOK(window->notebook), new_browser(window, NULL, NULL), FALSE); + goodwolf_new_tab(GTK_NOTEBOOK(window->notebook), new_browser(window, NULL, global_browser), FALSE); else for(int i = 1; i < argc; ++i) - goodwolf_new_tab(GTK_NOTEBOOK(window->notebook), new_browser(window, argv[i], NULL), TRUE); + goodwolf_new_tab(GTK_NOTEBOOK(window->notebook), new_browser(window, argv[i], global_browser), TRUE); gtk_notebook_set_current_page(GTK_NOTEBOOK(window->notebook), 1); |