From 31bea1d08bd892f99426046895d3c393491f17d8 Mon Sep 17 00:00:00 2001 From: gorhill Date: Tue, 7 Apr 2015 19:34:22 -0400 Subject: [PATCH] code review --- platform/chromium/vapi-client.js | 32 +++++++++++++++++++++++++++++ src/js/contentscript-end.js | 35 +++++++------------------------- src/js/contentscript-start.js | 2 +- src/js/cosmetic-count.js | 2 +- src/js/cosmetic-off.js | 2 +- src/js/cosmetic-on.js | 2 +- 6 files changed, 43 insertions(+), 32 deletions(-) diff --git a/platform/chromium/vapi-client.js b/platform/chromium/vapi-client.js index 86b9797de..5e0d84253 100644 --- a/platform/chromium/vapi-client.js +++ b/platform/chromium/vapi-client.js @@ -46,6 +46,29 @@ vAPI.chrome = true; /******************************************************************************/ +vAPI.shutdown = (function() { + var jobs = []; + + var add = function(job) { + jobs.push(job); + }; + + var exec = function() { + //console.debug('Shutting down...'); + var job; + while ( job = jobs.pop() ) { + job(); + } + }; + + return { + add: add, + exec: exec + }; +})(); + +/******************************************************************************/ + var messagingConnector = function(response) { if ( !response ) { return; @@ -144,6 +167,15 @@ vAPI.messaging = { } }; +// No need to have vAPI client linger around after shutdown if +// we are not a top window (because element picker can still +// be injected in top window). +if ( window !== window.top ) { + vAPI.shutdown.add(function() { + vAPI = null; + }); +} + /******************************************************************************/ })(this); diff --git a/src/js/contentscript-end.js b/src/js/contentscript-end.js index 9dc9340c1..2c394605a 100644 --- a/src/js/contentscript-end.js +++ b/src/js/contentscript-end.js @@ -38,7 +38,7 @@ if ( document instanceof HTMLDocument === false ) { } // This can happen -if ( !vAPI || !vAPI.messaging ) { +if ( !vAPI ) { //console.debug('contentscript-end.js > vAPI not found'); return; } @@ -58,33 +58,12 @@ if ( vAPI.contentscriptEndInjected ) { vAPI.contentscriptEndInjected = true; vAPI.styles = vAPI.styles || []; -/******************************************************************************/ -/******************************************************************************/ - -var shutdownJobs = (function() { - var jobs = []; - - return { - add: function(job) { - jobs.push(job); - }, - exec: function() { - //console.debug('Shutting down...'); - var job; - while ( job = jobs.pop() ) { - job(); - } - } - }; -})(); - -/******************************************************************************/ /******************************************************************************/ var messager = vAPI.messaging.channel('contentscript-end.js'); // https://github.com/gorhill/uMatrix/issues/144 -shutdownJobs.add(function() { +vAPI.shutdown.add(function() { messager.close(); }); @@ -151,7 +130,7 @@ var uBlockCollapser = (function() { var onProcessed = function(response) { // https://github.com/gorhill/uMatrix/issues/144 if ( response.shutdown ) { - shutdownJobs.exec(); + vAPI.shutdown.exec(); return; } @@ -368,7 +347,7 @@ var uBlockCollapser = (function() { var nextRetrieveHandler = function(response) { // https://github.com/gorhill/uMatrix/issues/144 if ( response && response.shutdown ) { - shutdownJobs.exec(); + vAPI.shutdown.exec(); return; } @@ -740,7 +719,7 @@ var uBlockCollapser = (function() { }); // https://github.com/gorhill/uMatrix/issues/144 - shutdownJobs.add(function() { + vAPI.shutdown.add(function() { treeObserver.disconnect(); if ( addedNodeListsTimer !== null ) { clearTimeout(addedNodeListsTimer); @@ -767,7 +746,7 @@ var uBlockCollapser = (function() { document.addEventListener('error', onResourceFailed, true); // https://github.com/gorhill/uMatrix/issues/144 - shutdownJobs.add(function() { + vAPI.shutdown.add(function() { document.removeEventListener('error', onResourceFailed, true); }); })(); @@ -831,7 +810,7 @@ var uBlockCollapser = (function() { window.addEventListener('contextmenu', onContextMenu, true); // https://github.com/gorhill/uMatrix/issues/144 - shutdownJobs.add(function() { + vAPI.shutdown.add(function() { document.removeEventListener('contextmenu', onContextMenu, true); }); })(); diff --git a/src/js/contentscript-start.js b/src/js/contentscript-start.js index 1a40187ff..a7f7cbbfa 100644 --- a/src/js/contentscript-start.js +++ b/src/js/contentscript-start.js @@ -41,7 +41,7 @@ if ( document instanceof HTMLDocument === false ) { } // This can happen -if ( !vAPI || !vAPI.messaging ) { +if ( !vAPI ) { //console.debug('contentscript-start.js > vAPI not found'); return; } diff --git a/src/js/cosmetic-count.js b/src/js/cosmetic-count.js index 080404a03..3dcee09ce 100644 --- a/src/js/cosmetic-count.js +++ b/src/js/cosmetic-count.js @@ -36,7 +36,7 @@ if ( document instanceof HTMLDocument === false ) { } // This can happen -if ( !vAPI || !vAPI.messaging ) { +if ( !vAPI ) { //console.debug('cosmetic-count.js > no vAPI'); return; } diff --git a/src/js/cosmetic-off.js b/src/js/cosmetic-off.js index 14a19ab9c..e5d37b498 100644 --- a/src/js/cosmetic-off.js +++ b/src/js/cosmetic-off.js @@ -36,7 +36,7 @@ if ( document instanceof HTMLDocument === false ) { } // This can happen -if ( !vAPI || !vAPI.messaging ) { +if ( !vAPI ) { //console.debug('cosmetic-off.js > no vAPI'); return; } diff --git a/src/js/cosmetic-on.js b/src/js/cosmetic-on.js index b1a2ad9dd..90ae71d4a 100644 --- a/src/js/cosmetic-on.js +++ b/src/js/cosmetic-on.js @@ -36,7 +36,7 @@ if ( document instanceof HTMLDocument === false ) { } // This can happen -if ( !vAPI || !vAPI.messaging ) { +if ( !vAPI ) { //console.debug('cosmetic-on.js > no vAPI'); return; }