[Pkg-mozext-commits] [adblock-plus-element-hiding-helper] 10/10: Issue 2816 - Restore Preview functionality
David Prévot
taffit at moszumanska.debian.org
Fri Jan 22 01:02:31 UTC 2016
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to tag pre-hg-git-0.8
in repository adblock-plus-element-hiding-helper.
commit b8387483c733bfcf355cb3f69166caea255151b6
Author: Wladimir Palant <trev at adblockplus.org>
Date: Thu Jul 30 14:10:20 2015 +0200
Issue 2816 - Restore Preview functionality
---
chrome/content/actor.jsm | 91 ++++++++++++++++++++++++++++++++++++-------
chrome/content/composer.js | 40 ++++++-------------
chrome/content/composer.xul | 6 +--
chrome/content/frameScript.js | 15 +++++--
lib/aardvark.js | 9 +++--
lib/inspectorObserver.js | 3 +-
6 files changed, 110 insertions(+), 54 deletions(-)
diff --git a/chrome/content/actor.jsm b/chrome/content/actor.jsm
index b3de0e7..f5b1e6f 100644
--- a/chrome/content/actor.jsm
+++ b/chrome/content/actor.jsm
@@ -4,13 +4,20 @@
* http://mozilla.org/MPL/2.0/.
*/
-let EXPORTED_SYMBOLS = ["shutdown", "getNodeInfo"];
+let EXPORTED_SYMBOLS = ["shutdown", "getNodeInfo", "togglePreview",
+ "forgetNode"];
const Ci = Components.interfaces;
const Cu = Components.utils;
let {console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {});
let {DebuggerServer} = Cu.import("resource://gre/modules/devtools/dbg-server.jsm", {});
+let {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
+
+let processID = Services.appinfo.processID;
+let maxNodeID = 0;
+let nodes = new Map();
+
let name = "elemhidehelper";
let actor = {
constructorFun: Actor,
@@ -26,8 +33,19 @@ let shutdown = (function()
return function()
{
if (!executed)
- DebuggerServer.removeTabActor(actor);
- executed = true;
+ {
+ executed = true;
+ try
+ {
+ DebuggerServer.removeTabActor(actor);
+ }
+ catch (e)
+ {
+ // The call above will throw in the content process despite succeeding,
+ // see https://bugzilla.mozilla.org/show_bug.cgi?id=1189780.
+ Cu.reportError(e);
+ }
+ }
}
})();
@@ -40,28 +58,31 @@ Actor.prototype = {
nodeinfo: function(request, connection)
{
let nodeActor = connection.getActor(request.nodeActor);
- if (!nodeActor || !nodeActor.rawNode ||
- nodeActor.rawNode.nodeType != Ci.nsIDOMNode.ELEMENT_NODE)
- {
- return {};
- }
-
- return getNodeInfo(nodeActor.rawNode);
+ return getNodeInfo(nodeActor ? nodeActor.rawNode: null);
}
}
};
function getNodeInfo(node)
{
- return {
- host: node.ownerDocument.defaultView.location.hostname,
- nodeData: getNodeData(node)
- };
+ let nodeData = getNodeData(node);
+ if (nodeData)
+ {
+ let nodeID = processID + "-" + (++maxNodeID);
+ nodes.set(nodeID, {document: node.ownerDocument, style: null});
+ return {
+ host: node.ownerDocument.defaultView.location.hostname,
+ nodeData: nodeData,
+ nodeID: nodeID
+ };
+ }
+
+ return {};
}
function getNodeData(node, parentNode)
{
- if (!node)
+ if (!node || node.nodeType != Ci.nsIDOMNode.ELEMENT_NODE)
return null;
let result = {};
@@ -108,3 +129,43 @@ function getNodeData(node, parentNode)
result.customCSS = {selected: "", checked: false};
return result;
}
+
+function togglePreview(nodeID, stylesheetData)
+{
+ let context = nodes.get(nodeID);
+ if (!context)
+ return;
+
+ if (stylesheetData)
+ {
+ if (!context.style || !context.style.parentNode)
+ {
+ context.style = context.document.createElementNS(
+ "http://www.w3.org/1999/xhtml", "style");
+ context.style.setAttribute("type", "text/css");
+ context.document.documentElement.appendChild(context.style);
+ }
+ context.style.textContent = stylesheetData;
+ }
+ else
+ {
+ try
+ {
+ if (context.style && context.style.parentNode)
+ context.style.parentNode.removeChild(context.style);
+ context.style = null;
+ }
+ catch (e)
+ {
+ // If the window was closed (reloaded) we end up with a dead object
+ // reference (https://bugzilla.mozilla.org/show_bug.cgi?id=695480). Just
+ // forget this node then.
+ forgetNode(nodeID);
+ }
+ }
+}
+
+function forgetNode(nodeID)
+{
+ nodes.delete(nodeID);
+}
diff --git a/chrome/content/composer.js b/chrome/content/composer.js
index 1b8c5e9..a04e8a7 100644
--- a/chrome/content/composer.js
+++ b/chrome/content/composer.js
@@ -8,12 +8,12 @@ let {Prefs} = require("prefs");
let domainData;
let nodeData;
+let nodeID;
let selectedNode = null;
let advancedMode = false;
let treeView = null;
let stylesheetData;
let previewStyle = null;
-let doc;
let abpURL = Cc["@adblockplus.org/abp/public;1"].getService(Ci.nsIURI);
Cu.import(abpURL.spec);
@@ -84,8 +84,8 @@ function TreeView_getCellProperties(row, col) {
function init()
{
- nodeData = window.arguments[0];
- let host = window.arguments[1];
+ let host;
+ ({host, nodeData, nodeID} = window.arguments[0]);
// Check whether element hiding group is disabled
let subscription = AdblockPlus.getSubscription("~eh~");
@@ -311,8 +311,8 @@ function updateExpression()
if (tree.view && tree.view.selection)
tree.treeBoxObject.invalidateRow(tree.view.selection.currentIndex);
- if (previewStyle)
- previewStyle.textContent = stylesheetData;
+ if (document.getElementById("preview").checked)
+ togglePreview(true);
}
function escapeChar(dummy, match)
@@ -491,29 +491,13 @@ function fillAttributes(nodeData)
}
}
-function togglePreview(preview) {
- if (preview) {
- if (!previewStyle || !previewStyle.parentNode) {
- previewStyle = doc.createElementNS("http://www.w3.org/1999/xhtml", "style");
- previewStyle.setAttribute("type", "text/css");
- doc.documentElement.appendChild(previewStyle);
- }
- previewStyle.textContent = stylesheetData;
- }
- else {
- try
- {
- if (previewStyle && previewStyle.parentNode)
- previewStyle.parentNode.removeChild(previewStyle);
- }
- catch (e)
- {
- // if the window was closed (reloaded) we end up with dead object reference
- // https://bugzilla.mozilla.org/show_bug.cgi?id=695480
- // just ignore this case
- }
- previewStyle = null;
- }
+function togglePreview(preview, forgetNode)
+{
+ Services.mm.broadcastAsyncMessage("ElemHideHelper:Preview", {
+ nodeID: nodeID,
+ stylesheetData: preview ? stylesheetData : null,
+ forgetNode: !!forgetNode
+ });
}
function changeDomain(node) {
diff --git a/chrome/content/composer.xul b/chrome/content/composer.xul
index 4e57dbc..548571f 100644
--- a/chrome/content/composer.xul
+++ b/chrome/content/composer.xul
@@ -12,10 +12,10 @@
<dialog id="ehh-composer"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="&dialog.title;"
- onload="init()"
+ onload="init();"
ondialogaccept="addExpression();"
ondialogdisclosure="setAdvancedMode(!advancedMode);"
- onunload="togglePreview(false);"
+ onunload="togglePreview(false, true);"
buttons="accept,cancel,disclosure"
width="600px"
height="400px"
@@ -28,7 +28,7 @@
windowtype="ehh:composer">
<script type="application/x-javascript;version=1.7" src="common.js"/>
<script type="application/x-javascript;version=1.7" src="composer.js"/>
-
+
<description id="groupDisabledWarning" hidden="true">&groupDisabled.warning;</description>
<vbox id="expressionBox">
diff --git a/chrome/content/frameScript.js b/chrome/content/frameScript.js
index 7763553..8522e70 100644
--- a/chrome/content/frameScript.js
+++ b/chrome/content/frameScript.js
@@ -10,10 +10,11 @@
let rand = Components.stack.filename.replace(/.*\?/, "");
let module = "chrome://elemhidehelper/content/actor.jsm?" + rand;
- let {shutdown, getNodeInfo} = Cu.import(module, {});
+ let {shutdown, getNodeInfo, togglePreview, forgetNode} = Cu.import(module, {});
addMessageListener("ElemHideHelper:Shutdown", onShutdown);
addMessageListener("ElemHideHelper:GetNodeInfo", onGetNodeInfo);
+ addMessageListener("ElemHideHelper:Preview", onTogglePreview);
function onShutdown()
{
@@ -21,11 +22,19 @@
Cu.unload(module);
removeMessageListener("ElemHideHelper:Shutdown", onShutdown);
removeMessageListener("ElemHideHelper:GetNodeInfo", onGetNodeInfo);
+ removeMessageListener("ElemHideHelper:Preview", onTogglePreview);
}
function onGetNodeInfo(message)
{
- let info = getNodeInfo(message.objects.element);
- message.objects.callback(info.nodeData, info.host);
+ let nodeInfo = getNodeInfo(message.objects.element);
+ message.objects.callback(JSON.stringify(nodeInfo));
+ }
+
+ function onTogglePreview(message)
+ {
+ togglePreview(message.data.nodeID, message.data.stylesheetData);
+ if (message.data.forgetNode)
+ forgetNode(message.data.nodeID);
}
})();
diff --git a/lib/aardvark.js b/lib/aardvark.js
index 2ed4add..f94d7d3 100644
--- a/lib/aardvark.js
+++ b/lib/aardvark.js
@@ -577,11 +577,14 @@ let Aardvark = exports.Aardvark =
null,
{
element: elem,
- callback: (nodeData, host) =>
+ callback: (response) =>
{
+ response = JSON.parse(response);
+ if (!response.nodeData)
+ return;
+
this.window.openDialog("chrome://elemhidehelper/content/composer.xul",
- "_blank", "chrome,centerscreen,resizable,dialog=no", nodeData,
- host);
+ "_blank", "chrome,centerscreen,resizable,dialog=no", response);
this.quit();
}
}
diff --git a/lib/inspectorObserver.js b/lib/inspectorObserver.js
index c07d659..4dd53a9 100644
--- a/lib/inspectorObserver.js
+++ b/lib/inspectorObserver.js
@@ -65,8 +65,7 @@ let InspectorObserver =
return;
panelWindow.openDialog("chrome://elemhidehelper/content/composer.xul",
- "_blank", "chrome,centerscreen,resizable,dialog=no",
- response.nodeData, response.host);
+ "_blank", "chrome,centerscreen,resizable,dialog=no", response);
});
}
}, false);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/adblock-plus-element-hiding-helper.git
More information about the Pkg-mozext-commits
mailing list