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