diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /dom/tests/mochitest/geolocation/network_geolocation.sjs | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | dom/tests/mochitest/geolocation/network_geolocation.sjs | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/dom/tests/mochitest/geolocation/network_geolocation.sjs b/dom/tests/mochitest/geolocation/network_geolocation.sjs new file mode 100644 index 0000000000..1868aaa8f3 --- /dev/null +++ b/dom/tests/mochitest/geolocation/network_geolocation.sjs @@ -0,0 +1,81 @@ +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 + ); +} |