diff options
Diffstat (limited to 'toolkit/mozapps/webextensions/test/browser/browser_webapi.js')
-rw-r--r-- | toolkit/mozapps/webextensions/test/browser/browser_webapi.js | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/toolkit/mozapps/webextensions/test/browser/browser_webapi.js b/toolkit/mozapps/webextensions/test/browser/browser_webapi.js new file mode 100644 index 000000000..ca8e41aad --- /dev/null +++ b/toolkit/mozapps/webextensions/test/browser/browser_webapi.js @@ -0,0 +1,106 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +const TESTPAGE = `${SECURE_TESTROOT}webapi_checkavailable.html`; + +Services.prefs.setBoolPref("extensions.webapi.testing", true); +registerCleanupFunction(() => { + Services.prefs.clearUserPref("extensions.webapi.testing"); +}); + +function testWithAPI(task) { + return function*() { + yield BrowserTestUtils.withNewTab(TESTPAGE, task); + } +} + +let gProvider = new MockProvider(); + +let addons = gProvider.createAddons([{ + id: "addon1@tests.mozilla.org", + name: "Test add-on 1", + version: "2.1", + description: "Short description", + type: "extension", + userDisabled: false, + isActive: true, +}, { + id: "addon2@tests.mozilla.org", + name: "Test add-on 2", + version: "5.3.7ab", + description: null, + type: "theme", + userDisabled: false, + isActive: false, +}, { + id: "addon3@tests.mozilla.org", + name: "Test add-on 3", + version: "1", + description: "Longer description", + type: "extension", + userDisabled: true, + isActive: false, +}, { + id: "addon4@tests.mozilla.org", + name: "Test add-on 4", + version: "1", + description: "Longer description", + type: "extension", + userDisabled: false, + isActive: true, +}]); + +addons[3].permissions &= ~AddonManager.PERM_CAN_UNINSTALL; + +function API_getAddonByID(browser, id) { + return ContentTask.spawn(browser, id, function*(id) { + let addon = yield content.navigator.mozAddonManager.getAddonByID(id); + + // We can't send native objects back so clone its properties. + let result = {}; + for (let prop in addon) { + result[prop] = addon[prop]; + } + + return result; + }); +} + +add_task(testWithAPI(function*(browser) { + function compareObjects(web, real) { + for (let prop of Object.keys(web)) { + let webVal = web[prop]; + let realVal = real[prop]; + + switch (prop) { + case "isEnabled": + realVal = !real.userDisabled; + break; + + case "canUninstall": + realVal = Boolean(real.permissions & AddonManager.PERM_CAN_UNINSTALL); + break; + } + + // null and undefined don't compare well so stringify them first + if (realVal === null || realVal === undefined) { + realVal = `${realVal}`; + webVal = `${webVal}`; + } + + is(webVal, realVal, `Property ${prop} should have the right value in add-on ${real.id}`); + } + } + + let [a1, a2, a3] = yield promiseAddonsByIDs(["addon1@tests.mozilla.org", + "addon2@tests.mozilla.org", + "addon3@tests.mozilla.org"]); + let w1 = yield API_getAddonByID(browser, "addon1@tests.mozilla.org"); + let w2 = yield API_getAddonByID(browser, "addon2@tests.mozilla.org"); + let w3 = yield API_getAddonByID(browser, "addon3@tests.mozilla.org"); + + compareObjects(w1, a1); + compareObjects(w2, a2); + compareObjects(w3, a3); +})); |