| Index: third_party/WebKit/LayoutTests/fast/dom/Geolocation/cached-position-called-once.html
|
| diff --git a/third_party/WebKit/LayoutTests/fast/dom/Geolocation/cached-position-called-once.html b/third_party/WebKit/LayoutTests/fast/dom/Geolocation/cached-position-called-once.html
|
| index 7a54965d42a81149b8487d396f013a76eb246995..56022d002af52dfb28c8475aad8563a78e70c5d5 100644
|
| --- a/third_party/WebKit/LayoutTests/fast/dom/Geolocation/cached-position-called-once.html
|
| +++ b/third_party/WebKit/LayoutTests/fast/dom/Geolocation/cached-position-called-once.html
|
| @@ -6,6 +6,57 @@
|
| <script src="resources/geolocation-mock.js"></script>
|
| </head>
|
| <body>
|
| -<script src="script-tests/cached-position-called-once.js"></script>
|
| +<script>
|
| +description('Tests that when a cached position is available the callback for getCurrentPosition is called only once. This is a regression test for http://crbug.com/311876 .');
|
| +
|
| +// Only one success callback should be reported per call to getCurrentPosition.
|
| +var reportCount = 0;
|
| +var isSuccess;
|
| +
|
| +function reportCallback(success, id) {
|
| + isSuccess = success;
|
| + shouldBeTrue('isSuccess');
|
| + getCurrentPositionCallId = id;
|
| + shouldBe('getCurrentPositionCallId', 'reportCount');
|
| + if (++reportCount >= 3)
|
| + finishJSTest();
|
| +}
|
| +
|
| +var getCurrentPositionCall = 0;
|
| +function getPosition(milliseconds) {
|
| + var id = getCurrentPositionCall++;
|
| + var fn = function() {
|
| + navigator.geolocation.getCurrentPosition(
|
| + function(position) {
|
| + reportCallback(true, id);
|
| + },
|
| + function(error) {
|
| + reportCallback(false, id);
|
| + },
|
| + { maximumAge:600000, timeout:0 });
|
| + };
|
| + setTimeout(fn, milliseconds);
|
| +}
|
| +
|
| +geolocationServiceMock.then(mock => {
|
| + mock.setGeolocationPosition(31.478, -0.166, 100);
|
| + mock.setGeolocationPermission(true);
|
| +
|
| + // Make a geolocation request to populate the cached value so requests with a
|
| + // timeout of 0 can succeed.
|
| + navigator.geolocation.getCurrentPosition(function(position) {
|
| + // The test terminates at the 3rd reported callback. If the bug still exists
|
| + // this happens after the 2nd call to getCurrentPosition, one of them is a
|
| + // repeat of the first.
|
| + getPosition(0);
|
| + getPosition(100);
|
| + getPosition(200);
|
| + }, function(error) {
|
| + testFailed('Error callback invoked unexpectedly');
|
| + });
|
| +});
|
| +
|
| +window.jsTestIsAsync = true;
|
| +</script>
|
| </body>
|
| </html>
|
|
|