Bug 1420969 - API to open search results in new tab, r?mixedpuppy
This introduces browserSettings.openSearchResultsInNewTabs which exposes
the browser.search.openintab preference to extensions.
Note that until
bug 1394304 is fixed this only works for searches performed
via the search box, and not for searches performed via the address bar.
MozReview-Commit-ID: HuoJ0uOvMjX
--- a/toolkit/components/extensions/ext-browserSettings.js
+++ b/toolkit/components/extensions/ext-browserSettings.js
@@ -103,16 +103,26 @@ ExtensionPreferencesManager.addSetting("
"browser.tabs.loadBookmarksInTabs",
],
setCallback(value) {
return {[this.prefNames[0]]: value};
},
});
+ExtensionPreferencesManager.addSetting("openSearchResultsInNewTabs", {
+ prefNames: [
+ "browser.search.openintab",
+ ],
+
+ setCallback(value) {
+ return {[this.prefNames[0]]: value};
+ },
+});
+
ExtensionPreferencesManager.addSetting("webNotificationsDisabled", {
prefNames: [
"permissions.default.desktop-notification",
],
setCallback(value) {
return {[this.prefNames[0]]: value ? PERM_DENY_ACTION : undefined};
},
@@ -179,16 +189,21 @@ this.browserSettings = class extends Ext
() => {
return aboutNewTabService.newTabURL;
}, URL_STORE_TYPE, true),
openBookmarksInNewTabs: getSettingsAPI(extension,
"openBookmarksInNewTabs",
() => {
return Services.prefs.getBoolPref("browser.tabs.loadBookmarksInTabs");
}),
+ openSearchResultsInNewTabs: getSettingsAPI(extension,
+ "openSearchResultsInNewTabs",
+ () => {
+ return Services.prefs.getBoolPref("browser.search.openintab");
+ }),
webNotificationsDisabled: getSettingsAPI(extension,
"webNotificationsDisabled",
() => {
let prefValue =
Services.prefs.getIntPref(
"permissions.default.desktop-notification", null);
return prefValue === PERM_DENY_ACTION;
}),
--- a/toolkit/components/extensions/schemas/browser_settings.json
+++ b/toolkit/components/extensions/schemas/browser_settings.json
@@ -59,15 +59,19 @@
"newTabPageOverride": {
"$ref": "types.Setting",
"description": "Returns the value of the overridden new tab page. Read-only."
},
"openBookmarksInNewTabs": {
"$ref": "types.Setting",
"description": "This boolean setting controls whether bookmarks are opened in the current tab or in a new tab."
},
+ "openSearchResultsInNewTabs": {
+ "$ref": "types.Setting",
+ "description": "This boolean setting controls whether search results are opened in the current tab or in a new tab."
+ },
"webNotificationsDisabled": {
"$ref": "types.Setting",
"description": "Disables webAPI notifications."
}
}
}
]
--- a/toolkit/components/extensions/test/xpcshell/test_ext_browserSettings.js
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_browserSettings.js
@@ -25,16 +25,17 @@ add_task(async function test_browser_set
const PREFS = {
"browser.cache.disk.enable": true,
"browser.cache.memory.enable": true,
"dom.popup_allowed_events": Preferences.get("dom.popup_allowed_events"),
"image.animation_mode": "none",
"permissions.default.desktop-notification": PERM_UNKNOWN_ACTION,
"ui.context_menus.after_mouseup": false,
"browser.tabs.loadBookmarksInTabs": false,
+ "browser.search.openintab": false,
};
async function background() {
browser.test.onMessage.addListener(async (msg, apiName, value) => {
let apiObj = browser.browserSettings[apiName];
let result = await apiObj.set({value});
if (msg === "set") {
browser.test.assertTrue(result, "set returns true.");
@@ -148,16 +149,23 @@ add_task(async function test_browser_set
await testSetting(
"openBookmarksInNewTabs", true,
{"browser.tabs.loadBookmarksInTabs": true});
await testSetting(
"openBookmarksInNewTabs", false,
{"browser.tabs.loadBookmarksInTabs": false});
+ await testSetting(
+ "openSearchResultsInNewTabs", true,
+ {"browser.search.openintab": true});
+ await testSetting(
+ "openSearchResultsInNewTabs", false,
+ {"browser.search.openintab": false});
+
await extension.unload();
await promiseShutdownManager();
});
add_task(async function test_bad_value() {
async function background() {
await browser.test.assertRejects(
browser.browserSettings.contextMenuShowEvent.set({value: "bad"}),