summaryrefslogtreecommitdiffstats
path: root/LayoutTests/fast/dom/Geolocation/script-tests/reentrant-success.js
diff options
context:
space:
mode:
Diffstat (limited to 'LayoutTests/fast/dom/Geolocation/script-tests/reentrant-success.js')
-rw-r--r--LayoutTests/fast/dom/Geolocation/script-tests/reentrant-success.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/LayoutTests/fast/dom/Geolocation/script-tests/reentrant-success.js b/LayoutTests/fast/dom/Geolocation/script-tests/reentrant-success.js
new file mode 100644
index 0000000..4b83ea7
--- /dev/null
+++ b/LayoutTests/fast/dom/Geolocation/script-tests/reentrant-success.js
@@ -0,0 +1,51 @@
+description("Tests that reentrant calls to Geolocation methods from the success callback are OK.");
+
+var mockLatitude = 51.478;
+var mockLongitude = -0.166;
+var mockAccuracy = 100.0;
+
+window.layoutTestController.setGeolocationPermission(true);
+window.layoutTestController.setMockGeolocationPosition(mockLatitude,
+ mockLongitude,
+ mockAccuracy);
+
+var position;
+var successCallbackInvoked = false;
+navigator.geolocation.getCurrentPosition(function(p) {
+ if (successCallbackInvoked) {
+ testFailed('Success callback invoked unexpectedly');
+ finishJSTest();
+ }
+ successCallbackInvoked = true;
+
+ position = p;
+ shouldBe('position.coords.latitude', 'mockLatitude');
+ shouldBe('position.coords.longitude', 'mockLongitude');
+ shouldBe('position.coords.accuracy', 'mockAccuracy');
+ debug('');
+ continueTest();
+}, function(e) {
+ testFailed('Error callback invoked unexpectedly');
+ finishJSTest();
+});
+
+function continueTest() {
+ window.layoutTestController.setMockGeolocationPosition(++mockLatitude,
+ ++mockLongitude,
+ ++mockAccuracy);
+
+ navigator.geolocation.getCurrentPosition(function(p) {
+ position = p;
+ shouldBe('position.coords.latitude', 'mockLatitude');
+ shouldBe('position.coords.longitude', 'mockLongitude');
+ shouldBe('position.coords.accuracy', 'mockAccuracy');
+ finishJSTest();
+ }, function(e) {
+ testFailed('Error callback invoked unexpectedly');
+ finishJSTest();
+ });
+}
+window.layoutTestController.waitUntilDone();
+
+window.jsTestIsAsync = true;
+window.successfullyParsed = true;