test_ext_tabs_create.html (4669B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>Tabs create Test</title> 6 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 7 <script type="text/javascript" src="/tests/SimpleTest/ExtensionTestUtils.js"></script> 8 <script type="text/javascript" src="head.js"></script> 9 <link rel="stylesheet" href="/tests/SimpleTest/test.css"/> 10 </head> 11 <body> 12 13 <script type="text/javascript"> 14 "use strict"; 15 16 add_task(async function() { 17 await SpecialPowers.pushPrefEnv({ 18 set: [ 19 ["privacy.userContext.enabled", true], 20 ["dom.security.https_first", false], 21 ], 22 }); 23 const extension = ExtensionTestUtils.loadExtension({ 24 manifest: { 25 "permissions": ["tabs", "cookies"], 26 27 "background": {"page": "bg/background.html"}, 28 }, 29 30 files: { 31 "bg/blank.html": `<html><head><meta charset="utf-8"></head></html>`, 32 33 "bg/background.html": `<html><head> 34 <meta charset="utf-8"> 35 <script src="background.js"><\/script> 36 </head></html>`, 37 38 "bg/background.js": function() { 39 let activeTab; 40 41 function runTests() { 42 const DEFAULTS = { 43 active: true, 44 url: "about:blank", 45 }; 46 47 const tests = [ 48 { 49 create: {url: "http://example.com/"}, 50 result: {url: "http://example.com/"}, 51 }, 52 { 53 create: {url: "blank.html"}, 54 result: {url: browser.runtime.getURL("bg/blank.html")}, 55 }, 56 { 57 create: {}, 58 }, 59 { 60 create: {active: false}, 61 result: {active: false}, 62 }, 63 { 64 create: {active: true}, 65 result: {active: true}, 66 }, 67 { 68 create: {cookieStoreId: null}, 69 result: {cookieStoreId: "firefox-default"}, 70 }, 71 { 72 create: {cookieStoreId: "firefox-container-1"}, 73 result: {cookieStoreId: "firefox-container-1"}, 74 }, 75 ]; 76 77 async function nextTest() { 78 if (!tests.length) { 79 browser.test.notifyPass("tabs.create"); 80 return; 81 } 82 83 const test = tests.shift(); 84 const expected = Object.assign({}, DEFAULTS, test.result); 85 86 browser.test.log(`Testing tabs.create(${JSON.stringify(test.create)}), expecting ${JSON.stringify(test.result)}`); 87 88 const updatedPromise = new Promise(resolve => { 89 const onUpdated = (changedTabId, changed) => { 90 // Loading an extension page causes two `about:blank` messages 91 // because of the process switch 92 if (changed.url && (expected.url == "about:blank" || changed.url != "about:blank")) { 93 browser.tabs.onUpdated.removeListener(onUpdated); 94 resolve({tabId: changedTabId, url: changed.url}); 95 } 96 }; 97 browser.tabs.onUpdated.addListener(onUpdated); 98 }); 99 100 const createdPromise = new Promise(resolve => { 101 const onCreated = tab => { 102 browser.test.assertTrue("id" in tab, `Expected tabs.onCreated callback to receive tab object`); 103 resolve(); 104 }; 105 browser.tabs.onCreated.addListener(onCreated); 106 }); 107 108 const [tab] = await Promise.all([ 109 browser.tabs.create(test.create), 110 createdPromise, 111 ]); 112 const tabId = tab.id; 113 114 for (const key of Object.keys(expected)) { 115 if (key === "url") { 116 // FIXME: This doesn't get updated until later in the load cycle. 117 continue; 118 } 119 120 browser.test.assertEq(expected[key], tab[key], `Expected value for tab.${key}`); 121 } 122 123 const updated = await updatedPromise; 124 browser.test.assertEq(tabId, updated.tabId, `Expected value for tab.id`); 125 browser.test.assertEq(expected.url, updated.url, `Expected value for tab.url`); 126 127 await browser.tabs.remove(tabId); 128 await browser.tabs.update(activeTab, {active: true}); 129 130 nextTest(); 131 } 132 133 nextTest(); 134 } 135 136 browser.tabs.query({active: true, currentWindow: true}, tabs => { 137 activeTab = tabs[0].id; 138 139 runTests(); 140 }); 141 }, 142 }, 143 }); 144 145 await extension.startup(); 146 await extension.awaitFinish("tabs.create"); 147 await extension.unload(); 148 await SpecialPowers.popPrefEnv(); 149 }); 150 </script> 151 152 </body> 153 </html>