logo

badwolf

minimalist and privacy-oriented web browser based on WebKitGTK git clone https://hacktivis.me/git/badwolf.git
commit: 7f4b6c84006c4af9d34319f5f29d890935580370
parent 17fdbc9f19c12095a88e4d64c47f35e62ebb0f86
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Thu, 16 Mar 2023 17:37:23 +0100

Add UserScripts support

Diffstat:

MMakefile6+++---
Mbadwolf.18+++++++-
Mbadwolf.c7+++++--
Mbadwolf.fr.18+++++++-
Mpo/fr_man.po34+++++++++++++++++++++++++++-------
Mpo/manpage.pot30++++++++++++++++++++++++------
Mpo/messages.pot28++++++++++++++++++++++++++--
Auserscripts.c61+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Auserscripts.h7+++++++
9 files changed, 167 insertions(+), 22 deletions(-)

diff --git a/Makefile b/Makefile @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf> +# SPDX-FileCopyrightText: 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf> # SPDX-License-Identifier: BSD-3-Clause # POSIX-ish Makefile with extensions common to *BSD and GNU such as: @@ -8,8 +8,8 @@ include config.mk -SRCS = bookmarks.c fmt.c fmt_test.c uri.c uri_test.c keybindings.c downloads.c badwolf.c -OBJS = bookmarks.o fmt.o uri.o keybindings.o downloads.o badwolf.o +SRCS = bookmarks.c userscripts.c fmt.c fmt_test.c uri.c uri_test.c keybindings.c downloads.c badwolf.c +OBJS = bookmarks.o userscripts.o fmt.o uri.o keybindings.o downloads.o badwolf.o OBJS_test = fmt_test.o uri_test.o bookmarks_test.o EXE = badwolf EXE_test = fmt_test uri_test bookmarks_test diff --git a/badwolf.1 b/badwolf.1 @@ -1,5 +1,5 @@ .\" BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser -.\" Copyright © 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf> +.\" Copyright © 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf> .\" SPDX-License-Identifier: BSD-3-Clause .Dd 2022-07-13 .Dt BADWOLF 1 @@ -147,6 +147,12 @@ For testing your styles I would recommend using the environment variable on launching .Nm and going to the CSS tab. +.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/scripts/ +Directory containing JS userscripts ran on page loads, useful to override +website behaviors or add missing features to websites. +.Pp +The files need to end with +.Ic .js .El .Sh AUTHORS .An Haelwenn (lanodan) Monnier Aq Mt contact+badwolf@hacktivis.me diff --git a/badwolf.c b/badwolf.c @@ -1,5 +1,5 @@ // BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser -// SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf> +// SPDX-FileCopyrightText: 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf> // SPDX-License-Identifier: BSD-3-Clause #include "badwolf.h" @@ -10,6 +10,7 @@ #include "fmt.h" #include "keybindings.h" #include "uri.h" +#include "userscripts.h" #include <assert.h> #include <glib/gi18n.h> /* _() and other internationalization/localization helpers */ @@ -333,7 +334,7 @@ WebViewCb_decide_policy(WebKitWebView *UNUSED(web_view), switch(decision_type) { case WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION: - n = WEBKIT_NAVIGATION_POLICY_DECISION(decision); + n = WEBKIT_NAVIGATION_POLICY_DECISION(decision); navigation_action = webkit_navigation_policy_decision_get_navigation_action(n); if(GDK_CONTROL_MASK == webkit_navigation_action_get_modifiers(navigation_action) || @@ -1076,6 +1077,8 @@ main(int argc, char *argv[]) window->downloads_tab = badwolf_downloads_tab_new(); window->content_manager = webkit_user_content_manager_new(); + load_userscripts(window->content_manager); + gchar *contentFilterPath = g_build_filename(g_get_user_config_dir(), g_get_prgname(), "content-filters.json", NULL); GFile *contentFilterFile = g_file_new_for_path(contentFilterPath); diff --git a/badwolf.fr.1 b/badwolf.fr.1 @@ -1,5 +1,5 @@ .\" BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser -.\" Copyright © 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf> +.\" Copyright © 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf> .\" SPDX-License-Identifier: BSD-3-Clause .\"******************************************************************* .\" @@ -170,6 +170,12 @@ pour la liste des propriétés disponibles. Pour tester les styles je recommende d'utiliser la variable d'environemnt .Ev GTK_DEBUG=interactive et d'aller à l'onglet CSS. +.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/scripts/ +Dossier contenant les scripts-utilisateurs (userscripts) lancé à chaque +chargement de page, utile pour changer le comportement des sites web. +.Pp +Les fichiers doivent se terminer en +.Ic .js .El .Sh AUTHORS .An Haelwenn (lanodan) Monnier Aq Mt contact+badwolf@hacktivis.me diff --git a/po/fr_man.po b/po/fr_man.po @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf> +# SPDX-FileCopyrightText: 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf> # SPDX-License-Identifier: BSD-3-Clause # #, fuzzy @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: contact+badwolf-msgid@hacktivis.me\n" -"POT-Creation-Date: 2023-02-05 08:08+0100\n" +"POT-Creation-Date: 2023-03-17 04:55+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -552,29 +552,49 @@ msgstr "" "Pour tester les styles je recommende d'utiliser la variable d'environemnt E<." "Ev GTK_DEBUG=interactive> et d'aller à l'onglet CSS." +#. type: It +#: badwolf.1:150 +#, no-wrap +msgid "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/scripts/" +msgstr "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/scripts/" + +#. type: Plain text +#: badwolf.1:153 +msgid "" +"Directory containing JS userscripts ran on page loads, useful to override " +"website behaviors or add missing features to websites." +msgstr "" +"Dossier contenant les scripts-utilisateurs (userscripts) lancé à chaque " +"chargement de page, utile pour changer le comportement des sites web." + +#. type: Plain text +#: badwolf.1:156 +msgid "The files need to end with E<.Ic .js>" +msgstr "Les fichiers doivent se terminer en E<.Ic .js>" + #. type: Sh -#: badwolf.1:151 +#: badwolf.1:157 #, no-wrap msgid "AUTHORS" msgstr "AUTHORS" #. type: Plain text -#: badwolf.1:153 +#: badwolf.1:159 msgid "E<.An Haelwenn (lanodan) Monnier Aq Mt contact+badwolf@hacktivis.me>" msgstr "E<.An Haelwenn (lanodan) Monnier Aq Mt contact+badwolf@hacktivis.me>" #. type: Sh -#: badwolf.1:153 +#: badwolf.1:159 #, no-wrap msgid "BUGS" msgstr "BUGS" #. type: Plain text -#: badwolf.1:155 +#: badwolf.1:161 msgid "You can submit contributions or tickets to" msgstr "Vous pouvez soumettre des contributions ou des tickets à" #. type: Plain text -#: badwolf.1:158 +#: badwolf.1:164 msgid "with E<.Xr git-send-email 1> for patches." msgstr "avec E<.Xr git-send-email 1> pour les modifications." diff --git a/po/manpage.pot b/po/manpage.pot @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Badwolf 1.2.0+geb77866.develop\n" "Report-Msgid-Bugs-To: contact+badwolf-msgid@hacktivis.me\n" -"POT-Creation-Date: 2023-02-05 08:08+0100\n" +"POT-Creation-Date: 2023-03-17 04:55+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -496,29 +496,47 @@ msgid "" "the CSS tab." msgstr "" +#. type: It +#: badwolf.1:150 +#, no-wrap +msgid "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/scripts/" +msgstr "" + +#. type: Plain text +#: badwolf.1:153 +msgid "" +"Directory containing JS userscripts ran on page loads, useful to override " +"website behaviors or add missing features to websites." +msgstr "" + +#. type: Plain text +#: badwolf.1:156 +msgid "The files need to end with E<.Ic .js>" +msgstr "" + #. type: Sh -#: badwolf.1:151 +#: badwolf.1:157 #, no-wrap msgid "AUTHORS" msgstr "" #. type: Plain text -#: badwolf.1:153 +#: badwolf.1:159 msgid "E<.An Haelwenn (lanodan) Monnier Aq Mt contact+badwolf@hacktivis.me>" msgstr "" #. type: Sh -#: badwolf.1:153 +#: badwolf.1:159 #, no-wrap msgid "BUGS" msgstr "" #. type: Plain text -#: badwolf.1:155 +#: badwolf.1:161 msgid "You can submit contributions or tickets to" msgstr "" #. type: Plain text -#: badwolf.1:158 +#: badwolf.1:164 msgid "with E<.Xr git-send-email 1> for patches." msgstr "" diff --git a/po/messages.pot b/po/messages.pot @@ -4,9 +4,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Badwolf 1.2.0+g5595652e.develop\n" +"Project-Id-Version: Badwolf 1.2.0+geb77866.develop\n" "Report-Msgid-Bugs-To: contact+badwolf-msgid@hacktivis.me\n" -"POT-Creation-Date: 2022-08-24 15:12+0200\n" +"POT-Creation-Date: 2023-03-17 03:08+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -145,6 +145,30 @@ msgid "_JS" msgstr "" #, c-format +msgid "badwolf: Checking for userscripts matching %s\n" +msgstr "" + +#, c-format +msgid "badwolf: Failed to load userscripts: Out of Memory\n" +msgstr "" + +#, c-format +msgid "badwolf: Failed to load userscripts: Read Error\n" +msgstr "" + +#, c-format +msgid "badwolf: Notice: Found %zd userscripts\n" +msgstr "" + +#, c-format +msgid "badwolf: Notice: No userscripts found\n" +msgstr "" + +#, c-format +msgid "badwolf: Notice: Userscripts loaded\n" +msgstr "" + +#, c-format msgid "badwolf: content-filter loaded, adding to content-manager…\n" msgstr "" diff --git a/userscripts.c b/userscripts.c @@ -0,0 +1,61 @@ +// BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser +// SPDX-FileCopyrightText: 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf> +// SPDX-License-Identifier: BSD-3-Clause + +#include "userscripts.h" + +#include "badwolf.h" +#include "config.h" + +#include <assert.h> +#include <glib/gi18n.h> /* _() and other internationalization/localization helpers */ +#include <glob.h> + +void +load_userscripts(WebKitUserContentManager *content_manager) +{ + glob_t scripts_path_glob; + gchar *scripts_path = g_build_filename(g_get_user_data_dir(), "badwolf", "scripts", "*.js", NULL); + + fprintf(stderr, _("badwolf: Checking for userscripts matching %s\n"), scripts_path); + + switch(glob(scripts_path, GLOB_NOSORT, NULL, &scripts_path_glob)) + { + case 0: + fprintf(stderr, _("badwolf: Notice: Found %zd userscripts\n"), scripts_path_glob.gl_pathc); + break; + case GLOB_NOMATCH: + fprintf(stderr, _("badwolf: Notice: No userscripts found\n")); + goto clean; + break; + case GLOB_NOSPACE: + fprintf(stderr, _("badwolf: Failed to load userscripts: Out of Memory\n")); + goto clean; + break; + case GLOB_ABORTED: + fprintf(stderr, _("badwolf: Failed to load userscripts: Read Error\n")); + goto clean; + break; + } + + for(size_t i = 0; i < scripts_path_glob.gl_pathc; i++) + { + gsize l = 0; + gchar *contents; + g_file_get_contents(scripts_path_glob.gl_pathv[i], &contents, &l, NULL); + + WebKitUserScript *userscript = + webkit_user_script_new(contents, + WEBKIT_USER_CONTENT_INJECT_ALL_FRAMES, + WEBKIT_USER_SCRIPT_INJECT_AT_DOCUMENT_START, + NULL, + NULL); + webkit_user_content_manager_add_script(content_manager, userscript); + } + + fprintf(stderr, _("badwolf: Notice: Userscripts loaded\n")); + +clean: + g_free(scripts_path); + globfree(&scripts_path_glob); +} diff --git a/userscripts.h b/userscripts.h @@ -0,0 +1,7 @@ +// BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser +// SPDX-FileCopyrightText: 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf> +// SPDX-License-Identifier: BSD-3-Clause + +#include <webkit2/webkit2.h> + +void load_userscripts(WebKitUserContentManager *content_manager);