mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-20 19:33:08 +09:00
70 lines
2.5 KiB
JavaScript
70 lines
2.5 KiB
JavaScript
/* 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};
|
|
});
|
|
});
|