[Xfce4-commits] <midori:master> Ignore request if the source is a navigation request
Christian Dywan
noreply at xfce.org
Thu Apr 12 23:44:02 CEST 2012
Updating branch refs/heads/master
to 8d0d2554ca5cbefd4c4cf2facfea00f1100de699 (commit)
from 08d890e20e4299976d6fa2ea673d606693771317 (commit)
commit 8d0d2554ca5cbefd4c4cf2facfea00f1100de699
Author: André Stösel <andre at stoesel.de>
Date: Thu Apr 12 23:17:02 2012 +0200
Ignore request if the source is a navigation request
Fixes: https://bugs.launchpad.net/midori/+bug/979767
extensions/adblock.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 44 insertions(+), 0 deletions(-)
diff --git a/extensions/adblock.c b/extensions/adblock.c
index da59e75..aa64eeb 100644
--- a/extensions/adblock.c
+++ b/extensions/adblock.c
@@ -39,6 +39,7 @@ static GHashTable* keys = NULL;
static GHashTable* optslist = NULL;
static GHashTable* urlcache = NULL;
static GHashTable* blockcssprivate = NULL;
+static GHashTable* navigationwhitelist = NULL;
static GString* blockcss = NULL;
#ifdef G_ENABLE_DEBUG
static guint debug;
@@ -127,6 +128,8 @@ adblock_destroy_db ()
urlcache = NULL;
g_hash_table_destroy (blockcssprivate);
blockcssprivate = NULL;
+ g_hash_table_destroy (navigationwhitelist);
+ navigationwhitelist = NULL;
}
static void
@@ -147,6 +150,9 @@ adblock_init_db ()
blockcssprivate = g_hash_table_new_full (g_str_hash, g_str_equal,
(GDestroyNotify)g_free,
(GDestroyNotify)g_free);
+ navigationwhitelist = g_hash_table_new_full (g_direct_hash, g_str_equal,
+ NULL,
+ (GDestroyNotify)g_free);
if (blockcss && blockcss->len > 0)
g_string_free (blockcss, TRUE);
@@ -779,6 +785,23 @@ adblock_prepare_urihider_js (GList* uris)
return g_string_free (js, FALSE);
}
+static gboolean
+adblock_navigation_policy_decision_requested_cb (WebKitWebView* web_view,
+ WebKitWebFrame* web_frame,
+ WebKitNetworkRequest* request,
+ WebKitWebNavigationAction* action,
+ WebKitWebPolicyDecision* decision,
+ MidoriView* view)
+{
+ if (web_frame == webkit_web_view_get_main_frame (web_view))
+ {
+ const gchar* req_uri = webkit_network_request_get_uri (request);
+ g_hash_table_replace (navigationwhitelist, web_view, g_strdup (req_uri));
+ }
+ return false;
+}
+
+
static void
adblock_resource_request_starting_cb (WebKitWebView* web_view,
WebKitWebFrame* web_frame,
@@ -798,6 +821,10 @@ adblock_resource_request_starting_cb (WebKitWebView* web_view,
return;
req_uri = webkit_network_request_get_uri (request);
+
+ if (!g_strcmp0 (req_uri, g_hash_table_lookup (navigationwhitelist, web_view)))
+ return;
+
if (!midori_uri_is_http (req_uri)
|| g_str_has_suffix (req_uri, "favicon.ico"))
return;
@@ -983,6 +1010,8 @@ adblock_add_tab_cb (MidoriBrowser* browser,
g_signal_connect_after (web_view, "populate-popup",
G_CALLBACK (adblock_populate_popup_cb), extension);
+ g_signal_connect (web_view, "navigation-policy-decision-requested",
+ G_CALLBACK (adblock_navigation_policy_decision_requested_cb), view);
g_signal_connect (web_view, "resource-request-starting",
G_CALLBACK (adblock_resource_request_starting_cb), image);
g_signal_connect (web_view, "load-finished",
@@ -990,6 +1019,15 @@ adblock_add_tab_cb (MidoriBrowser* browser,
}
static void
+adblock_remove_tab_cb (MidoriBrowser* browser,
+ MidoriView* view,
+ MidoriExtension* extension)
+{
+ GtkWidget* web_view = midori_view_get_web_view (view);
+ g_hash_table_remove (navigationwhitelist, web_view);
+}
+
+static void
adblock_deactivate_cb (MidoriExtension* extension,
MidoriBrowser* browser);
@@ -1021,6 +1059,8 @@ adblock_app_add_browser_cb (MidoriApp* app,
(GtkCallback)adblock_add_tab_foreach_cb, extension);
g_signal_connect (browser, "add-tab",
G_CALLBACK (adblock_add_tab_cb), extension);
+ g_signal_connect (browser, "remove-tab",
+ G_CALLBACK (adblock_remove_tab_cb), extension);
g_signal_connect (extension, "open-preferences",
G_CALLBACK (adblock_open_preferences_cb), extension);
g_signal_connect (extension, "deactivate",
@@ -1466,6 +1506,8 @@ adblock_deactivate_tabs (MidoriView* view,
web_view, adblock_resource_request_starting_cb, image);
g_signal_handlers_disconnect_by_func (
web_view, adblock_load_finished_cb, image);
+ g_signal_handlers_disconnect_by_func (
+ web_view, adblock_navigation_policy_decision_requested_cb, view);
}
static void
@@ -1483,6 +1525,8 @@ adblock_deactivate_cb (MidoriExtension* extension,
app, adblock_app_add_browser_cb, extension);
g_signal_handlers_disconnect_by_func (
browser, adblock_add_tab_cb, extension);
+ g_signal_handlers_disconnect_by_func (
+ browser, adblock_remove_tab_cb, extension);
midori_browser_foreach (browser, (GtkCallback)adblock_deactivate_tabs, extension);
adblock_destroy_db ();
More information about the Xfce4-commits
mailing list