From eb65824c1802cb7d15e7621e5f8efed3ee6207f9 Mon Sep 17 00:00:00 2001 From: Daniel Varga Date: Thu, 13 Sep 2018 03:01:43 +0300 Subject: [PATCH] Backed out 2 changesets (bug 1358342) for browser-chrome failures on /test/performance/browser_preferences_usage.js on a CLOSED TREE Backed out changeset f1e4fc4339f7 (bug 1358342) Backed out changeset 030e811bfc34 (bug 1358342) --HG-- extra : amend_source : 1afeabcf3827be93f84c42965d87d3e5f3806771 --- browser/extensions/aushelper/bootstrap.js | 187 ++++++++++++++++++ browser/extensions/aushelper/install.rdf.in | 32 +++ browser/extensions/aushelper/moz.build | 19 ++ browser/extensions/moz.build | 1 + .../talos/talos/xtalos/xperf_whitelist.json | 6 + toolkit/components/telemetry/Histograms.json | 39 ++++ toolkit/components/telemetry/Scalars.yaml | 14 ++ 7 files changed, 298 insertions(+) create mode 100644 browser/extensions/aushelper/bootstrap.js create mode 100644 browser/extensions/aushelper/install.rdf.in create mode 100644 browser/extensions/aushelper/moz.build diff --git a/browser/extensions/aushelper/bootstrap.js b/browser/extensions/aushelper/bootstrap.js new file mode 100644 index 000000000000..11d404ff79f7 --- /dev/null +++ b/browser/extensions/aushelper/bootstrap.js @@ -0,0 +1,187 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +const APP_UPDATE_URL_PREF = "app.update.url"; +const REPLACE_KEY = "%OS_VERSION%"; + +const AUSHELPER_CPU_RESULT_CODE_HISTOGRAM_ID = "AUSHELPER_CPU_RESULT_CODE"; +// The system is not vulnerable to Bug 1296630. +const CPU_NO_BUG1296630 = 1; +// The system is vulnerable to Bug 1296630. +const CPU_YES_BUG1296630 = 2; +// An error occured when checking if the system is vulnerable to Bug 1296630. +const CPU_ERR_BUG1296630 = 3; +// It is unknown whether the system is vulnerable to Bug 1296630 (should never happen). +const CPU_UNKNOWN_BUG1296630 = 4; + +const AUSHELPER_CPU_ERROR_CODE_HISTOGRAM_ID = "AUSHELPER_CPU_ERROR_CODE"; +const CPU_SUCCESS = 0; +const CPU_REG_OPEN_ERROR = 1; +const CPU_VENDOR_ID_ERROR = 2; +const CPU_ID_ERROR = 4; +const CPU_REV_ERROR = 8; + +const AUSHELPER_WEBSENSE_REG_VERSION_SCALAR_NAME = "aushelper.websense_reg_version"; +const AUSHELPER_WEBSENSE_REG_EXISTS_HISTOGRAM_ID = "AUSHELPER_WEBSENSE_REG_EXISTS"; + +const AUSHELPER_WEBSENSE_ERROR_CODE_HISTOGRAM_ID = "AUSHELPER_WEBSENSE_ERROR_CODE"; +const WEBSENSE_SUCCESS = 0; +const WEBSENSE_REG_OPEN_ERROR = 1; +const WEBSENSE_REG_READ_ERROR = 2; +const WEBSENSE_ALREADY_MODIFIED = 4; + +ChromeUtils.import("resource://gre/modules/Services.jsm"); + +function startup() { + if (Services.appinfo.OS != "WINNT") { + return; + } + + const regCPUPath = "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"; + let wrk; + let cpuErrorCode = CPU_SUCCESS; + try { + wrk = Cc["@mozilla.org/windows-registry-key;1"].createInstance(Ci.nsIWindowsRegKey); + wrk.open(wrk.ROOT_KEY_LOCAL_MACHINE, regCPUPath, wrk.ACCESS_READ); + } catch (e) { + Cu.reportError("AUSHelper - unable to open registry. Exception: " + e); + cpuErrorCode |= CPU_REG_OPEN_ERROR; + } + + // If any of the following values are successfully retrieved and they don't + // match the condition for that value then it is safe to update. Hence why the + // following checks are somewhat convoluted. The possible values for the + // variable set by each check is as follows: + // + // | Match | No Match | Error | + // variable | true | false | null | + + let cpuVendorIDMatch = false; + try { + let cpuVendorID = wrk.readStringValue("VendorIdentifier"); + if (cpuVendorID.toLowerCase() == "genuineintel") { + cpuVendorIDMatch = true; + } + } catch (e) { + Cu.reportError("AUSHelper - error getting CPU vendor indentifier. Exception: " + e); + cpuVendorIDMatch = null; + cpuErrorCode |= CPU_VENDOR_ID_ERROR; + } + + let cpuIDMatch = false; + try { + let cpuID = wrk.readStringValue("Identifier"); + if (cpuID.toLowerCase().includes("family 6 model 61 stepping 4")) { + cpuIDMatch = true; + } + } catch (e) { + Cu.reportError("AUSHelper - error getting CPU indentifier. Exception: " + e); + cpuIDMatch = null; + cpuErrorCode |= CPU_ID_ERROR; + } + + let microCodeVersions = [0xe, 0x11, 0x12, 0x13, 0x16, 0x18, 0x19]; + let cpuRevMatch = null; + try { + let keyNames = ["Update Revision", "Update Signature"]; + for (let i = 0; i < keyNames.length; ++i) { + try { + let regVal = wrk.readBinaryValue(keyNames[i]); + if (regVal.length == 8) { + let hexVal = []; + // We are only inyterested in the upper 4 bytes and the little endian + // value for it. + for (let j = 4; j < 8; j++) { + let c = regVal.charCodeAt(j).toString(16); + if (c.length == 1) { + c = "0" + c; + } + hexVal.unshift(c); + } + cpuRevMatch = false; + if (microCodeVersions.includes(parseInt(hexVal.join("")))) { + cpuRevMatch = true; + } + break; + } + } catch (e) { + if (i == keyNames.length - 1) { + // The registry key name's value was not successfully queried. + cpuRevMatch = null; + cpuErrorCode |= CPU_REV_ERROR; + } + } + } + wrk.close(); + } catch (ex) { + Cu.reportError("AUSHelper - error getting CPU revision. Exception: " + ex); + cpuRevMatch = null; + cpuErrorCode |= CPU_REV_ERROR; + } + + let cpuResult = CPU_UNKNOWN_BUG1296630; + let cpuValue = "(unkBug1296630v1)"; + // The following uses strict equality checks since the values can be true, + // false, or null. + if (cpuVendorIDMatch === false || cpuIDMatch === false || cpuRevMatch === false) { + // Since one of the values is false then the system won't be affected by + // bug 1296630 according to the conditions set out in bug 1311515. + cpuValue = "(noBug1296630v1)"; + cpuResult = CPU_NO_BUG1296630; + } else if (cpuVendorIDMatch === null || cpuIDMatch === null || cpuRevMatch === null) { + // Since one of the values is null we can't say for sure if the system will + // be affected by bug 1296630. + cpuValue = "(errBug1296630v1)"; + cpuResult = CPU_ERR_BUG1296630; + } else if (cpuVendorIDMatch === true && cpuIDMatch === true && cpuRevMatch === true) { + // Since all of the values are true we can say that the system will be + // affected by bug 1296630. + cpuValue = "(yesBug1296630v1)"; + cpuResult = CPU_YES_BUG1296630; + } + + Services.telemetry.getHistogramById(AUSHELPER_CPU_RESULT_CODE_HISTOGRAM_ID).add(cpuResult); + Services.telemetry.getHistogramById(AUSHELPER_CPU_ERROR_CODE_HISTOGRAM_ID).add(cpuErrorCode); + + const regWebsensePath = "Websense\\Agent"; + let websenseErrorCode = WEBSENSE_SUCCESS; + let websenseVersion = ""; + try { + let regModes = [wrk.ACCESS_READ, wrk.ACCESS_READ | wrk.WOW64_64]; + for (let i = 0; i < regModes.length; ++i) { + wrk.open(wrk.ROOT_KEY_LOCAL_MACHINE, "SOFTWARE", regModes[i]); + try { + if (wrk.hasChild(regWebsensePath)) { + let childKey = wrk.openChild(regWebsensePath, wrk.ACCESS_READ); + websenseVersion = childKey.readStringValue("InstallVersion"); + Services.telemetry.scalarSet(AUSHELPER_WEBSENSE_REG_VERSION_SCALAR_NAME, websenseVersion); + } + wrk.close(); + } catch (e) { + Cu.reportError("AUSHelper - unable to read registry. Exception: " + e); + websenseErrorCode |= WEBSENSE_REG_READ_ERROR; + } + } + } catch (ex) { + Cu.reportError("AUSHelper - unable to open registry. Exception: " + ex); + websenseErrorCode |= WEBSENSE_REG_OPEN_ERROR; + } + + Services.telemetry.getHistogramById(AUSHELPER_WEBSENSE_REG_EXISTS_HISTOGRAM_ID).add(!!websenseVersion); + let websenseValue = "(" + (websenseVersion ? "websense-" + websenseVersion : "nowebsense") + ")"; + + let branch = Services.prefs.getDefaultBranch(""); + let curValue = branch.getCharPref(APP_UPDATE_URL_PREF); + if (curValue.indexOf(REPLACE_KEY + "/") > -1) { + let newValue = curValue.replace(REPLACE_KEY + "/", REPLACE_KEY + cpuValue + websenseValue + "/"); + branch.setCharPref(APP_UPDATE_URL_PREF, newValue); + } else { + websenseErrorCode |= WEBSENSE_ALREADY_MODIFIED; + } + Services.telemetry.getHistogramById(AUSHELPER_WEBSENSE_ERROR_CODE_HISTOGRAM_ID).add(websenseErrorCode); +} +function shutdown() {} +function install() {} +function uninstall() {} diff --git a/browser/extensions/aushelper/install.rdf.in b/browser/extensions/aushelper/install.rdf.in new file mode 100644 index 000000000000..78e841d884df --- /dev/null +++ b/browser/extensions/aushelper/install.rdf.in @@ -0,0 +1,32 @@ + + + +#filter substitution + + + + + aushelper@mozilla.org + 2.0 + 2 + true + true + + + + + {ec8030f7-c20a-464f-9b0e-13a3a9e97384} + @MOZ_APP_VERSION@ + @MOZ_APP_MAXVERSION@ + + + + + Application Update Service Helper + Sets value(s) in the update url based on custom checks. + + diff --git a/browser/extensions/aushelper/moz.build b/browser/extensions/aushelper/moz.build new file mode 100644 index 000000000000..50e1a2d2ab32 --- /dev/null +++ b/browser/extensions/aushelper/moz.build @@ -0,0 +1,19 @@ +# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +with Files("**"): + BUG_COMPONENT = ("Toolkit", "Application Update") + +DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION'] +DEFINES['MOZ_APP_MAXVERSION'] = CONFIG['MOZ_APP_MAXVERSION'] + +FINAL_TARGET_FILES.features['aushelper@mozilla.org'] += [ + 'bootstrap.js' +] + +FINAL_TARGET_PP_FILES.features['aushelper@mozilla.org'] += [ + 'install.rdf.in' +] diff --git a/browser/extensions/moz.build b/browser/extensions/moz.build index 98166ba5234c..66ac545f478c 100644 --- a/browser/extensions/moz.build +++ b/browser/extensions/moz.build @@ -5,6 +5,7 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. DIRS += [ + 'aushelper', 'formautofill', 'onboarding', 'pdfjs', diff --git a/testing/talos/talos/xtalos/xperf_whitelist.json b/testing/talos/talos/xtalos/xperf_whitelist.json index 2b91c38d84b1..7a2ad9ff2be7 100644 --- a/testing/talos/talos/xtalos/xperf_whitelist.json +++ b/testing/talos/talos/xtalos/xperf_whitelist.json @@ -173,6 +173,12 @@ "minbytes": 0, "maxbytes": 8192 }, + "{firefox}\\browser\\features\\aushelper@mozilla.org.xpi": { + "mincount": 0, + "maxcount": 2, + "minbytes": 0, + "maxbytes": 24576 + }, "{firefox}\\browser\\features\\flyweb@mozilla.org.xpi": { "mincount": 0, "maxcount": 2, diff --git a/toolkit/components/telemetry/Histograms.json b/toolkit/components/telemetry/Histograms.json index 1514da1661d9..685651a05d07 100644 --- a/toolkit/components/telemetry/Histograms.json +++ b/toolkit/components/telemetry/Histograms.json @@ -199,6 +199,45 @@ "description": "The operating system audio back-end used when successfully opening an audio stream, or whether the failure occurred on the first try or not ", "releaseChannelCollection": "opt-out" }, + "AUSHELPER_CPU_ERROR_CODE": { + "record_in_processes": ["main", "content"], + "alert_emails": ["application-update-telemetry-alerts@mozilla.com"], + "bug_numbers": [1296630], + "expires_in_version": "60", + "kind": "enumerated", + "n_values": 16, + "releaseChannelCollection": "opt-out", + "description": "The error code from the aushelper system add-on when querying the registry for CPU information for bug 1296630 (see browser/extensions/aushelper/bootstrap.js)." + }, + "AUSHELPER_CPU_RESULT_CODE": { + "record_in_processes": ["main", "content"], + "alert_emails": ["application-update-telemetry-alerts@mozilla.com"], + "bug_numbers": [1296630], + "expires_in_version": "60", + "kind": "enumerated", + "n_values": 5, + "releaseChannelCollection": "opt-out", + "description": "Whether the system is affected by bug 1296630 (1=No, 2=Yes, 3=Error, and 4=Unknown)." + }, + "AUSHELPER_WEBSENSE_ERROR_CODE": { + "record_in_processes": ["main", "content"], + "alert_emails": ["application-update-telemetry-alerts@mozilla.com"], + "bug_numbers": [1305847], + "expires_in_version": "60", + "kind": "enumerated", + "n_values": 8, + "releaseChannelCollection": "opt-out", + "description": "The error code from the aushelper system add-on when gathering information on Websense (see browser/extensions/aushelper/bootstrap.js)." + }, + "AUSHELPER_WEBSENSE_REG_EXISTS": { + "record_in_processes": ["main", "content"], + "alert_emails": ["application-update-telemetry-alerts@mozilla.com"], + "bug_numbers": [1305847], + "expires_in_version": "60", + "kind": "boolean", + "releaseChannelCollection": "opt-out", + "description": "Whether the system has a Websense InstallVersion registry value (see browser/extensions/aushelper/bootstrap.js)." + }, "BACKGROUNDFILESAVER_THREAD_COUNT": { "record_in_processes": ["main", "content"], "expires_in_version": "never", diff --git a/toolkit/components/telemetry/Scalars.yaml b/toolkit/components/telemetry/Scalars.yaml index 810bb6e3d5c4..bb61aee44de0 100644 --- a/toolkit/components/telemetry/Scalars.yaml +++ b/toolkit/components/telemetry/Scalars.yaml @@ -35,6 +35,20 @@ a11y: record_in_processes: - 'main' +# The following section contains the aushelper system add-on scalars. +aushelper: + websense_reg_version: + bug_numbers: + - 1305847 + description: The Websense version from the Windows registry. + expires: "60" + kind: string + notification_emails: + - application-update-telemetry-alerts@mozilla.com + release_channel_collection: opt-out + record_in_processes: + - 'main' + # The following section contains the browser engagement scalars. browser.engagement: max_concurrent_tab_count: