Bug 1435142 - Part 3: expose closeTabByDblclick to WebExtension. r=mixedpuppy
MozReview-Commit-ID: GVgDdNFP0qL
--- a/toolkit/components/extensions/ext-browserSettings.js
+++ b/toolkit/components/extensions/ext-browserSettings.js
@@ -100,16 +100,26 @@ ExtensionPreferencesManager.addSetting("
let returnObj = {};
for (let pref of this.prefNames) {
returnObj[pref] = value;
}
return returnObj;
},
});
+ExtensionPreferencesManager.addSetting("closeTabsByDoubleClick", {
+ prefNames: [
+ "browser.tabs.closeTabByDblclick",
+ ],
+
+ setCallback(value) {
+ return {[this.prefNames[0]]: value};
+ },
+});
+
ExtensionPreferencesManager.addSetting("contextMenuShowEvent", {
prefNames: [
"ui.context_menus.after_mouseup",
],
setCallback(value) {
return {[this.prefNames[0]]: value === "mouseup"};
},
@@ -216,16 +226,21 @@ this.browserSettings = class extends Ext
return Services.prefs.getCharPref("dom.popup_allowed_events") != "";
}),
cacheEnabled: getSettingsAPI(
extension, "cacheEnabled",
() => {
return Services.prefs.getBoolPref("browser.cache.disk.enable") &&
Services.prefs.getBoolPref("browser.cache.memory.enable");
}),
+ closeTabsByDoubleClick: getSettingsAPI(
+ extension, "closeTabsByDoubleClick",
+ () => {
+ return Services.prefs.getBoolPref("browser.tabs.closeTabByDblclick");
+ }, undefined, false, ["android"]),
contextMenuShowEvent: Object.assign(
getSettingsAPI(
extension, "contextMenuShowEvent",
() => {
if (AppConstants.platform === "win") {
return "mouseup";
}
let prefValue = Services.prefs.getBoolPref(
--- a/toolkit/components/extensions/schemas/browser_settings.json
+++ b/toolkit/components/extensions/schemas/browser_settings.json
@@ -112,16 +112,20 @@
"allowPopupsForUserEvents": {
"$ref": "types.Setting",
"description": "Allows or disallows pop-up windows from opening in response to user events."
},
"cacheEnabled": {
"$ref": "types.Setting",
"description": "Enables or disables the browser cache."
},
+ "closeTabsByDoubleClick": {
+ "$ref": "types.Setting",
+ "description": "This boolean setting controls whether the selected tab can be closed with a double click."
+ },
"contextMenuShowEvent": {
"$ref": "types.Setting",
"description": "Controls after which mouse event context menus popup. This setting's value is of type ContextMenuMouseEvent, which has possible values of <code>mouseup</code> and <code>mousedown</code>."
},
"homepageOverride": {
"$ref": "types.Setting",
"description": "Returns the value of the overridden home page. Read-only."
},
--- 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
// Create an object to hold the values to which we will initialize the prefs.
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.closeTabByDblclick": false,
"browser.tabs.loadBookmarksInTabs": false,
"browser.search.openintab": false,
"network.proxy.type": proxySvc.PROXYCONFIG_SYSTEM,
"network.proxy.http": "",
"network.proxy.http_port": 0,
"network.proxy.share_proxy_settings": false,
"network.proxy.ftp": "",
"network.proxy.ftp_port": 0,
@@ -159,16 +160,25 @@ add_task(async function test_browser_set
"contextMenuShowEvent", "mousedown",
{"ui.context_menus.after_mouseup": AppConstants.platform === "win"});
} else {
await testSetting(
"contextMenuShowEvent", "mousedown",
{"ui.context_menus.after_mouseup": false});
}
+ if (AppConstants.platform !== "android") {
+ await testSetting(
+ "closeTabsByDoubleClick", true,
+ {"browser.tabs.closeTabByDblclick": true});
+ await testSetting(
+ "closeTabsByDoubleClick", false,
+ {"browser.tabs.closeTabByDblclick": false});
+ }
+
await testSetting(
"openBookmarksInNewTabs", true,
{"browser.tabs.loadBookmarksInTabs": true});
await testSetting(
"openBookmarksInNewTabs", false,
{"browser.tabs.loadBookmarksInTabs": false});
await testSetting(
@@ -346,16 +356,52 @@ add_task(async function test_bad_value()
},
});
await extension.startup();
await extension.awaitMessage("done");
await extension.unload();
});
+add_task(async function test_bad_value_android() {
+ if (AppConstants.platform !== "android") {
+ return;
+ }
+
+ async function background() {
+ await browser.test.assertRejects(
+ browser.browserSettings.closeTabsByDoubleClick.set({value: true}),
+ /android is not a supported platform for the closeTabsByDoubleClick setting/,
+ "closeTabsByDoubleClick.set rejects on Android.");
+
+ await browser.test.assertRejects(
+ browser.browserSettings.closeTabsByDoubleClick.get({}),
+ /android is not a supported platform for the closeTabsByDoubleClick setting/,
+ "closeTabsByDoubleClick.get rejects on Android.");
+
+ await browser.test.assertRejects(
+ browser.browserSettings.closeTabsByDoubleClick.clear({}),
+ /android is not a supported platform for the closeTabsByDoubleClick setting/,
+ "closeTabsByDoubleClick.clear rejects on Android.");
+
+ browser.test.sendMessage("done");
+ }
+
+ let extension = ExtensionTestUtils.loadExtension({
+ background,
+ manifest: {
+ permissions: ["browserSettings"],
+ },
+ });
+
+ await extension.startup();
+ await extension.awaitMessage("done");
+ await extension.unload();
+});
+
add_task(async function test_bad_value_proxy_config() {
let background = AppConstants.platform === "android" ?
async () => {
await browser.test.assertRejects(
browser.browserSettings.proxyConfig.set({value: {
proxyType: "none",
}}),
/proxyConfig is not supported on android/,