/* Any copyright is dedicated to the Public Domain. * https://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; ChromeUtils.defineESModuleGetters(this, { AboutNewTab: "resource:///modules/AboutNewTab.sys.mjs", }); const ADDON_ID_1 = "newtab-multi-1@tests.mozilla.org"; const ADDON_ID_2 = "newtab-multi-2@tests.mozilla.org"; add_setup(async function () { await SpecialPowers.pushPrefEnv({ set: [["browser.settings-redesign.enabled", true]], }); }); add_task(async function test_multiple_extensions_in_dropdown() { let extension1 = ExtensionTestUtils.loadExtension({ useAddonManager: "permanent", manifest: { name: "First New Tab Extension", browser_specific_settings: { gecko: { id: ADDON_ID_1 } }, chrome_url_overrides: { newtab: "/newtab1.html" }, }, files: { "newtab1.html": "

First

" }, }); let extension2 = ExtensionTestUtils.loadExtension({ useAddonManager: "permanent", manifest: { name: "Second New Tab Extension", browser_specific_settings: { gecko: { id: ADDON_ID_2 } }, chrome_url_overrides: { newtab: "/newtab2.html" }, }, files: { "newtab2.html": "

Second

" }, }); await extension1.startup(); await extension2.startup(); let { win, tab } = await openHomePreferences(); let control = await settingControlRenders("homepageNewTabs", win); let select = control.controlEl; let nativeSelect = select.inputEl; info("Waiting for latest extension to be selected in dropdown"); await BrowserTestUtils.waitForMutationCondition( select, { attributes: true, childList: true, subtree: true }, () => nativeSelect.value === ADDON_ID_2 ); let option1 = select.querySelector( `moz-option[value="${CSS.escape(ADDON_ID_1)}"]` ); let option2 = select.querySelector( `moz-option[value="${CSS.escape(ADDON_ID_2)}"]` ); ok(option1, "First extension is available in dropdown"); ok(option2, "Second extension is available in dropdown"); // Register the observer before the dropdown change so we don't miss the // notification if it fires synchronously. let urlChanged = TestUtils.topicObserved("newtab-url-changed"); await changeMozSelectValue(select, ADDON_ID_1); is(nativeSelect.value, ADDON_ID_1, "Dropdown switched to first extension"); await urlChanged; is( AboutNewTab.newTabURL, `moz-extension://${extension1.uuid}/newtab1.html`, "AboutNewTab.newTabURL points to the first extension" ); await extension2.unload(); await extension1.unload(); BrowserTestUtils.removeTab(tab); });