 Issue 29362609:
  Issue 2879 - Restructure existing process script, split it up into multiple modules  (Closed) 
  Base URL: https://hg.adblockplus.org/elemhidehelper
    
  
    Issue 29362609:
  Issue 2879 - Restructure existing process script, split it up into multiple modules  (Closed) 
  Base URL: https://hg.adblockplus.org/elemhidehelper| Left: | ||
| Right: | 
| OLD | NEW | 
|---|---|
| 1 /* | 1 /* | 
| 2 * This Source Code is subject to the terms of the Mozilla Public License | 2 * This Source Code is subject to the terms of the Mozilla Public License | 
| 3 * version 2.0 (the "License"). You can obtain a copy of the License at | 3 * version 2.0 (the "License"). You can obtain a copy of the License at | 
| 4 * http://mozilla.org/MPL/2.0/. | 4 * http://mozilla.org/MPL/2.0/. | 
| 5 */ | 5 */ | 
| 6 | 6 | 
| 7 const Ci = Components.interfaces; | 7 "use strict"; | 
| 8 const Cu = Components.utils; | |
| 9 | |
| 10 let console; | |
| 11 try | |
| 12 { | |
| 13 // Gecko 44+ | |
| 14 ({console} = Cu.import("resource://gre/modules/Console.jsm", {})); | |
| 15 } | |
| 16 catch (e) | |
| 17 { | |
| 18 ({console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {})); | |
| 19 } | |
| 20 | |
| 21 let DebuggerServer; | |
| 22 try | |
| 23 { | |
| 24 // Firefox 44+ | |
| 25 let {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); | |
| 26 ({DebuggerServer} = require("devtools/server/main")); | |
| 27 } | |
| 28 catch (e) | |
| 29 { | |
| 30 ({DebuggerServer} = Cu.import("resource://gre/modules/devtools/dbg-server.jsm" , {})); | |
| 31 } | |
| 32 | 8 | 
| 33 let {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); | 9 let {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); | 
| 34 | 10 | 
| 11 let messageManager = require("messageManager"); | |
| 12 | |
| 35 let processID = Services.appinfo.processID; | 13 let processID = Services.appinfo.processID; | 
| 36 let maxNodeID = 0; | 14 let maxNodeID = 0; | 
| 37 let nodes = new Map(); | 15 let nodes = new Map(); | 
| 38 | 16 | 
| 39 let name = "elemhidehelper"; | 17 messageManager.addMessageListener("ElemHideHelper:GetNodeInfo", onGetNodeInfo); | 
| 40 let actor = { | 18 onShutdown.add(() => | 
| 41 constructorFun: Actor, | |
| 42 constructorName: name, | |
| 43 name: name | |
| 44 }; | |
| 45 | |
| 46 addMessageListener("ElemHideHelper:Shutdown", onShutdown); | |
| 47 addMessageListener("ElemHideHelper:GetNodeInfo", onGetNodeInfo); | |
| 48 addMessageListener("ElemHideHelper:Preview", onTogglePreview); | |
| 49 | |
| 50 DebuggerServer.addTabActor(actor, name); | |
| 51 | |
| 52 function onShutdown() | |
| 53 { | 19 { | 
| 54 removeMessageListener("ElemHideHelper:Shutdown", onShutdown); | 20 messageManager.removeMessageListener("ElemHideHelper:GetNodeInfo", onGetNodeIn fo); | 
| 
saroyanm
2016/11/24 17:46:11
Nit: Exceeding 80 chars.
 
Wladimir Palant
2016/12/01 09:40:49
Done.
 | |
| 55 removeMessageListener("ElemHideHelper:GetNodeInfo", onGetNodeInfo); | 21 }); | 
| 56 removeMessageListener("ElemHideHelper:Preview", onTogglePreview); | |
| 57 | |
| 58 try | |
| 59 { | |
| 60 DebuggerServer.removeTabActor(actor); | |
| 61 } | |
| 62 catch (e) | |
| 63 { | |
| 64 // The call above will throw in the content process despite succeeding, | |
| 65 // see https://bugzilla.mozilla.org/show_bug.cgi?id=1189780. | |
| 66 Cu.reportError(e); | |
| 67 } | |
| 68 } | |
| 69 | 22 | 
| 70 function onGetNodeInfo(message) | 23 function onGetNodeInfo(message) | 
| 71 { | 24 { | 
| 72 if (Cu.isCrossProcessWrapper(message.objects.element)) | 25 if (Cu.isCrossProcessWrapper(message.objects.element)) | 
| 73 return; | 26 return; | 
| 74 | 27 | 
| 75 let nodeInfo = getNodeInfo(message.objects.element); | 28 let nodeInfo = getNodeInfo(message.objects.element); | 
| 76 nodeInfo.messageId = message.data; | 29 nodeInfo.messageId = message.data; | 
| 77 sendAsyncMessage("ElemHideHelper:GetNodeInfo:Response", nodeInfo); | 30 messageManager.sendAsyncMessage("ElemHideHelper:GetNodeInfo:Response", nodeInf o); | 
| 
saroyanm
2016/11/24 17:46:11
Nit: Exceeding 80 chars.
 
Wladimir Palant
2016/12/01 09:40:49
Done.
 | |
| 78 } | 31 } | 
| 79 | 32 | 
| 80 function onTogglePreview(message) | |
| 81 { | |
| 82 togglePreview(message.data.nodeID, message.data.stylesheetData); | |
| 83 if (message.data.forgetNode) | |
| 84 forgetNode(message.data.nodeID); | |
| 85 } | |
| 86 | |
| 87 function Actor(connection, tabActor) | |
| 88 { | |
| 89 } | |
| 90 | |
| 91 Actor.prototype = { | |
| 92 requestTypes: { | |
| 93 nodeinfo: function(request, connection) | |
| 94 { | |
| 95 let nodeActor = connection.getActor(request.nodeActor); | |
| 96 return getNodeInfo(nodeActor ? nodeActor.rawNode: null); | |
| 97 } | |
| 98 } | |
| 99 }; | |
| 100 | |
| 101 function getNodeInfo(node) | 33 function getNodeInfo(node) | 
| 102 { | 34 { | 
| 103 let nodeData = getNodeData(node); | 35 let nodeData = getNodeData(node); | 
| 104 if (nodeData) | 36 if (nodeData) | 
| 105 { | 37 { | 
| 106 let nodeID = processID + "-" + (++maxNodeID); | 38 let nodeID = processID + "-" + (++maxNodeID); | 
| 107 nodes.set(nodeID, {document: node.ownerDocument, style: null}); | 39 nodes.set(nodeID, {document: node.ownerDocument, style: null}); | 
| 108 return { | 40 return { | 
| 109 host: node.ownerDocument.defaultView.location.hostname, | 41 host: node.ownerDocument.defaultView.location.hostname, | 
| 110 nodeData: nodeData, | 42 nodeData: nodeData, | 
| 111 nodeID: nodeID | 43 nodeID: nodeID | 
| 112 }; | 44 }; | 
| 113 } | 45 } | 
| 114 | 46 | 
| 115 return {}; | 47 return {}; | 
| 116 } | 48 } | 
| 49 exports.getNodeInfo = getNodeInfo; | |
| 50 | |
| 51 function getNodeById(nodeId) | |
| 52 { | |
| 53 return nodes.get(nodeId); | |
| 54 } | |
| 55 exports.getNodeById = getNodeById; | |
| 117 | 56 | 
| 118 function getNodeData(node, parentNode) | 57 function getNodeData(node, parentNode) | 
| 119 { | 58 { | 
| 120 if (!node || node.nodeType != Ci.nsIDOMNode.ELEMENT_NODE) | 59 if (!node || node.nodeType != Ci.nsIDOMNode.ELEMENT_NODE) | 
| 121 return null; | 60 return null; | 
| 122 | 61 | 
| 123 let result = {}; | 62 let result = {}; | 
| 124 result.tagName = {value: node.tagName, checked: false}; | 63 result.tagName = {value: node.tagName, checked: false}; | 
| 125 | 64 | 
| 126 if (typeof parentNode != "undefined") | 65 if (typeof parentNode != "undefined") | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 158 // Make sure ID attribute comes first | 97 // Make sure ID attribute comes first | 
| 159 let tmp = result.attributes[1]; | 98 let tmp = result.attributes[1]; | 
| 160 result.attributes[1] = result.attributes[0]; | 99 result.attributes[1] = result.attributes[0]; | 
| 161 result.attributes[0] = tmp; | 100 result.attributes[0] = tmp; | 
| 162 } | 101 } | 
| 163 | 102 | 
| 164 result.customCSS = {selected: "", checked: false}; | 103 result.customCSS = {selected: "", checked: false}; | 
| 165 return result; | 104 return result; | 
| 166 } | 105 } | 
| 167 | 106 | 
| 168 function togglePreview(nodeID, stylesheetData) | |
| 169 { | |
| 170 let context = nodes.get(nodeID); | |
| 171 if (!context) | |
| 172 return; | |
| 173 | |
| 174 if (stylesheetData) | |
| 175 { | |
| 176 if (!context.style || !context.style.parentNode) | |
| 177 { | |
| 178 context.style = context.document.createElementNS( | |
| 179 "http://www.w3.org/1999/xhtml", "style"); | |
| 180 context.style.setAttribute("type", "text/css"); | |
| 181 context.document.documentElement.appendChild(context.style); | |
| 182 } | |
| 183 context.style.textContent = stylesheetData; | |
| 184 } | |
| 185 else | |
| 186 { | |
| 187 try | |
| 188 { | |
| 189 if (context.style && context.style.parentNode) | |
| 190 context.style.parentNode.removeChild(context.style); | |
| 191 context.style = null; | |
| 192 } | |
| 193 catch (e) | |
| 194 { | |
| 195 // If the window was closed (reloaded) we end up with a dead object | |
| 196 // reference (https://bugzilla.mozilla.org/show_bug.cgi?id=695480). Just | |
| 197 // forget this node then. | |
| 198 forgetNode(nodeID); | |
| 199 } | |
| 200 } | |
| 201 } | |
| 202 | |
| 203 function forgetNode(nodeID) | 107 function forgetNode(nodeID) | 
| 204 { | 108 { | 
| 205 nodes.delete(nodeID); | 109 nodes.delete(nodeID); | 
| 206 } | 110 } | 
| 111 exports.forgetNode = forgetNode; | |
| OLD | NEW |