tor-browser

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

test_ext_tabs_executeScript_bad.html (4163B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <meta charset="utf-8">
      5  <title>Tabs executeScript Bad 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 function* testHasNoPermission(params) {
     17  const contentSetup = params.contentSetup || (() => Promise.resolve());
     18 
     19  async function background(contentSetup) {
     20    browser.test.onMessage.addListener(async msg => {
     21      browser.test.assertEq(msg, "execute-script");
     22 
     23      await browser.test.assertRejects(browser.tabs.executeScript({
     24        file: "script.js",
     25      }), /Missing host permission for the tab/);
     26 
     27      browser.test.notifyPass("executeScript");
     28    });
     29 
     30    await contentSetup();
     31 
     32    browser.test.sendMessage("ready");
     33  }
     34 
     35  const extension = ExtensionTestUtils.loadExtension({
     36    manifest: params.manifest,
     37 
     38    background: `(${background})(${contentSetup})`,
     39 
     40    files: {
     41      "script.js": function() {
     42        browser.runtime.sendMessage("first script ran");
     43      },
     44    },
     45  });
     46 
     47  yield extension.startup();
     48  yield extension.awaitMessage("ready");
     49 
     50  if (params.setup) {
     51    yield params.setup(extension);
     52  }
     53 
     54  extension.sendMessage("execute-script");
     55 
     56  yield extension.awaitFinish("executeScript");
     57  yield extension.unload();
     58 }
     59 
     60 add_task(async function testBadPermissions() {
     61  const win = window.open("http://mochi.test:8888/");
     62 
     63  await new Promise(resolve => setTimeout(resolve, 0));
     64 
     65  info("Test no special permissions");
     66  await testHasNoPermission({
     67    manifest: {"permissions": []},
     68  });
     69 
     70  info("Test tabs permissions");
     71  await testHasNoPermission({
     72    manifest: {"permissions": ["tabs"]},
     73  });
     74 
     75  win.close();
     76 });
     77 
     78 add_task(async function testBadURL() {
     79  async function background() {
     80    const promises = [
     81      new Promise(resolve => {
     82        browser.tabs.executeScript({
     83          file: "http://example.com/script.js",
     84        }, result => {
     85          browser.test.assertEq(undefined, result, "Result value");
     86 
     87          browser.test.assertTrue(browser.runtime.lastError instanceof Error,
     88                                  "runtime.lastError is Error");
     89 
     90          browser.test.assertTrue(browser.runtime.lastError instanceof Error,
     91                                  "runtime.lastError is Error");
     92 
     93          browser.test.assertEq(
     94            "Files to be injected must be within the extension",
     95            browser.runtime.lastError && browser.runtime.lastError.message,
     96            "runtime.lastError value");
     97 
     98          browser.test.assertEq(
     99            "Files to be injected must be within the extension",
    100            browser.runtime.lastError && browser.runtime.lastError.message,
    101            "runtime.lastError value");
    102 
    103          resolve();
    104        });
    105      }),
    106 
    107      browser.tabs.executeScript({
    108        file: "http://example.com/script.js",
    109      }).catch(error => {
    110        browser.test.assertTrue(error instanceof Error, "Error is Error");
    111 
    112        browser.test.assertEq(null, browser.runtime.lastError,
    113                              "runtime.lastError value");
    114 
    115        browser.test.assertEq(null, browser.runtime.lastError,
    116                              "runtime.lastError value");
    117 
    118        browser.test.assertEq(
    119          "Files to be injected must be within the extension",
    120          error && error.message,
    121          "error value");
    122      }),
    123    ];
    124 
    125    await Promise.all(promises);
    126 
    127    browser.test.notifyPass("executeScript-lastError");
    128  }
    129 
    130  const extension = ExtensionTestUtils.loadExtension({
    131    manifest: {
    132      "permissions": ["<all_urls>"],
    133    },
    134 
    135    background,
    136  });
    137 
    138  await extension.startup();
    139 
    140  await extension.awaitFinish("executeScript-lastError");
    141 
    142  await extension.unload();
    143 });
    144 
    145 // TODO bug 1435100: Test that |executeScript| fails if the tab has navigated
    146 // to a new page, and no longer matches our expected state. This involves
    147 // intentionally trying to trigger a race condition.
    148 </script>
    149 
    150 </body>
    151 </html>