aboutsummaryrefslogtreecommitdiffstats
path: root/src/js/start.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/js/start.js')
-rw-r--r--src/js/start.js177
1 files changed, 114 insertions, 63 deletions
diff --git a/src/js/start.js b/src/js/start.js
index 5aa84a5..45d20d9 100644
--- a/src/js/start.js
+++ b/src/js/start.js
@@ -1,7 +1,7 @@
/*******************************************************************************
µBlock - a Chromium browser extension to block requests.
- Copyright (C) 2014 Raymond Hill
+ Copyright (C) 2014-2015 Raymond Hill
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
@@ -19,97 +19,148 @@
Home: https://github.com/gorhill/uBlock
*/
-/* global µBlock */
+/* global vAPI, µBlock */
/******************************************************************************/
-// Automatic update of non-user assets
-// https://github.com/gorhill/httpswitchboard/issues/334
+// Load all: executed once.
-µBlock.updater = (function() {
+(function() {
-'use strict';
+/******************************************************************************/
+
+// 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));
+
+ // Important: remove barrier to remote fetching, this was useful only
+ // for launch time.
+ µb.assets.allowRemoteFetch = true;
+
+ vAPI.onLoadAllCompleted();
+};
/******************************************************************************/
-var µb = µBlock;
+// To bring older versions up to date
-var jobCallback = function() {
- // Simpler to fire restart here, and safe given how far this will happen
- // in the future.
- restart();
+var onVersionReady = function(bin) {
+ var µb = µBlock;
+ var lastVersion = bin.version || '0.0.0.0';
- // If auto-update is disabled, check again in a while.
- if ( µb.userSettings.autoUpdate !== true ) {
- return;
+ // 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();
}
- var onMetadataReady = function(metadata) {
- // Check PSL
- var mdEntry = metadata[µb.pslPath];
- if ( mdEntry.repoObsolete ) {
- // console.log('µBlock.updater> updating all updatable assets');
- µb.loadUpdatableAssets({ update: true });
- return;
- }
- // Check used filter lists
- var lists = µb.remoteBlacklists;
- for ( var path in lists ) {
- if ( lists.hasOwnProperty(path) === false ) {
- continue;
- }
- if ( lists[path].off ) {
- continue;
- }
- if ( metadata.hasOwnProperty(path) === false ) {
- continue;
- }
- mdEntry = metadata[path];
- if ( mdEntry.cacheObsolete || mdEntry.repoObsolete ) {
- // console.log('µBlock.updater> updating only filter lists');
- µb.loadUpdatableAssets({ update: true, psl: false });
- return;
- }
- }
-
- // console.log('µBlock.updater> all is up to date');
- };
-
- µb.assets.metadata(onMetadataReady);
+ vAPI.storage.set({ version: vAPI.app.version });
+ onAllReady();
};
-// https://www.youtube.com/watch?v=cIrGQD84F1g
-
/******************************************************************************/
-var restart = function(after) {
- if ( after === undefined ) {
- after = µb.nextUpdateAfter;
+// Filter lists
+// Whitelist
+
+var countdown = 2;
+var doCountdown = function() {
+ countdown -= 1;
+ if ( countdown !== 0 ) {
+ return;
}
+ // Last step: do whatever is necessary when version changes
+ vAPI.storage.get('version', onVersionReady);
+};
+
+/******************************************************************************/
- µb.asyncJobs.add(
- 'autoUpdateAssets',
- null,
- jobCallback,
- after,
- false
- );
+// Filters are in memory.
+// Filter engines need PSL to be ready.
+
+var onFiltersReady = function() {
+ doCountdown();
};
/******************************************************************************/
-return {
- restart: restart
+// 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();
};
/******************************************************************************/
-})();
+// Load order because dependencies:
+// User settings -> PSL -> [filter lists]
+
+var onPSLReady = function() {
+ µBlock.loadFilterLists(onFiltersReady);
+};
/******************************************************************************/
-// Load everything
+// 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;
-µBlock.load();
+ // 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');
+};
+
+µBlock.loadUserSettings(onUserSettingsReady);
+µBlock.loadWhitelist(onWhitelistReady);
+µBlock.loadLocalSettings();
+
+/******************************************************************************/
+
+})();
/******************************************************************************/