Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE html>
<meta charset="utf-8"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js?feature=bidi"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script>
const latitude = 51.478;
const longitude = -0.166;
const accuracy = 100;
promise_setup(async () => {
// Ensure permission is granted before proceeding.
await test_driver.bidi.permissions.set_permission({
descriptor: {name: "geolocation"},
state: "granted",
});
});
promise_test(async (t) => {
t.add_cleanup(async () => {
await test_driver.bidi.emulation.set_geolocation_override(
{coordinates: null});
});
await test_driver.bidi.emulation.set_geolocation_override({
coordinates: {latitude, longitude, accuracy}
});
const position = await new Promise((resolve, reject) => {
let calledAsync = false;
window.navigator.geolocation.getCurrentPosition(
t.step_func((position) => {
assert_true(
calledAsync,
"Expected callback to be called asynchronously"
);
resolve(position.coords.toJSON());
}),
reject,
{timeout: 200}
);
calledAsync = true;
});
assert_equals(position.latitude, latitude);
assert_equals(position.longitude, longitude);
assert_equals(position.accuracy, accuracy);
}, "getCurrentPosition called with success and error callbacks");
promise_test(async (t) => {
t.add_cleanup(async () => {
await test_driver.bidi.emulation.set_geolocation_override(
{coordinates: null});
});
await test_driver.bidi.emulation.set_geolocation_override({
coordinates: {latitude, longitude, accuracy}
});
const position = await new Promise((resolve, reject) => {
let calledAsync = false;
try {
navigator.geolocation.getCurrentPosition(
t.step_func((position) => {
assert_true(
calledAsync,
"Expected callback to be called asynchronously"
);
resolve(position);
}),
null
);
calledAsync = true;
} catch (err) {
reject(err);
}
});
assert_true(
position instanceof GeolocationPosition,
"Expected GeolocationPosition"
);
assert_equals(position.coords.latitude, latitude);
assert_equals(position.coords.longitude, longitude);
assert_equals(position.coords.accuracy, accuracy);
}, "Error callback is nullable for getCurrentPosition().");
</script>