[Commits] [SCM] claws branch, master, updated. 4.1.0-83-gae80c5e67
paul at claws-mail.org
paul at claws-mail.org
Wed Oct 19 14:50:24 UTC 2022
The branch, master has been updated
via ae80c5e67ba82395c2c9db2ce6f451e2dbe9a2c8 (commit)
from db8edf89d8b6dd9f8f407336fc75764da1d670a7 (commit)
Summary of changes:
src/plugins/fancy/Makefile.am | 10 ++-
src/plugins/fancy/fancy_viewer.c | 16 +++--
src/plugins/fancy/fancy_viewer.h | 1 -
src/plugins/fancy/fancy_web_extension.c | 112 ++++++++++++++++++++++++++++++++
4 files changed, 130 insertions(+), 9 deletions(-)
create mode 100644 src/plugins/fancy/fancy_web_extension.c
- Log -----------------------------------------------------------------
commit ae80c5e67ba82395c2c9db2ce6f451e2dbe9a2c8
Author: Jonathan Boeing <jonathan at claws-mail.org>
Date: Sun Oct 9 21:51:44 2022 -0700
fix bug 4630, 'Fancy loads remote images when remote content is disabled'
Upstream changes broke the 'empty network proxy' method of blocking
remote content, so replace it with a WebKit extension that handles the
send-request signal.
diff --git a/src/plugins/fancy/Makefile.am b/src/plugins/fancy/Makefile.am
index 61c2e42d1..9998a6b77 100644
--- a/src/plugins/fancy/Makefile.am
+++ b/src/plugins/fancy/Makefile.am
@@ -12,9 +12,11 @@ IFLAGS = \
-I$(top_srcdir)/src/gtk
plugindir = $(pkglibdir)/plugins
+webextensiondir = $(pkglibdir)/plugins/web_extensions
if BUILD_FANCY_PLUGIN
plugin_LTLIBRARIES = fancy.la
+webextension_LTLIBRARIES = libfancywebextension.la
endif
fancy_la_LDFLAGS = \
@@ -36,7 +38,8 @@ fancy_la_CPPFLAGS = \
$(ENCHANT_CFLAGS) \
$(WEBKIT_CFLAGS) \
$(LIBSOUP_GNOME_CFLAGS) \
- $(CURL_CFLAGS)
+ $(CURL_CFLAGS) \
+ -DFANCY_WEB_EXTENSIONS_DIR=\""$(pkglibdir)/plugins/web_extensions"\"
fancy_la_SOURCES = \
fancy_prefs.c \
@@ -44,4 +47,9 @@ fancy_la_SOURCES = \
fancy_viewer.c \
fancy_viewer.h
+libfancywebextension_la_SOURCES = fancy_web_extension.c
+libfancywebextension_la_CFLAGS = $(WEBKIT_CFLAGS)
+libfancywebextension_la_LIBADD = $(WEBKIT_LIBS)
+libfancywebextension_la_LDFLAGS = -module -avoid-version -no-undefined
+
.PHONY: test
diff --git a/src/plugins/fancy/fancy_viewer.c b/src/plugins/fancy/fancy_viewer.c
index 2048c8351..b69fed533 100644
--- a/src/plugins/fancy/fancy_viewer.c
+++ b/src/plugins/fancy/fancy_viewer.c
@@ -111,10 +111,12 @@ static void fancy_apply_prefs(FancyViewer *viewer)
}
webkit_web_view_set_settings(viewer->view, viewer->settings);
webkit_web_context_set_cache_model(webkit_web_context_get_default(), WEBKIT_CACHE_MODEL_DOCUMENT_VIEWER);
- if (viewer->override_prefs_remote_content)
- webkit_web_context_set_network_proxy_settings(webkit_web_context_get_default(), WEBKIT_NETWORK_PROXY_MODE_DEFAULT, NULL);
- else
- webkit_web_context_set_network_proxy_settings(webkit_web_context_get_default(), WEBKIT_NETWORK_PROXY_MODE_CUSTOM, viewer->no_remote_content_proxy_settings);
+ webkit_web_view_send_message_to_page(viewer->view,
+ webkit_user_message_new("LoadRemoteContent",
+ g_variant_new_boolean(viewer->override_prefs_remote_content)),
+ NULL,
+ NULL,
+ NULL);
if (viewer->override_stylesheet) {
/* copied from vimb */
@@ -1122,9 +1124,6 @@ static MimeViewer *fancy_viewer_create(void)
}
*/
viewer->settings = webkit_settings_new();
- // Proxy "" makes libsoup backend think that there is no way
- // to connect, which is ideal.
- viewer->no_remote_content_proxy_settings = webkit_network_proxy_settings_new("", NULL);
g_object_set(viewer->settings, "user-agent", "Fancy Viewer", NULL);
viewer->scrollwin = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(viewer->scrollwin),
@@ -1268,6 +1267,9 @@ gint plugin_init(gchar **error)
}
g_free(directory);
+ webkit_web_context_set_web_extensions_directory(webkit_web_context_get_default(),
+ FANCY_WEB_EXTENSIONS_DIR);
+
fancy_prefs_init();
mimeview_register_viewer_factory(&fancy_viewer_factory);
diff --git a/src/plugins/fancy/fancy_viewer.h b/src/plugins/fancy/fancy_viewer.h
index 50d388ef6..0dc7da8f3 100644
--- a/src/plugins/fancy/fancy_viewer.h
+++ b/src/plugins/fancy/fancy_viewer.h
@@ -93,7 +93,6 @@ struct _FancyViewer
GtkWidget *progress;
WebKitSettings *settings;
- WebKitNetworkProxySettings *no_remote_content_proxy_settings;
gboolean printing;
gboolean override_prefs_images;
gboolean override_prefs_remote_content;
diff --git a/src/plugins/fancy/fancy_web_extension.c b/src/plugins/fancy/fancy_web_extension.c
new file mode 100644
index 000000000..d3be9c28f
--- /dev/null
+++ b/src/plugins/fancy/fancy_web_extension.c
@@ -0,0 +1,112 @@
+/*
+ * Claws Mail -- a GTK based, lightweight, and fast e-mail client
+ * Copyright (C) 2022 the Claws Mail team
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define G_LOG_DOMAIN "Fancy-Web-Ext"
+
+#include <glib-object.h>
+#include <webkit2/webkit-web-extension.h>
+
+static gboolean load_remote_content = FALSE;
+
+static gboolean web_page_send_request_cb(WebKitWebPage *web_page,
+ WebKitURIRequest *request,
+ WebKitURIResponse *redirected_response,
+ gpointer user_data)
+{
+ gboolean is_remote = TRUE;
+ gboolean should_block;
+ const char *request_uri = webkit_uri_request_get_uri(request);
+ const char *scheme = g_uri_peek_scheme(request_uri);
+
+ if (scheme == NULL)
+ return TRUE;
+
+ if (strcmp(scheme, "cid") == 0 ||
+ strcmp(scheme, "file") == 0 ||
+ strcmp(scheme, "about") == 0)
+ is_remote = FALSE;
+
+ if (is_remote)
+ should_block = !load_remote_content;
+ else
+ should_block = FALSE;
+
+ g_debug("Filter page: %s request: %s => %s uri %s",
+ webkit_web_page_get_uri(web_page),
+ request_uri,
+ is_remote ? "remote" : "local",
+ should_block ? "blocked" : "allowed");
+
+ return should_block;
+}
+
+static gboolean web_page_user_message_received_cb(WebKitWebPage *page,
+ WebKitUserMessage *message,
+ gpointer user_data)
+{
+ const char *name = webkit_user_message_get_name(message);
+
+ g_debug("WebPage user message received callback - %s", name);
+
+ if (g_strcmp0(name, "LoadRemoteContent") == 0) {
+ GVariant *parameters;
+
+ parameters = webkit_user_message_get_parameters(message);
+ if (!parameters)
+ return FALSE;
+
+ load_remote_content = g_variant_get_boolean(parameters);
+
+ g_debug("LoadRemoteContent param - %d", load_remote_content);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void web_page_created_cb(WebKitWebExtension *extension,
+ WebKitWebPage *web_page,
+ gpointer user_data)
+{
+ g_debug("Page %ld created for %s",
+ webkit_web_page_get_id(web_page),
+ webkit_web_page_get_uri(web_page));
+
+ g_signal_connect_object(web_page,
+ "send-request",
+ G_CALLBACK(web_page_send_request_cb),
+ NULL,
+ 0);
+
+ g_signal_connect_object(web_page,
+ "user-message-received",
+ G_CALLBACK(web_page_user_message_received_cb),
+ NULL,
+ 0);
+}
+
+G_MODULE_EXPORT void webkit_web_extension_initialize(WebKitWebExtension *extension)
+{
+ g_debug("Initializing Fancy web process extension");
+
+ g_signal_connect(extension,
+ "page-created",
+ G_CALLBACK(web_page_created_cb),
+ NULL);
+}
-----------------------------------------------------------------------
hooks/post-receive
--
Claws Mail
More information about the Commits
mailing list