<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=850442
-->
<head>
  <title>Test for getCurrentPosition </title>
  <script 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">
"use strict";

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 test_cachedPosition() {
   var cached = null;
   navigator.geolocation.getCurrentPosition(function(pos) {
     // first call is just to warm up the cache
     check_geolocation(pos);

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

      navigator.geolocation.getCurrentPosition(function(pos) {
        check_geolocation(pos);
        is(pos.timestamp, cached.timestamp, "position should be equal to cached position");
        navigator.geolocation.getCurrentPosition(function(pos) {
          // force new position, can't be the one we have
          check_geolocation(pos);
          isnot(pos.timestamp, cached.timestamp, "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>
