112 lines
3.1 KiB
JavaScript
112 lines
3.1 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
add_task(async function () {
|
|
const tab = await addTab("about:blank");
|
|
const target = await createAndAttachTargetForTab(tab);
|
|
|
|
const tab2 = await addTab("about:blank");
|
|
const target2 = await createAndAttachTargetForTab(tab2);
|
|
|
|
info("Test the targetFront attribute for the root");
|
|
const { client } = target;
|
|
is(
|
|
client.mainRoot.targetFront,
|
|
null,
|
|
"got null from the targetFront attribute for the root"
|
|
);
|
|
is(
|
|
client.mainRoot.parentFront,
|
|
null,
|
|
"got null from the parentFront attribute for the root"
|
|
);
|
|
|
|
info("Test getting a front twice");
|
|
const getAccessibilityFront = await target.getFront("accessibility");
|
|
const getAccessibilityFront2 = await target.getFront("accessibility");
|
|
is(
|
|
getAccessibilityFront,
|
|
getAccessibilityFront2,
|
|
"got the same front when calling getFront twice"
|
|
);
|
|
is(
|
|
getAccessibilityFront.targetFront,
|
|
target,
|
|
"got the correct targetFront attribute from the front"
|
|
);
|
|
is(
|
|
getAccessibilityFront2.targetFront,
|
|
target,
|
|
"got the correct targetFront attribute from the front"
|
|
);
|
|
is(
|
|
getAccessibilityFront.parentFront,
|
|
target,
|
|
"got the correct parentFront attribute from the front"
|
|
);
|
|
is(
|
|
getAccessibilityFront2.parentFront,
|
|
target,
|
|
"got the correct parentFront attribute from the front"
|
|
);
|
|
|
|
info("Test getting a front on different targets");
|
|
const target1Front = await target.getFront("accessibility");
|
|
const target2Front = await target2.getFront("accessibility");
|
|
is(
|
|
target1Front !== target2Front,
|
|
true,
|
|
"got different fronts when calling getFront on different targets"
|
|
);
|
|
is(
|
|
target1Front.targetFront !== target2Front.targetFront,
|
|
true,
|
|
"got different targetFront from different fronts from different targets"
|
|
);
|
|
is(
|
|
target2Front.targetFront,
|
|
target2,
|
|
"got the correct targetFront attribute from the front"
|
|
);
|
|
|
|
info("Test async front retrieval");
|
|
// use two fronts that are initialized one after the other.
|
|
const asyncFront1 = target.getFront("accessibility");
|
|
const asyncFront2 = target.getFront("accessibility");
|
|
|
|
info("waiting on async fronts returns a real front");
|
|
const awaitedAsyncFront1 = await asyncFront1;
|
|
const awaitedAsyncFront2 = await asyncFront2;
|
|
is(
|
|
awaitedAsyncFront1,
|
|
awaitedAsyncFront2,
|
|
"got the same front when requesting the front first async then sync"
|
|
);
|
|
await target.destroy();
|
|
await target2.destroy();
|
|
|
|
info("destroying a front immediately is possible");
|
|
await testDestroy();
|
|
});
|
|
|
|
async function testDestroy() {
|
|
// initialize a clean target
|
|
const tab = await addTab("about:blank");
|
|
const target = await createAndAttachTargetForTab(tab);
|
|
|
|
// do not wait for the front to finish loading
|
|
target.getFront("accessibility");
|
|
|
|
try {
|
|
await target.destroy();
|
|
ok(
|
|
true,
|
|
"calling destroy on an async front instantiated with getFront does not throw"
|
|
);
|
|
} catch (e) {
|
|
ok(
|
|
false,
|
|
"calling destroy on an async front instantiated with getFront does not throw"
|
|
);
|
|
}
|
|
}
|