| <!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> |