From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001
From: Daniel Baumann <daniel.baumann@progress-linux.org>
Date: Sun, 7 Apr 2024 21:33:14 +0200
Subject: Adding upstream version 115.7.0esr.

Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
---
 .../mochitest/geolocation/geolocation_common.js    | 154 +++++++++++++++++++++
 1 file changed, 154 insertions(+)
 create mode 100644 dom/tests/mochitest/geolocation/geolocation_common.js

(limited to 'dom/tests/mochitest/geolocation/geolocation_common.js')

diff --git a/dom/tests/mochitest/geolocation/geolocation_common.js b/dom/tests/mochitest/geolocation/geolocation_common.js
new file mode 100644
index 0000000000..2868215e76
--- /dev/null
+++ b/dom/tests/mochitest/geolocation/geolocation_common.js
@@ -0,0 +1,154 @@
+"use strict";
+
+var harness =
+  SimpleTest.harnessParameters.testRoot == "chrome" ? "chrome" : "tests";
+var BASE_URL =
+  "http://mochi.test:8888/" +
+  harness +
+  "/dom/tests/mochitest/geolocation/network_geolocation.sjs";
+
+function set_geo_wifi_uri(uri, callback) {
+  // Disable NetworkGeolocationProvider.js request cache because the cache
+  // does not remember from which location service it came from. We expect
+  // different results when we change the provider URL (geo.provider.network.url).
+  set_network_request_cache_enabled(false, () => {
+    SpecialPowers.pushPrefEnv(
+      { set: [["geo.provider.network.url", uri]] },
+      callback
+    );
+  });
+}
+
+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) {
+  set_geo_wifi_uri(BASE_URL + "?action=respond-garbage", () => {
+    // we need to be sure that all location data has been purged/set.
+    sleep(1000);
+    callback.call();
+  });
+}
+
+function stop_sending_garbage(callback) {
+  set_geo_wifi_uri(BASE_URL + "", () => {
+    // we need to be sure that all location data has been purged/set.
+    sleep(1000);
+    callback.call();
+  });
+}
+
+function stop_geolocationProvider(callback) {
+  set_geo_wifi_uri(BASE_URL + "?action=stop-responding", () => {
+    // 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.provider.network.debug.requestCache.enabled", enabled]] },
+    callback
+  );
+}
+
+function worse_geolocationProvider(callback) {
+  set_geo_wifi_uri(BASE_URL + "?action=worse-accuracy", callback);
+}
+
+function resume_geolocationProvider(callback) {
+  set_geo_wifi_uri(BASE_URL + "", callback);
+}
+
+function delay_geolocationProvider(delay, callback) {
+  set_geo_wifi_uri(BASE_URL + "?delay=" + delay, callback);
+}
+
+function send404_geolocationProvider(callback) {
+  set_geo_wifi_uri(BASE_URL + "?action=send404", callback);
+}
+
+function check_geolocation(location) {
+  ok(location, "Check to see if this location is non-null");
+
+  const timestamp = location.timestamp;
+  dump(`timestamp=${timestamp}\n`);
+  ok(IsNumber(timestamp), "check timestamp type");
+  ok(timestamp > 0, "check timestamp range");
+
+  // eventually, coords may be optional (eg, when civic addresses are supported)
+  ok("coords" in location, "Check to see if this location has a coords");
+
+  const {
+    latitude,
+    longitude,
+    accuracy,
+    altitude,
+    altitudeAccuracy,
+    speed,
+    heading,
+  } = location.coords;
+
+  dump(`latitude=${latitude}\n`);
+  dump(`longitude=${longitude}\n`);
+  dump(`accuracy=${accuracy}\n`);
+  dump(`altitude=${altitude}\n`);
+  dump(`altitudeAccuracy=${altitudeAccuracy}\n`);
+  dump(`speed=${speed}\n`);
+  dump(`heading=${heading}\n`);
+
+  ok(IsNumber(latitude), "check latitude type");
+  ok(IsNumber(longitude), "check longitude type");
+
+  ok(
+    Math.abs(latitude - 37.41857) < 0.001,
+    "latitude matches hard-coded value"
+  );
+  ok(
+    Math.abs(longitude + 122.08769) < 0.001,
+    "longitude matches hard-coded value"
+  );
+
+  ok(IsNonNegativeNumber(accuracy), "check accuracy type and range");
+  ok(IsNumber(altitude) || altitude === null, "check accuracy type");
+
+  ok(
+    (IsNonNegativeNumber(altitudeAccuracy) && IsNumber(altitude)) ||
+      altitudeAccuracy === null,
+    "check altitudeAccuracy type and range"
+  );
+
+  ok(
+    IsNonNegativeNumber(speed) || speed === null,
+    "check speed type and range"
+  );
+
+  ok(
+    (IsNonNegativeNumber(heading) && heading < 360 && speed > 0) ||
+      heading === null,
+    "check heading type and range"
+  );
+}
+
+function IsNumber(x) {
+  return typeof x === "number" && !Number.isNaN(x);
+}
+
+function IsNonNegativeNumber(x) {
+  return IsNumber(x) && x >= 0;
+}
-- 
cgit v1.2.3