]> git.armaanb.net Git - chorizo.git/blob - extensions/we_adblock.c
Reformat with clang-format
[chorizo.git] / extensions / we_adblock.c
1 #include <stdio.h>
2
3 #include <glib.h>
4 #include <webkit2/webkit-web-extension.h>
5
6 GSList *adblock_patterns = NULL;
7
8 void
9 adblock_load(void) {
10     GRegex *re = NULL;
11     GError *err = NULL;
12     GIOChannel *channel = NULL;
13     gchar *path = NULL, *buf = NULL;
14
15     path = g_build_filename(g_get_user_config_dir(), __NAME__, "adblock", NULL);
16     channel = g_io_channel_new_file(path, "r", &err);
17     if (channel != NULL) {
18         while (g_io_channel_read_line(channel, &buf, NULL, NULL, NULL) ==
19                G_IO_STATUS_NORMAL) {
20             g_strstrip(buf);
21             if (buf[0] != '#') {
22                 re = g_regex_new(buf, G_REGEX_CASELESS | G_REGEX_OPTIMIZE,
23                                  G_REGEX_MATCH_PARTIAL, &err);
24                 if (err != NULL) {
25                     fprintf(stderr, __NAME__ ": Could not compile regex: %s\n",
26                             buf);
27                     g_error_free(err);
28                     err = NULL;
29                 } else
30                     adblock_patterns = g_slist_append(adblock_patterns, re);
31             }
32             g_free(buf);
33         }
34         g_io_channel_shutdown(channel, FALSE, NULL);
35     }
36     g_free(path);
37 }
38
39 gboolean
40 web_page_send_request(WebKitWebPage *web_page, WebKitURIRequest *request,
41                       WebKitURIResponse *redirected_response,
42                       gpointer user_data) {
43     GSList *it = adblock_patterns;
44     const gchar *uri;
45
46     uri = webkit_uri_request_get_uri(request);
47
48     while (it) {
49         if (g_regex_match((GRegex *)(it->data), uri, 0, NULL))
50             return TRUE;
51         it = g_slist_next(it);
52     }
53
54     return FALSE;
55 }
56
57 void
58 web_page_created_callback(WebKitWebExtension *extension,
59                           WebKitWebPage *web_page, gpointer user_data) {
60     g_signal_connect_object(web_page, "send-request",
61                             G_CALLBACK(web_page_send_request), NULL, 0);
62 }
63
64 G_MODULE_EXPORT void
65 webkit_web_extension_initialize(WebKitWebExtension *extension) {
66     adblock_load();
67     g_signal_connect(extension, "page-created",
68                      G_CALLBACK(web_page_created_callback), NULL);
69 }