From cea55d4953cb70a8a4c3ba9c21aad68efc7475f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Lopez?= Date: Fri, 19 Jan 2024 23:40:53 +0100 Subject: [PATCH] Add user option to disable JavaScript in xwidget webview * etc/NEWS: * doc/emacs/misc.texi (Embedded Webkit Widgets): Document the change. * lisp/xwidget.el: * src/xwidget.el: Add the 'xwidget-webkit-disable-javascript' variable to disable JavaScript in WebKit sessions. --- doc/emacs/misc.texi | 8 ++++++++ etc/NEWS | 7 +++++++ lisp/xwidget.el | 7 +++++++ src/xwidget.c | 7 +++++++ 4 files changed, 29 insertions(+) diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi index 7eb28f56826..d39d98678a0 100644 --- a/doc/emacs/misc.texi +++ b/doc/emacs/misc.texi @@ -3009,6 +3009,14 @@ Embedded WebKit Widgets It is bound to @kbd{H}. +@vindex xwidget-webkit-disable-javascript +@cindex disabling javascript in webkit buffers + JavaScript is enabled by default inside WebKit buffers, this can be +undesirable as websites often use it to track your online activity. It +can be disabled by setting the variable @code{xwidget-webkit-disable-javascript} to @code{t}. +You must kill all WebKit buffers for this setting to take effect after +it is changed. + @node Browse-URL @subsection Following URLs @cindex World Wide Web diff --git a/etc/NEWS b/etc/NEWS index 735a05f6579..33655663bd8 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1254,6 +1254,13 @@ chat buffers use by default. *** New command 'customize-dirlocals'. This command pops up a buffer to edit the settings in ".dir-locals.el". +** Xwidget Webkit + ++++ +*** New user option 'xwidget-webkit-disable-javascript' +This allows disabling JavaScript in xwidget webkit +sessions. + * New Modes and Packages in Emacs 30.1 diff --git a/lisp/xwidget.el b/lisp/xwidget.el index cca01c8cb3a..2fb79bb7b1d 100644 --- a/lisp/xwidget.el +++ b/lisp/xwidget.el @@ -116,6 +116,13 @@ xwidget-webkit-cookie-file :type '(choice (const :tag "Do not store cookies" nil) file) :version "29.1") +(defcustom xwidget-webkit-disable-javascript nil + "If non-nil, disables the execution of JavaScript in xwidget webkit sessions. +You must kill all xwidget-webkit buffers for this setting to take +effect after changing it." + :type '(boolean) + :version "30.0") + ;;;###autoload (defun xwidget-webkit-browse-url (url &optional new-session) "Ask xwidget-webkit to browse URL. diff --git a/src/xwidget.c b/src/xwidget.c index 58910459142..fc0055963c6 100644 --- a/src/xwidget.c +++ b/src/xwidget.c @@ -379,6 +379,7 @@ DEFUN ("make-xwidget", /* Enable the developer extras. */ settings = webkit_web_view_get_settings (WEBKIT_WEB_VIEW (xw->widget_osr)); g_object_set (G_OBJECT (settings), "enable-developer-extras", TRUE, NULL); + g_object_set (G_OBJECT (settings), "enable-javascript", !Vxwidget_webkit_disable_javascript, NULL); } gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, @@ -3972,6 +3973,12 @@ syms_of_xwidget (void) doc: /* List of all xwidget views. */); Vxwidget_view_list = Qnil; + DEFVAR_BOOL("xwidget-webkit-disable-javascript", Vxwidget_webkit_disable_javascript, + doc: /* If non-nil, disables the execution of JavaScript in xwidget webkit sessions. +You must kill all xwidget-webkit buffers for this setting to take +effect after changing it. */); + Vxwidget_webkit_disable_javascript = Qnil; + Fprovide (intern ("xwidget-internal"), Qnil); id_to_xwidget_map = CALLN (Fmake_hash_table, QCtest, Qeq, -- 2.43.0