diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /dom/tests/unit/test_geolocation_provider.js | |
parent | Initial commit. (diff) | |
download | thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/tests/unit/test_geolocation_provider.js')
-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); +} |