1cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockdescription("Tests that reentrant calls to Geolocation methods from the success callback are OK.");
2cfb0617749a64f2e177386b030d46007b8c4b179Steve Block
3cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockvar mockLatitude = 51.478;
4cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockvar mockLongitude = -0.166;
5cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockvar mockAccuracy = 100.0;
6cfb0617749a64f2e177386b030d46007b8c4b179Steve Block
7545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochif (window.layoutTestController) {
8545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    layoutTestController.setGeolocationPermission(true);
9545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    layoutTestController.setMockGeolocationPosition(mockLatitude,
10545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch                                                    mockLongitude,
11545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch                                                    mockAccuracy);
12545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} else
13545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    debug('This test can not be run without the LayoutTestController');
14cfb0617749a64f2e177386b030d46007b8c4b179Steve Block
15cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockvar position;
16cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockvar successCallbackInvoked = false;
17cfb0617749a64f2e177386b030d46007b8c4b179Steve Blocknavigator.geolocation.getCurrentPosition(function(p) {
18cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    if (successCallbackInvoked) {
19cfb0617749a64f2e177386b030d46007b8c4b179Steve Block        testFailed('Success callback invoked unexpectedly');
20e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        finishJSTest();
21cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    }
22cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    successCallbackInvoked = true;
23cfb0617749a64f2e177386b030d46007b8c4b179Steve Block
24cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    position = p;
25cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    shouldBe('position.coords.latitude', 'mockLatitude');
26cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    shouldBe('position.coords.longitude', 'mockLongitude');
27cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    shouldBe('position.coords.accuracy', 'mockAccuracy');
28cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    debug('');
29cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    continueTest();
30cfb0617749a64f2e177386b030d46007b8c4b179Steve Block}, function(e) {
31cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    testFailed('Error callback invoked unexpectedly');
32e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    finishJSTest();
33cfb0617749a64f2e177386b030d46007b8c4b179Steve Block});
34cfb0617749a64f2e177386b030d46007b8c4b179Steve Block
35cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction continueTest() {
36545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    if (window.layoutTestController)
37545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        layoutTestController.setMockGeolocationPosition(++mockLatitude,
38545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch                                                        ++mockLongitude,
39545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch                                                        ++mockAccuracy);
40cfb0617749a64f2e177386b030d46007b8c4b179Steve Block
41cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    navigator.geolocation.getCurrentPosition(function(p) {
42cfb0617749a64f2e177386b030d46007b8c4b179Steve Block        position = p;
43cfb0617749a64f2e177386b030d46007b8c4b179Steve Block        shouldBe('position.coords.latitude', 'mockLatitude');
44cfb0617749a64f2e177386b030d46007b8c4b179Steve Block        shouldBe('position.coords.longitude', 'mockLongitude');
45cfb0617749a64f2e177386b030d46007b8c4b179Steve Block        shouldBe('position.coords.accuracy', 'mockAccuracy');
46e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        finishJSTest();
47cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    }, function(e) {
48cfb0617749a64f2e177386b030d46007b8c4b179Steve Block        testFailed('Error callback invoked unexpectedly');
49e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        finishJSTest();
50cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    });
51cfb0617749a64f2e177386b030d46007b8c4b179Steve Block}
52cfb0617749a64f2e177386b030d46007b8c4b179Steve Block
53e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockwindow.jsTestIsAsync = true;
54e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockwindow.successfullyParsed = true;
55