tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>