[epiphany] adblock: Selectively disable/enable filters
- From: Michael Catanzaro <mcatanzaro src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany] adblock: Selectively disable/enable filters
- Date: Fri, 13 Sep 2019 23:31:07 +0000 (UTC)
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]