forked from mirrors/gecko-dev
Bug 1832792 - [remote] Update RemoteValue deserialization methods to have serializedValue as first argument r=webdriver-reviewers,whimboo
Differential Revision: https://phabricator.services.mozilla.com/D200214
This commit is contained in:
parent
e6a1561035
commit
23adbf7d3d
7 changed files with 46 additions and 46 deletions
|
|
@ -121,10 +121,10 @@ function buildSerialized(type, handle = null) {
|
|||
*
|
||||
* @see https://w3c.github.io/webdriver-bidi/#deserialize-value-list
|
||||
*
|
||||
* @param {Realm} realm
|
||||
* The Realm in which the value is deserialized.
|
||||
* @param {Array} serializedValueList
|
||||
* List of serialized values.
|
||||
* @param {Realm} realm
|
||||
* The Realm in which the value is deserialized.
|
||||
* @param {ExtraDeserializationOptions} extraOptions
|
||||
* Extra Remote Value deserialization options.
|
||||
*
|
||||
|
|
@ -133,7 +133,7 @@ function buildSerialized(type, handle = null) {
|
|||
* @throws {InvalidArgumentError}
|
||||
* If <var>serializedValueList</var> is not an array.
|
||||
*/
|
||||
function deserializeValueList(realm, serializedValueList, extraOptions) {
|
||||
function deserializeValueList(serializedValueList, realm, extraOptions) {
|
||||
lazy.assert.array(
|
||||
serializedValueList,
|
||||
`Expected "serializedValueList" to be an array, got ${serializedValueList}`
|
||||
|
|
@ -142,7 +142,7 @@ function deserializeValueList(realm, serializedValueList, extraOptions) {
|
|||
const deserializedValues = [];
|
||||
|
||||
for (const item of serializedValueList) {
|
||||
deserializedValues.push(deserialize(realm, item, extraOptions));
|
||||
deserializedValues.push(deserialize(item, realm, extraOptions));
|
||||
}
|
||||
|
||||
return deserializedValues;
|
||||
|
|
@ -153,10 +153,10 @@ function deserializeValueList(realm, serializedValueList, extraOptions) {
|
|||
*
|
||||
* @see https://w3c.github.io/webdriver-bidi/#deserialize-key-value-list
|
||||
*
|
||||
* @param {Realm} realm
|
||||
* The Realm in which the value is deserialized.
|
||||
* @param {Array} serializedKeyValueList
|
||||
* List of serialized key-value.
|
||||
* @param {Realm} realm
|
||||
* The Realm in which the value is deserialized.
|
||||
* @param {ExtraDeserializationOptions} extraOptions
|
||||
* Extra Remote Value deserialization options.
|
||||
*
|
||||
|
|
@ -166,7 +166,7 @@ function deserializeValueList(realm, serializedValueList, extraOptions) {
|
|||
* If <var>serializedKeyValueList</var> is not an array or
|
||||
* not an array of key-value arrays.
|
||||
*/
|
||||
function deserializeKeyValueList(realm, serializedKeyValueList, extraOptions) {
|
||||
function deserializeKeyValueList(serializedKeyValueList, realm, extraOptions) {
|
||||
lazy.assert.array(
|
||||
serializedKeyValueList,
|
||||
`Expected "serializedKeyValueList" to be an array, got ${serializedKeyValueList}`
|
||||
|
|
@ -184,8 +184,8 @@ function deserializeKeyValueList(realm, serializedKeyValueList, extraOptions) {
|
|||
const deserializedKey =
|
||||
typeof serializedKey == "string"
|
||||
? serializedKey
|
||||
: deserialize(realm, serializedKey, extraOptions);
|
||||
const deserializedValue = deserialize(realm, serializedValue, extraOptions);
|
||||
: deserialize(serializedKey, realm, extraOptions);
|
||||
const deserializedValue = deserialize(serializedValue, realm, extraOptions);
|
||||
|
||||
deserializedKeyValueList.push([deserializedKey, deserializedValue]);
|
||||
}
|
||||
|
|
@ -252,16 +252,16 @@ function deserializeSharedReference(sharedRef, realm, extraOptions) {
|
|||
*
|
||||
* @see https://w3c.github.io/webdriver-bidi/#deserialize-local-value
|
||||
*
|
||||
* @param {Realm} realm
|
||||
* The Realm in which the value is deserialized.
|
||||
* @param {object} serializedValue
|
||||
* Value of any type to be deserialized.
|
||||
* @param {Realm} realm
|
||||
* The Realm in which the value is deserialized.
|
||||
* @param {ExtraDeserializationOptions} extraOptions
|
||||
* Extra Remote Value deserialization options.
|
||||
*
|
||||
* @returns {object} Deserialized representation of the value.
|
||||
*/
|
||||
export function deserialize(realm, serializedValue, extraOptions) {
|
||||
export function deserialize(serializedValue, realm, extraOptions) {
|
||||
const { handle, sharedId, type, value } = serializedValue;
|
||||
|
||||
// With a shared id present deserialize as node reference.
|
||||
|
|
@ -347,7 +347,7 @@ export function deserialize(realm, serializedValue, extraOptions) {
|
|||
// Non-primitive protocol values
|
||||
case "array":
|
||||
const array = realm.cloneIntoRealm([]);
|
||||
deserializeValueList(realm, value, extraOptions).forEach(v =>
|
||||
deserializeValueList(value, realm, extraOptions).forEach(v =>
|
||||
array.push(v)
|
||||
);
|
||||
return array;
|
||||
|
|
@ -363,14 +363,14 @@ export function deserialize(realm, serializedValue, extraOptions) {
|
|||
return realm.cloneIntoRealm(new Date(value));
|
||||
case "map":
|
||||
const map = realm.cloneIntoRealm(new Map());
|
||||
deserializeKeyValueList(realm, value, extraOptions).forEach(([k, v]) =>
|
||||
deserializeKeyValueList(value, realm, extraOptions).forEach(([k, v]) =>
|
||||
map.set(k, v)
|
||||
);
|
||||
|
||||
return map;
|
||||
case "object":
|
||||
const object = realm.cloneIntoRealm({});
|
||||
deserializeKeyValueList(realm, value, extraOptions).forEach(
|
||||
deserializeKeyValueList(value, realm, extraOptions).forEach(
|
||||
([k, v]) => (object[k] = v)
|
||||
);
|
||||
return object;
|
||||
|
|
@ -399,7 +399,7 @@ export function deserialize(realm, serializedValue, extraOptions) {
|
|||
}
|
||||
case "set":
|
||||
const set = realm.cloneIntoRealm(new Set());
|
||||
deserializeValueList(realm, value, extraOptions).forEach(v => set.add(v));
|
||||
deserializeValueList(value, realm, extraOptions).forEach(v => set.add(v));
|
||||
return set;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -26,20 +26,20 @@ export class WindowGlobalBiDiModule extends Module {
|
|||
/**
|
||||
* Wrapper to deserialize a local / remote value.
|
||||
*
|
||||
* @param {Realm} realm
|
||||
* The Realm in which the value is deserialized.
|
||||
* @param {object} serializedValue
|
||||
* Value of any type to be deserialized.
|
||||
* @param {Realm} realm
|
||||
* The Realm in which the value is deserialized.
|
||||
* @param {ExtraSerializationOptions=} extraOptions
|
||||
* Extra Remote Value deserialization options.
|
||||
*
|
||||
* @returns {object}
|
||||
* Deserialized representation of the value.
|
||||
*/
|
||||
deserialize(realm, serializedValue, extraOptions = {}) {
|
||||
deserialize(serializedValue, realm, extraOptions = {}) {
|
||||
extraOptions.nodeCache = this.#nodeCache;
|
||||
|
||||
return lazy.deserialize(realm, serializedValue, extraOptions);
|
||||
return lazy.deserialize(serializedValue, realm, extraOptions);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -380,7 +380,7 @@ class BrowsingContextModule extends WindowGlobalBiDiModule {
|
|||
|
||||
case lazy.ClipRectangleType.Element: {
|
||||
const realm = this.messageHandler.getRealm();
|
||||
const element = this.deserialize(realm, clip.element);
|
||||
const element = this.deserialize(clip.element, realm);
|
||||
const viewportRect = this.#getOriginRectangle(
|
||||
lazy.OriginType.viewport
|
||||
);
|
||||
|
|
@ -417,7 +417,7 @@ class BrowsingContextModule extends WindowGlobalBiDiModule {
|
|||
contextNodes.push(this.messageHandler.window.document.documentElement);
|
||||
} else {
|
||||
for (const serializedStartNode of startNodes) {
|
||||
const startNode = this.deserialize(realm, serializedStartNode);
|
||||
const startNode = this.deserialize(serializedStartNode, realm);
|
||||
lazy.assert.that(
|
||||
startNode =>
|
||||
Node.isInstance(startNode) &&
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ class InputModule extends WindowGlobalBiDiModule {
|
|||
|
||||
const realm = this.messageHandler.getRealm();
|
||||
|
||||
const element = this.deserialize(realm, sharedReference);
|
||||
const element = this.deserialize(sharedReference, realm);
|
||||
if (!lazy.dom.isElement(element)) {
|
||||
throw new lazy.error.NoSuchElementError(
|
||||
`No element found for shared id: ${sharedReference.sharedId}`
|
||||
|
|
|
|||
|
|
@ -243,7 +243,7 @@ class ScriptModule extends WindowGlobalBiDiModule {
|
|||
} = script;
|
||||
const realm = this.messageHandler.getRealm({ sandboxName: sandbox });
|
||||
const deserializedArguments = commandArguments.map(arg =>
|
||||
this.deserialize(realm, arg, {
|
||||
this.deserialize(arg, realm, {
|
||||
emitScriptMessage: this.#emitScriptMessage,
|
||||
})
|
||||
);
|
||||
|
|
@ -352,7 +352,7 @@ class ScriptModule extends WindowGlobalBiDiModule {
|
|||
const deserializedArguments =
|
||||
commandArguments !== null
|
||||
? commandArguments.map(arg =>
|
||||
this.deserialize(realm, arg, {
|
||||
this.deserialize(arg, realm, {
|
||||
emitScriptMessage: this.#emitScriptMessage,
|
||||
})
|
||||
)
|
||||
|
|
@ -360,7 +360,7 @@ class ScriptModule extends WindowGlobalBiDiModule {
|
|||
|
||||
const deserializedThis =
|
||||
thisParameter !== null
|
||||
? this.deserialize(realm, thisParameter, {
|
||||
? this.deserialize(thisParameter, realm, {
|
||||
emitScriptMessage: this.#emitScriptMessage,
|
||||
})
|
||||
: null;
|
||||
|
|
|
|||
|
|
@ -397,7 +397,7 @@ add_task(function test_deserializePrimitiveTypes() {
|
|||
const { value: expectedValue, serialized } = type;
|
||||
|
||||
info(`Checking '${serialized.type}'`);
|
||||
const value = deserialize(realm, serialized, {});
|
||||
const value = deserialize(serialized, realm, {});
|
||||
|
||||
if (serialized.value == "NaN") {
|
||||
ok(Number.isNaN(value), `Got expected value for ${serialized}`);
|
||||
|
|
@ -434,7 +434,7 @@ add_task(function test_deserializeDateLocalValue() {
|
|||
];
|
||||
for (const dateString of validaDateStrings) {
|
||||
info(`Checking '${dateString}'`);
|
||||
const value = deserialize(realm, { type: "date", value: dateString }, {});
|
||||
const value = deserialize({ type: "date", value: dateString }, realm, {});
|
||||
|
||||
Assert.equal(
|
||||
value.getTime(),
|
||||
|
|
@ -456,7 +456,7 @@ add_task(function test_deserializeLocalValues() {
|
|||
}
|
||||
|
||||
info(`Checking '${serialized.type}'`);
|
||||
const value = deserialize(realm, serialized, {});
|
||||
const value = deserialize(serialized, realm, {});
|
||||
assertLocalValue(serialized.type, value, expectedValue);
|
||||
}
|
||||
});
|
||||
|
|
@ -486,7 +486,7 @@ add_task(async function test_deserializeChannel() {
|
|||
};
|
||||
|
||||
info(`Checking 'channel'`);
|
||||
const value = deserialize(realm, channel, deserializationOptions, {});
|
||||
const value = deserialize(channel, realm, deserializationOptions, {});
|
||||
Assert.equal(
|
||||
Object.prototype.toString.call(value),
|
||||
"[object Function]",
|
||||
|
|
@ -522,18 +522,18 @@ add_task(function test_deserializeLocalValuesByHandle() {
|
|||
const remoteReference = { handle: serializedValue.handle };
|
||||
|
||||
// Check that the remote reference can be deserialized in realm1.
|
||||
const value = deserialize(realm1, remoteReference, {});
|
||||
const value = deserialize(remoteReference, realm1, {});
|
||||
assertLocalValue(serialized.type, value, expectedValue);
|
||||
|
||||
Assert.throws(
|
||||
() => deserialize(realm2, remoteReference, {}),
|
||||
() => deserialize(remoteReference, realm2, {}),
|
||||
/NoSuchHandleError:/,
|
||||
`Got expected error when using the wrong realm for deserialize`
|
||||
);
|
||||
|
||||
realm1.removeObjectHandle(serializedValue.handle);
|
||||
Assert.throws(
|
||||
() => deserialize(realm1, remoteReference, {}),
|
||||
() => deserialize(remoteReference, realm1, {}),
|
||||
/NoSuchHandleError:/,
|
||||
`Got expected error when after deleting the object handle`
|
||||
);
|
||||
|
|
@ -547,7 +547,7 @@ add_task(function test_deserializeHandleInvalidTypes() {
|
|||
info(`Checking type: '${invalidType}'`);
|
||||
|
||||
Assert.throws(
|
||||
() => deserialize(realm, { type: "object", handle: invalidType }, {}),
|
||||
() => deserialize({ type: "object", handle: invalidType }, realm, {}),
|
||||
/InvalidArgumentError:/,
|
||||
`Got expected error for type ${invalidType}`
|
||||
);
|
||||
|
|
@ -574,7 +574,7 @@ add_task(function test_deserializePrimitiveTypesInvalidValues() {
|
|||
info(`Checking '${type}' with value ${value}`);
|
||||
|
||||
Assert.throws(
|
||||
() => deserialize(realm, { type, value }, {}),
|
||||
() => deserialize({ type, value }, realm, {}),
|
||||
/InvalidArgument/,
|
||||
`Got expected error for type ${type} and value ${value}`
|
||||
);
|
||||
|
|
@ -622,7 +622,7 @@ add_task(function test_deserializeDateLocalValueInvalidValues() {
|
|||
info(`Checking '${dateString}'`);
|
||||
|
||||
Assert.throws(
|
||||
() => deserialize(realm, { type: "date", value: dateString }, {}),
|
||||
() => deserialize({ type: "date", value: dateString }, realm, {}),
|
||||
/InvalidArgumentError:/,
|
||||
`Got expected error for date string: ${dateString}`
|
||||
);
|
||||
|
|
@ -638,7 +638,7 @@ add_task(function test_deserializeLocalValuesInvalidType() {
|
|||
info(`Checking type: '${invalidType}'`);
|
||||
|
||||
Assert.throws(
|
||||
() => deserialize(realm, { type: invalidType }, {}),
|
||||
() => deserialize({ type: invalidType }, realm, {}),
|
||||
/InvalidArgumentError:/,
|
||||
`Got expected error for type ${invalidType}`
|
||||
);
|
||||
|
|
@ -646,11 +646,11 @@ add_task(function test_deserializeLocalValuesInvalidType() {
|
|||
Assert.throws(
|
||||
() =>
|
||||
deserialize(
|
||||
realm,
|
||||
{
|
||||
type: "array",
|
||||
value: [{ type: invalidType }],
|
||||
},
|
||||
realm,
|
||||
{}
|
||||
),
|
||||
/InvalidArgumentError:/,
|
||||
|
|
@ -763,7 +763,7 @@ add_task(function test_deserializeLocalValuesInvalidValues() {
|
|||
info(`Checking '${type}' with value ${value}`);
|
||||
|
||||
Assert.throws(
|
||||
() => deserialize(realm, { type, value }, {}),
|
||||
() => deserialize({ type, value }, realm, {}),
|
||||
/InvalidArgumentError:/,
|
||||
`Got expected error for type ${type} and value ${value}`
|
||||
);
|
||||
|
|
@ -1111,7 +1111,7 @@ function deserializeInWindowRealm(serialized) {
|
|||
);
|
||||
const realm = new WindowRealm(content);
|
||||
info(`Checking '${_serialized.type}'`);
|
||||
return deserialize(realm, _serialized, {});
|
||||
return deserialize(_serialized, realm, {});
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ add_task(async function test_deserializeSharedIdInvalidTypes() {
|
|||
};
|
||||
|
||||
Assert.throws(
|
||||
() => deserialize(realm, serializedValue, { nodeCache }),
|
||||
() => deserialize(serializedValue, realm, { nodeCache }),
|
||||
/InvalidArgumentError:/,
|
||||
`Got expected error for type ${invalidType}`
|
||||
);
|
||||
|
|
@ -30,7 +30,7 @@ add_task(async function test_deserializeSharedIdInvalidValue() {
|
|||
};
|
||||
|
||||
Assert.throws(
|
||||
() => deserialize(realm, serializedValue, { nodeCache }),
|
||||
() => deserialize(serializedValue, realm, { nodeCache }),
|
||||
/NoSuchNodeError:/,
|
||||
"Got expected error for unknown 'sharedId'"
|
||||
);
|
||||
|
|
@ -48,7 +48,7 @@ add_task(async function test_deserializeSharedId() {
|
|||
sharedId: domElRef,
|
||||
};
|
||||
|
||||
const node = deserialize(realm, serializedValue, { nodeCache });
|
||||
const node = deserialize(serializedValue, realm, { nodeCache });
|
||||
|
||||
Assert.equal(node, domEl);
|
||||
});
|
||||
|
|
@ -66,7 +66,7 @@ add_task(async function test_deserializeSharedIdPrecedenceOverHandle() {
|
|||
sharedId: domElRef,
|
||||
};
|
||||
|
||||
const node = deserialize(realm, serializedValue, { nodeCache });
|
||||
const node = deserialize(serializedValue, realm, { nodeCache });
|
||||
|
||||
Assert.equal(node, domEl);
|
||||
});
|
||||
|
|
@ -84,7 +84,7 @@ add_task(async function test_deserializeSharedIdNoWindowRealm() {
|
|||
};
|
||||
|
||||
Assert.throws(
|
||||
() => deserialize(new Realm(), serializedValue, { nodeCache }),
|
||||
() => deserialize(serializedValue, new Realm(), { nodeCache }),
|
||||
/NoSuchNodeError/,
|
||||
`Got expected error for a non-window realm`
|
||||
);
|
||||
|
|
@ -106,7 +106,7 @@ add_task(async function test_deserializeSharedIdOtherBrowsingContext() {
|
|||
sharedId: domElRef,
|
||||
};
|
||||
|
||||
const node = deserialize(realm, serializedValue, { nodeCache });
|
||||
const node = deserialize(serializedValue, realm, { nodeCache });
|
||||
|
||||
Assert.equal(node, null);
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue