Bug 1960077 - [webdriver-bidi] Improve validation of geolocation coordinates for "emulation.setGeolocationOverride" command. r=webdriver-reviewers,whimboo

Differential Revision: https://phabricator.services.mozilla.com/D246390
This commit is contained in:
Alexandra Borovova
2025-04-25 19:11:14 +00:00
parent 86170c7251
commit 36911e142c

View File

@@ -89,70 +89,77 @@ class EmulationModule extends RootBiDiModule {
latitude, latitude,
longitude, longitude,
accuracy = 1, accuracy = 1,
// For platform API if we want to set values to null altitude = null,
// we have to set them to NaN. altitudeAccuracy = null,
altitude = NaN, heading = null,
altitudeAccuracy = NaN, speed = null,
heading = NaN,
speed = NaN,
} = coordinates; } = coordinates;
lazy.assert.number( lazy.assert.numberInRange(
latitude, latitude,
lazy.pprint`Expected "latitude" to be a number, got ${latitude}` [-90, 90],
lazy.pprint`Expected "latitude" to be in the range of -90 to 90, got ${latitude}`
); );
lazy.assert.number( lazy.assert.numberInRange(
longitude, longitude,
lazy.pprint`Expected "longitude" to be a number, got ${longitude}` [-180, 180],
lazy.pprint`Expected "longitude" to be in the range of -180 to 180, got ${longitude}`
); );
lazy.assert.number( lazy.assert.positiveNumber(
accuracy, accuracy,
lazy.pprint`Expected "accuracy" to be a number, got ${accuracy}` lazy.pprint`Expected "accuracy" to be a positive number, got ${accuracy}`
); );
if (!Number.isNaN(altitude)) { if (altitude !== null) {
lazy.assert.number( lazy.assert.number(
altitude, altitude,
lazy.pprint`Expected "altitude" to be a number, got ${altitude}` lazy.pprint`Expected "altitude" to be a number, got ${altitude}`
); );
} }
if (!Number.isNaN(altitudeAccuracy)) { if (altitudeAccuracy !== null) {
lazy.assert.number( lazy.assert.positiveNumber(
altitudeAccuracy, altitudeAccuracy,
lazy.pprint`Expected "altitudeAccuracy" to be a number, got ${altitudeAccuracy}` lazy.pprint`Expected "altitudeAccuracy" to be a positive number, got ${altitudeAccuracy}`
); );
if (Number.isNaN(altitude)) { if (altitude === null) {
throw new lazy.error.InvalidArgumentError( throw new lazy.error.InvalidArgumentError(
`When "altitudeAccuracy" is provided it's required to provide "altitude" as well` `When "altitudeAccuracy" is provided it's required to provide "altitude" as well`
); );
} }
} }
if (!Number.isNaN(heading)) { if (heading !== null) {
lazy.assert.number( lazy.assert.number(
heading, heading,
lazy.pprint`Expected "heading" to be a number, got ${heading}` lazy.pprint`Expected "heading" to be a number, got ${heading}`
); );
lazy.assert.that(
number => number >= 0 && number < 360,
lazy.pprint`Expected "heading" to be >= 0 and < 360, got ${heading}`
)(heading);
} }
if (!Number.isNaN(speed)) { if (speed !== null) {
lazy.assert.number( lazy.assert.positiveNumber(
speed, speed,
lazy.pprint`Expected "speed" to be a number, got ${speed}` lazy.pprint`Expected "speed" to be a positive number, got ${speed}`
); );
} }
coordinates = { coordinates = {
...coordinates, ...coordinates,
accuracy, accuracy,
altitude, // For platform API if we want to set values to null
altitudeAccuracy, // we have to set them to NaN.
heading, altitude: altitude === null ? NaN : altitude,
speed, altitudeAccuracy: altitudeAccuracy === null ? NaN : altitudeAccuracy,
heading: heading === null ? NaN : heading,
speed: speed === null ? NaN : speed,
}; };
} }