summaryrefslogtreecommitdiffstats
path: root/toolkit/modules/tests/xpcshell/test_AllowedAppSources.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/modules/tests/xpcshell/test_AllowedAppSources.js')
-rw-r--r--toolkit/modules/tests/xpcshell/test_AllowedAppSources.js114
1 files changed, 114 insertions, 0 deletions
diff --git a/toolkit/modules/tests/xpcshell/test_AllowedAppSources.js b/toolkit/modules/tests/xpcshell/test_AllowedAppSources.js
new file mode 100644
index 0000000000..81b1132ab6
--- /dev/null
+++ b/toolkit/modules/tests/xpcshell/test_AllowedAppSources.js
@@ -0,0 +1,114 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+"use strict";
+
+const { OsEnvironment } = ChromeUtils.import(
+ "resource://gre/modules/OsEnvironment.jsm"
+);
+const { TelemetryTestUtils } = ChromeUtils.import(
+ "resource://testing-common/TelemetryTestUtils.jsm"
+);
+
+// Valid values that telemetry might report. Except for "Error" and
+// "NoSuchFeature", these are also the values that we read from the registry.
+var APP_SOURCE_ANYWHERE = "Anywhere";
+var APP_SOURCE_RECOMMENDATIONS = "Recommendations";
+var APP_SOURCE_PREFER_STORE = "PreferStore";
+var APP_SOURCE_STORE_ONLY = "StoreOnly";
+var APP_SOURCE_NO_SUCH_FEATURE = "NoSuchFeature";
+var APP_SOURCE_COLLECTION_ERROR = "Error";
+
+// This variable will store the value that we will fake reading from the
+// registry (i.e. the value that would normally be read from
+// SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AicEnabled"). A value
+// of undefined represents the registry value not existing.
+var gRegistryData;
+// If this is set to true, we will throw an exception rather than providing a
+// value when Policy.getAllowedAppSources is called.
+var gErrorReadingRegistryValue = false;
+// This holds the value that Policy.windowsVersionHasAppSourcesFeature will
+// return, to allow us to simulate detection of operating system versions
+// without the App Sources feature.
+var gHaveAppSourcesFeature = true;
+// If this is set to true, we will throw an exception rather than providing a
+// value when Policy.windowsVersionHasAppSourcesFeature is called.
+var gErrorDetectingAppSourcesFeature = false;
+
+function setup() {
+ // Allow the test to run successfully for all products whether they have the
+ // probe or not.
+ Services.prefs.setBoolPref(
+ "toolkit.telemetry.testing.overrideProductsCheck",
+ true
+ );
+
+ // Mock up the function that gets the allowed app sources so we don't actually
+ // have to change OS settings to test.
+ OsEnvironment.Policy.getAllowedAppSources = () => {
+ if (gErrorReadingRegistryValue) {
+ throw new Error("Arbitrary Testing Error");
+ }
+ // To mimic the normal functionality here, we want to return undefined if
+ // the registry value doesn't exist. But that is already how we are
+ // representing that state in gRegistryData. So no conversion is necessary.
+ return gRegistryData;
+ };
+ OsEnvironment.Policy.windowsVersionHasAppSourcesFeature = () => {
+ if (gErrorDetectingAppSourcesFeature) {
+ throw new Error("Arbitrary Testing Error");
+ }
+ return gHaveAppSourcesFeature;
+ };
+}
+
+function runTest(
+ {
+ registryData = "",
+ registryValueExists = true,
+ registryReadError = false,
+ osHasAppSourcesFeature = true,
+ errorDetectingAppSourcesFeature = false,
+ },
+ expectedScalarValue
+) {
+ if (registryValueExists) {
+ gRegistryData = registryData;
+ } else {
+ gRegistryData = undefined;
+ }
+ gErrorReadingRegistryValue = registryReadError;
+ gHaveAppSourcesFeature = osHasAppSourcesFeature;
+ gErrorDetectingAppSourcesFeature = errorDetectingAppSourcesFeature;
+
+ OsEnvironment.reportAllowedAppSources();
+
+ const scalars = TelemetryTestUtils.getProcessScalars("parent");
+ // Can't use TelemetryTestUtils.assertScalar here. It does not currently work
+ // for strings. See Bug 1633883.
+ const scalarName = "os.environment.allowed_app_sources";
+ Assert.ok(
+ scalarName in scalars && scalars[scalarName] === expectedScalarValue,
+ "The allowed app sources reported should match the expected sources"
+ );
+}
+
+add_task(async function testAppSources() {
+ setup();
+
+ runTest({ registryData: APP_SOURCE_ANYWHERE }, APP_SOURCE_ANYWHERE);
+ runTest(
+ { registryData: APP_SOURCE_RECOMMENDATIONS },
+ APP_SOURCE_RECOMMENDATIONS
+ );
+ runTest({ registryData: APP_SOURCE_PREFER_STORE }, APP_SOURCE_PREFER_STORE);
+ runTest({ registryData: APP_SOURCE_STORE_ONLY }, APP_SOURCE_STORE_ONLY);
+ runTest({ registryValueExists: false }, APP_SOURCE_ANYWHERE);
+ runTest({ registryReadError: true }, APP_SOURCE_COLLECTION_ERROR);
+ runTest({ registryData: "UnexpectedValue" }, APP_SOURCE_COLLECTION_ERROR);
+ runTest({ osHasAppSourcesFeature: false }, APP_SOURCE_NO_SUCH_FEATURE);
+ runTest(
+ { errorDetectingAppSourcesFeature: true },
+ APP_SOURCE_COLLECTION_ERROR
+ );
+});