166 lines
6.5 KiB
JavaScript
166 lines
6.5 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
/* Original: https://github.com/mozilla-extensions/webcompat-addon/blob/main/src/experiment-apis/aboutConfigPrefs.js */
|
|
'use strict';
|
|
|
|
const AboutPreferencesWatcher = {
|
|
BASE_URL: null, // this need to be replaced with "moz-extension://..../"
|
|
BASE_PREF: 'browser.sidebar.', // null,
|
|
|
|
onPrefChanged(name) {
|
|
switch (name) {
|
|
case 'browser.tabs.selectOwnerOnClose':
|
|
Services.prefs.setBoolPref(`${this.BASE_PREF}simulateSelectOwnerOnClose`, Services.prefs.getBoolPref(name));
|
|
break;
|
|
|
|
case 'browser.tabs.loadInBackground':
|
|
Services.prefs.setBoolPref(`${this.BASE_PREF}simulateTabsLoadInBackgroundInverted`, Services.prefs.getBoolPref(name));
|
|
break;
|
|
|
|
case 'browser.tabs.warnOnClose':
|
|
Services.prefs.setBoolPref(`${this.BASE_PREF}warnOnCloseTabs`, Services.prefs.getBoolPref(name));
|
|
break;
|
|
|
|
case 'browser.tabs.searchclipboardfor.middleclick':
|
|
Services.prefs.setBoolPref(`${this.BASE_PREF}middleClickPasteURLOnNewTabButton`, Services.prefs.getBoolPref(name));
|
|
break;
|
|
|
|
case 'browser.tabs.insertAfterCurrent':
|
|
case 'browser.tabs.insertRelatedAfterCurrent': {
|
|
const insertAfterCurrent = Services.prefs.getBoolPref('browser.tabs.insertAfterCurrent');
|
|
const insertRelatedAfterCurrent = Services.prefs.getBoolPref('browser.tabs.insertRelatedAfterCurrent');
|
|
const useTree = (
|
|
Services.prefs.getBoolPref(`${this.BASE_PREF}autoAttach`, false) &&
|
|
Services.prefs.getBoolPref(`${this.BASE_PREF}syncParentTabAndOpenerTab`, false)
|
|
);
|
|
Services.prefs.setStringPref(`${this.BASE_PREF}autoAttachOnOpenedWithOwner`,
|
|
!useTree ? -1 :
|
|
insertRelatedAfterCurrent ? 5 :
|
|
insertAfterCurrent ? 6 :
|
|
0);
|
|
Services.prefs.setStringPref(`${this.BASE_PREF}insertNewTabFromPinnedTabAt`,
|
|
!useTree ? -1 :
|
|
insertRelatedAfterCurrent ? 3 :
|
|
insertAfterCurrent ? 0 :
|
|
1);
|
|
Services.prefs.setStringPref(`${this.BASE_PREF}insertNewTabFromFirefoxViewAt`,
|
|
!useTree ? -1 :
|
|
insertRelatedAfterCurrent ? 3 :
|
|
insertAfterCurrent ? 0 :
|
|
1);
|
|
}; break;
|
|
}
|
|
},
|
|
|
|
// as an XPCOM component...
|
|
classDescription: 'Waterfox Chrome Window Watcher for about:preferences',
|
|
contractID: '@waterfox.net/chrome-window-watche-about-preferences;1',
|
|
classID: Components.ID('{c8a990cf-b9a3-4b4c-829c-a1dfc5753527}'),
|
|
QueryInterface: ChromeUtils.generateQI([
|
|
'nsIObserver',
|
|
'nsISupportsWeakReference',
|
|
]),
|
|
|
|
// nsIObserver
|
|
observe(subject, topic, data) {
|
|
switch (topic) {
|
|
case 'nsPref:changed':
|
|
this.onPrefChanged(data);
|
|
break;
|
|
}
|
|
},
|
|
|
|
createInstance(iid) {
|
|
return this.QueryInterface(iid);
|
|
},
|
|
};
|
|
|
|
this.prefs = class extends ExtensionAPI {
|
|
getAPI(context) {
|
|
const EventManager = ExtensionCommon.EventManager;
|
|
const extensionIDBase = context.extension.id.split('@')[0];
|
|
|
|
AboutPreferencesWatcher.BASE_URL = context.extension.baseURL;
|
|
|
|
// Synchronize simulation configs with the browser's preferences
|
|
for (const [source, dest] of Object.entries({
|
|
'browser.tabs.selectOwnerOnClose': `${AboutPreferencesWatcher.BASE_PREF}simulateSelectOwnerOnClose`,
|
|
'browser.tabs.loadInBackground': `${AboutPreferencesWatcher.BASE_PREF}simulateTabsLoadInBackgroundInverted`,
|
|
'browser.tabs.warnOnClose': `${AboutPreferencesWatcher.BASE_PREF}warnOnCloseTabs`,
|
|
'browser.tabs.searchclipboardfor.middleclick': `${AboutPreferencesWatcher.BASE_PREF}middleClickPasteURLOnNewTabButton`,
|
|
})) {
|
|
Services.prefs.setBoolPref(dest, Services.prefs.getBoolPref(source));
|
|
}
|
|
Services.prefs.addObserver('browser.tabs.', AboutPreferencesWatcher);
|
|
AboutPreferencesWatcher.onPrefChanged('browser.tabs.insertAfterCurrent');
|
|
|
|
return {
|
|
prefs: {
|
|
onChanged: new EventManager({
|
|
context,
|
|
name: 'prefs.onChanged',
|
|
register: (fire) => {
|
|
const observe = (_subject, _topic, data) => {
|
|
fire.async(data.replace(AboutPreferencesWatcher.BASE_PREF, '')).catch(() => {}); // ignore Message Manager disconnects
|
|
};
|
|
Services.prefs.addObserver(AboutPreferencesWatcher.BASE_PREF, observe);
|
|
return () => {
|
|
Services.prefs.removeObserver(AboutPreferencesWatcher.BASE_PREF, observe);
|
|
};
|
|
},
|
|
}).api(),
|
|
async getBoolValue(name, defaultValue = false) {
|
|
try {
|
|
return Services.prefs.getBoolPref(`${AboutPreferencesWatcher.BASE_PREF}${name}`, defaultValue);
|
|
}
|
|
catch(_error) {
|
|
return defaultValue;
|
|
}
|
|
},
|
|
async setBoolValue(name, value) {
|
|
Services.prefs.setBoolPref(`${AboutPreferencesWatcher.BASE_PREF}${name}`, value);
|
|
},
|
|
async setDefaultBoolValue(name, value) {
|
|
Services.prefs.getDefaultBranch(null).setBoolPref(`${AboutPreferencesWatcher.BASE_PREF}${name}`, value);
|
|
},
|
|
async getStringValue(name, defaultValue = '') {
|
|
try {
|
|
return Services.prefs.getStringPref(`${AboutPreferencesWatcher.BASE_PREF}${name}`, defaultValue);
|
|
}
|
|
catch(_error) {
|
|
return defaultValue;
|
|
}
|
|
},
|
|
async setStringValue(name, value) {
|
|
Services.prefs.setStringPref(`${AboutPreferencesWatcher.BASE_PREF}${name}`, value);
|
|
},
|
|
async setDefaultStringValue(name, value) {
|
|
Services.prefs.getDefaultBranch(null).setStringPref(`${AboutPreferencesWatcher.BASE_PREF}${name}`, value);
|
|
},
|
|
async getIntValue(name, defaultValue = 0) {
|
|
try {
|
|
return Services.prefs.getIntPref(`${AboutPreferencesWatcher.BASE_PREF}${name}`, defaultValue);
|
|
}
|
|
catch(_error) {
|
|
return defaultValue;
|
|
}
|
|
},
|
|
async setIntValue(name, value) {
|
|
Services.prefs.setIntPref(`${AboutPreferencesWatcher.BASE_PREF}${name}`, value);
|
|
},
|
|
async setDefaultIntValue(name, value) {
|
|
Services.prefs.getDefaultBranch(null).setIntPref(`${AboutPreferencesWatcher.BASE_PREF}${name}`, value);
|
|
},
|
|
},
|
|
};
|
|
}
|
|
|
|
onShutdown(isAppShutdown) {
|
|
if (isAppShutdown)
|
|
return;
|
|
|
|
Services.prefs.removeObserver('browser.tabs.', AboutPreferencesWatcher);
|
|
}
|
|
};
|