118 lines
3.9 KiB
JavaScript
118 lines
3.9 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
"use strict";
|
|
|
|
/* eslint-disable no-unused-vars */
|
|
declTest("test observer triggering actor creation", {
|
|
observers: ["test-js-window-actor-child-observer"],
|
|
|
|
async test(browser) {
|
|
await SpecialPowers.spawn(browser, [], async function () {
|
|
const TOPIC = "test-js-window-actor-child-observer";
|
|
Services.obs.notifyObservers(content.window, TOPIC, "dataString");
|
|
|
|
let child = content.windowGlobalChild;
|
|
let actorChild = child.getActor("TestWindow");
|
|
ok(actorChild, "JSWindowActorChild should have value.");
|
|
let { subject, topic, data } = actorChild.lastObserved;
|
|
|
|
is(
|
|
subject.windowGlobalChild.getActor("TestWindow"),
|
|
actorChild,
|
|
"Should have been recieved on the right actor"
|
|
);
|
|
is(topic, TOPIC, "Topic matches");
|
|
is(data, "dataString", "Data matches");
|
|
});
|
|
},
|
|
});
|
|
|
|
declTest("test observers with null data", {
|
|
observers: ["test-js-window-actor-child-observer"],
|
|
|
|
async test(browser) {
|
|
await SpecialPowers.spawn(browser, [], async function () {
|
|
const TOPIC = "test-js-window-actor-child-observer";
|
|
Services.obs.notifyObservers(content.window, TOPIC);
|
|
|
|
let child = content.windowGlobalChild;
|
|
let actorChild = child.getActor("TestWindow");
|
|
ok(actorChild, "JSWindowActorChild should have value.");
|
|
let { subject, topic, data } = actorChild.lastObserved;
|
|
|
|
is(
|
|
subject.windowGlobalChild.getActor("TestWindow"),
|
|
actorChild,
|
|
"Should have been recieved on the right actor"
|
|
);
|
|
is(topic, TOPIC, "Topic matches");
|
|
is(data, null, "Data matches");
|
|
});
|
|
},
|
|
});
|
|
|
|
declTest("observers don't notify with wrong window", {
|
|
observers: ["test-js-window-actor-child-observer"],
|
|
|
|
async test(browser) {
|
|
const MSG_RE =
|
|
/JSWindowActor TestWindow: expected window subject for topic 'test-js-window-actor-child-observer'/;
|
|
let expectMessage = new Promise(resolve => {
|
|
Services.console.registerListener(function consoleListener(msg) {
|
|
// Run everything async in order to avoid logging messages from the
|
|
// console listener.
|
|
Cu.dispatch(() => {
|
|
if (!MSG_RE.test(msg.message)) {
|
|
info("ignoring non-matching console message: " + msg.message);
|
|
return;
|
|
}
|
|
info("received console message: " + msg.message);
|
|
is(msg.logLevel, Ci.nsIConsoleMessage.error, "should be an error");
|
|
|
|
Services.console.unregisterListener(consoleListener);
|
|
resolve();
|
|
});
|
|
});
|
|
});
|
|
|
|
await SpecialPowers.spawn(browser, [], async function () {
|
|
const TOPIC = "test-js-window-actor-child-observer";
|
|
Services.obs.notifyObservers(null, TOPIC);
|
|
let child = content.windowGlobalChild;
|
|
let actorChild = child.getActor("TestWindow");
|
|
ok(actorChild, "JSWindowActorChild should have value.");
|
|
is(
|
|
actorChild.lastObserved,
|
|
undefined,
|
|
"Should not receive wrong window's observer notification!"
|
|
);
|
|
});
|
|
|
|
await expectMessage;
|
|
},
|
|
});
|
|
|
|
declTest("observers notify with audio-playback", {
|
|
observers: ["audio-playback"],
|
|
url: "http://example.com/browser/dom/ipc/tests/JSWindowActor/file_mediaPlayback.html",
|
|
|
|
async test(browser) {
|
|
await SpecialPowers.spawn(browser, [], async function () {
|
|
let audio = content.document.querySelector("audio");
|
|
audio.play();
|
|
|
|
let child = content.windowGlobalChild;
|
|
let actorChild = child.getActor("TestWindow");
|
|
ok(actorChild, "JSWindowActorChild should have value.");
|
|
|
|
let observePromise = new Promise(resolve => {
|
|
actorChild.done = ({ subject, topic, data }) =>
|
|
resolve({ subject, topic, data });
|
|
});
|
|
|
|
let { subject, topic, data } = await observePromise;
|
|
is(topic, "audio-playback", "Topic matches");
|
|
is(data, "active", "Data matches");
|
|
});
|
|
},
|
|
});
|