diff options
Diffstat (limited to 'toolkit/mozapps/extensions/test/browser/browser_webext_options.js')
-rw-r--r-- | toolkit/mozapps/extensions/test/browser/browser_webext_options.js | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/browser/browser_webext_options.js b/toolkit/mozapps/extensions/test/browser/browser_webext_options.js new file mode 100644 index 000000000..b13213f0b --- /dev/null +++ b/toolkit/mozapps/extensions/test/browser/browser_webext_options.js @@ -0,0 +1,70 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +// Wrapper to run a test that consists of: +// 1. opening the add-ons manager viewing the list of extensions +// 2. installing an extension (using the provider installer callable) +// 3. opening the preferences panel for the new extension and verifying +// that it opens cleanly +function* runTest(installer) { + let mgrWindow = yield open_manager("addons://list/extension"); + + let {addon, id} = yield* installer(); + isnot(addon, null, "Extension is installed"); + + let element = get_addon_element(mgrWindow, id); + element.parentNode.ensureElementIsVisible(element); + + let button = mgrWindow.document.getAnonymousElementByAttribute(element, "anonid", "preferences-btn"); + is_element_visible(button, "Preferences button should be visible"); + + EventUtils.synthesizeMouseAtCenter(button, {clickCount: 1}, mgrWindow); + + yield TestUtils.topicObserved(AddonManager.OPTIONS_NOTIFICATION_DISPLAYED, + (subject, data) => data == id); + + is(mgrWindow.gViewController.currentViewId, + `addons://detail/${encodeURIComponent(id)}/preferences`, + "Current view should scroll to preferences"); + + var browser = mgrWindow.document.querySelector("#detail-grid > rows > .inline-options-browser"); + var rows = browser.parentNode; + + ok(browser, "Grid should have a browser child"); + is(browser.localName, "browser", "Grid should have a browser child"); + is(browser.currentURI.spec, element.mAddon.optionsURL, "Browser has the expected options URL loaded") + + is(browser.clientWidth, rows.clientWidth, + "Browser should be the same width as its parent node"); + + button = mgrWindow.document.getElementById("detail-prefs-btn"); + is_element_hidden(button, "Preferences button should not be visible"); + + yield close_manager(mgrWindow); + + addon.uninstall(); +} + +// Test that deferred handling of optionsURL works for a signed webextension +add_task(function* test_options_signed() { + yield* runTest(function*() { + // The extension in-tree is signed with this ID: + const ID = "{9792932b-32b2-4567-998c-e7bf6c4c5e35}"; + + yield install_addon("addons/options_signed.xpi"); + let addon = yield promiseAddonByID(ID); + + return {addon, id: ID}; + }); +}); + +add_task(function* test_options_temporary() { + yield* runTest(function*() { + let dir = get_addon_file_url("options_signed").file; + let addon = yield AddonManager.installTemporaryAddon(dir); + isnot(addon, null, "Extension is installed (temporarily)"); + + return {addon, id: addon.id}; + }); +}); |