77 lines
2.1 KiB
C
77 lines
2.1 KiB
C
![]() |
// 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);
|
||
|
unsigned int loaded = 0, failed = 0;
|
||
|
|
||
|
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 list userscripts: Out of Memory\n"));
|
||
|
goto clean;
|
||
|
break;
|
||
|
case GLOB_ABORTED:
|
||
|
fprintf(stderr, _("badwolf: Failed to list userscripts: Read Error\n"));
|
||
|
goto clean;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
for(size_t i = 0; i < scripts_path_glob.gl_pathc; i++)
|
||
|
{
|
||
|
char *filename = scripts_path_glob.gl_pathv[i];
|
||
|
gchar *contents;
|
||
|
GError *err = NULL;
|
||
|
|
||
|
if(g_file_get_contents(filename, &contents, NULL, &err) && err == 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);
|
||
|
loaded++;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
fprintf(stderr, _("badwolf: Error reading userscript: %s\n"), err->message);
|
||
|
g_error_free(err);
|
||
|
failed++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fprintf(stderr,
|
||
|
_("badwolf: Notice: Userscript loading: %d loaded, %d failed to load\n"),
|
||
|
loaded,
|
||
|
failed);
|
||
|
|
||
|
clean:
|
||
|
g_free(scripts_path);
|
||
|
globfree(&scripts_path_glob);
|
||
|
}
|