summaryrefslogtreecommitdiff
path: root/data/extensions/spyblock@gnu.org/lib/child/contextMenu.js
diff options
context:
space:
mode:
Diffstat (limited to 'data/extensions/spyblock@gnu.org/lib/child/contextMenu.js')
-rw-r--r--data/extensions/spyblock@gnu.org/lib/child/contextMenu.js137
1 files changed, 0 insertions, 137 deletions
diff --git a/data/extensions/spyblock@gnu.org/lib/child/contextMenu.js b/data/extensions/spyblock@gnu.org/lib/child/contextMenu.js
deleted file mode 100644
index 297ef3e..0000000
--- a/data/extensions/spyblock@gnu.org/lib/child/contextMenu.js
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * 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 {XPCOMUtils} = Cu.import("resource://gre/modules/XPCOMUtils.jsm", {});
-
-let {Utils} = require("utils");
-let {RequestNotifier} = require("child/requestNotifier");
-let {storeNodes} = require("child/contentPolicy");
-
-/**
- * Determines the context menu entries to be shown for a contextmenu event.
- * @param {Event} event
- * @return {Array}
- */
-function getContextInfo(event)
-{
- let items = [];
- let target = event.target;
- if (target.localName == "menupopup" && target.triggerNode)
- {
- // SeaMonkey gives us the context menu's popupshowing event
- target = target.triggerNode;
- }
- if (target instanceof Ci.nsIDOMHTMLMapElement || target instanceof Ci.nsIDOMHTMLAreaElement)
- {
- // HTML image maps will usually receive events when the mouse pointer is
- // over a different element, get the real event target.
- let rect = target.getClientRects()[0];
- target = target.ownerDocument.elementFromPoint(Math.max(rect.left, 0), Math.max(rect.top, 0));
- }
-
- if (!target)
- return items;
-
- let addMenuItem = function([node, nodeData])
- {
- let nodeID = null;
- if (node && node.nodeType == Ci.nsIDOMNode.ELEMENT_NODE)
- nodeID = storeNodes([node]);
- items.push([nodeID, nodeData]);
- }.bind(this);
-
- // Look up data that we have for the node
- let data = RequestNotifier.getDataForNode(target);
- let hadImage = false;
- if (data && !data[1].filter)
- {
- addMenuItem(data);
- hadImage = (data[1].type == "IMAGE");
- }
-
- // Look for frame data
- let wnd = Utils.getWindow(target);
- if (wnd.frameElement)
- {
- let data = RequestNotifier.getDataForNode(wnd.frameElement, true);
- if (data && !data[1].filter)
- addMenuItem(data);
- }
-
- // Look for a background image
- if (!hadImage)
- {
- let extractImageURL = function(computedStyle, property)
- {
- let value = computedStyle.getPropertyCSSValue(property);
- // CSSValueList
- if ("length" in value && value.length >= 1)
- value = value[0];
- // CSSValuePrimitiveType
- if ("primitiveType" in value && value.primitiveType == value.CSS_URI)
- return Utils.unwrapURL(value.getStringValue()).spec;
-
- return null;
- };
-
- let node = target;
- while (node)
- {
- if (node.nodeType == Ci.nsIDOMNode.ELEMENT_NODE)
- {
- let style = wnd.getComputedStyle(node, "");
- let bgImage = extractImageURL(style, "background-image") || extractImageURL(style, "list-style-image");
- if (bgImage)
- {
- let data = RequestNotifier.getDataForNode(wnd.document, true, "IMAGE", bgImage);
- if (data && !data[1].filter)
- {
- addMenuItem(data);
- break;
- }
- }
- }
-
- node = node.parentNode;
- }
- }
-
- return items;
-};
-
-let ContextMenuObserver =
-{
- observe: function(subject, topic, data)
- {
- if (subject.wrappedJSObject)
- subject = subject.wrappedJSObject;
-
- if (subject.addonInfo)
- subject.addonInfo.adblockplus = getContextInfo(subject.event);
- },
- QueryInterface: XPCOMUtils.generateQI([Ci.nsISupportsWeakReference, Ci.nsIObserver])
-};
-
-Services.obs.addObserver(ContextMenuObserver, "content-contextmenu", true);
-Services.obs.addObserver(ContextMenuObserver, "AdblockPlus:content-contextmenu", true);
-onShutdown.add(() => {
- Services.obs.removeObserver(ContextMenuObserver, "content-contextmenu");
- Services.obs.removeObserver(ContextMenuObserver, "AdblockPlus:content-contextmenu");
-});