diff options
Diffstat (limited to 'dom/tests/mochitest/geolocation')
30 files changed, 1629 insertions, 0 deletions
diff --git a/dom/tests/mochitest/geolocation/chrome.ini b/dom/tests/mochitest/geolocation/chrome.ini new file mode 100644 index 000000000..1922074f1 --- /dev/null +++ b/dom/tests/mochitest/geolocation/chrome.ini @@ -0,0 +1,6 @@ +[DEFAULT] +support-files = + geolocation_common.js + network_geolocation.sjs + +[test_handlerSpinsEventLoop.html] diff --git a/dom/tests/mochitest/geolocation/geolocation.html b/dom/tests/mochitest/geolocation/geolocation.html new file mode 100644 index 000000000..e62f13e7d --- /dev/null +++ b/dom/tests/mochitest/geolocation/geolocation.html @@ -0,0 +1,13 @@ +<html> + <head> + <title>Simple access of geolocation</title> + <head> + <script> + function loadedWindow() { + opener.postMessage("loaded", "*"); + } + navigator.geolocation.getCurrentPosition(loadedWindow, loadedWindow, {timeout:30000}); + </script> + </head> + <body></body> +</html> diff --git a/dom/tests/mochitest/geolocation/geolocation_common.js b/dom/tests/mochitest/geolocation/geolocation_common.js new file mode 100644 index 000000000..74a4bd34e --- /dev/null +++ b/dom/tests/mochitest/geolocation/geolocation_common.js @@ -0,0 +1,92 @@ +var harness = SimpleTest.harnessParameters.testRoot == "chrome" ? "chrome" : "tests"; +var BASE_URL = "http://mochi.test:8888/" + harness + "/dom/tests/mochitest/geolocation/network_geolocation.sjs"; + +function sleep(delay) +{ + var start = Date.now(); + while (Date.now() < start + delay); +} + +function force_prompt(allow, callback) { + SpecialPowers.pushPrefEnv({"set": [["geo.prompt.testing", true], ["geo.prompt.testing.allow", allow]]}, callback); +} + +function start_sending_garbage(callback) +{ + SpecialPowers.pushPrefEnv({"set": [["geo.wifi.uri", BASE_URL + "?action=respond-garbage"]]}, function() { + // we need to be sure that all location data has been purged/set. + sleep(1000); + callback.call(); + }); +} + +function stop_sending_garbage(callback) +{ + SpecialPowers.pushPrefEnv({"set": [["geo.wifi.uri", BASE_URL + ""]]}, function() { + // we need to be sure that all location data has been purged/set. + sleep(1000); + callback.call(); + }); +} + +function stop_geolocationProvider(callback) +{ + SpecialPowers.pushPrefEnv({"set": [["geo.wifi.uri", BASE_URL + "?action=stop-responding"]]}, function() { + // we need to be sure that all location data has been purged/set. + sleep(1000); + callback.call(); + }); +} + +function set_network_request_cache_enabled(enabled, callback) +{ + SpecialPowers.pushPrefEnv({"set": [["geo.wifi.debug.requestCache.enabled", enabled]]}, callback); +} + +function worse_geolocationProvider(callback) +{ + SpecialPowers.pushPrefEnv({"set": [["geo.wifi.uri", BASE_URL + "?action=worse-accuracy"]]}, callback); +} + +function resume_geolocationProvider(callback) +{ + SpecialPowers.pushPrefEnv({"set": [["geo.wifi.uri", BASE_URL + ""]]}, callback); +} + +function delay_geolocationProvider(delay, callback) +{ + SpecialPowers.pushPrefEnv({"set": [["geo.wifi.uri", BASE_URL + "?delay=" + delay]]}, callback); +} + +function send404_geolocationProvider(callback) +{ + set_network_request_cache_enabled(false, function() { + SpecialPowers.pushPrefEnv({"set": [["geo.wifi.uri", BASE_URL + "?action=send404"]]}, callback);}); +} + +function check_geolocation(location) { + + ok(location, "Check to see if this location is non-null"); + + ok("timestamp" in location, "Check to see if there is a timestamp"); + + // eventually, coords may be optional (eg, when civic addresses are supported) + ok("coords" in location, "Check to see if this location has a coords"); + + var coords = location.coords; + + ok("latitude" in coords, "Check to see if there is a latitude"); + ok("longitude" in coords, "Check to see if there is a longitude"); + ok("accuracy" in coords, "Check to see if there is a accuracy"); + + // optional ok("altitude" in coords, "Check to see if there is a altitude"); + // optional ok("altitudeAccuracy" in coords, "Check to see if there is a alt accuracy"); + // optional ok("heading" in coords, "Check to see if there is a heading"); + // optional ok("speed" in coords, "Check to see if there is a speed"); + + ok (Math.abs(location.coords.latitude - 37.41857) < 0.001, "lat matches known value"); + ok (Math.abs(location.coords.longitude + 122.08769) < 0.001, "lon matches known value"); + // optional ok(location.coords.altitude == 42, "alt matches known value"); + // optional ok(location.coords.altitudeAccuracy == 42, "alt acc matches known value"); +} + diff --git a/dom/tests/mochitest/geolocation/mochitest.ini b/dom/tests/mochitest/geolocation/mochitest.ini new file mode 100644 index 000000000..1afcc31cb --- /dev/null +++ b/dom/tests/mochitest/geolocation/mochitest.ini @@ -0,0 +1,28 @@ +[DEFAULT] +support-files = + geolocation.html + geolocation_common.js + network_geolocation.sjs + windowTest.html + +[test_allowCurrent.html] +[test_allowWatch.html] +[test_cachedPosition.html] +[test_cancelCurrent.html] +[test_cancelWatch.html] +[test_clearWatch.html] +[test_clearWatchBeforeAllowing.html] +[test_clearWatch_invalid.html] +[test_errorcheck.html] +[test_geolocation_is_undefined_when_pref_is_off.html] +[test_manyCurrentConcurrent.html] +[test_manyCurrentSerial.html] +[test_manyWatchConcurrent.html] +[test_manyWatchSerial.html] +[test_manyWindows.html] +[test_optional_api_params.html] +[test_shutdown.html] +[test_timeoutCurrent.html] +[test_timerRestartWatch.html] +[test_windowClose.html] +[test_worseAccuracyDoesNotBlockCallback.html] diff --git a/dom/tests/mochitest/geolocation/network_geolocation.sjs b/dom/tests/mochitest/geolocation/network_geolocation.sjs new file mode 100644 index 000000000..6c7ca47be --- /dev/null +++ b/dom/tests/mochitest/geolocation/network_geolocation.sjs @@ -0,0 +1,78 @@ +function parseQueryString(str) +{ + if (str == "") + return {}; + + var paramArray = str.split("&"); + var regex = /^([^=]+)=(.*)$/; + var params = {}; + for (var i = 0, sz = paramArray.length; i < sz; i++) + { + var match = regex.exec(paramArray[i]); + if (!match) + throw "Bad parameter in queryString! '" + paramArray[i] + "'"; + params[decodeURIComponent(match[1])] = decodeURIComponent(match[2]); + } + + return params; +} + +function getPosition(action) +{ + var response = { + status: "OK", + location: { + lat: 37.41857, + lng: -122.08769, + }, + accuracy: (action == "worse-accuracy") ? 100 : 42, + }; + + return JSON.stringify(response); +} + +var timer; +function handleRequest(request, response) +{ + var params = parseQueryString(request.queryString); + + if (params.action == "stop-responding") { + response.processAsync(); + return; + } + + var position = getPosition(params.action); + + if (params.action == "respond-garbage") { + // better way? + var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"; + position = ""; + var len = Math.floor(Math.random() * 5000); + + for (var i=0; i< len; i++) { + var c = Math.floor(Math.random() * chars.length); + position += chars.substring(c, c+1); + } + } + + var response; + response.processAsync(); + response.setStatusLine("1.0", 200, "OK"); + response.setHeader("Cache-Control", "no-cache", false); + response.setHeader("Content-Type", "aplication/x-javascript", false); + + var delay = 0; + if ('delay' in params) { + delay = params.delay; + } + if (params.action === "send404") { + response.setStatusLine("1.0", 404, "Not Found"); + position = ''; + } + timer = Components.classes["@mozilla.org/timer;1"].createInstance(Components.interfaces.nsITimer); + timer.initWithCallback(function() { + response.write(position); + response.finish(); + }, delay, timer.TYPE_ONE_SHOT); +} + diff --git a/dom/tests/mochitest/geolocation/test_allowCurrent.html b/dom/tests/mochitest/geolocation/test_allowCurrent.html new file mode 100644 index 000000000..30836fb7b --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_allowCurrent.html @@ -0,0 +1,41 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=478911 +--> +<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=478911">Mozilla Bug 478911</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + + +function successCallback(position) { + check_geolocation(position); + SimpleTest.finish(); +} + +function test1() { + navigator.geolocation.getCurrentPosition(successCallback); +} +</script> +</pre> +</body> +</html> + diff --git a/dom/tests/mochitest/geolocation/test_allowWatch.html b/dom/tests/mochitest/geolocation/test_allowWatch.html new file mode 100644 index 000000000..4084e43bb --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_allowWatch.html @@ -0,0 +1,43 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=478911 +--> +<head> + <title>Test for watchPosition </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=478911">Mozilla Bug 478911</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + +var watchID; + +function successCallback(position) { + check_geolocation(position); + navigator.geolocation.clearWatch(watchID); + SimpleTest.finish(); +} + +function test1() { + watchID = navigator.geolocation.watchPosition(successCallback, null, null); +} +</script> +</pre> +</body> +</html> + diff --git a/dom/tests/mochitest/geolocation/test_cachedPosition.html b/dom/tests/mochitest/geolocation/test_cachedPosition.html new file mode 100644 index 000000000..067bf205f --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_cachedPosition.html @@ -0,0 +1,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> + diff --git a/dom/tests/mochitest/geolocation/test_cancelCurrent.html b/dom/tests/mochitest/geolocation/test_cancelCurrent.html new file mode 100644 index 000000000..d71cfa350 --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_cancelCurrent.html @@ -0,0 +1,45 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=478911 +--> +<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=478911">Mozilla Bug 478911</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +resume_geolocationProvider(function() { + force_prompt(false, test1); +}); + +function failureCallback(error) { + ok(error.code == error.PERMISSION_DENIED, "Ensure that the error was PERMISSION_DENIED"); + SimpleTest.finish(); +} + +function successCallback(position){ + ok(0, "Success was called when it shouldn't have been. major problem"); + SimpleTest.finish(); +} + +function test1() { + navigator.geolocation.getCurrentPosition(successCallback, failureCallback, null); +} +</script> +</pre> +</body> +</html> + diff --git a/dom/tests/mochitest/geolocation/test_cancelWatch.html b/dom/tests/mochitest/geolocation/test_cancelWatch.html new file mode 100644 index 000000000..493f412aa --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_cancelWatch.html @@ -0,0 +1,49 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=478911 +--> +<head> + <title>Test for watchPosition </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=478911">Mozilla Bug 478911</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +resume_geolocationProvider(function() { + force_prompt(false, test1); +}); + +var watchID; + +function failureCallback(error) { + ok(error.code == error.PERMISSION_DENIED, "Ensure that the error was PERMISSION_DENIED"); + SimpleTest.finish(); +} + +function successCallback(position){ + ok(0, "Success was called when it shouldn't have been. major problem"); + SimpleTest.finish(); +} + +function test1() { + watchID = navigator.geolocation.watchPosition(successCallback, failureCallback, null); +} +</script> +</pre> +</body> +</html> + + + diff --git a/dom/tests/mochitest/geolocation/test_clearWatch.html b/dom/tests/mochitest/geolocation/test_clearWatch.html new file mode 100644 index 000000000..85f81acd9 --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_clearWatch.html @@ -0,0 +1,72 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=478911 +--> +<head> + <title>Test for watchPosition and clearWatch</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=478911">Mozilla Bug 478911</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + +var hasBeenCleared = false; +var successWasCalledAfterClear = false; +var firstCallback = true; + +function failureCallback(error) +{ + ok(0, "we should not be seeing failures from this watchPosition"); +} + +function successCallback(position) { + ok(true, "successCallback was called, hasBeenCleared=" + hasBeenCleared + + ", successWasCalledAfterClear=" + successWasCalledAfterClear); + if (hasBeenCleared == true) { + successWasCalledAfterClear = true; + } + if (firstCallback) { + SimpleTest.executeSoon(clearWatch); + firstCallback = false; + } +} + +function clearWatch() { + ok(true, "clearWatch was called, hasBeenCleared=" + hasBeenCleared + + ", successWasCalledAfterClear=" + successWasCalledAfterClear); + navigator.geolocation.clearWatch(watchID); + hasBeenCleared = true; + SimpleTest.executeSoon(testAccepted); +} + +function testAccepted() { + ok(true, "testAccepted was called, hasBeenCleared=" + hasBeenCleared + + ", successWasCalledAfterClear=" + successWasCalledAfterClear); + ok(!successWasCalledAfterClear, "The successCallback should not be called after clear"); + SimpleTest.finish(); +} + +function test1() { + ok(true, "Getting the watchPosition"); + watchID = navigator.geolocation.watchPosition(successCallback, failureCallback, null); + ok(true, "Waiting"); +} +</script> +</pre> +</body> +</html> diff --git a/dom/tests/mochitest/geolocation/test_clearWatchBeforeAllowing.html b/dom/tests/mochitest/geolocation/test_clearWatchBeforeAllowing.html new file mode 100644 index 000000000..25b588959 --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_clearWatchBeforeAllowing.html @@ -0,0 +1,59 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=886026 +--> +<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=886026">Mozilla Bug 886026</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); +resume_geolocationProvider(function() { + force_prompt(true, run_test); +}); + +function run_test() { + var successCallbackCalled = false, + errorCallbackCalled = false; + + var watchId = navigator.geolocation.watchPosition( + function(pos) { + successCallbackCalled = true; + }, function(err) { + errorCallbackCalled = true; + } + ); + + navigator.geolocation.getCurrentPosition( + function(pos) { + SimpleTest.executeSoon(function() { + ok(successCallbackCalled == false, + "getCurrentPosition : Success callback should not have been called"); + + ok(errorCallbackCalled == false, + "getCurrentPosition : Error callback should not have been called"); + + SimpleTest.finish(); + }); + } + ); + + navigator.geolocation.clearWatch(watchId); +} +</script> +</pre> +</body> +</html>
\ No newline at end of file diff --git a/dom/tests/mochitest/geolocation/test_clearWatch_invalid.html b/dom/tests/mochitest/geolocation/test_clearWatch_invalid.html new file mode 100644 index 000000000..0e2aed61c --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_clearWatch_invalid.html @@ -0,0 +1,47 @@ + <!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=463039 +--> +<head> + <title>Test for Bug 463039</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=463039">Mozilla Bug 463039</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + +function test1() { + navigator.geolocation.watchPosition(function(){}); + + // there are no watches, so this should always throw + for (x=-10; x<10; x++) { + navigator.geolocation.clearWatch(x); + ok(1, "clearWatch should not throw"); + } + + // lets try something huge + navigator.geolocation.clearWatch(Number.MAX_VALUE); + ok(1, "clearWatch should not throw"); + + SimpleTest.finish(); +} + +</script> +</pre> +</body> +</html> + diff --git a/dom/tests/mochitest/geolocation/test_errorcheck.html b/dom/tests/mochitest/geolocation/test_errorcheck.html new file mode 100644 index 000000000..ffe5ce882 --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_errorcheck.html @@ -0,0 +1,49 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=684722 +--> +<head> + <title>Test for ErrorChecking </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=684722">Mozilla Bug 684722</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + +function test1() { + send404_geolocationProvider(test2); +} + +function errorCallback(error) { + is(error.code, + SpecialPowers.Ci.nsIDOMGeoPositionError.POSITION_UNAVAILABLE, "Geolocation error handler fired"); + SimpleTest.finish(); +} + +function successCallback(position) { + test2(); +} + +function test2() { + navigator.geolocation.getCurrentPosition(successCallback, errorCallback); +} +</script> +</pre> +</body> +</html> + diff --git a/dom/tests/mochitest/geolocation/test_garbageWatch.html b/dom/tests/mochitest/geolocation/test_garbageWatch.html new file mode 100644 index 000000000..167dc286e --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_garbageWatch.html @@ -0,0 +1,56 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=482260 +--> +<head> + <title>Test for garbage data returned from location provider </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=455327">Mozilla Bug 482260</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> +/** Test for Bug **/ + +SimpleTest.waitForExplicitFinish(); + +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + +function test1() { + start_sending_garbage(test2); +} + +function successCallback(pos){ + ok(false, "success should have never been called."); + stop_sending_garbage(function() {SimpleTest.finish();}); +} + +function errorCallback(err) { + ok(err.code == err.TIMEOUT, "ensure error is a timeout."); + stop_sending_garbage(function() { SimpleTest.finish(); }); +} + +var options = { + maximumAge: 0, + timeout: 1000, +}; + +function test2() { + navigator.geolocation.watchPosition(successCallback, + errorCallback, + options); +} +</script> +</pre> +</body> +</html> diff --git a/dom/tests/mochitest/geolocation/test_geolocation_is_undefined_when_pref_is_off.html b/dom/tests/mochitest/geolocation/test_geolocation_is_undefined_when_pref_is_off.html new file mode 100644 index 000000000..882dacec3 --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_geolocation_is_undefined_when_pref_is_off.html @@ -0,0 +1,35 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=884921 +--> +<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=884921">Mozilla Bug 884921</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +SpecialPowers.pushPrefEnv({set: [["geo.enabled", false]]}, function() { + is(navigator.geolocation, undefined); + is("geolocation" in navigator, false); + SimpleTest.finish(); +}); + +</script> +</pre> +</body> +</html> + diff --git a/dom/tests/mochitest/geolocation/test_handlerSpinsEventLoop.html b/dom/tests/mochitest/geolocation/test_handlerSpinsEventLoop.html new file mode 100644 index 000000000..19913d28b --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_handlerSpinsEventLoop.html @@ -0,0 +1,72 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=911595 +--> +<head> + <title>Test for spinning the event loop inside position handlers</title> + <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript" src="geolocation_common.js"></script> + + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" /> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=911595 ">Mozilla Bug 911595</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +/* + * In bug 911595 , spinning the event loop from inside position + * handlers could cause both success and error callbacks to be + * fired for the same request if that request has a small timeout. + */ + +var { classes: Cc, interfaces: Ci, utils: Cu } = Components; + +SimpleTest.waitForExplicitFinish(); + +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + +var successCallbackCalled = false; +function successCallback(position) { + successCallbackCalled = true; + check_geolocation(position); + while (!timeoutPassed) { + SpecialPowers.spinEventLoop(window); + } + info("TEST-INFO | successCallback called"); + check(); +} + +var errorCallbackCalled = false; +function errorCallback(error) { + errorCallbackCalled = true; + info("TEST-INFO | errorCallback called"); + check(); +} + +function check() { + ok(successCallbackCalled != errorCallbackCalled, "Ensure only one callback is called"); + SimpleTest.finish(); +} + +var timeoutPassed = false; +var timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); +function test1() { + SpecialPowers.pushPrefEnv({"set": [["geo.wifi.timeToWaitBeforeSending", 10]]}, function() { + navigator.geolocation.getCurrentPosition(successCallback, errorCallback, {timeout: 500}); + timer.initWithCallback(timer => { + timeoutPassed = true; + }, 600, Ci.nsITimer.TYPE_ONE_SHOT); + }); +} +</script> +</pre> +</body> +</html> diff --git a/dom/tests/mochitest/geolocation/test_manyCurrentConcurrent.html b/dom/tests/mochitest/geolocation/test_manyCurrentConcurrent.html new file mode 100644 index 000000000..3fbccac53 --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_manyCurrentConcurrent.html @@ -0,0 +1,58 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=482260 +--> +<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=482260">Mozilla Bug 482260</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + +var successCallbackCalled = 0; +var failureCallbackCalled = 0; +const totalResults = 100; + +function successCallback(position) { + successCallbackCalled++; + testPassed(); +} + +function failureCallback(code) { + failureCallbackCalled++; + testPassed(); +} + +function test1() { + for (var x = 0; x < totalResults; x++) + navigator.geolocation.getCurrentPosition(successCallback, failureCallback); +} + +function testPassed() { + if (successCallbackCalled + failureCallbackCalled != totalResults) + return; + is(failureCallbackCalled, 0, "no failure callbacks should have been received"); + SimpleTest.finish(); +} + +</script> +</pre> +</body> +</html> + diff --git a/dom/tests/mochitest/geolocation/test_manyCurrentSerial.html b/dom/tests/mochitest/geolocation/test_manyCurrentSerial.html new file mode 100644 index 000000000..3a0d96344 --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_manyCurrentSerial.html @@ -0,0 +1,47 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=482260 +--> +<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=482260">Mozilla Bug 482260</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + +var keepGoing = 10; + +function successCallback(position) { + if (keepGoing-- > 0) { + setTimeout(function() {navigator.geolocation.getCurrentPosition(successCallback);}, 0); + return; + } + + ok(1, "100 successful calls"); + SimpleTest.finish(); +} + +function test1() { + navigator.geolocation.getCurrentPosition(successCallback); +} +</script> +</pre> +</body> +</html> + diff --git a/dom/tests/mochitest/geolocation/test_manyWatchConcurrent.html b/dom/tests/mochitest/geolocation/test_manyWatchConcurrent.html new file mode 100644 index 000000000..f1714e7ab --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_manyWatchConcurrent.html @@ -0,0 +1,57 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=482260 +--> +<head> + <title>Test for watchPosition </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=482260">Mozilla Bug 482260</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + +var successCallbackCalled = 0; +var failureCallbackCalled = 0; +const totalResults = 100; + +function successCallback(position) { + successCallbackCalled++; + testPassed(); +} + +function failureCallback(code) { + failureCallbackCalled++; + testPassed(); +} + +function test1() { + for (var x = 0; x < totalResults; x++) + navigator.geolocation.watchPosition(successCallback, failureCallback); +} + +function testPassed() { + if (successCallbackCalled + failureCallbackCalled != totalResults) + return; + is(failureCallbackCalled, 0, "no failure callbacks should have been received"); + SimpleTest.finish(); +} + +</script> +</pre> +</body> +</html> diff --git a/dom/tests/mochitest/geolocation/test_manyWatchSerial.html b/dom/tests/mochitest/geolocation/test_manyWatchSerial.html new file mode 100644 index 000000000..bb166e7d2 --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_manyWatchSerial.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=482260 +--> +<head> + <title>Test for watchPosition </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=482260">Mozilla Bug 482260</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + +var watchID = 0; +var completeCount = 10; + + +function successCallback(position) { + + navigator.geolocation.clearWatch(watchID); + + completeCount--; + + if (completeCount==0) { + ok(1, "all watchPosition successCallbacks called"); + SimpleTest.finish(); + return; + } + + watchID = navigator.geolocation.watchPosition(successCallback); +} + +function test1() { + watchID = navigator.geolocation.watchPosition(successCallback); +} +</script> +</pre> +</body> +</html> + diff --git a/dom/tests/mochitest/geolocation/test_manyWindows.html b/dom/tests/mochitest/geolocation/test_manyWindows.html new file mode 100644 index 000000000..a2e682ba1 --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_manyWindows.html @@ -0,0 +1,67 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=478911 +--> +<head> + <title>Test for many windows </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=478911">Crash in Multiple Windows</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +// ensure we are using the right testing provider +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + +/** Test for Bug **/ + +var numberOfWindows = 5; // 20 seems to be the default max popups during the mochitest run +var loadedWindows = 0; + +var windows = new Array(numberOfWindows); + +addEventListener("message", function() { + ++loadedWindows; + if (loadedWindows == numberOfWindows) { + SimpleTest.executeSoon(closeWindows); + } +}, false); + +function test1() { + for(var i = 0; i < numberOfWindows; i++) { + windows[i] = window.open("geolocation.html", "_blank", "width=700,height=400"); + } +} + +function closeWindows() +{ + for(var i = 0; i < numberOfWindows; i++) { + windows[i].close(); + } + SimpleTest.waitForFocus(done); +} + +SimpleTest.waitForExplicitFinish(); + +function done() +{ + ok(navigator.geolocation, "Opened a bunch of windows and didn't crash."); + SimpleTest.finish(); +} + +</script> +</pre> +</body> +</html> diff --git a/dom/tests/mochitest/geolocation/test_optional_api_params.html b/dom/tests/mochitest/geolocation/test_optional_api_params.html new file mode 100644 index 000000000..466024be5 --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_optional_api_params.html @@ -0,0 +1,102 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=452566 +--> +<head> + <title>Test for Bug 452566</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=452566">Mozilla Bug 452566</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +// ensure we are using the right testing provider +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + +/** Test for Bug 452566 **/ +function test1() { + ok(navigator.geolocation, "Should have geolocation"); + + var exception = null; + try { + navigator.geolocation.getCurrentPosition(); + } catch(ex if ex instanceof TypeError) { + exception = ex; + } + ok(exception, "Should have got an exception"); + + exception = null; + try { + navigator.geolocation.getCurrentPosition(function() {}); + } catch(ex if ex instanceof TypeError) { + exception = ex; + } + ok(!exception, exception); + + exception = null; + try { + navigator.geolocation.getCurrentPosition(function() {}, function() {}); + } catch(ex if ex instanceof TypeError) { + exception = ex; + } + ok(!exception, exception); + + exception = null; + try { + navigator.geolocation.getCurrentPosition(function() {}, function() {}, {}); + } catch(ex if ex instanceof TypeError) { + exception = ex; + } + ok(!exception, exception); + + exception = null; + try { + navigator.geolocation.watchPosition(); + } catch(ex if ex instanceof TypeError) { + exception = ex; + } + ok(exception, "Should have got an exception"); + + exception = null; + try { + navigator.geolocation.watchPosition(function() {}); + } catch(ex if ex instanceof TypeError) { + exception = ex; + } + ok(!exception, exception); + + exception = null; + try { + navigator.geolocation.watchPosition(function() {}, function() {}); + } catch(ex if ex instanceof TypeError) { + exception = ex; + } + ok(!exception, exception); + + exception = null; + try { + navigator.geolocation.watchPosition(function() {}, function() {}, {}); + } catch(ex if ex instanceof TypeError) { + exception = ex; + } + ok(!exception, exception); + + SimpleTest.finish(); +} + +</script> +</pre> +</body> +</html> diff --git a/dom/tests/mochitest/geolocation/test_shutdown.html b/dom/tests/mochitest/geolocation/test_shutdown.html new file mode 100644 index 000000000..a837ba30b --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_shutdown.html @@ -0,0 +1,63 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=716127 +--> +<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=716127">Mozilla Bug 716127</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + +function successCallback(position) { + check_geolocation(position); + + SpecialPowers.pushPrefEnv({'set': [['geo.timeout', 100]]}, function() { + delay_geolocationProvider(1000, function() { + force_prompt(true, function() { + navigator.geolocation.getCurrentPosition(success2, handle_error, {maximumAge: 0}); + }); + }); + + }); +} + +function errorCallback() { + ok(false, "unexpected error"); + SimpleTest.finish(); +} + +function test1() { + navigator.geolocation.getCurrentPosition(successCallback, errorCallback); +} + +function success2(position) { + check_geolocation(position); + SimpleTest.finish(); +} + +function handle_error() { + ok(false, "geolocation provider should not have timed out"); + SimpleTest.finish(); +} +</script> +</pre> +</body> +</html> + diff --git a/dom/tests/mochitest/geolocation/test_timeoutCurrent.html b/dom/tests/mochitest/geolocation/test_timeoutCurrent.html new file mode 100644 index 000000000..af6cab328 --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_timeoutCurrent.html @@ -0,0 +1,56 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=858827 +--> +<head> + <title>Test for timeout option </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=858827">Mozilla Bug 858827</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + + +function successCallback(position) { + ok(false, "we should not be seeing successCallback here."); + SimpleTest.finish(); +} + +function errorCallback(err) { + ok(err.code == err.TIMEOUT, "ensure error is a timeout."); + resume_geolocationProvider(function() { + SimpleTest.finish(); + }); +} + + +var options = { + maximumAge: 0, + timeout: 0 +}; + +function test1() { + navigator.geolocation.getCurrentPosition(successCallback, + errorCallback, + options); +} +</script> +</pre> +</body> +</html> + diff --git a/dom/tests/mochitest/geolocation/test_timeoutWatch.html b/dom/tests/mochitest/geolocation/test_timeoutWatch.html new file mode 100644 index 000000000..f51c0d53b --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_timeoutWatch.html @@ -0,0 +1,65 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=455327 +--> +<head> + <title>Test for timeout option </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=455327">Mozilla Bug 478911</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> +/** Test for Bug **/ + +// ensure we are using the right testing provider +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + +SimpleTest.waitForExplicitFinish(); + +function test1() { + stop_geolocationProvider(test2); +} + +function successCallback(pos){ + ok(false, "success should have never been called."); + resume_geolocationProvider(function() { + SimpleTest.finish(); + }); +} + +function errorCallback(err) { + if (err.code == err.POSITION_UNAVAILABLE) + ok(false, "nothing is hooked up to test against."); + else + ok(err.code == err.TIMEOUT, "ensure error is a timeout."); + resume_geolocationProvider(function() { + SimpleTest.finish(); + }); +} + + +var options = { + maximumAge: 0, + timeout: 10 +}; + +function test2() { + navigator.geolocation.watchPosition(successCallback, + errorCallback, + options); +} +</script> +</pre> +</body> +</html> diff --git a/dom/tests/mochitest/geolocation/test_timerRestartWatch.html b/dom/tests/mochitest/geolocation/test_timerRestartWatch.html new file mode 100644 index 000000000..d24b54e0a --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_timerRestartWatch.html @@ -0,0 +1,69 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=526326 +--> +<head> + <title>Test for watchPosition </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=526326">Mozilla Bug 526326</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +// ensure we are using the right testing provider +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + +var watchID; +var times = 0; + +function errorCallback(err) { + ok(err.code == err.TIMEOUT, "ensure error is a timeout."); + times++; + + // make sure we got at least 3 times errorCallback + if (times >= 3) { + navigator.geolocation.clearWatch(watchID); + resume_geolocationProvider(function() { + set_network_request_cache_enabled(true, + function() { SimpleTest.finish(); } ); + }); + } +} + +function successCallback(position) { + ok(1, "on success"); + // Now that we got a success callback, lets try to ensure + // that we get a timeout error. + // The network cache is already off, now stop the sjs from reponding to requests + stop_geolocationProvider(function(){}); +} + +var options = { + maximumAge: 0, + timeout: 1000 +}; + +function test1() { + set_network_request_cache_enabled(false, + function() { + watchID = navigator.geolocation.watchPosition(successCallback, errorCallback, options); + }); +} +</script> +</pre> +</body> +</html> + diff --git a/dom/tests/mochitest/geolocation/test_windowClose.html b/dom/tests/mochitest/geolocation/test_windowClose.html new file mode 100644 index 000000000..bbb5c3f9f --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_windowClose.html @@ -0,0 +1,36 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=493615 +--> +<head> + <title>Test for geolocation in chrome </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=493615">Mozilla Bug 493615</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +function done() { + ok(1, "no crash, so pass."); + SimpleTest.finish(); +} + +SimpleTest.waitForExplicitFinish(); +force_prompt(true, function() { + window.open("windowTest.html"); +}); + +</script> +</pre> +</body> +</html> + diff --git a/dom/tests/mochitest/geolocation/test_worseAccuracyDoesNotBlockCallback.html b/dom/tests/mochitest/geolocation/test_worseAccuracyDoesNotBlockCallback.html new file mode 100644 index 000000000..b2339f888 --- /dev/null +++ b/dom/tests/mochitest/geolocation/test_worseAccuracyDoesNotBlockCallback.html @@ -0,0 +1,47 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=494924 +--> +<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=494924">Mozilla Bug 494924</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +resume_geolocationProvider(function() { + force_prompt(true, test1); +}); + +function successCallback2(position) { + check_geolocation(position); + SimpleTest.finish(); +} + +function successCallback1(position) { + check_geolocation(position); + worse_geolocationProvider(function() { + navigator.geolocation.getCurrentPosition(successCallback2, null, { maximumAge: 0 }); + }); +} + +function test1() { + navigator.geolocation.getCurrentPosition(successCallback1, null, { maximumAge: 0 }); +} +</script> +</pre> +</body> +</html> + diff --git a/dom/tests/mochitest/geolocation/windowTest.html b/dom/tests/mochitest/geolocation/windowTest.html new file mode 100644 index 000000000..235a00639 --- /dev/null +++ b/dom/tests/mochitest/geolocation/windowTest.html @@ -0,0 +1,40 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=493615 +--> +<head> + <title>Test for closing a window while it is doing a geolocation request </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=493615">Mozilla Bug 493615</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> +var finished = false; + +function successCallback(position) { + // watchPosition can notify more than once. + if (finished) { + return; + } + finished = true; + + var opener = window.opener; + window.close(); + opener.done(); +} + +navigator.geolocation.watchPosition(successCallback, null, null); +</script> +</pre> +</body> +</html> + |