Index: lib/child/actor.js |
=================================================================== |
rename from chrome/content/processScript.js |
rename to lib/child/actor.js |
--- a/chrome/content/processScript.js |
+++ b/lib/child/actor.js |
@@ -1,16 +1,15 @@ |
/* |
* This Source Code is subject to the terms of the Mozilla Public License |
* version 2.0 (the "License"). You can obtain a copy of the License at |
* http://mozilla.org/MPL/2.0/. |
*/ |
-const Ci = Components.interfaces; |
-const Cu = Components.utils; |
+"use strict"; |
let console; |
saroyanm
2016/11/22 14:58:31
Why do we load console ? Are we outputing/planing
Wladimir Palant
2016/11/24 14:16:29
We are not, this is a debugging helper. In fact, I
saroyanm
2016/11/24 17:46:10
Acknowledged.
|
try |
{ |
// Gecko 44+ |
({console} = Cu.import("resource://gre/modules/Console.jsm", {})); |
} |
catch (e) |
@@ -25,182 +24,45 @@ try |
let {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); |
({DebuggerServer} = require("devtools/server/main")); |
} |
catch (e) |
{ |
({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(); |
Wladimir Palant
2016/11/17 08:42:58
I copied the same file (chrome/content/processScri
|
+let {getNodeInfo} = require("./nodeInfo"); |
let name = "elemhidehelper"; |
let actor = { |
constructorFun: Actor, |
constructorName: name, |
name: name |
}; |
-addMessageListener("ElemHideHelper:Shutdown", onShutdown); |
-addMessageListener("ElemHideHelper:GetNodeInfo", onGetNodeInfo); |
-addMessageListener("ElemHideHelper:Preview", onTogglePreview); |
- |
DebuggerServer.addTabActor(actor, name); |
- |
-function onShutdown() |
+onShutdown.add(() => |
{ |
- removeMessageListener("ElemHideHelper:Shutdown", onShutdown); |
- removeMessageListener("ElemHideHelper:GetNodeInfo", onGetNodeInfo); |
- removeMessageListener("ElemHideHelper:Preview", onTogglePreview); |
- |
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); |
} |
-} |
- |
-function onGetNodeInfo(message) |
-{ |
- if (Cu.isCrossProcessWrapper(message.objects.element)) |
- return; |
- |
- let nodeInfo = getNodeInfo(message.objects.element); |
- nodeInfo.messageId = message.data; |
- sendAsyncMessage("ElemHideHelper:GetNodeInfo:Response", nodeInfo); |
-} |
- |
-function onTogglePreview(message) |
-{ |
- togglePreview(message.data.nodeID, message.data.stylesheetData); |
- if (message.data.forgetNode) |
- forgetNode(message.data.nodeID); |
-} |
+}); |
function Actor(connection, tabActor) |
saroyanm
2016/11/22 14:58:31
Detail: Why do we need this empty constructor ?
At
saroyanm
2016/11/22 14:58:31
Detail: Maybe it's personal preference, but what a
Wladimir Palant
2016/11/24 14:16:29
Well, DebuggerServer.addTabActor() requires a cons
saroyanm
2016/11/24 17:46:10
Acknowledged.
|
{ |
} |
Actor.prototype = { |
requestTypes: { |
nodeinfo: function(request, connection) |
{ |
let nodeActor = connection.getActor(request.nodeActor); |
return getNodeInfo(nodeActor ? nodeActor.rawNode: null); |
saroyanm
2016/11/22 14:58:31
Detail: missing space after first expression.
Wladimir Palant
2016/11/24 14:16:29
Done.
|
} |
} |
}; |
- |
-function getNodeInfo(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 || node.nodeType != Ci.nsIDOMNode.ELEMENT_NODE) |
- return null; |
- |
- let result = {}; |
- result.tagName = {value: node.tagName, checked: false}; |
- |
- if (typeof parentNode != "undefined") |
- result.parentNode = parentNode; |
- else |
- result.parentNode = getNodeData(node.parentElement); |
- |
- let prevSibling = node.previousElementSibling; |
- result.prevSibling = getNodeData(prevSibling, result.parentNode); |
- |
- if (result.parentNode && !prevSibling) |
- result.firstChild = {checked: false}; |
- |
- let nextSibling = node.nextElementSibling; |
- if (result.parentNode && !nextSibling) |
- result.lastChild = {checked: false}; |
- |
- result.attributes = []; |
- for (let attribute of node.attributes) |
- { |
- let data = { |
- name: attribute.name, |
- value: attribute.value, |
- selected: attribute.value, |
- checked: false |
- }; |
- if (data.name == "id" || data.name == "class") |
- result.attributes.unshift(data); |
- else |
- result.attributes.push(data); |
- } |
- |
- if (result.attributes.length >= 2 && result.attributes[1].name == "id") |
- { |
- // Make sure ID attribute comes first |
- let tmp = result.attributes[1]; |
- result.attributes[1] = result.attributes[0]; |
- result.attributes[0] = tmp; |
- } |
- |
- 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); |
-} |