diff options
Diffstat (limited to 'src/js/dom-inspector.js')
-rw-r--r-- | src/js/dom-inspector.js | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/js/dom-inspector.js b/src/js/dom-inspector.js new file mode 100644 index 0000000..a0d334b --- /dev/null +++ b/src/js/dom-inspector.js @@ -0,0 +1,68 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +'use strict'; + +/******************************************************************************/ +/******************************************************************************/ + +const svgRoot = document.querySelector('svg'); +let inspectorContentPort; + +const shutdown = ( ) => { + inspectorContentPort.close(); + inspectorContentPort.onmessage = inspectorContentPort.onmessageerror = null; + inspectorContentPort = undefined; +}; + +const contentInspectorChannel = ev => { + const msg = ev.data || {}; + switch ( msg.what ) { + case 'quitInspector': { + shutdown(); + break; + } + case 'svgPaths': { + const paths = svgRoot.children; + paths[0].setAttribute('d', msg.paths[0]); + paths[1].setAttribute('d', msg.paths[1]); + paths[2].setAttribute('d', msg.paths[2]); + paths[3].setAttribute('d', msg.paths[3]); + break; + } + default: + break; + } +}; + +// Wait for the content script to establish communication +globalThis.addEventListener('message', ev => { + const msg = ev.data || {}; + if ( msg.what !== 'startInspector' ) { return; } + if ( Array.isArray(ev.ports) === false ) { return; } + if ( ev.ports.length === 0 ) { return; } + inspectorContentPort = ev.ports[0]; + inspectorContentPort.onmessage = contentInspectorChannel; + inspectorContentPort.onmessageerror = shutdown; + inspectorContentPort.postMessage({ what: 'startInspector' }); +}, { once: true }); + +/******************************************************************************/ |