tor-browser

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

browser_observer_notification.js (4017B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 "use strict";
      4 
      5 /* eslint-disable no-unused-vars */
      6 declTest("test observer triggering actor creation", {
      7  observers: ["test-js-window-actor-child-observer"],
      8 
      9  async test(browser) {
     10    await SpecialPowers.spawn(browser, [], async function () {
     11      const TOPIC = "test-js-window-actor-child-observer";
     12      Services.obs.notifyObservers(content.window, TOPIC, "dataString");
     13 
     14      let child = content.windowGlobalChild;
     15      let actorChild = child.getActor("TestWindow");
     16      ok(actorChild, "JSWindowActorChild should have value.");
     17      let { subject, topic, data } = actorChild.lastObserved;
     18 
     19      is(
     20        subject.windowGlobalChild.getActor("TestWindow"),
     21        actorChild,
     22        "Should have been recieved on the right actor"
     23      );
     24      is(topic, TOPIC, "Topic matches");
     25      is(data, "dataString", "Data matches");
     26    });
     27  },
     28 });
     29 
     30 declTest("test observers with null data", {
     31  observers: ["test-js-window-actor-child-observer"],
     32 
     33  async test(browser) {
     34    await SpecialPowers.spawn(browser, [], async function () {
     35      const TOPIC = "test-js-window-actor-child-observer";
     36      Services.obs.notifyObservers(content.window, TOPIC);
     37 
     38      let child = content.windowGlobalChild;
     39      let actorChild = child.getActor("TestWindow");
     40      ok(actorChild, "JSWindowActorChild should have value.");
     41      let { subject, topic, data } = actorChild.lastObserved;
     42 
     43      is(
     44        subject.windowGlobalChild.getActor("TestWindow"),
     45        actorChild,
     46        "Should have been recieved on the right actor"
     47      );
     48      is(topic, TOPIC, "Topic matches");
     49      is(data, null, "Data matches");
     50    });
     51  },
     52 });
     53 
     54 declTest("observers don't notify with wrong window", {
     55  observers: ["test-js-window-actor-child-observer"],
     56 
     57  async test(browser) {
     58    const MSG_RE =
     59      /JSWindowActor TestWindow: expected window subject for topic 'test-js-window-actor-child-observer'/;
     60    let expectMessage = new Promise(resolve => {
     61      Services.console.registerListener(function consoleListener(msg) {
     62        // Run everything async in order to avoid logging messages from the
     63        // console listener.
     64        Cu.dispatch(() => {
     65          if (!MSG_RE.test(msg.message)) {
     66            info("ignoring non-matching console message: " + msg.message);
     67            return;
     68          }
     69          info("received console message: " + msg.message);
     70          is(msg.logLevel, Ci.nsIConsoleMessage.error, "should be an error");
     71 
     72          Services.console.unregisterListener(consoleListener);
     73          resolve();
     74        });
     75      });
     76    });
     77 
     78    await SpecialPowers.spawn(browser, [], async function () {
     79      const TOPIC = "test-js-window-actor-child-observer";
     80      Services.obs.notifyObservers(null, TOPIC);
     81      let child = content.windowGlobalChild;
     82      let actorChild = child.getActor("TestWindow");
     83      ok(actorChild, "JSWindowActorChild should have value.");
     84      is(
     85        actorChild.lastObserved,
     86        undefined,
     87        "Should not receive wrong window's observer notification!"
     88      );
     89    });
     90 
     91    await expectMessage;
     92  },
     93 });
     94 
     95 declTest("observers notify with audio-playback", {
     96  observers: ["audio-playback"],
     97  url: "http://example.com/browser/dom/ipc/tests/JSWindowActor/file_mediaPlayback.html",
     98 
     99  async test(browser) {
    100    await SpecialPowers.spawn(browser, [], async function () {
    101      let audio = content.document.querySelector("audio");
    102      audio.play();
    103 
    104      let child = content.windowGlobalChild;
    105      let actorChild = child.getActor("TestWindow");
    106      ok(actorChild, "JSWindowActorChild should have value.");
    107 
    108      let observePromise = new Promise(resolve => {
    109        actorChild.done = ({ subject, topic, data }) =>
    110          resolve({ subject, topic, data });
    111      });
    112 
    113      let { subject, topic, data } = await observePromise;
    114      is(topic, "audio-playback", "Topic matches");
    115      is(data, "active", "Data matches");
    116    });
    117  },
    118 });