tor-browser

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

test_ext_tab_runtimeConnect.html (2825B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <meta charset="utf-8">
      5  <title>Tabs runtimeConnect 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  const win = window.open("http://mochi.test:8888/");
     18 
     19  const extension = ExtensionTestUtils.loadExtension({
     20    manifest: {
     21      "permissions": ["tabs"],
     22    },
     23 
     24    background: function() {
     25      const messages_received = [];
     26 
     27      let tabId;
     28 
     29      browser.runtime.onConnect.addListener((port) => {
     30        browser.test.assertTrue(!!port, "tab to background port received");
     31        browser.test.assertEq("tab-connection-name", port.name, "port name should be defined and equal to connectInfo.name");
     32        browser.test.assertTrue(!!port.sender.tab, "port.sender.tab should be defined");
     33        browser.test.assertEq(tabId, port.sender.tab.id, "port.sender.tab.id should be equal to the expected tabId");
     34 
     35        port.onMessage.addListener((msg) => {
     36          messages_received.push(msg);
     37 
     38          if (messages_received.length == 1) {
     39            browser.test.assertEq("tab to background port message", msg, "'tab to background' port message received");
     40            port.postMessage("background to tab port message");
     41          }
     42 
     43          if (messages_received.length == 2) {
     44            browser.test.assertTrue(!!msg.tabReceived, "'background to tab' reply port message received");
     45            browser.test.assertEq("background to tab port message", msg.tabReceived, "reply port content contains the message received");
     46 
     47            browser.test.notifyPass("tabRuntimeConnect.pass");
     48          }
     49        });
     50      });
     51 
     52      browser.tabs.create({url: "tab.html"},
     53                          (tab) => { tabId = tab.id; });
     54    },
     55 
     56    files: {
     57      "tab.js": function() {
     58        const port = browser.runtime.connect({name: "tab-connection-name"});
     59        port.postMessage("tab to background port message");
     60        port.onMessage.addListener((msg) => {
     61          port.postMessage({tabReceived: msg});
     62        });
     63      },
     64      "tab.html": `
     65        <!DOCTYPE html>
     66        <html>
     67          <head>
     68            <title>test tab extension page</title>
     69            <meta charset="utf-8">
     70            <script src="tab.js" async><\/script>
     71          </head>
     72          <body>
     73            <h1>test tab extension page</h1>
     74          </body>
     75        </html>
     76      `,
     77    },
     78  });
     79 
     80  await extension.startup();
     81  await extension.awaitFinish("tabRuntimeConnect.pass");
     82  await extension.unload();
     83 
     84  win.close();
     85 });
     86 </script>
     87 
     88 </body>
     89 </html>