OLD | NEW |
1 description('Tests that when a cached position is available the callback for get
CurrentPosition is called only once. This is a regression test for http://crbug.
com/311876 .'); | 1 description('Tests that when a cached position is available the callback for get
CurrentPosition is called only once. This is a regression test for http://crbug.
com/311876 .'); |
2 | 2 |
3 if (!window.testRunner || !window.internals) | 3 if (!window.testRunner || !window.mojo) |
4 debug('This test can not run without testRunner or internals'); | 4 debug('This test can not run without testRunner or mojo'); |
5 | |
6 internals.setGeolocationClientMock(document); | |
7 internals.setGeolocationPosition(document, 31.478, -0.166, 100); | |
8 internals.setGeolocationPermission(document, true); | |
9 | 5 |
10 // Only one success callback should be reported per call to getCurrentPosition. | 6 // Only one success callback should be reported per call to getCurrentPosition. |
11 var reportCount = 0; | 7 var reportCount = 0; |
| 8 var isSuccess; |
| 9 |
12 function reportCallback(success, id) { | 10 function reportCallback(success, id) { |
13 isSuccess = success; | 11 isSuccess = success; |
14 shouldBeTrue('isSuccess'); | 12 shouldBeTrue('isSuccess'); |
15 getCurrentPositionCallId = id; | 13 getCurrentPositionCallId = id; |
16 shouldBe('getCurrentPositionCallId', 'reportCount'); | 14 shouldBe('getCurrentPositionCallId', 'reportCount'); |
17 if (++reportCount >= 3) | 15 if (++reportCount >= 3) |
18 finishJSTest(); | 16 finishJSTest(); |
19 } | 17 } |
20 | 18 |
21 var getCurrentPositionCall = 0; | 19 var getCurrentPositionCall = 0; |
22 function getPosition(milliseconds) { | 20 function getPosition(milliseconds) { |
23 var id = getCurrentPositionCall++; | 21 var id = getCurrentPositionCall++; |
24 var fn = function() { | 22 var fn = function() { |
25 navigator.geolocation.getCurrentPosition( | 23 navigator.geolocation.getCurrentPosition( |
26 function(position) { | 24 function(position) { |
27 reportCallback(true, id); | 25 reportCallback(true, id); |
28 }, | 26 }, |
29 function(error) { | 27 function(error) { |
30 reportCallback(false, id); | 28 reportCallback(false, id); |
31 }, | 29 }, |
32 { maximumAge:600000, timeout:0 }); | 30 { maximumAge:600000, timeout:0 }); |
33 }; | 31 }; |
34 setTimeout(fn, milliseconds); | 32 setTimeout(fn, milliseconds); |
35 } | 33 } |
36 | 34 |
37 // The test terminates at the 3rd reported callback. If the bug still exists | 35 geolocationServiceMock.then(mock => { |
38 // this happens after the 2nd call to getCurrentPosition, one of them is a | 36 mock.setGeolocationPosition(31.478, -0.166, 100); |
39 // repeat of the first. | 37 mock.setGeolocationPermission(true); |
40 getPosition(0); | 38 |
41 getPosition(100); | 39 // Make a geolocation request to populate the cached value so requests with
a |
42 getPosition(200); | 40 // timeout of 0 can succeed. |
| 41 navigator.geolocation.getCurrentPosition(function(position) { |
| 42 // The test terminates at the 3rd reported callback. If the bug still ex
ists |
| 43 // this happens after the 2nd call to getCurrentPosition, one of them is
a |
| 44 // repeat of the first. |
| 45 getPosition(0); |
| 46 getPosition(100); |
| 47 getPosition(200); |
| 48 }, function(error) { |
| 49 testFailed('Error callback invoked unexpectedly'); |
| 50 }); |
| 51 }); |
43 | 52 |
44 window.jsTestIsAsync = true; | 53 window.jsTestIsAsync = true; |
OLD | NEW |