no bug - Bumping Firefox l10n changesets r=release a=l10n-bump DONTBUILD CLOSED TREE
[gecko.git] / dom / workers / test / browser_consoleSharedWorkers.js
blob54c1d8a73f4f3f6cd40020cbe924bd84b30e13e4
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/. */
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   });
15   const testURL = getRootDirectory(gTestPath) + "empty.html";
16   let tab = BrowserTestUtils.addTab(gBrowser, testURL);
17   gBrowser.selectedTab = tab;
19   await BrowserTestUtils.browserLoaded(gBrowser.getBrowserForTab(tab));
21   let promise = new Promise(resolve => {
22     const ConsoleAPIStorage = SpecialPowers.Cc[
23       "@mozilla.org/consoleAPI-storage;1"
24     ].getService(SpecialPowers.Ci.nsIConsoleAPIStorage);
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     }
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.");
63           ConsoleAPIStorage.removeLogEventListener(this.onConsoleLogEvent);
64           resolve();
65         }
66       },
68       observe: (aSubject, aTopic) => {
69         ok(true, "Something has been received");
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.");
80           Services.obs.removeObserver(cl, "console-api-profiler");
81         }
82       },
83     };
85     var cl = new consoleListener();
86   });
88   await SpecialPowers.spawn(tab.linkedBrowser, [], async function () {
89     new content.SharedWorker("sharedWorker_console.js");
90   });
92   await promise;
94   await BrowserTestUtils.removeTab(tab);
95 });