test_ext_manifest_permissions.js (1840B)
1 /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ 2 /* vim: set sts=2 sw=2 et tw=80: */ 3 "use strict"; 4 5 /* globals chrome */ 6 7 async function testPermission(options) { 8 function background(bgOptions) { 9 browser.test.sendMessage("typeof-namespace", { 10 browser: typeof browser[bgOptions.namespace], 11 chrome: typeof chrome[bgOptions.namespace], 12 }); 13 } 14 15 let extensionDetails = { 16 background: `(${background})(${JSON.stringify(options)})`, 17 }; 18 19 let extension = ExtensionTestUtils.loadExtension(extensionDetails); 20 21 await extension.startup(); 22 23 let types = await extension.awaitMessage("typeof-namespace"); 24 equal( 25 types.browser, 26 "undefined", 27 `Type of browser.${options.namespace} without manifest entry` 28 ); 29 equal( 30 types.chrome, 31 "undefined", 32 `Type of chrome.${options.namespace} without manifest entry` 33 ); 34 35 await extension.unload(); 36 37 extensionDetails.manifest = options.manifest; 38 extension = ExtensionTestUtils.loadExtension(extensionDetails); 39 40 await extension.startup(); 41 42 types = await extension.awaitMessage("typeof-namespace"); 43 equal( 44 types.browser, 45 "object", 46 `Type of browser.${options.namespace} with manifest entry` 47 ); 48 equal( 49 types.chrome, 50 "object", 51 `Type of chrome.${options.namespace} with manifest entry` 52 ); 53 54 await extension.unload(); 55 } 56 57 add_task(async function test_action() { 58 await testPermission({ 59 namespace: "action", 60 manifest: { 61 manifest_version: 3, 62 action: {}, 63 }, 64 }); 65 }); 66 67 add_task(async function test_browserAction() { 68 await testPermission({ 69 namespace: "browserAction", 70 manifest: { 71 browser_action: {}, 72 }, 73 }); 74 }); 75 76 add_task(async function test_pageAction() { 77 await testPermission({ 78 namespace: "pageAction", 79 manifest: { 80 page_action: {}, 81 }, 82 }); 83 });