browser_console_webextension.js (3643B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 // Test that messages from WebExtension are logged in the Browser Console. 5 6 "use strict"; 7 8 const TEST_URI = 9 "https://example.com/browser/devtools/client/webconsole/" + 10 "test/browser/test-console.html?" + 11 Date.now(); 12 13 add_task(async function () { 14 await pushPref("devtools.browsertoolbox.scope", "everything"); 15 await addTab(TEST_URI); 16 17 await testWebExtensionMessages(false); 18 await testWebExtensionMessages(true); 19 }); 20 21 async function testWebExtensionMessages( 22 createWebExtensionBeforeOpeningBrowserConsole = false 23 ) { 24 let extension; 25 if (createWebExtensionBeforeOpeningBrowserConsole) { 26 extension = await loadExtension(); 27 } 28 const hud = await BrowserConsoleManager.toggleBrowserConsole(); 29 if (!createWebExtensionBeforeOpeningBrowserConsole) { 30 extension = await loadExtension(); 31 } 32 33 // TODO: Re-enable this (See Bug 1699050). 34 /* 35 // Trigger the messages logged when opening the popup. 36 const { AppUiTestDelegate } = ChromeUtils.importESModule( 37 "resource://testing-common/AppUiTestDelegate.sys.mjs" 38 ); 39 const onPopupReady = extension.awaitMessage(`popup-ready`); 40 await AppUiTestDelegate.clickBrowserAction(window, extension.id); 41 // Ensure the popup script ran before going further 42 AppUiTestDelegate.awaitExtensionPanel(window, extension.id); 43 await onPopupReady; 44 */ 45 46 // Wait enough so any duplicated message would have the time to be rendered 47 await wait(1000); 48 49 await checkUniqueMessageExists( 50 hud, 51 "content console API message", 52 ".console-api" 53 ); 54 await checkUniqueMessageExists( 55 hud, 56 "background console API message", 57 ".console-api" 58 ); 59 60 await checkUniqueMessageExists(hud, "content error", ".error"); 61 await checkUniqueMessageExists(hud, "background error", ".error"); 62 63 // TODO: Re-enable those checks (See Bug 1699050). 64 // await checkUniqueMessageExists(hud, "popup console API message", ".console-api"); 65 // await checkUniqueMessageExists(hud, "popup error", ".error"); 66 67 await clearOutput(hud); 68 69 info("Close the Browser Console"); 70 await safeCloseBrowserConsole(); 71 72 await extension.unload(); 73 } 74 75 async function loadExtension() { 76 const extension = ExtensionTestUtils.loadExtension({ 77 manifest: { 78 background: { scripts: ["background.js"] }, 79 80 browser_action: { 81 default_popup: "popup.html", 82 }, 83 84 content_scripts: [ 85 { 86 matches: [TEST_URI], 87 js: ["content-script.js"], 88 }, 89 ], 90 }, 91 useAddonManager: "temporary", 92 93 files: { 94 "background.js": function () { 95 console.log("background console API message"); 96 throw new Error("background error"); 97 }, 98 99 "popup.html": ` 100 <!DOCTYPE html> 101 <html> 102 <head> 103 <meta charset="utf-8"> 104 </head> 105 <body>Popup</body> 106 <script src="popup.js"></script> 107 </html>`, 108 109 "popup.js": function () { 110 console.log("popup console API message"); 111 // eslint-disable-next-line mozilla/no-arbitrary-setTimeout 112 setTimeout(() => { 113 throw new Error("popup error"); 114 }, 5); 115 116 // eslint-disable-next-line mozilla/no-arbitrary-setTimeout 117 setTimeout(() => { 118 // eslint-disable-next-line no-undef 119 browser.test.sendMessage(`popup-ready`); 120 }, 10); 121 }, 122 123 "content-script.js": function () { 124 console.log("content console API message"); 125 throw new Error("content error"); 126 }, 127 }, 128 }); 129 await extension.startup(); 130 return extension; 131 }