[epiphany] adblock: Selectively disable/enable filters



commit 2dac99ce08075f93fd718aa702b2bb8fe51128cb
Author: Adrian Perez de Castro <aperez igalia com>
Date:   Wed Aug 7 01:43:30 2019 +0300

    adblock: Selectively disable/enable filters
    
    Instead of disabling all filters and then re-enabling the ones which
    are active, use the webkit_user_content_manager_remove_filter_by_id()
    function to only disable those which have been dropped from the list
    of content filters.
    
    This reduces the length of the brief window where no content filters
    might be enabled due to mass-disabling them (that is: the old behaviour).

 embed/ephy-embed-shell.c     |  4 ++++
 embed/ephy-filters-manager.c | 21 +++++++++++++++------
 2 files changed, 19 insertions(+), 6 deletions(-)
---
diff --git a/embed/ephy-embed-shell.c b/embed/ephy-embed-shell.c
index 7a0335126..811796553 100644
--- a/embed/ephy-embed-shell.c
+++ b/embed/ephy-embed-shell.c
@@ -1281,6 +1281,10 @@ ephy_embed_shell_startup (GApplication *application)
                            G_CALLBACK (webkit_user_content_manager_add_filter),
                            priv->user_content,
                            G_CONNECT_SWAPPED);
+  g_signal_connect_object (priv->filters_manager, "filter-removed",
+                           G_CALLBACK (webkit_user_content_manager_remove_filter_by_id),
+                           priv->user_content,
+                           G_CONNECT_SWAPPED);
 
   g_signal_connect_object (priv->web_context, "download-started",
                            G_CALLBACK (download_started_cb), shell, 0);
diff --git a/embed/ephy-filters-manager.c b/embed/ephy-filters-manager.c
index 7d471d916..7d7362056 100644
--- a/embed/ephy-filters-manager.c
+++ b/embed/ephy-filters-manager.c
@@ -50,6 +50,7 @@ G_DEFINE_TYPE (EphyFiltersManager, ephy_filters_manager, G_TYPE_OBJECT)
 
 enum {
   FILTER_READY,
+  FILTER_REMOVED,
   FILTERS_DISABLED,
   LAST_SIGNAL,
 };
@@ -778,14 +779,17 @@ filter_removed_cb (WebKitUserContentFilterStore *store,
 }
 
 static void
-remove_unused_filter (const char *identifier,
-                      FilterInfo *filter)
+remove_unused_filter (const char         *identifier,
+                      FilterInfo         *filter,
+                      EphyFiltersManager *manager)
 {
   g_autoptr (GFile) sidecar_file = filter_info_get_sidecar_file (filter);
 
   g_assert (strcmp (identifier, filter_info_get_identifier (filter)) == 0);
   g_assert (!g_hash_table_contains (filter->manager->filters, identifier));
 
+  LOG ("Emitting EphyFiltersManager::filter-removed for %s.", identifier);
+  g_signal_emit (manager, s_signals[FILTER_REMOVED], 0, identifier);
   g_file_delete_async (sidecar_file,
                        G_PRIORITY_LOW,
                        filter->manager->cancellable,
@@ -841,9 +845,6 @@ update_adblock_filter_files_cb (GSettings          *settings,
     return;
   }
 
-  LOG ("Emitting EphyFiltersManager::filters-disabled.");
-  g_signal_emit (manager, s_signals[FILTERS_DISABLED], 0);
-
   /* Only once at a time please! Newest set of filters wins. */
   g_cancellable_cancel (manager->cancellable);
   g_object_unref (manager->cancellable);
@@ -899,7 +900,7 @@ update_adblock_filter_files_cb (GSettings          *settings,
   /* Remove the filters which are no longer in the configured set. */
   g_hash_table_foreach (old_filters,
                         (GHFunc)remove_unused_filter,
-                        NULL);
+                        manager);
 }
 
 static void
@@ -1026,6 +1027,14 @@ ephy_filters_manager_class_init (EphyFiltersManagerClass *klass)
                   G_TYPE_NONE, 1,
                   WEBKIT_TYPE_USER_CONTENT_FILTER);
 
+  s_signals[FILTER_REMOVED] =
+    g_signal_new ("filter-removed",
+                  G_OBJECT_CLASS_TYPE (klass),
+                  G_SIGNAL_RUN_FIRST,
+                  0, NULL, NULL, NULL,
+                  G_TYPE_NONE, 1,
+                  G_TYPE_STRING);
+
   s_signals[FILTERS_DISABLED] =
     g_signal_new ("filters-disabled",
                   G_OBJECT_CLASS_TYPE (klass),


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]