mirror of
https://github.com/gorhill/uBlock.git
synced 2024-10-06 09:37:12 +02:00
This commit is contained in:
parent
ad2bc8df74
commit
4aa61fcf89
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
@ -253,10 +288,12 @@ var uBlockCollapser = (function() {
|
|||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
if ( vAPI.skipCosmeticFiltering ) {
|
if ( vAPI.skipCosmeticFiltering ) {
|
||||||
// console.debug('Abort cosmetic filtering');
|
//console.debug('Abort cosmetic filtering');
|
||||||
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,12 +758,19 @@ 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
|
||||||
|
|
||||||
var onResourceFailed = function(ev) {
|
(function() {
|
||||||
//console.debug('onResourceFailed(%o)', ev);
|
var onResourceFailed = function(ev) {
|
||||||
uBlockCollapser.add(ev.target);
|
//console.debug('onResourceFailed(%o)', ev);
|
||||||
uBlockCollapser.process();
|
uBlockCollapser.add(ev.target);
|
||||||
};
|
uBlockCollapser.process();
|
||||||
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);
|
||||||
|
});
|
||||||
})();
|
})();
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user