| Index: lib/child/preview.js |
| =================================================================== |
| copy from chrome/content/processScript.js |
| copy to lib/child/preview.js |
| --- a/chrome/content/processScript.js |
| +++ b/lib/child/preview.js |
| @@ -1,178 +1,35 @@ |
| /* |
| * 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; |
| - |
| -let console; |
| -try |
| -{ |
| - // Gecko 44+ |
| - ({console} = Cu.import("resource://gre/modules/Console.jsm", {})); |
| -} |
| -catch (e) |
| -{ |
| - ({console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {})); |
| -} |
| - |
| -let DebuggerServer; |
| -try |
| -{ |
| - // Firefox 44+ |
| - 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(); |
| +"use strict"; |
| -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() |
| -{ |
| - removeMessageListener("ElemHideHelper:Shutdown", onShutdown); |
| - removeMessageListener("ElemHideHelper:GetNodeInfo", onGetNodeInfo); |
| - removeMessageListener("ElemHideHelper:Preview", onTogglePreview); |
| +let messageManager = require("messageManager"); |
| +let {forgetNode, getNodeById} = require("./nodeInfo"); |
| - 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) |
| +messageManager.addMessageListener("ElemHideHelper:Preview", onTogglePreview); |
| +onShutdown.add(() => |
| { |
| - if (Cu.isCrossProcessWrapper(message.objects.element)) |
| - return; |
| - |
| - let nodeInfo = getNodeInfo(message.objects.element); |
| - nodeInfo.messageId = message.data; |
| - sendAsyncMessage("ElemHideHelper:GetNodeInfo:Response", nodeInfo); |
| -} |
| + messageManager.removeMessageListener("ElemHideHelper:Preview", onTogglePreview); |
| +}); |
| function onTogglePreview(message) |
| { |
| togglePreview(message.data.nodeID, message.data.stylesheetData); |
| if (message.data.forgetNode) |
| forgetNode(message.data.nodeID); |
| } |
| -function Actor(connection, tabActor) |
| -{ |
| -} |
| - |
| -Actor.prototype = { |
| - requestTypes: { |
| - nodeinfo: function(request, connection) |
| - { |
| - let nodeActor = connection.getActor(request.nodeActor); |
| - return getNodeInfo(nodeActor ? nodeActor.rawNode: null); |
| - } |
| - } |
| -}; |
| - |
| -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); |
| + let context = getNodeById(nodeID); |
| if (!context) |
| return; |
| if (stylesheetData) |
| { |
| if (!context.style || !context.style.parentNode) |
| { |
| context.style = context.document.createElementNS( |
| @@ -194,13 +51,8 @@ function togglePreview(nodeID, styleshee |
| { |
| // 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); |
| -} |