summaryrefslogtreecommitdiff
path: root/dom/tests/mochitest/geolocation/test_cachedPosition.html
blob: 067bf205fa182ee114d9bed13c162d943442a6c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=850442
-->
<head>
  <title>Test for getCurrentPosition </title>
  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <script type="text/javascript" src="geolocation_common.js"></script>

<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=850442">Mozilla Bug 850442</a>
<p id="display"></p>
<div id="content" style="display: none">

</div>
<pre id="test">
<script class="testbody" type="text/javascript">

SimpleTest.waitForExplicitFinish();

/*
The request cache vs. the PositionOptions cache is confusing to the reader, to explain:

Testing uses mochitest httpd, so the network cache must be disabled in order for requests
to propagate to mochitest httpd. Otherwise, every request looks like a geoip request,
and the network request cache sees no reason to make a web request for location for geoip
if it has already made geoip (or better) requests.

We should investigate providing fake wifi and cell scans to the
network location provider, then the network cache does not need to be shut off
AND it will get testing coverage.

*/
resume_geolocationProvider(function() {
    force_prompt(true, function () {
      set_network_request_cache_enabled(false, test_cachedPosition)
    });
});

function done() {
  set_network_request_cache_enabled(true, function() {
    resume_geolocationProvider(function() {
      SimpleTest.finish();
    });
  });
}

function errorCallback(err) {
  ok(false, "error callback should not have been called");
  done();
}

function areTimesEqual(loc1, loc2) {
  return loc1.timestamp === loc2.timestamp;
}

function test_cachedPosition() {
   var cached = null;
   navigator.geolocation.getCurrentPosition(function(pos) {
    // first call is just to warm up the cache

     navigator.geolocation.getCurrentPosition(function(pos) {
      cached = pos;

      navigator.geolocation.getCurrentPosition(function(pos) {
        ok(areTimesEqual(pos, cached), "position should be equal to cached position");
        navigator.geolocation.getCurrentPosition(function(pos) {
          // force new position, can't be the one we have
          ok(!areTimesEqual(pos, cached), "position should not be equal to cached position");
          done();
        }, errorCallback, {maximumAge: 0});
      }, errorCallback, {maximumAge: 21600000});
     }, errorCallback, {maximumAge: 21600000});
   }, errorCallback, {maximumAge: 21600000});
 }
</script>
</pre>
</body>
</html>