]> spindle.queued.net Git - midori/commitdiff
Add URL cache in adblock extension
authorAlexander Butenko <a.butenka@gmail.com>
Sun, 29 May 2011 02:57:31 +0000 (22:57 -0400)
committerChristian Dywan <christian@twotoasts.de>
Wed, 1 Jun 2011 22:48:02 +0000 (00:48 +0200)
We can bypass all tests on the second load of the URL.

extensions/adblock.c

index 062a77eb762059ee6338fabf7881e964bfee4e72..e40b533cea3b63561385d34b2f36f84daf5b6148 100644 (file)
@@ -41,6 +41,7 @@
 
 static GHashTable* pattern;
 static GHashTable* keys;
+static GHashTable* urlcache;
 static gchar* blockcss = NULL;
 static gchar* blockcssprivate = NULL;
 static gchar* blockscript = NULL;
@@ -92,6 +93,9 @@ adblock_init_db ()
     keys = g_hash_table_new_full (g_str_hash, g_str_equal,
                    (GDestroyNotify)g_free,
                    (GDestroyNotify)g_regex_unref);
+    urlcache = g_hash_table_new_full (g_str_hash, g_str_equal,
+                   (GDestroyNotify)g_free,
+                   (GDestroyNotify)g_free);
     katze_assign (blockcss, g_strdup ("z-non-exist"));
     katze_assign (blockcssprivate, g_strdup (""));
 }
@@ -683,11 +687,27 @@ adblock_is_matched (const gchar*  opts,
                     const gchar*  req_uri,
                     const gchar*  page_uri)
 {
+    gboolean foundbykey;
+    gboolean foundbypattern;
+    gchar* value;
+
+    if ((value = g_hash_table_lookup (urlcache, req_uri)))
+    {
+        if (value[0] == '0')
+            return FALSE;
+        else
+            return TRUE;
+    }
 
-    if (adblock_is_matched_by_key (opts, req_uri, page_uri) == TRUE)
+    foundbykey = adblock_is_matched_by_key (opts, req_uri, page_uri);
+    foundbypattern = adblock_is_matched_by_pattern (req_uri, page_uri);
+    if (foundbykey == TRUE || foundbypattern == TRUE)
+    {
+        g_hash_table_insert (urlcache, g_strdup (req_uri), g_strdup("1"));
         return TRUE;
-    else
-        return adblock_is_matched_by_pattern (req_uri, page_uri);
+    }
+    g_hash_table_insert (urlcache, g_strdup (req_uri), g_strdup("0"));
+    return FALSE;
 }
 
 #if HAVE_WEBKIT_RESOURCE_REQUEST
@@ -1362,6 +1382,7 @@ adblock_deactivate_cb (MidoriExtension* extension,
     katze_assign (blockcss, NULL);
     katze_assign (blockcssprivate, NULL);
     g_hash_table_destroy (pattern);
+    g_hash_table_destroy (urlcache);
 }
 
 static void