Skip to content

Instantly share code, notes, and snippets.

@rhelmer
Created April 18, 2017 16:53
Show Gist options
  • Save rhelmer/f6dd2d3356ae7cfc217b9efb84092e60 to your computer and use it in GitHub Desktop.
Save rhelmer/f6dd2d3356ae7cfc217b9efb84092e60 to your computer and use it in GitHub Desktop.
bug 1357460
diff --git a/toolkit/components/telemetry/TelemetryEnvironment.jsm b/toolkit/components/telemetry/TelemetryEnvironment.jsm
--- a/toolkit/components/telemetry/TelemetryEnvironment.jsm
+++ b/toolkit/components/telemetry/TelemetryEnvironment.jsm
@@ -592,16 +592,17 @@ EnvironmentAddonBuilder.prototype = {
* @return Promise<object> containing the addon data.
*/
async _getActiveAddons() {
// Request addons, asynchronously.
let allAddons = await AddonManager.getAddonsByTypes(["extension", "service"]);
let activeAddons = {};
for (let addon of allAddons) {
+ dump(`rhelmer debug ${addon.name} ${addon.isActive}\n`);
// Skip addons which are not active.
if (!addon.isActive) {
continue;
}
// Weird addon data in the wild can lead to exceptions while collecting
// the data.
try {
@@ -619,16 +620,17 @@ EnvironmentAddonBuilder.prototype = {
scope: addon.scope,
type: addon.type,
foreignInstall: enforceBoolean(addon.foreignInstall),
hasBinaryComponents: addon.hasBinaryComponents,
installDay: Utils.millisecondsToDays(installDate.getTime()),
updateDay: Utils.millisecondsToDays(updateDate.getTime()),
signedState: addon.signedState,
isSystem: addon.isSystem,
+ isWebExtension: addon.isWebExtension,
};
if (addon.signedState !== undefined)
activeAddons[addon.id].signedState = addon.signedState;
} catch (ex) {
this._environment._log.error("_getActiveAddons - An addon was discarded due to an error", ex);
continue;
diff --git a/toolkit/components/telemetry/docs/data/environment.rst b/toolkit/components/telemetry/docs/data/environment.rst
--- a/toolkit/components/telemetry/docs/data/environment.rst
+++ b/toolkit/components/telemetry/docs/data/environment.rst
@@ -208,16 +208,17 @@ Structure:
scope: <integer>,
type: <string>, // "extension", "service", ...
foreignInstall: <bool>,
hasBinaryComponents: <bool>
installDay: <number>, // days since UNIX epoch, 0 on failure
updateDay: <number>, // days since UNIX epoch, 0 on failure
signedState: <integer>, // whether the add-on is signed by AMO, only present for extensions
isSystem: <bool>, // true if this is a System Add-on
+ isWebExtension: <bool>, // true if this is a WebExtension
},
...
},
theme: { // the active theme
id: <string>,
blocklisted: <bool>,
description: <string>,
name: <string>,
diff --git a/toolkit/components/telemetry/tests/addons/webextension/manifest.json b/toolkit/components/telemetry/tests/addons/webextension/manifest.json
new file mode 100644
--- /dev/null
+++ b/toolkit/components/telemetry/tests/addons/webextension/manifest.json
@@ -0,0 +1,12 @@
+{
+ "manifest_version": 2,
+ "name": "XPI Telemetry WebExtension Add-on Test",
+ "description": "A webextension addon.",
+ "version": "1.0",
+
+ "applications": {
+ "gecko": {
+ "id": "[email protected]"
+ }
+ }
+}
diff --git a/toolkit/components/telemetry/tests/unit/test_TelemetryEnvironment.js b/toolkit/components/telemetry/tests/unit/test_TelemetryEnvironment.js
--- a/toolkit/components/telemetry/tests/unit/test_TelemetryEnvironment.js
+++ b/toolkit/components/telemetry/tests/unit/test_TelemetryEnvironment.js
@@ -667,16 +667,17 @@ function checkActiveAddon(data) {
scope: "number",
type: "string",
foreignInstall: "boolean",
hasBinaryComponents: "boolean",
installDay: "number",
updateDay: "number",
signedState,
isSystem: "boolean",
+ isWebExtension: "boolean",
};
for (let f in EXPECTED_ADDON_FIELDS_TYPES) {
Assert.ok(f in data, f + " must be available.");
Assert.equal(typeof data[f], EXPECTED_ADDON_FIELDS_TYPES[f],
f + " must have the correct type.");
}
@@ -1121,16 +1122,17 @@ add_task(function* test_addonsAndPlugins
scope: 1,
type: "extension",
foreignInstall: false,
hasBinaryComponents: false,
installDay: ADDON_INSTALL_DATE,
updateDay: ADDON_INSTALL_DATE,
signedState: mozinfo.addon_signing ? AddonManager.SIGNEDSTATE_SIGNED : AddonManager.SIGNEDSTATE_NOT_REQUIRED,
isSystem: false,
+ isWebExtension: false,
};
const SYSTEM_ADDON_ID = "[email protected]";
const EXPECTED_SYSTEM_ADDON_DATA = {
blocklisted: false,
description: "A system addon which is shipped with Firefox.",
name: "XPI Telemetry System Add-on Test",
userDisabled: false,
appDisabled: false,
@@ -1138,47 +1140,79 @@ add_task(function* test_addonsAndPlugins
scope: 1,
type: "extension",
foreignInstall: false,
hasBinaryComponents: false,
installDay: truncateToDays(SYSTEM_ADDON_INSTALL_DATE),
updateDay: truncateToDays(SYSTEM_ADDON_INSTALL_DATE),
signedState: undefined,
isSystem: true,
+ isWebExtension: false,
+ };
+ const WEBEXTENSION_ADDON_INSTALL_URL = gDataRoot + "webextension.xpi";
+ const WEBEXTENSION_ADDON_ID = "[email protected]";
+ const WEBEXTENSION_ADDON_INSTALL_DATE = truncateToDays(Date.now());
+ const EXPECTED_WEBEXTENSION_ADDON_DATA = {
+ blocklisted: false,
+ description: "A webextension addon.",
+ name: "XPI Telemetry WebExtension Add-on Test",
+ userDisabled: false,
+ appDisabled: false,
+ version: "1.0",
+ scope: 1,
+ type: "extension",
+ foreignInstall: false,
+ hasBinaryComponents: false,
+ installDay: truncateToDays(WEBEXTENSION_ADDON_INSTALL_DATE),
+ updateDay: truncateToDays(WEBEXTENSION_ADDON_INSTALL_DATE),
+ signedState: mozinfo.addon_signing ? AddonManager.SIGNEDSTATE_SIGNED : AddonManager.SIGNEDSTATE_NOT_REQUIRED,
+ isSystem: false,
+ isWebExtension: true,
};
const EXPECTED_PLUGIN_DATA = {
name: FLASH_PLUGIN_NAME,
version: FLASH_PLUGIN_VERSION,
description: FLASH_PLUGIN_DESC,
blocklisted: false,
disabled: false,
clicktoplay: true,
};
- // Install an addon so we have some data.
- yield AddonManagerTesting.installXPIFromURL(ADDON_INSTALL_URL);
+ // Install a legacy addon so we have some data.
+ //yield AddonManagerTesting.installXPIFromURL(ADDON_INSTALL_URL);
+
+ // Install a WebExtension addon so we have even more data.
+ yield AddonManagerTesting.installXPIFromURL(WEBEXTENSION_ADDON_INSTALL_URL);
let data = TelemetryEnvironment.currentEnvironment;
+ dump(`rhelmer debug ${data.toSource()}`);
checkEnvironmentData(data);
// Check addon data.
Assert.ok(ADDON_ID in data.addons.activeAddons, "We must have one active addon.");
let targetAddon = data.addons.activeAddons[ADDON_ID];
for (let f in EXPECTED_ADDON_DATA) {
Assert.equal(targetAddon[f], EXPECTED_ADDON_DATA[f], f + " must have the correct value.");
}
// Check system add-on data.
Assert.ok(SYSTEM_ADDON_ID in data.addons.activeAddons, "We must have one active system addon.");
let targetSystemAddon = data.addons.activeAddons[SYSTEM_ADDON_ID];
for (let f in EXPECTED_SYSTEM_ADDON_DATA) {
Assert.equal(targetSystemAddon[f], EXPECTED_SYSTEM_ADDON_DATA[f], f + " must have the correct value.");
}
+ // Check webextension add-on data.
+ //Assert.ok(WEBEXTENSION_ADDON_ID in data.addons.activeAddons, "We must have one active webextension addon.");
+ //let targetWebExtensionAddon = data.addons.activeAddons[WEBEXTENSION_ADDON_ID];
+ //for (let f in EXPECTED_WEBEXTENSION_ADDON_DATA) {
+ // Assert.equal(targetWebExtensionAddon[f], EXPECTED_WEBEXTENSION_ADDON_DATA[f], f + " must have the correct value.");
+ //}
+
// Check theme data.
let theme = data.addons.theme;
Assert.equal(theme.id, (PERSONA_ID + PERSONA_ID_SUFFIX));
Assert.equal(theme.name, PERSONA_NAME);
Assert.equal(theme.description, PERSONA_DESCRIPTION);
// Check plugin data.
Assert.equal(data.addons.activePlugins.length, 1, "We must have only one active plugin.");
diff --git a/toolkit/components/telemetry/tests/unit/xpcshell.ini b/toolkit/components/telemetry/tests/unit/xpcshell.ini
--- a/toolkit/components/telemetry/tests/unit/xpcshell.ini
+++ b/toolkit/components/telemetry/tests/unit/xpcshell.ini
@@ -7,30 +7,32 @@ support-files =
../search/chrome.manifest
../search/searchTest.jar
dictionary.xpi
experiment.xpi
extension.xpi
extension-2.xpi
engine.xml
system.xpi
+ webextension.xpi
restartless.xpi
theme.xpi
testUnicodePDB32.dll
testNoPDB32.dll
testUnicodePDB64.dll
testNoPDB64.dll
!/toolkit/mozapps/extensions/test/xpcshell/head_addons.js
generated-files =
dictionary.xpi
experiment.xpi
extension.xpi
extension-2.xpi
system.xpi
restartless.xpi
+ webextension.xpi
theme.xpi
[test_MigratePendingPings.js]
[test_TelemetryHistograms.js]
[test_SubsessionChaining.js]
tags = addons
[test_TelemetryEnvironment.js]
skip-if = os == "android"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment