2014-06-24 00:42:43 +02:00
|
|
|
/*******************************************************************************
|
|
|
|
|
|
|
|
µBlock - a Chromium browser extension to block requests.
|
2015-02-13 18:10:10 +01:00
|
|
|
Copyright (C) 2014-2015 Raymond Hill
|
2014-06-24 00:42:43 +02: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 18:10:10 +01:00
|
|
|
/* global vAPI, µBlock */
|
2014-06-24 00:42:43 +02:00
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
2015-02-13 18:10:10 +01:00
|
|
|
// Load all: executed once.
|
2014-06-24 00:42:43 +02:00
|
|
|
|
2015-02-13 18:10:10 +01:00
|
|
|
(function() {
|
2014-08-21 01:39:49 +02:00
|
|
|
|
2015-02-24 00:31:29 +01:00
|
|
|
quickProfiler.start('start.js');
|
|
|
|
|
2015-02-13 18:10:10 +01: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-24 00:31:29 +01:00
|
|
|
µb.assetUpdater.onAssetUpdated.addEventListener(µb.assetUpdatedHandler.bind(µb));
|
|
|
|
µb.assets.onAssetCacheRemoved.addEventListener(µb.assetCacheRemovedHandler.bind(µb));
|
2015-02-13 18:10:10 +01:00
|
|
|
|
|
|
|
// Important: remove barrier to remote fetching, this was useful only
|
|
|
|
// for launch time.
|
|
|
|
µb.assets.allowRemoteFetch = true;
|
|
|
|
|
2015-02-24 00:31:29 +01:00
|
|
|
quickProfiler.stop(0);
|
|
|
|
|
2015-02-13 18:10:10 +01:00
|
|
|
vAPI.onLoadAllCompleted();
|
|
|
|
};
|
2014-12-20 21:28:16 +01:00
|
|
|
|
2014-08-21 01:39:49 +02:00
|
|
|
/******************************************************************************/
|
|
|
|
|
2015-02-13 18:10:10 +01:00
|
|
|
// To bring older versions up to date
|
2014-08-21 01:39:49 +02:00
|
|
|
|
2015-02-13 18:10:10 +01:00
|
|
|
var onVersionReady = function(bin) {
|
|
|
|
var µb = µBlock;
|
|
|
|
var lastVersion = bin.version || '0.0.0.0';
|
2014-09-08 23:46:58 +02:00
|
|
|
|
2015-02-13 18:10:10 +01: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-21 01:39:49 +02:00
|
|
|
}
|
2014-09-08 23:46:58 +02:00
|
|
|
|
2015-02-13 18:10:10 +01:00
|
|
|
vAPI.storage.set({ version: vAPI.app.version });
|
|
|
|
onAllReady();
|
2014-08-21 01:39:49 +02:00
|
|
|
};
|
2014-06-24 00:42:43 +02:00
|
|
|
|
|
|
|
/******************************************************************************/
|
2014-08-21 01:39:49 +02:00
|
|
|
|
2015-02-13 18:10:10 +01:00
|
|
|
// Filter lists
|
|
|
|
// Whitelist
|
|
|
|
|
|
|
|
var countdown = 2;
|
|
|
|
var doCountdown = function() {
|
|
|
|
countdown -= 1;
|
|
|
|
if ( countdown !== 0 ) {
|
|
|
|
return;
|
2014-09-08 23:46:58 +02:00
|
|
|
}
|
2015-02-13 18:10:10 +01:00
|
|
|
// Last step: do whatever is necessary when version changes
|
|
|
|
vAPI.storage.get('version', onVersionReady);
|
|
|
|
};
|
|
|
|
|
|
|
|
/******************************************************************************/
|
2014-09-08 23:46:58 +02:00
|
|
|
|
2015-02-13 18:10:10 +01:00
|
|
|
// Filters are in memory.
|
|
|
|
// Filter engines need PSL to be ready.
|
|
|
|
|
|
|
|
var onFiltersReady = function() {
|
|
|
|
doCountdown();
|
2014-08-21 01:39:49 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
2015-02-13 18:10:10 +01: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 23:46:58 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
/******************************************************************************/
|
2014-08-21 01:39:49 +02:00
|
|
|
|
2015-02-13 18:10:10 +01:00
|
|
|
// Load order because dependencies:
|
|
|
|
// User settings -> PSL -> [filter lists]
|
|
|
|
|
|
|
|
var onPSLReady = function() {
|
|
|
|
µBlock.loadFilterLists(onFiltersReady);
|
|
|
|
};
|
2014-08-21 01:39:49 +02:00
|
|
|
|
|
|
|
/******************************************************************************/
|
2014-08-21 16:56:36 +02:00
|
|
|
|
2015-02-13 18:10:10 +01: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 16:56:36 +02:00
|
|
|
|
2015-02-13 18:10:10 +01: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-24 00:31:29 +01: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 18:10:10 +01:00
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
|
|
})();
|
2014-08-21 16:56:36 +02:00
|
|
|
|
|
|
|
/******************************************************************************/
|