mirror of
https://github.com/gorhill/uMatrix.git
synced 2024-06-14 00:05:08 +12:00
code review
This commit is contained in:
parent
6c24fe8e2a
commit
9cd5e959aa
|
@ -108,6 +108,10 @@ var cleanupTasks = [];
|
|||
var expectedNumberOfCleanups = 7;
|
||||
|
||||
window.addEventListener('unload', function() {
|
||||
if ( typeof vAPI.app.onShutdown === 'function' ) {
|
||||
vAPI.app.onShutdown();
|
||||
}
|
||||
|
||||
for ( var cleanup of cleanupTasks ) {
|
||||
cleanup();
|
||||
}
|
||||
|
@ -129,39 +133,133 @@ window.addEventListener('unload', function() {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
// For now, only booleans.
|
||||
|
||||
vAPI.browserSettings = {
|
||||
originalValues: {},
|
||||
|
||||
rememberOriginalValue: function(branch, setting) {
|
||||
var key = branch + '.' + setting;
|
||||
if ( this.originalValues.hasOwnProperty(key) ) {
|
||||
return;
|
||||
}
|
||||
var hasUserValue = false;
|
||||
try {
|
||||
hasUserValue = Services.prefs.getBranch(branch + '.').prefHasUserValue(setting);
|
||||
} catch (ex) {
|
||||
}
|
||||
this.originalValues[key] = hasUserValue ? this.getBool(branch, setting) : undefined;
|
||||
},
|
||||
|
||||
clear: function(branch, setting) {
|
||||
var key = branch + '.' + setting;
|
||||
// Value was not overriden -- nothing to restore
|
||||
if ( this.originalValues.hasOwnProperty(key) === false ) {
|
||||
return;
|
||||
}
|
||||
var value = this.originalValues[key];
|
||||
// https://github.com/gorhill/uBlock/issues/292#issuecomment-109621979
|
||||
// Forget the value immediately, it may change outside of
|
||||
// uBlock control.
|
||||
delete this.originalValues[key];
|
||||
// Original value was a default one
|
||||
if ( value === undefined ) {
|
||||
try {
|
||||
Services.prefs.getBranch(branch + '.').clearUserPref(setting);
|
||||
} catch (ex) {
|
||||
}
|
||||
return;
|
||||
}
|
||||
// Current value is same as original
|
||||
if ( this.getBool(branch, setting) === value ) {
|
||||
return;
|
||||
}
|
||||
// Reset to original value
|
||||
try {
|
||||
Services.prefs.getBranch(branch + '.').setBoolPref(setting, value);
|
||||
} catch (ex) {
|
||||
}
|
||||
},
|
||||
|
||||
getBool: function(branch, setting) {
|
||||
try {
|
||||
return Services.prefs.getBranch(branch + '.').getBoolPref(setting);
|
||||
} catch (ex) {
|
||||
}
|
||||
return undefined;
|
||||
},
|
||||
|
||||
setBool: function(branch, setting, value) {
|
||||
try {
|
||||
Services.prefs
|
||||
.getBranch(branch + '.')
|
||||
.setBoolPref(setting, value);
|
||||
Services.prefs.getBranch(branch + '.').setBoolPref(setting, value);
|
||||
} catch (ex) {
|
||||
}
|
||||
},
|
||||
|
||||
set: function(details) {
|
||||
var value;
|
||||
for ( var setting in details ) {
|
||||
if ( details.hasOwnProperty(setting) === false ) {
|
||||
continue;
|
||||
}
|
||||
switch ( setting ) {
|
||||
case 'prefetching':
|
||||
this.setBool('network', 'prefetch-next', !!details[setting]);
|
||||
this.rememberOriginalValue('network', 'prefetch-next');
|
||||
value = !!details[setting];
|
||||
// https://github.com/gorhill/uBlock/issues/292
|
||||
// "true" means "do not disable", i.e. leave entry alone
|
||||
if ( value === true ) {
|
||||
this.clear('network', 'prefetch-next');
|
||||
} else {
|
||||
this.setBool('network', 'prefetch-next', false);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'hyperlinkAuditing':
|
||||
this.setBool('browser', 'send_pings', !!details[setting]);
|
||||
this.setBool('beacon', 'enabled', !!details[setting]);
|
||||
this.rememberOriginalValue('browser', 'send_pings');
|
||||
this.rememberOriginalValue('beacon', 'enabled');
|
||||
value = !!details[setting];
|
||||
// https://github.com/gorhill/uBlock/issues/292
|
||||
// "true" means "do not disable", i.e. leave entry alone
|
||||
if ( value === true ) {
|
||||
this.clear('browser', 'send_pings');
|
||||
this.clear('beacon', 'enabled');
|
||||
} else {
|
||||
this.setBool('browser', 'send_pings', false);
|
||||
this.setBool('beacon', 'enabled', false);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'webrtcIPAddress':
|
||||
this.rememberOriginalValue('media.peerconnection', 'enabled');
|
||||
value = !!details[setting];
|
||||
if ( value === true ) {
|
||||
this.clear('media.peerconnection', 'enabled');
|
||||
} else {
|
||||
this.setBool('media.peerconnection', 'enabled', false);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
restoreAll: function() {
|
||||
var pos;
|
||||
for ( var key in this.originalValues ) {
|
||||
if ( this.originalValues.hasOwnProperty(key) === false ) {
|
||||
continue;
|
||||
}
|
||||
pos = key.lastIndexOf('.');
|
||||
this.clear(key.slice(0, pos), key.slice(pos + 1));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
cleanupTasks.push(vAPI.browserSettings.restoreAll.bind(vAPI.browserSettings));
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// API matches that of chrome.storage.local:
|
||||
|
@ -608,6 +706,18 @@ vAPI.tabs.open = function(details) {
|
|||
var win = Services.wm.getMostRecentWindow('navigator:browser');
|
||||
var tabBrowser = getTabBrowser(win);
|
||||
|
||||
// Open in a standalone window
|
||||
if ( details.popup === true ) {
|
||||
Services.ww.openWindow(
|
||||
self,
|
||||
details.url,
|
||||
null,
|
||||
'menubar=no,toolbar=no,location=no,resizable=yes',
|
||||
null
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if ( details.index === -1 ) {
|
||||
details.index = tabBrowser.browsers.indexOf(tabBrowser.selectedBrowser) + 1;
|
||||
}
|
||||
|
@ -678,7 +788,12 @@ vAPI.tabs.select = function(tab) {
|
|||
return;
|
||||
}
|
||||
|
||||
var tabBrowser = getTabBrowser(getOwnerWindow(tab)).selectedTab = tab;
|
||||
// https://github.com/gorhill/uBlock/issues/470
|
||||
var win = getOwnerWindow(tab);
|
||||
win.focus();
|
||||
|
||||
var tabBrowser = getTabBrowser(win);
|
||||
tabBrowser.selectedTab = tab;
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
@ -2180,6 +2295,7 @@ vAPI.toolbarButton = {
|
|||
location.host + ':closePopup',
|
||||
onPopupCloseRequested
|
||||
);
|
||||
|
||||
var style = [
|
||||
'#' + this.id + '.off {',
|
||||
'list-style-image: url(',
|
||||
|
@ -2388,7 +2504,7 @@ vAPI.toolbarButton = {
|
|||
'}',
|
||||
'#' + this.id + ' {',
|
||||
'list-style-image: url(',
|
||||
vAPI.getURL('img/browsericons/icon19.png'),
|
||||
vAPI.getURL('img/browsericons/icon19-19.png'),
|
||||
');',
|
||||
'}',
|
||||
'#' + this.viewId + ', #' + this.viewId + ' > iframe {',
|
||||
|
|
Loading…
Reference in a new issue