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>