Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit7d53dec8431147f6ab07319df4b419b355e3b343 (patch)
Author
 Syndamia <kamen@syndamia.com>
2022-07-21 11:18:19 +0300
Committer
 Syndamia <kamen@syndamia.com>
2022-07-21 11:18:19 +0300
Files0cfc5a331c08839169cf290ee9d1fc37f60d1591
goodwolf-7d53dec8431147f6ab07319df4b419b355e3b343.tar
goodwolf-7d53dec8431147f6ab07319df4b419b355e3b343.tar.gz
goodwolf-7d53dec8431147f6ab07319df4b419b355e3b343.zip
Parent3da85d7b51a9a562092d0ab41a04200eed407c38 (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.c61
diff --git a/goodwolf.c b/goodwolf.c
index 7767aae..a21b3ff 100644
--- a/goodwolf.c
+++ b/goodwolf.c
@@ -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);