browser_consoleSharedWorkers.js (3041B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 add_task(async function test() { 6 await SpecialPowers.pushPrefEnv({ 7 set: [ 8 [ 9 "dom.postMessage.sharedArrayBuffer.bypassCOOP_COEP.insecure.enabled", 10 true, 11 ], 12 ], 13 }); 14 15 const testURL = getRootDirectory(gTestPath) + "empty.html"; 16 let tab = BrowserTestUtils.addTab(gBrowser, testURL); 17 gBrowser.selectedTab = tab; 18 19 await BrowserTestUtils.browserLoaded(gBrowser.getBrowserForTab(tab)); 20 21 let promise = new Promise(resolve => { 22 const ConsoleAPIStorage = SpecialPowers.Cc[ 23 "@mozilla.org/consoleAPI-storage;1" 24 ].getService(SpecialPowers.Ci.nsIConsoleAPIStorage); 25 26 function consoleListener() { 27 this.onConsoleLogEvent = this.onConsoleLogEvent.bind(this); 28 ConsoleAPIStorage.addLogEventListener( 29 this.onConsoleLogEvent, 30 SpecialPowers.wrap(document).nodePrincipal 31 ); 32 Services.obs.addObserver(this, "console-api-profiler"); 33 } 34 35 var order = 0; 36 consoleListener.prototype = { 37 onConsoleLogEvent(aSubject) { 38 var obj = aSubject.wrappedJSObject; 39 if (order == 1) { 40 is( 41 obj.arguments[0], 42 "Hello world from a SharedWorker!", 43 "A message from a SharedWorker \\o/" 44 ); 45 is(obj.ID, "sharedWorker_console.js", "The ID is SharedWorker"); 46 is(obj.innerID, "SharedWorker", "The ID is SharedWorker"); 47 is(order++, 1, "Then a first log message."); 48 } else { 49 is( 50 obj.arguments[0], 51 "Here is a SAB", 52 "A message from a SharedWorker \\o/" 53 ); 54 is( 55 obj.arguments[1].constructor.name, 56 "SharedArrayBuffer", 57 "We got a direct reference to the SharedArrayBuffer coming from the worker thread" 58 ); 59 is(obj.ID, "sharedWorker_console.js", "The ID is SharedWorker"); 60 is(obj.innerID, "SharedWorker", "The ID is SharedWorker"); 61 is(order++, 2, "Then a second log message."); 62 63 ConsoleAPIStorage.removeLogEventListener(this.onConsoleLogEvent); 64 resolve(); 65 } 66 }, 67 68 observe: (aSubject, aTopic) => { 69 ok(true, "Something has been received"); 70 71 if (aTopic == "console-api-profiler") { 72 var obj = aSubject.wrappedJSObject; 73 is( 74 obj.arguments[0], 75 "Hello profiling from a SharedWorker!", 76 "A message from a SharedWorker \\o/" 77 ); 78 is(order++, 0, "First a profiler message."); 79 80 Services.obs.removeObserver(cl, "console-api-profiler"); 81 } 82 }, 83 }; 84 85 var cl = new consoleListener(); 86 }); 87 88 await SpecialPowers.spawn(tab.linkedBrowser, [], async function () { 89 new content.SharedWorker("sharedWorker_console.js"); 90 }); 91 92 await promise; 93 94 await BrowserTestUtils.removeTab(tab); 95 });