diff options
Diffstat (limited to 'browser/components/extensions/test/browser/browser_ext_browserAction_getUserSettings.js')
-rw-r--r-- | browser/components/extensions/test/browser/browser_ext_browserAction_getUserSettings.js | 244 |
1 files changed, 244 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_ext_browserAction_getUserSettings.js b/browser/components/extensions/test/browser/browser_ext_browserAction_getUserSettings.js new file mode 100644 index 0000000000..97ff709788 --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_browserAction_getUserSettings.js @@ -0,0 +1,244 @@ +"use strict"; + +async function background(test) { + let resolvers = {}; + let tests = {}; + + browser.test.onMessage.addListener(id => { + let resolver = resolvers[id]; + browser.test.assertTrue(resolver, `Found resolver for ${id}`); + browser.test.assertTrue(resolver.resolve, `${id} was not resolved yet`); + resolver.resolve(id); + resolver.resolve = null; // resolve can be used only once. + }); + + async function pinToToolbar(shouldPinToToolbar) { + let identifier = `${ + shouldPinToToolbar ? "pin-to-toolbar" : "unpin-from-toolbar" + }-${Object.keys(resolvers).length}`; + resolvers[identifier] = {}; + resolvers[identifier].promise = new Promise( + _resolve => (resolvers[identifier].resolve = _resolve) + ); + browser.test.sendMessage("pinToToolbar", { + identifier, + shouldPinToToolbar, + }); + await resolvers[identifier].promise; + } + + let { manifest_version } = await browser.runtime.getManifest(); + let action = browser.browserAction; + + if (manifest_version === 3) { + action = browser.action; + } + + tests.getUserSettings = async function () { + let userSettings = await action.getUserSettings(); + + await pinToToolbar(true); + userSettings = await action.getUserSettings(); + browser.test.assertTrue( + userSettings.isOnToolbar, + "isOnToolbar should be true after pinning to toolbar" + ); + + await pinToToolbar(false); + userSettings = await action.getUserSettings(); + browser.test.assertFalse( + userSettings.isOnToolbar, + "isOnToolbar should be false after unpinning" + ); + + await pinToToolbar(true); + userSettings = await action.getUserSettings(); + browser.test.assertTrue( + userSettings.isOnToolbar, + "isOnToolbar should be true after repinning" + ); + + await pinToToolbar(false); + userSettings = await action.getUserSettings(); + browser.test.assertFalse( + userSettings.isOnToolbar, + "isOnToolbar should be false after unpinning" + ); + + await browser.test.notifyPass("getUserSettings"); + }; + + tests.default_area_getUserSettings = async function () { + let userSettings = await action.getUserSettings(); + + browser.test.assertTrue( + userSettings.isOnToolbar, + "isOnToolbar should be true when one of ['navbar', 'tabstrip', 'personaltoolbar'] default_area is specified in manifest.json" + ); + + await pinToToolbar(false); + userSettings = await action.getUserSettings(); + browser.test.assertFalse( + userSettings.isOnToolbar, + "isOnToolbar should be false after unpinning" + ); + + await browser.test.notifyPass("getUserSettings"); + }; + + tests.menupanel_default_area_getUserSettings = async function () { + let userSettings = await action.getUserSettings(); + + browser.test.assertFalse( + userSettings.isOnToolbar, + "isOnToolbar should be false when default_area is 'menupanel' in manifest.json" + ); + + await pinToToolbar(true); + userSettings = await action.getUserSettings(); + browser.test.assertTrue( + userSettings.isOnToolbar, + "isOnToolbar should be true after pinning" + ); + + await browser.test.notifyPass("getUserSettings"); + }; + + tests[test](); +} + +function pinToToolbar(shouldPinToToolbar, extension) { + let newArea = shouldPinToToolbar + ? CustomizableUI.AREA_NAVBAR + : CustomizableUI.AREA_ADDONS; + let newPosition = shouldPinToToolbar ? undefined : 0; + let widget = getBrowserActionWidget(extension); + CustomizableUI.addWidgetToArea(widget.id, newArea, newPosition); +} + +add_task(async function browserAction_getUserSettings() { + let manifest = { + manifest: { + manifest_version: 2, + browser_action: {}, + }, + background: `(${background})('getUserSettings')`, + }; + let extension = ExtensionTestUtils.loadExtension(manifest); + extension.onMessage("pinToToolbar", ({ identifier, shouldPinToToolbar }) => { + pinToToolbar(shouldPinToToolbar, extension); + extension.sendMessage(identifier); + }); + await extension.startup(); + await extension.awaitFinish("getUserSettings"); + await extension.unload(); +}); + +add_task(async function action_getUserSettings() { + let manifest = { + manifest: { + manifest_version: 3, + action: {}, + }, + background: `(${background})('getUserSettings')`, + }; + + let extension = ExtensionTestUtils.loadExtension(manifest); + extension.onMessage("pinToToolbar", ({ identifier, shouldPinToToolbar }) => { + pinToToolbar(shouldPinToToolbar, extension); + extension.sendMessage(identifier); + }); + await extension.startup(); + await extension.awaitFinish("getUserSettings"); + await extension.unload(); +}); + +add_task(async function browserAction_getUserSettings_default_area() { + for (let default_area of ["navbar", "tabstrip", "personaltoolbar"]) { + let manifest = { + manifest: { + manifest_version: 2, + browser_action: { + default_area, + }, + }, + background: `(${background})('default_area_getUserSettings')`, + }; + let extension = ExtensionTestUtils.loadExtension(manifest); + extension.onMessage( + "pinToToolbar", + ({ identifier, shouldPinToToolbar }) => { + pinToToolbar(shouldPinToToolbar, extension); + extension.sendMessage(identifier); + } + ); + await extension.startup(); + await extension.awaitFinish("getUserSettings"); + await extension.unload(); + } +}); + +add_task(async function action_getUserSettings_default_area() { + for (let default_area of ["navbar", "tabstrip", "personaltoolbar"]) { + let manifest = { + manifest: { + manifest_version: 3, + action: { + default_area, + }, + }, + background: `(${background})('default_area_getUserSettings')`, + }; + let extension = ExtensionTestUtils.loadExtension(manifest); + extension.onMessage( + "pinToToolbar", + ({ identifier, shouldPinToToolbar }) => { + pinToToolbar(shouldPinToToolbar, extension); + extension.sendMessage(identifier); + } + ); + await extension.startup(); + await extension.awaitFinish("getUserSettings"); + await extension.unload(); + } +}); + +add_task(async function browserAction_getUserSettings_menupanel_default_area() { + let manifest = { + manifest: { + manifest_version: 2, + browser_action: { + default_area: "menupanel", + }, + }, + background: `(${background})('menupanel_default_area_getUserSettings')`, + }; + let extension = ExtensionTestUtils.loadExtension(manifest); + extension.onMessage("pinToToolbar", ({ identifier, shouldPinToToolbar }) => { + pinToToolbar(shouldPinToToolbar, extension); + extension.sendMessage(identifier); + }); + await extension.startup(); + await extension.awaitFinish("getUserSettings"); + await extension.unload(); +}); + +add_task(async function action_getUserSettings_menupanel_default_area() { + let manifest = { + manifest: { + manifest_version: 3, + action: { + default_area: "menupanel", + }, + }, + background: `(${background})('menupanel_default_area_getUserSettings')`, + }; + let extension = ExtensionTestUtils.loadExtension(manifest); + extension.onMessage("pinToToolbar", ({ identifier, shouldPinToToolbar }) => { + pinToToolbar(shouldPinToToolbar, extension); + extension.sendMessage(identifier); + }); + await extension.startup(); + await extension.awaitFinish("getUserSettings"); + await extension.unload(); +}); |