116 lines
3.6 KiB
JavaScript
116 lines
3.6 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const { Realm, WindowRealm } = ChromeUtils.importESModule(
|
|
"chrome://remote/content/shared/Realm.sys.mjs"
|
|
);
|
|
|
|
add_task(function test_id() {
|
|
const realm1 = new Realm();
|
|
const id1 = realm1.id;
|
|
Assert.equal(typeof id1, "string");
|
|
|
|
const realm2 = new Realm();
|
|
const id2 = realm2.id;
|
|
Assert.equal(typeof id2, "string");
|
|
|
|
Assert.notEqual(id1, id2, "Ids for different realms are different");
|
|
});
|
|
|
|
add_task(function test_handleObjectMap() {
|
|
const realm = new Realm();
|
|
|
|
// Test an unknown handle.
|
|
Assert.equal(
|
|
realm.getObjectForHandle("unknown"),
|
|
undefined,
|
|
"Unknown handles return undefined"
|
|
);
|
|
|
|
// Test creating a simple handle.
|
|
const object = {};
|
|
const handle = realm.getHandleForObject(object);
|
|
Assert.equal(typeof handle, "string", "Created a valid handle");
|
|
Assert.equal(
|
|
realm.getObjectForHandle(handle),
|
|
object,
|
|
"Using the handle returned the original object"
|
|
);
|
|
|
|
// Test another handle for the same object.
|
|
const secondHandle = realm.getHandleForObject(object);
|
|
Assert.equal(typeof secondHandle, "string", "Created a valid handle");
|
|
Assert.notEqual(secondHandle, handle, "A different handle was generated");
|
|
Assert.equal(
|
|
realm.getObjectForHandle(secondHandle),
|
|
object,
|
|
"Using the second handle also returned the original object"
|
|
);
|
|
|
|
// Test using the handles in another realm.
|
|
const otherRealm = new Realm();
|
|
Assert.equal(
|
|
otherRealm.getObjectForHandle(handle),
|
|
undefined,
|
|
"A realm returns undefined for handles from another realm"
|
|
);
|
|
|
|
// Removing an unknown handle should not throw or have any side effect on
|
|
// existing handles.
|
|
realm.removeObjectHandle("unknown");
|
|
Assert.equal(realm.getObjectForHandle(handle), object);
|
|
Assert.equal(realm.getObjectForHandle(secondHandle), object);
|
|
|
|
// Remove the second handle
|
|
realm.removeObjectHandle(secondHandle);
|
|
Assert.equal(
|
|
realm.getObjectForHandle(handle),
|
|
object,
|
|
"The first handle is still resolving the object"
|
|
);
|
|
Assert.equal(
|
|
realm.getObjectForHandle(secondHandle),
|
|
undefined,
|
|
"The second handle returns undefined after calling removeObjectHandle"
|
|
);
|
|
|
|
// Remove the original handle
|
|
realm.removeObjectHandle(handle);
|
|
Assert.equal(
|
|
realm.getObjectForHandle(handle),
|
|
undefined,
|
|
"The first handle returns undefined as well"
|
|
);
|
|
});
|
|
|
|
add_task(async function test_windowRealm_isSandbox() {
|
|
const windowlessBrowser = Services.appShell.createWindowlessBrowser(false);
|
|
const contentWindow = windowlessBrowser.docShell.domWindow;
|
|
|
|
const realm1 = new WindowRealm(contentWindow);
|
|
Assert.equal(realm1.isSandbox, false);
|
|
|
|
const realm2 = new WindowRealm(contentWindow, { sandboxName: "test" });
|
|
Assert.equal(realm2.isSandbox, true);
|
|
});
|
|
|
|
add_task(async function test_windowRealm_userActivationEnabled() {
|
|
const windowlessBrowser = Services.appShell.createWindowlessBrowser(false);
|
|
const contentWindow = windowlessBrowser.docShell.domWindow;
|
|
const userActivation = contentWindow.navigator.userActivation;
|
|
|
|
const realm = new WindowRealm(contentWindow);
|
|
|
|
Assert.equal(realm.userActivationEnabled, false);
|
|
Assert.equal(userActivation.isActive && userActivation.hasBeenActive, false);
|
|
|
|
realm.userActivationEnabled = true;
|
|
Assert.equal(realm.userActivationEnabled, true);
|
|
Assert.equal(userActivation.isActive && userActivation.hasBeenActive, true);
|
|
|
|
realm.userActivationEnabled = false;
|
|
Assert.equal(realm.userActivationEnabled, false);
|
|
Assert.equal(userActivation.isActive && userActivation.hasBeenActive, false);
|
|
});
|