tor-browser

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

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 });