1cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockdescription("Tests that when Geolocation permission has been denied prior to a call to a Geolocation method, the error callback is invoked with code PERMISSION_DENIED, when the Geolocation service has a good position.");
2cfb0617749a64f2e177386b030d46007b8c4b179Steve Block
3cfb0617749a64f2e177386b030d46007b8c4b179Steve Block// Prime the Geolocation instance by denying permission.
4545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochif (window.layoutTestController) {
5545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    layoutTestController.setGeolocationPermission(false);
6545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    layoutTestController.setMockGeolocationPosition(51.478, -0.166, 100);
7545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} else
8545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    debug('This test can not be run without the LayoutTestController');
9cfb0617749a64f2e177386b030d46007b8c4b179Steve Block
10cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockvar error;
11cfb0617749a64f2e177386b030d46007b8c4b179Steve Blocknavigator.geolocation.getCurrentPosition(function(p) {
12cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    testFailed('Success callback invoked unexpectedly');
13e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    finishJSTest();
14cfb0617749a64f2e177386b030d46007b8c4b179Steve Block}, function(e) {
15545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    error = e;
16cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    shouldBe('error.code', 'error.PERMISSION_DENIED');
17cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    shouldBe('error.message', '"User denied Geolocation"');
18cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    debug('');
19cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    continueTest();
20cfb0617749a64f2e177386b030d46007b8c4b179Steve Block});
21cfb0617749a64f2e177386b030d46007b8c4b179Steve Block
22cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction continueTest()
23cfb0617749a64f2e177386b030d46007b8c4b179Steve Block{
24cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    // Make another request, with permission already denied.
25cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    navigator.geolocation.getCurrentPosition(function(p) {
26cfb0617749a64f2e177386b030d46007b8c4b179Steve Block        testFailed('Success callback invoked unexpectedly');
27e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        finishJSTest();
28cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    }, function(e) {
29545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        error = e;
30cfb0617749a64f2e177386b030d46007b8c4b179Steve Block        shouldBe('error.code', 'error.PERMISSION_DENIED');
31cfb0617749a64f2e177386b030d46007b8c4b179Steve Block        shouldBe('error.message', '"User denied Geolocation"');
32e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        finishJSTest();
33cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    });
34cfb0617749a64f2e177386b030d46007b8c4b179Steve Block}
35cfb0617749a64f2e177386b030d46007b8c4b179Steve Block
36e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockwindow.jsTestIsAsync = true;
37e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockwindow.successfullyParsed = true;
38