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/unit/test_geolocation_provider.js | |
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/unit/test_geolocation_provider.js | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/dom/tests/unit/test_geolocation_provider.js b/dom/tests/unit/test_geolocation_provider.js new file mode 100644 index 0000000000..7dd072cf43 --- /dev/null +++ b/dom/tests/unit/test_geolocation_provider.js @@ -0,0 +1,83 @@ +const { HttpServer } = ChromeUtils.import("resource://testing-common/httpd.js"); + +var httpserver = null; +var geolocation = null; +var success = false; +var watchID = -1; + +function terminate(succ) { + success = succ; + geolocation.clearWatch(watchID); +} + +function successCallback(pos) { + terminate(true); +} +function errorCallback(pos) { + terminate(false); +} + +var observer = { + QueryInterface: ChromeUtils.generateQI(["nsIObserver"]), + + observe(subject, topic, data) { + if (data == "shutdown") { + Assert.ok(1); + this._numProviders--; + if (!this._numProviders) { + httpserver.stop(function () { + Assert.ok(success); + do_test_finished(); + }); + } + } else if (data == "starting") { + Assert.ok(1); + this._numProviders++; + } + }, + + _numProviders: 0, +}; + +function geoHandler(metadata, response) { + var georesponse = { + status: "OK", + location: { + lat: 42, + lng: 42, + }, + accuracy: 42, + }; + var position = JSON.stringify(georesponse); + response.setStatusLine("1.0", 200, "OK"); + response.setHeader("Cache-Control", "no-cache", false); + response.setHeader("Content-Type", "aplication/x-javascript", false); + response.write(position); +} + +function run_test() { + // XPCShell does not get a profile by default. The geolocation service + // depends on the settings service which uses IndexedDB and IndexedDB + // needs a place where it can store databases. + do_get_profile(); + + // only kill this test when shutdown is called on the provider. + do_test_pending(); + + httpserver = new HttpServer(); + httpserver.registerPathHandler("/geo", geoHandler); + httpserver.start(-1); + + Services.prefs.setCharPref( + "geo.provider.network.url", + "http://localhost:" + httpserver.identity.primaryPort + "/geo" + ); + Services.prefs.setBoolPref("geo.provider.network.scan", false); + + var obs = Cc["@mozilla.org/observer-service;1"].getService(); + obs = obs.QueryInterface(Ci.nsIObserverService); + obs.addObserver(observer, "geolocation-device-events"); + + geolocation = Cc["@mozilla.org/geolocation;1"].getService(Ci.nsISupports); + watchID = geolocation.watchPosition(successCallback, errorCallback); +} |