16b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerdescription("Tests that Geoposition timestamps are well-formed (non-zero and in the same units as Date.getTime).");
26b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner
36b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennervar mockLatitude = 51.478;
46b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennervar mockLongitude = -0.166;
56b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennervar mockAccuracy = 100.0;
66b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner
76b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerif (window.layoutTestController) {
86b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    layoutTestController.setGeolocationPermission(true);
96b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    layoutTestController.setMockGeolocationPosition(mockLatitude, mockLongitude, mockAccuracy);
106b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner}
116b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner
126b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennervar now = new Date().getTime();
136b70adc33054f8aee8c54d0f460458a9df11b8a5Russell BrennershouldBeTrue('now != 0');
146b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennervar t = null;
156b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennervar then = null;
166b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner
176b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerfunction checkPosition(p) {
186b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    t = p.timestamp;
196b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    var d = new Date();
206b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    then = d.getTime();
216b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    shouldBeTrue('t != 0');
226b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    shouldBeTrue('then != 0');
236b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    shouldBeTrue('now - 1 <= t'); // Avoid rounding errors
246b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    if (now - 1 > t) {
256b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner        debug("  now - 1 = " + (now-1));
266b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner        debug("  t = " + t);
276b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    }
286b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    shouldBeTrue('t <= then + 1'); // Avoid rounding errors
296b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    finishJSTest();
306b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner}
316b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner
326b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennernavigator.geolocation.getCurrentPosition(checkPosition);
336b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerwindow.jsTestIsAsync = true;
346b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerwindow.successfullyParsed = true;
35