reentrant-success.js revision e78cbe89e6f337f2f1fe40315be88f742b547151
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
7cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockwindow.layoutTestController.setGeolocationPermission(true);
8cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockwindow.layoutTestController.setMockGeolocationPosition(mockLatitude,
9cfb0617749a64f2e177386b030d46007b8c4b179Steve Block                                                       mockLongitude,
10cfb0617749a64f2e177386b030d46007b8c4b179Steve Block                                                       mockAccuracy);
11cfb0617749a64f2e177386b030d46007b8c4b179Steve Block
12cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockvar position;
13cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockvar successCallbackInvoked = false;
14cfb0617749a64f2e177386b030d46007b8c4b179Steve Blocknavigator.geolocation.getCurrentPosition(function(p) {
15cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    if (successCallbackInvoked) {
16cfb0617749a64f2e177386b030d46007b8c4b179Steve Block        testFailed('Success callback invoked unexpectedly');
17e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        finishJSTest();
18cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    }
19cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    successCallbackInvoked = true;
20cfb0617749a64f2e177386b030d46007b8c4b179Steve Block
21cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    position = p;
22cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    shouldBe('position.coords.latitude', 'mockLatitude');
23cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    shouldBe('position.coords.longitude', 'mockLongitude');
24cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    shouldBe('position.coords.accuracy', 'mockAccuracy');
25cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    debug('');
26cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    continueTest();
27cfb0617749a64f2e177386b030d46007b8c4b179Steve Block}, function(e) {
28cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    testFailed('Error callback invoked unexpectedly');
29e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    finishJSTest();
30cfb0617749a64f2e177386b030d46007b8c4b179Steve Block});
31cfb0617749a64f2e177386b030d46007b8c4b179Steve Block
32cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockfunction continueTest() {
33cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    window.layoutTestController.setMockGeolocationPosition(++mockLatitude,
34cfb0617749a64f2e177386b030d46007b8c4b179Steve Block                                                           ++mockLongitude,
35cfb0617749a64f2e177386b030d46007b8c4b179Steve Block                                                           ++mockAccuracy);
36cfb0617749a64f2e177386b030d46007b8c4b179Steve Block
37cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    navigator.geolocation.getCurrentPosition(function(p) {
38cfb0617749a64f2e177386b030d46007b8c4b179Steve Block        position = p;
39cfb0617749a64f2e177386b030d46007b8c4b179Steve Block        shouldBe('position.coords.latitude', 'mockLatitude');
40cfb0617749a64f2e177386b030d46007b8c4b179Steve Block        shouldBe('position.coords.longitude', 'mockLongitude');
41cfb0617749a64f2e177386b030d46007b8c4b179Steve Block        shouldBe('position.coords.accuracy', 'mockAccuracy');
42e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        finishJSTest();
43cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    }, function(e) {
44cfb0617749a64f2e177386b030d46007b8c4b179Steve Block        testFailed('Error callback invoked unexpectedly');
45e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        finishJSTest();
46cfb0617749a64f2e177386b030d46007b8c4b179Steve Block    });
47cfb0617749a64f2e177386b030d46007b8c4b179Steve Block}
48cfb0617749a64f2e177386b030d46007b8c4b179Steve Blockwindow.layoutTestController.waitUntilDone();
49cfb0617749a64f2e177386b030d46007b8c4b179Steve Block
50e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockwindow.jsTestIsAsync = true;
51e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockwindow.successfullyParsed = true;
52