1
0
mirror of https://github.com/gorhill/uBlock.git synced 2024-10-06 09:37:12 +02:00
This commit is contained in:
gorhill 2015-04-07 19:10:03 -04:00
parent ad2bc8df74
commit 4aa61fcf89
7 changed files with 111 additions and 32 deletions

View File

@ -21,8 +21,6 @@
// For non background pages // For non background pages
/* global self */
/******************************************************************************/ /******************************************************************************/
(function(self) { (function(self) {
@ -136,6 +134,9 @@ vAPI.messaging = {
}, },
close: function() { close: function() {
delete vAPI.messaging.channels[this.channelName]; delete vAPI.messaging.channels[this.channelName];
if ( Object.keys(vAPI.messaging.channels).length === 0 ) {
vAPI.messaging.close();
}
} }
}; };

View File

@ -37,7 +37,8 @@ if ( document instanceof HTMLDocument === false ) {
return false; return false;
} }
if ( !vAPI ) { // This can happen
if ( !vAPI || !vAPI.messaging ) {
//console.debug('contentscript-end.js > vAPI not found'); //console.debug('contentscript-end.js > vAPI not found');
return; return;
} }
@ -57,10 +58,37 @@ if ( vAPI.contentscriptEndInjected ) {
vAPI.contentscriptEndInjected = true; vAPI.contentscriptEndInjected = true;
vAPI.styles = vAPI.styles || []; 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'); var messager = vAPI.messaging.channel('contentscript-end.js');
// https://github.com/gorhill/uMatrix/issues/144
shutdownJobs.add(function() {
messager.close();
});
/******************************************************************************/
/******************************************************************************/ /******************************************************************************/
// https://github.com/chrisaljoudi/uBlock/issues/789 // https://github.com/chrisaljoudi/uBlock/issues/789
@ -120,7 +148,14 @@ var uBlockCollapser = (function() {
this.collapse = false; this.collapse = false;
}; };
var onProcessed = function(requests) { var onProcessed = function(response) {
// https://github.com/gorhill/uMatrix/issues/144
if ( response.shutdown ) {
shutdownJobs.exec();
return;
}
var requests = response.result;
if ( requests === null || Array.isArray(requests) === false ) { if ( requests === null || Array.isArray(requests) === false ) {
return; return;
} }
@ -257,6 +292,8 @@ var uBlockCollapser = (function() {
return; return;
} }
//console.debug('Starts cosmetic filtering');
//var timer = window.performance || Date; //var timer = window.performance || Date;
//var tStart = timer.now(); //var tStart = timer.now();
@ -315,12 +352,13 @@ var uBlockCollapser = (function() {
firstRetrieveHandler = null; firstRetrieveHandler = null;
// These are sent only once // These are sent only once
if ( response ) { var result = response && response.result;
if ( response.highGenerics ) { if ( result ) {
highGenerics = response.highGenerics; if ( result.highGenerics ) {
highGenerics = result.highGenerics;
} }
if ( response.donthide ) { if ( result.donthide ) {
processLowGenerics(response.donthide, nullArray); processLowGenerics(result.donthide, nullArray);
} }
} }
@ -328,11 +366,19 @@ var uBlockCollapser = (function() {
}; };
var nextRetrieveHandler = function(response) { var nextRetrieveHandler = function(response) {
// https://github.com/gorhill/uMatrix/issues/144
if ( response && response.shutdown ) {
shutdownJobs.exec();
return;
}
//var tStart = timer.now(); //var tStart = timer.now();
//console.debug('µBlock> contextNodes = %o', contextNodes); //console.debug('µBlock> contextNodes = %o', contextNodes);
var result = response && response.result;
var hideSelectors = []; var hideSelectors = [];
if ( response && response.hide.length ) {
processLowGenerics(response.hide, hideSelectors); if ( result && result.hide.length ) {
processLowGenerics(result.hide, hideSelectors);
} }
if ( highGenerics ) { if ( highGenerics ) {
if ( highGenerics.hideLowCount ) { if ( highGenerics.hideLowCount ) {
@ -684,12 +730,22 @@ var uBlockCollapser = (function() {
} }
}; };
//console.debug('Starts cosmetic filtering\'s mutations observer');
// https://github.com/gorhill/httpswitchboard/issues/176 // https://github.com/gorhill/httpswitchboard/issues/176
var treeObserver = new MutationObserver(treeMutationObservedHandlerAsync); var treeObserver = new MutationObserver(treeMutationObservedHandlerAsync);
treeObserver.observe(document.body, { treeObserver.observe(document.body, {
childList: true, childList: true,
subtree: true subtree: true
}); });
// https://github.com/gorhill/uMatrix/issues/144
shutdownJobs.add(function() {
treeObserver.disconnect();
if ( addedNodeListsTimer !== null ) {
clearTimeout(addedNodeListsTimer);
}
});
})(); })();
/******************************************************************************/ /******************************************************************************/
@ -702,6 +758,7 @@ var uBlockCollapser = (function() {
// - Elements dynamically added to the page // - Elements dynamically added to the page
// - Elements which resource URL changes // - Elements which resource URL changes
(function() {
var onResourceFailed = function(ev) { var onResourceFailed = function(ev) {
//console.debug('onResourceFailed(%o)', ev); //console.debug('onResourceFailed(%o)', ev);
uBlockCollapser.add(ev.target); uBlockCollapser.add(ev.target);
@ -709,6 +766,12 @@ var onResourceFailed = function(ev) {
}; };
document.addEventListener('error', onResourceFailed, true); document.addEventListener('error', onResourceFailed, true);
// https://github.com/gorhill/uMatrix/issues/144
shutdownJobs.add(function() {
document.removeEventListener('error', onResourceFailed, true);
});
})();
/******************************************************************************/ /******************************************************************************/
/******************************************************************************/ /******************************************************************************/
@ -766,6 +829,11 @@ document.addEventListener('error', onResourceFailed, true);
}; };
window.addEventListener('contextmenu', onContextMenu, true); window.addEventListener('contextmenu', onContextMenu, true);
// https://github.com/gorhill/uMatrix/issues/144
shutdownJobs.add(function() {
document.removeEventListener('contextmenu', onContextMenu, true);
});
})(); })();
/******************************************************************************/ /******************************************************************************/

View File

@ -40,8 +40,8 @@ if ( document instanceof HTMLDocument === false ) {
return false; return false;
} }
// Because in case // This can happen
if ( !vAPI ) { if ( !vAPI || !vAPI.messaging ) {
//console.debug('contentscript-start.js > vAPI not found'); //console.debug('contentscript-start.js > vAPI not found');
return; return;
} }

View File

@ -35,9 +35,9 @@ if ( document instanceof HTMLDocument === false ) {
return; return;
} }
// Because in case // This can happen
if ( !vAPI ) { if ( !vAPI || !vAPI.messaging ) {
//console.debug('cosmetic-on.js > vAPI not found'); //console.debug('cosmetic-count.js > no vAPI');
return; return;
} }

