| <!DOCTYPE html> |
| <meta charset="utf-8" /> |
| <title>Geolocation Test: watchPosition location access denied</title> |
| <link rel="help" href="http://www.w3.org/TR/geolocation-API/#privacy_for_uas" /> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/resources/testdriver.js"></script> |
| <script src="/resources/testdriver-vendor.js"></script> |
| <script> |
| const resetPermission = () => { |
| return test_driver.set_permission({ name: "geolocation" }, "prompt"); |
| }; |
| |
| promise_test(async (t) => { |
| t.add_cleanup(resetPermission); |
| await test_driver.set_permission({ name: "geolocation" }, "denied"); |
| let errorCBCalled = false; |
| let id; |
| const errorPromise = new Promise((resolve, reject) => { |
| id = navigator.geolocation.watchPosition(reject, () => { |
| errorCBCalled = true; |
| resolve(); |
| }); |
| }); |
| assert_false( |
| errorCBCalled, |
| "error callback must not be called synchronously" |
| ); |
| await errorPromise; |
| navigator.geolocation.clearWatch(id); |
| }, "Check that watchPosition returns synchronously before any callbacks are invoked."); |
| |
| promise_test(async (t) => { |
| t.add_cleanup(resetPermission); |
| await test_driver.set_permission({ name: "geolocation" }, "denied"); |
| const promise = new Promise((resolve, reject) => { |
| navigator.geolocation.watchPosition(reject, resolve); |
| }); |
| const result = await promise; |
| assert_true( |
| result instanceof GeolocationPositionError, |
| "expected GeolocationPositionError" |
| ); |
| }, "User denies access, check that error callback is called."); |
| </script> |