uBlock/src/js/start.js

198 lines
6.0 KiB
JavaScript
Raw Normal View History

2014-06-23 16:42:43 -06:00
/*******************************************************************************
µBlock - a Chromium browser extension to block requests.
2015-02-13 10:10:10 -07:00
Copyright (C) 2014-2015 Raymond Hill
2014-06-23 16:42:43 -06:00
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see {http://www.gnu.org/licenses/}.
Home: https://github.com/gorhill/uBlock
*/
2015-02-13 10:10:10 -07:00
/* global vAPI, µBlock */
2014-06-23 16:42:43 -06:00
/******************************************************************************/
2015-02-13 10:10:10 -07:00
// Load all: executed once.
2014-06-23 16:42:43 -06:00
2015-02-13 10:10:10 -07:00
(function() {
2014-08-20 17:39:49 -06:00
2015-02-23 16:31:29 -07:00
quickProfiler.start('start.js');
2015-02-13 10:10:10 -07:00
/******************************************************************************/
// Final initialization steps after all needed assets are in memory.
// - Initialize internal state with maybe already existing tabs.
// - Schedule next update operation.
var onAllReady = function() {
var µb = µBlock;
// https://github.com/gorhill/uBlock/issues/184
// Check for updates not too far in the future.
µb.assetUpdater.onStart.addEventListener(µb.updateStartHandler.bind(µb));
µb.assetUpdater.onCompleted.addEventListener(µb.updateCompleteHandler.bind(µb));
2015-02-23 16:31:29 -07:00
µb.assetUpdater.onAssetUpdated.addEventListener(µb.assetUpdatedHandler.bind(µb));
µb.assets.onAssetCacheRemoved.addEventListener(µb.assetCacheRemovedHandler.bind(µb));
2015-02-13 10:10:10 -07:00
// Important: remove barrier to remote fetching, this was useful only
// for launch time.
µb.assets.allowRemoteFetch = true;
2015-02-23 16:31:29 -07:00
quickProfiler.stop(0);
2015-02-13 10:10:10 -07:00
vAPI.onLoadAllCompleted();
};
2014-12-20 13:28:16 -07:00
2014-08-20 17:39:49 -06:00
/******************************************************************************/
2015-02-13 10:10:10 -07:00
// To bring older versions up to date
2014-08-20 17:39:49 -06:00
2015-02-13 10:10:10 -07:00
var onVersionReady = function(bin) {
var µb = µBlock;
var lastVersion = bin.version || '0.0.0.0';
2014-09-08 15:46:58 -06:00
2015-02-13 10:10:10 -07:00
// Whitelist some key scopes by default
if ( lastVersion.localeCompare('0.8.6.0') < 0 ) {
µb.netWhitelist = µb.whitelistFromString(
µb.stringFromWhitelist(µb.netWhitelist) +
'\n' +
µb.netWhitelistDefault
);
µb.saveWhitelist();
2014-08-20 17:39:49 -06:00
}
2014-09-08 15:46:58 -06:00
2015-02-13 10:10:10 -07:00
vAPI.storage.set({ version: vAPI.app.version });
onAllReady();
2014-08-20 17:39:49 -06:00
};
2014-06-23 16:42:43 -06:00
/******************************************************************************/
2014-08-20 17:39:49 -06:00
2015-02-13 10:10:10 -07:00
// Filter lists
// Whitelist
var countdown = 2;
var doCountdown = function() {
countdown -= 1;
if ( countdown !== 0 ) {
return;
2014-09-08 15:46:58 -06:00
}
2015-02-13 10:10:10 -07:00
// Last step: do whatever is necessary when version changes
vAPI.storage.get('version', onVersionReady);
};
/******************************************************************************/
2014-09-08 15:46:58 -06:00
2015-02-13 10:10:10 -07:00
// Filters are in memory.
// Filter engines need PSL to be ready.
var onFiltersReady = function() {
doCountdown();
2014-08-20 17:39:49 -06:00
};
/******************************************************************************/
2015-02-13 10:10:10 -07:00
// https://github.com/gorhill/uBlock/issues/226
// Whitelist in memory.
// Whitelist parser needs PSL to be ready.
// gorhill 2014-12-15: not anymore
var onWhitelistReady = function() {
doCountdown();
2014-09-08 15:46:58 -06:00
};
/******************************************************************************/
2014-08-20 17:39:49 -06:00
2015-02-13 10:10:10 -07:00
// Load order because dependencies:
// User settings -> PSL -> [filter lists]
var onPSLReady = function() {
µBlock.loadFilterLists(onFiltersReady);
};
2014-08-20 17:39:49 -06:00
/******************************************************************************/
2014-08-21 08:56:36 -06:00
2015-02-13 10:10:10 -07:00
// If no selfie available, take the long way, i.e. load and parse
// raw data.
var onSelfieReady = function(success) {
if ( success === true ) {
onFiltersReady();
return;
}
µBlock.loadPublicSuffixList(onPSLReady);
};
/******************************************************************************/
// User settings are in memory
var onUserSettingsReady = function(userSettings) {
var µb = µBlock;
2014-08-21 08:56:36 -06:00
2015-02-13 10:10:10 -07:00
// https://github.com/gorhill/uBlock/issues/426
// Important: block remote fetching for when loading assets at launch
// time.
µb.assets.allowRemoteFetch = false;
µb.assets.autoUpdate = userSettings.autoUpdate;
µb.fromSelfie(onSelfieReady);
// https://github.com/gorhill/uBlock/issues/540
// Disabling local mirroring for the time being
userSettings.experimentalEnabled = false;
µb.mirrors.toggle(false /* userSettings.experimentalEnabled */);
µb.contextMenu.toggle(userSettings.contextMenuEnabled);
µb.permanentFirewall.fromString(userSettings.dynamicFilteringString);
µb.sessionFirewall.assign(µb.permanentFirewall);
// Remove obsolete setting
delete userSettings.logRequests;
µb.XAL.keyvalRemoveOne('logRequests');
};
2015-02-23 16:31:29 -07:00
/******************************************************************************/
// Housekeeping, as per system setting changes
var onSystemSettingsReady = function(system) {
var µb = µBlock;
var mustSaveSystemSettings = false;
if ( system.compiledMagic !== µb.systemSettings.compiledMagic ) {
µb.assets.purge(/^cache:\/\/compiled-/);
mustSaveSystemSettings = true;
}
if ( system.selfieMagic !== µb.systemSettings.selfieMagic ) {
µb.destroySelfie();
mustSaveSystemSettings = true;
}
if ( mustSaveSystemSettings ) {
µb.saveSystemSettings();
}
µb.loadUserSettings(onUserSettingsReady);
µb.loadWhitelist(onWhitelistReady);
µb.loadLocalSettings();
};
/******************************************************************************/
µBlock.loadSystemSettings(onSystemSettingsReady);
2015-02-13 10:10:10 -07:00
/******************************************************************************/
})();
2014-08-21 08:56:36 -06:00
/******************************************************************************/