permission-denied-already-clear-watch.js revision 545e470e52f0ac6a3a072bf559c796b42c6066b6
1description("Tests that when Geolocation permission has been denied prior to a call to watchPosition, and the watch is cleared in the error callback, there is no crash. This a regression test for https://bugs.webkit.org/show_bug.cgi?id=32111.");
2
3// Prime the Geolocation instance by denying permission.
4if (window.layoutTestController) {
5    layoutTestController.setGeolocationPermission(false);
6    layoutTestController.setMockGeolocationPosition(51.478, -0.166, 100);
7} else
8    debug('This test can not be run without the LayoutTestController');
9
10var error;
11navigator.geolocation.getCurrentPosition(function(p) {
12    testFailed('Success callback invoked unexpectedly');
13    finishJSTest();
14}, function(e) {
15    error = e;
16    shouldBe('error.code', 'error.PERMISSION_DENIED');
17    shouldBe('error.message', '"User denied Geolocation"');
18    debug('');
19    continueTest();
20});
21
22function continueTest()
23{
24    // Make another request, with permission already denied.
25    var watchId = navigator.geolocation.watchPosition(function(p) {
26        testFailed('Success callback invoked unexpectedly');
27        finishJSTest();
28    }, function(e) {
29        error = e;
30        shouldBe('error.code', 'error.PERMISSION_DENIED');
31        shouldBe('error.message', '"User denied Geolocation"');
32        navigator.geolocation.clearWatch(watchId);
33        window.setTimeout(finishJSTest, 0);
34    });
35}
36
37window.jsTestIsAsync = true;
38window.successfullyParsed = true;
39