Add advanced setting for extension reload on update

Related issue:
- https://github.com/uBlockOrigin/uBlock-issues/issues/717

Related feedback:
- https://github.com/uBlockOrigin/uBlock-issues/issues/717#issuecomment-530275655

New advanced setting: `extensionUpdateForceReload`

Default value: `false`

If set to `true`, the extension will unconditionally reload
when an update is available; otherwise the extension will
reload only when being explicitly disabled then enabled, or
when the browser is restarted.
This commit is contained in:
Raymond Hill 2019-09-11 08:00:55 -04:00
parent 0c4eabb743
commit 93f438f55e
No known key found for this signature in database
GPG Key ID: 25E1490B761470C2
3 changed files with 31 additions and 33 deletions

View File

@ -104,14 +104,6 @@ vAPI.app = {
}, },
}; };
// https://github.com/uBlockOrigin/uBlock-issues/issues/717
// Prevent the extensions from being restarted mid-session.
browser.runtime.onUpdateAvailable.addListener(details => {
const toInt = vAPI.app.intFromVersion;
if ( toInt(details.version) > toInt(vAPI.app.version) ) { return; }
browser.runtime.reload();
});
/******************************************************************************/ /******************************************************************************/
/******************************************************************************/ /******************************************************************************/

View File

@ -50,6 +50,7 @@ const µBlock = (function() { // jshint ignore:line
debugScriptlets: false, debugScriptlets: false,
debugScriptletInjector: false, debugScriptletInjector: false,
disableWebAssembly: false, disableWebAssembly: false,
extensionUpdateForceReload: false,
ignoreRedirectFilters: false, ignoreRedirectFilters: false,
ignoreScriptInjectFilters: false, ignoreScriptInjectFilters: false,
loggerPopupType: 'popup', loggerPopupType: 'popup',

View File

@ -25,15 +25,15 @@
// Load all: executed once. // Load all: executed once.
µBlock.restart = (function() { {
// >>>>> start of local scope
/******************************************************************************/
const µb = µBlock; const µb = µBlock;
/******************************************************************************/ /******************************************************************************/
vAPI.app.onShutdown = function() { vAPI.app.onShutdown = function() {
const µb = µBlock;
µb.staticFilteringReverseLookup.shutdown(); µb.staticFilteringReverseLookup.shutdown();
µb.assets.updateStop(); µb.assets.updateStop();
µb.staticNetFilteringEngine.reset(); µb.staticNetFilteringEngine.reset();
@ -52,7 +52,7 @@ vAPI.app.onShutdown = function() {
// - Initialize internal state with maybe already existing tabs. // - Initialize internal state with maybe already existing tabs.
// - Schedule next update operation. // - Schedule next update operation.
var onAllReady = function() { const onAllReady = function() {
µb.webRequest.start(); µb.webRequest.start();
// Ensure that the resources allocated for decompression purpose (likely // Ensure that the resources allocated for decompression purpose (likely
@ -86,6 +86,18 @@ var onAllReady = function() {
µb.contextMenu.update(null); µb.contextMenu.update(null);
µb.firstInstall = false; µb.firstInstall = false;
// https://github.com/uBlockOrigin/uBlock-issues/issues/717
// Prevent the extensions from being restarted mid-session.
browser.runtime.onUpdateAvailable.addListener(details => {
const toInt = vAPI.app.intFromVersion;
if (
µBlock.hiddenSettings.extensionUpdateForceReload === true ||
toInt(details.version) <= toInt(vAPI.app.version)
) {
vAPI.app.restart();
}
});
log.info(`All ready ${Date.now()-vAPI.T0} ms after launch`); log.info(`All ready ${Date.now()-vAPI.T0} ms after launch`);
}; };
@ -96,8 +108,8 @@ var onAllReady = function() {
// in already opened web pages, to remove whatever nuisance could make it to // in already opened web pages, to remove whatever nuisance could make it to
// the web pages before uBlock was ready. // the web pages before uBlock was ready.
let initializeTabs = function() { const initializeTabs = function() {
let handleScriptResponse = function(tabId, results) { const handleScriptResponse = function(tabId, results) {
if ( if (
Array.isArray(results) === false || Array.isArray(results) === false ||
results.length === 0 || results.length === 0 ||
@ -106,10 +118,10 @@ let initializeTabs = function() {
return; return;
} }
// Inject dclarative content scripts programmatically. // Inject dclarative content scripts programmatically.
let manifest = chrome.runtime.getManifest(); const manifest = chrome.runtime.getManifest();
if ( manifest instanceof Object === false ) { return; } if ( manifest instanceof Object === false ) { return; }
for ( let contentScript of manifest.content_scripts ) { for ( const contentScript of manifest.content_scripts ) {
for ( let file of contentScript.js ) { for ( const file of contentScript.js ) {
vAPI.tabs.injectScript(tabId, { vAPI.tabs.injectScript(tabId, {
file: file, file: file,
allFrames: contentScript.all_frames, allFrames: contentScript.all_frames,
@ -118,8 +130,8 @@ let initializeTabs = function() {
} }
} }
}; };
let bindToTabs = function(tabs) { const bindToTabs = function(tabs) {
for ( let tab of tabs ) { for ( const tab of tabs ) {
µb.tabContextManager.commit(tab.id, tab.url); µb.tabContextManager.commit(tab.id, tab.url);
µb.bindTabToPageStats(tab.id); µb.bindTabToPageStats(tab.id);
// https://github.com/chrisaljoudi/uBlock/issues/129 // https://github.com/chrisaljoudi/uBlock/issues/129
@ -241,7 +253,7 @@ const onUserSettingsReady = function(fetched) {
// Housekeeping, as per system setting changes // Housekeeping, as per system setting changes
const onSystemSettingsReady = function(fetched) { const onSystemSettingsReady = function(fetched) {
var mustSaveSystemSettings = false; let mustSaveSystemSettings = false;
if ( fetched.compiledMagic !== µb.systemSettings.compiledMagic ) { if ( fetched.compiledMagic !== µb.systemSettings.compiledMagic ) {
µb.assets.remove(/^compiled\//); µb.assets.remove(/^compiled\//);
mustSaveSystemSettings = true; mustSaveSystemSettings = true;
@ -367,17 +379,10 @@ const onAdminSettingsRestored = function() {
/******************************************************************************/ /******************************************************************************/
return function() { // https://github.com/gorhill/uBlock/issues/531
// https://github.com/gorhill/uBlock/issues/531 µb.restoreAdminSettings().then(( ) => {
µb.restoreAdminSettings().then(( ) => { onAdminSettingsRestored();
onAdminSettingsRestored(); });
});
};
/******************************************************************************/ // <<<<< end of local scope
}
})();
/******************************************************************************/
µBlock.restart();