[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