/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ MARIONETTE_TIMEOUT = 10000; var geolocation = window.navigator.geolocation; ok(geolocation); var sample = []; var result = []; var wpid; /** * Grant special power to get the geolocation */ SpecialPowers.addPermission("geolocation", true, document); /** * Disable wifi geolocation provider */ wifiUri = SpecialPowers.getCharPref("geo.wifi.uri"); SpecialPowers.setCharPref("geo.wifi.uri", "http://mochi.test:8888/tests/dom/tests/mochitest/geolocation/network_geolocation.sjs?action=stop-responding"); /** * Helper that compares the geolocation against the web API. */ function verifyLocation() { log("Sample:" + sample.join(',')); log("Result:" + result.join(',')); for (i in sample) { is(sample.pop(), result.pop()); } window.setTimeout(cleanup, 0); } /** * Test story begins here. */ function setup() { log("Providing initial setup: set geographic position watcher."); wpid = geolocation.watchPosition(function(position) { log("Position changes: (" + position.coords.latitude + "/" + position.coords.longitude + ")"); result.push(""+position.coords.latitude + "/" + position.coords.longitude); }); lat = 0; lon = 0; cmd = "geo fix " + lon + " " + lat; sample.push(lat+"/"+lon); runEmulatorCmd(cmd, function(result) { window.setTimeout(movePosition_1, 0); }); } function movePosition_1() { log("Geolocation changes. Move to Position 1."); lat = 25; lon = 121.56499833333334; cmd = "geo fix " + lon + " " + lat; sample.push(lat+"/"+lon); runEmulatorCmd(cmd, function(result) { window.setTimeout(movePosition_2, 0); }); } function movePosition_2() { log("Geolocation changes to a negative longitude. Move to Position 2."); lat = 37.393; lon = -122.08199833333335; cmd = "geo fix " + lon + " " + lat; sample.push(lat+"/"+lon); runEmulatorCmd(cmd, function(result) { window.setTimeout(movePosition_3, 0); }); } function movePosition_3() { log("Geolocation changes with WatchPosition. Move to Position 3."); lat = -22; lon = -43; cmd = "geo fix " + lon + " " + lat; sample.push(lat+"/"+lon); geolocation.getCurrentPosition(function(position) { log("getCurrentPosition: Expected location: ("+lat+"/"+lon+"); Current location: (" + position.coords.latitude + "/" + position.coords.longitude + ")"); is(lat, position.coords.latitude); is(lon, position.coords.longitude); }); runEmulatorCmd(cmd, function(result) { window.setTimeout(verifyLocation, 0); }); } function cleanup() { geolocation.clearWatch(wpid); SpecialPowers.removePermission("geolocation", document); SpecialPowers.setCharPref("geo.wifi.uri", wifiUri); finish(); } setup();