Created
April 18, 2017 16:53
-
-
Save rhelmer/f6dd2d3356ae7cfc217b9efb84092e60 to your computer and use it in GitHub Desktop.
bug 1357460
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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