mirror of https://github.com/gorhill/uBlock.git
Make asset updater compatible with non-persistent background page
Related issue: https://github.com/uBlockOrigin/uBlock-issues/issues/2969 Additionally, modified default timing values for asset updater and selfie creation.
This commit is contained in:
parent
80b66c849a
commit
96704f2fda
|
@ -1325,6 +1325,8 @@ async function diffUpdater() {
|
||||||
terminate();
|
terminate();
|
||||||
};
|
};
|
||||||
const worker = new Worker('js/diff-updater.js');
|
const worker = new Worker('js/diff-updater.js');
|
||||||
|
}).catch(reason => {
|
||||||
|
ubolog(`Diff updater: ${reason}`);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,8 +49,8 @@ const hiddenSettingsDefault = {
|
||||||
allowGenericProceduralFilters: false,
|
allowGenericProceduralFilters: false,
|
||||||
assetFetchTimeout: 30,
|
assetFetchTimeout: 30,
|
||||||
autoCommentFilterTemplate: '{{date}} {{origin}}',
|
autoCommentFilterTemplate: '{{date}} {{origin}}',
|
||||||
autoUpdateAssetFetchPeriod: 15,
|
autoUpdateAssetFetchPeriod: 5,
|
||||||
autoUpdateDelayAfterLaunch: 105,
|
autoUpdateDelayAfterLaunch: 37,
|
||||||
autoUpdatePeriod: 1,
|
autoUpdatePeriod: 1,
|
||||||
benchmarkDatasetURL: 'unset',
|
benchmarkDatasetURL: 'unset',
|
||||||
blockingProfiles: '11111/#F00 11010/#C0F 11001/#00F 00001',
|
blockingProfiles: '11111/#F00 11010/#C0F 11001/#00F 00001',
|
||||||
|
@ -84,7 +84,7 @@ const hiddenSettingsDefault = {
|
||||||
popupPanelHeightMode: 0,
|
popupPanelHeightMode: 0,
|
||||||
requestJournalProcessPeriod: 1000,
|
requestJournalProcessPeriod: 1000,
|
||||||
requestStatsDisabled: false,
|
requestStatsDisabled: false,
|
||||||
selfieAfter: 2,
|
selfieDelayInSeconds: 53,
|
||||||
strictBlockingBypassDuration: 120,
|
strictBlockingBypassDuration: 120,
|
||||||
toolbarWarningTimeout: 60,
|
toolbarWarningTimeout: 60,
|
||||||
trustedListPrefixes: 'ublock-',
|
trustedListPrefixes: 'ublock-',
|
||||||
|
|
|
@ -476,15 +476,6 @@ webRequest.start();
|
||||||
// as possible ensure minimal memory usage baseline.
|
// as possible ensure minimal memory usage baseline.
|
||||||
lz4Codec.relinquish();
|
lz4Codec.relinquish();
|
||||||
|
|
||||||
// https://github.com/chrisaljoudi/uBlock/issues/184
|
|
||||||
// Check for updates not too far in the future.
|
|
||||||
io.addObserver(µb.assetObserver.bind(µb));
|
|
||||||
µb.scheduleAssetUpdater({
|
|
||||||
updateDelay: µb.userSettings.autoUpdate
|
|
||||||
? µb.hiddenSettings.autoUpdateDelayAfterLaunch * 1000
|
|
||||||
: 0
|
|
||||||
});
|
|
||||||
|
|
||||||
// Force an update of the context menu according to the currently
|
// Force an update of the context menu according to the currently
|
||||||
// active tab.
|
// active tab.
|
||||||
contextMenu.update();
|
contextMenu.update();
|
||||||
|
@ -509,11 +500,39 @@ ubolog(`All ready ${µb.supportStats.allReadyAfter} after launch`);
|
||||||
|
|
||||||
µb.isReadyResolve();
|
µb.isReadyResolve();
|
||||||
|
|
||||||
|
|
||||||
|
// https://github.com/chrisaljoudi/uBlock/issues/184
|
||||||
|
// Check for updates not too far in the future.
|
||||||
|
io.addObserver(µb.assetObserver.bind(µb));
|
||||||
|
if ( µb.userSettings.autoUpdate ) {
|
||||||
|
let needEmergencyUpdate = false;
|
||||||
|
const entries = await io.getUpdateAges({
|
||||||
|
filters: µb.selectedFilterLists,
|
||||||
|
internal: [ '*' ],
|
||||||
|
});
|
||||||
|
for ( const entry of entries ) {
|
||||||
|
if ( entry.ageNormalized < 2 ) { continue; }
|
||||||
|
needEmergencyUpdate = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
const updateDelay = needEmergencyUpdate
|
||||||
|
? 2000
|
||||||
|
: µb.hiddenSettings.autoUpdateDelayAfterLaunch * 1000;
|
||||||
|
µb.scheduleAssetUpdater({
|
||||||
|
auto: true,
|
||||||
|
updateDelay,
|
||||||
|
fetchDelay: needEmergencyUpdate ? 1000 : undefined
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Process alarm queue
|
// Process alarm queue
|
||||||
while ( µb.alarmQueue.length !== 0 ) {
|
while ( µb.alarmQueue.length !== 0 ) {
|
||||||
const what = µb.alarmQueue.shift();
|
const what = µb.alarmQueue.shift();
|
||||||
ubolog(`Processing alarm event from suspended state: '${what}'`);
|
ubolog(`Processing alarm event from suspended state: '${what}'`);
|
||||||
switch ( what ) {
|
switch ( what ) {
|
||||||
|
case 'assetUpdater':
|
||||||
|
µb.scheduleAssetUpdater({ auto: true, updateDelay: 2000, fetchDelay : 1000 });
|
||||||
|
break;
|
||||||
case 'createSelfie':
|
case 'createSelfie':
|
||||||
µb.selfieManager.create();
|
µb.selfieManager.create();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1376,9 +1376,9 @@ onBroadcast(msg => {
|
||||||
ubolog('Filtering engine selfie marked for invalidation');
|
ubolog('Filtering engine selfie marked for invalidation');
|
||||||
}
|
}
|
||||||
vAPI.alarms.create('createSelfie', {
|
vAPI.alarms.create('createSelfie', {
|
||||||
delayInMinutes: µb.hiddenSettings.selfieAfter + 0.5
|
delayInMinutes: (µb.hiddenSettings.selfieDelayInSeconds + 17) / 60,
|
||||||
});
|
});
|
||||||
createTimer.offon({ min: µb.hiddenSettings.selfieAfter });
|
createTimer.offon({ sec: µb.hiddenSettings.selfieDelayInSeconds });
|
||||||
};
|
};
|
||||||
|
|
||||||
const createTimer = vAPI.defer.create(create);
|
const createTimer = vAPI.defer.create(create);
|
||||||
|
@ -1543,7 +1543,6 @@ onBroadcast(msg => {
|
||||||
|
|
||||||
{
|
{
|
||||||
let next = 0;
|
let next = 0;
|
||||||
let lastEmergencyUpdate = 0;
|
|
||||||
|
|
||||||
const launchTimer = vAPI.defer.create(fetchDelay => {
|
const launchTimer = vAPI.defer.create(fetchDelay => {
|
||||||
next = 0;
|
next = 0;
|
||||||
|
@ -1552,6 +1551,7 @@ onBroadcast(msg => {
|
||||||
|
|
||||||
µb.scheduleAssetUpdater = async function(details = {}) {
|
µb.scheduleAssetUpdater = async function(details = {}) {
|
||||||
launchTimer.off();
|
launchTimer.off();
|
||||||
|
vAPI.alarms.clear('assetUpdater');
|
||||||
|
|
||||||
if ( details.now ) {
|
if ( details.now ) {
|
||||||
next = 0;
|
next = 0;
|
||||||
|
@ -1570,40 +1570,23 @@ onBroadcast(msg => {
|
||||||
this.hiddenSettings.autoUpdatePeriod * 3600000;
|
this.hiddenSettings.autoUpdatePeriod * 3600000;
|
||||||
|
|
||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
let needEmergencyUpdate = false;
|
|
||||||
|
|
||||||
// Respect cooldown period before launching an emergency update.
|
|
||||||
const timeSinceLastEmergencyUpdate = (now - lastEmergencyUpdate) / 3600000;
|
|
||||||
if ( timeSinceLastEmergencyUpdate > 1 ) {
|
|
||||||
const entries = await io.getUpdateAges({
|
|
||||||
filters: µb.selectedFilterLists,
|
|
||||||
internal: [ '*' ],
|
|
||||||
});
|
|
||||||
for ( const entry of entries ) {
|
|
||||||
if ( entry.ageNormalized < 2 ) { continue; }
|
|
||||||
needEmergencyUpdate = true;
|
|
||||||
lastEmergencyUpdate = now;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Use the new schedule if and only if it is earlier than the previous
|
// Use the new schedule if and only if it is earlier than the previous
|
||||||
// one.
|
// one.
|
||||||
if ( next !== 0 ) {
|
if ( next !== 0 ) {
|
||||||
updateDelay = Math.min(updateDelay, Math.max(next - now, 0));
|
updateDelay = Math.min(updateDelay, Math.max(next - now, 1));
|
||||||
}
|
|
||||||
|
|
||||||
if ( needEmergencyUpdate ) {
|
|
||||||
updateDelay = Math.min(updateDelay, 15000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
next = now + updateDelay;
|
next = now + updateDelay;
|
||||||
|
|
||||||
const fetchDelay = needEmergencyUpdate
|
const fetchDelay = details.fetchDelay ||
|
||||||
? 2000
|
this.hiddenSettings.autoUpdateAssetFetchPeriod * 1000 ||
|
||||||
: this.hiddenSettings.autoUpdateAssetFetchPeriod * 1000 || 60000;
|
60000;
|
||||||
|
|
||||||
launchTimer.on(updateDelay, fetchDelay);
|
launchTimer.on(updateDelay, fetchDelay);
|
||||||
|
vAPI.alarms.create('assetUpdater', {
|
||||||
|
delayInMinutes: Math.ceil(updateDelay / 60000) + 0.25
|
||||||
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue