summaryrefslogtreecommitdiff
path: root/data/extensions/spyblock@gnu.org/lib/elemHideFF.js
diff options
context:
space:
mode:
Diffstat (limited to 'data/extensions/spyblock@gnu.org/lib/elemHideFF.js')
-rw-r--r--data/extensions/spyblock@gnu.org/lib/elemHideFF.js106
1 files changed, 106 insertions, 0 deletions
diff --git a/data/extensions/spyblock@gnu.org/lib/elemHideFF.js b/data/extensions/spyblock@gnu.org/lib/elemHideFF.js
new file mode 100644
index 0000000..fe42e11
--- /dev/null
+++ b/data/extensions/spyblock@gnu.org/lib/elemHideFF.js
@@ -0,0 +1,106 @@
+/*
+ * This file is part of Adblock Plus <https://adblockplus.org/>,
+ * Copyright (C) 2006-2017 eyeo GmbH
+ *
+ * Adblock Plus is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3 as
+ * published by the Free Software Foundation.
+ *
+ * Adblock Plus is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+"use strict";
+
+let {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
+
+let {port} = require("messaging");
+let {ElemHide} = require("elemHide");
+let {FilterNotifier} = require("filterNotifier");
+let {FilterStorage} = require("filterStorage");
+let {Prefs} = require("prefs");
+let {Policy} = require("contentPolicy");
+let {Utils} = require("utils");
+
+let isDirty = false;
+FilterNotifier.on("elemhideupdate", () =>
+{
+ // Notify content process asynchronously, only one message per update batch.
+ if (!isDirty)
+ {
+ isDirty = true;
+ Utils.runAsync(() => {
+ isDirty = false;
+ port.emit("elemhideupdate")
+ });
+ }
+});
+
+port.on("getUnconditionalSelectors", () =>
+{
+ return [
+ ElemHide.getUnconditionalSelectors(),
+ ElemHide.getUnconditionalFilterKeys()
+ ];
+});
+
+port.on("getSelectorsForDomain", ([domain, specificOnly]) =>
+{
+ let type = specificOnly ? ElemHide.SPECIFIC_ONLY : ElemHide.NO_UNCONDITIONAL;
+ return ElemHide.getSelectorsForDomain(domain, type, true);
+});
+
+port.on("elemhideEnabled", ({frames, isPrivate}) =>
+{
+ if (!Prefs.enabled || !Policy.isBlockableScheme(frames[0].location))
+ return {enabled: false};
+
+ let hit = Policy.isFrameWhitelisted(frames, true);
+ if (hit)
+ {
+ let [frameIndex, contentType, docDomain, thirdParty, location, filter] = hit;
+ if (!isPrivate)
+ FilterStorage.increaseHitCount(filter);
+ return {
+ enabled: contentType == "GENERICHIDE",
+ contentType, docDomain, thirdParty, location,
+ filter: filter.text, filterType: filter.type
+ };
+ }
+
+ return {enabled: true};
+});
+
+port.on("registerElemHideHit", ({key, frames, isPrivate}) =>
+{
+ let filter = ElemHide.getFilterByKey(key);
+ if (!filter)
+ return null;
+
+ if (!isPrivate)
+ FilterStorage.increaseHitCount(filter);
+
+ let docDomain;
+ try
+ {
+ docDomain = Utils.unwrapURL(frames[0].location).host;
+ }
+ catch(e)
+ {
+ docDomain = null;
+ }
+
+ return {
+ contentType: "ELEMHIDE",
+ docDomain,
+ thirdParty: false,
+ location: filter.text.replace(/^.*?#/, '#'),
+ filter: filter.text,
+ filterType: filter.type
+ };
+});