View File

@ -35,9 +35,9 @@ if ( document instanceof HTMLDocument === false ) {
return; return;
} }
// Because in case // This can happen
if ( !vAPI ) { if ( !vAPI || !vAPI.messaging ) {
//console.debug('cosmetic-off.js > vAPI not found'); //console.debug('cosmetic-off.js > no vAPI');
return; return;
} }

View File

@ -35,9 +35,9 @@ if ( document instanceof HTMLDocument === false ) {
return; return;
} }
// Because in case // This can happen
if ( !vAPI ) { if ( !vAPI || !vAPI.messaging ) {
//console.debug('cosmetic-on.js > vAPI not found'); //console.debug('cosmetic-on.js > no vAPI');
return; return;
} }

View File

@ -516,8 +516,12 @@ var onMessage = function(details, sender, callback) {
switch ( details.what ) { switch ( details.what ) {
case 'retrieveGenericCosmeticSelectors': case 'retrieveGenericCosmeticSelectors':
if ( pageStore && pageStore.getGenericCosmeticFilteringSwitch() ) { response = {
response = µb.cosmeticFilteringEngine.retrieveGenericSelectors(details); shutdown: !pageStore || pageStore.getGenericCosmeticFilteringSwitch() === false,
result: null
};
if ( response.shutdown === false ) {
response.result = µb.cosmeticFilteringEngine.retrieveGenericSelectors(details);
} }
break; break;
@ -527,7 +531,13 @@ var onMessage = function(details, sender, callback) {
// Evaluate many requests // Evaluate many requests
case 'filterRequests': case 'filterRequests':
response = filterRequests(pageStore, details); response = {
shutdown: !pageStore || pageStore.getGenericCosmeticFilteringSwitch() === false,
result: null
};
if ( response.shutdown === false ) {
response.result = filterRequests(pageStore, details);
}
break; break;
default: default: