Firefox platform: minor code review; defer non-critical tasks to later at launch

This commit is contained in:
gorhill 2017-05-30 09:09:24 -04:00
parent 4df7028bbc
commit a72769f8ba
No known key found for this signature in database
GPG Key ID: 25E1490B761470C2
1 changed files with 22 additions and 14 deletions

View File

@ -53,9 +53,9 @@ var deferUntil = function(testFn, mainFn, details) {
details = {}; details = {};
} }
var now = 0; var now = 0,
var next = details.next || 200; next = details.next || 200,
var until = details.until || 2000; until = details.until || 2000;
var check = function() { var check = function() {
if ( testFn() === true || now >= until ) { if ( testFn() === true || now >= until ) {
@ -69,7 +69,7 @@ var deferUntil = function(testFn, mainFn, details) {
if ( 'sync' in details && details.sync === true ) { if ( 'sync' in details && details.sync === true ) {
check(); check();
} else { } else {
vAPI.setTimeout(check, 1); vAPI.setTimeout(check, details.first || 1);
} }
}; };
@ -3342,7 +3342,8 @@ vAPI.contextMenu = (function() {
} }
deferUntil( deferUntil(
canRegister.bind(null, win), canRegister.bind(null, win),
register.bind(null, win) register.bind(null, win),
{ first: 4000 }
); );
}; };
@ -3380,8 +3381,10 @@ vAPI.contextMenu = (function() {
/******************************************************************************/ /******************************************************************************/
/******************************************************************************/ /******************************************************************************/
// Keyboard shortcut have to be hardcoded, as they are declaratively created // Keyboard shortcuts have to be hardcoded, as they are declaratively created
// with the browser.commands API. // in the manifest.json file on webext API, and only a listener has to be
// installed with the browser.commands API.
//
// Assuming only one client listener is installed. // Assuming only one client listener is installed.
// Shortcuts can be customized in `about:config` using // Shortcuts can be customized in `about:config` using
@ -3399,7 +3402,7 @@ vAPI.commands = (function() {
var commandHandler = function(ev) { var commandHandler = function(ev) {
if ( typeof clientListener !== 'function' ) { return; } if ( typeof clientListener !== 'function' ) { return; }
var match = /^uBlock0-key-([a-z-]+)$/.exec(ev.target.id); var match = /^uBlock0Key-([a-z-]+)$/.exec(ev.target.id);
if ( match === null ) { return; } if ( match === null ) { return; }
clientListener(match[1]); clientListener(match[1]);
}; };
@ -3412,7 +3415,7 @@ vAPI.commands = (function() {
if ( canRegister(window) !== true ) { return; } if ( canRegister(window) !== true ) { return; }
var doc = window.document, var doc = window.document,
myKeyset = doc.getElementById('uBlock0-keyset'); myKeyset = doc.getElementById('uBlock0Keyset');
// Already registered? // Already registered?
if ( myKeyset !== null ) { return; } if ( myKeyset !== null ) { return; }
@ -3421,7 +3424,7 @@ vAPI.commands = (function() {
if ( keysetHolder === null ) { return; } if ( keysetHolder === null ) { return; }
myKeyset = doc.createElement('keyset'); myKeyset = doc.createElement('keyset');
myKeyset.setAttribute('id', 'uBlock0-keyset'); myKeyset.setAttribute('id', 'uBlock0Keyset');
var myKey, shortcut, parts, modifier, key; var myKey, shortcut, parts, modifier, key;
for ( var command of commands ) { for ( var command of commands ) {
@ -3433,11 +3436,12 @@ vAPI.commands = (function() {
key = parts[3] || ''; key = parts[3] || '';
if ( key === '' ) { continue; } if ( key === '' ) { continue; }
myKey = doc.createElement('key'); myKey = doc.createElement('key');
myKey.setAttribute('id', 'uBlock0-key-' + command.id); myKey.setAttribute('id', 'uBlock0Key-' + command.id);
if ( modifier !== '' ) { if ( modifier !== '' ) {
myKey.setAttribute('modifiers', parts[2]); myKey.setAttribute('modifiers', parts[2]);
} }
myKey.setAttribute('key', key); myKey.setAttribute('key', key);
// https://stackoverflow.com/a/16786770
myKey.setAttribute('oncommand', ';'); myKey.setAttribute('oncommand', ';');
myKeyset.appendChild(myKey); myKeyset.appendChild(myKey);
} }
@ -3448,12 +3452,16 @@ vAPI.commands = (function() {
var registerAsync = function(win) { var registerAsync = function(win) {
if ( vAPI.fennec ) { return; } if ( vAPI.fennec ) { return; }
deferUntil(canRegister.bind(null, win), register.bind(null, win)); deferUntil(
canRegister.bind(null, win),
register.bind(null, win),
{ first: 4000 }
);
}; };
var unregister = function(window) { var unregister = function(window) {
var doc = window.document, var doc = window.document,
myKeyset = doc.getElementById('uBlock0-keyset'); myKeyset = doc.getElementById('uBlock0Keyset');
if ( myKeyset === null ) { return; } if ( myKeyset === null ) { return; }
myKeyset.removeEventListener('command', commandHandler); myKeyset.removeEventListener('command', commandHandler);
myKeyset.parentNode.removeChild(myKeyset); myKeyset.parentNode.removeChild(myKeyset);
@ -3545,7 +3553,7 @@ var optionsObserver = (function() {
var register = function() { var register = function() {
Services.obs.addObserver(observer, 'addon-options-displayed', false); Services.obs.addObserver(observer, 'addon-options-displayed', false);
cleanupTasks.push(unregister); cleanupTasks.push(unregister);
deferUntil(canInit, init, { next: 463 }); deferUntil(canInit, init, { first: 4000 });
}; };
return { return {