Remove telemetry from app AUS
This commit is contained in:
parent
1fc8bb8301
commit
24da94b494
|
@ -1,488 +0,0 @@
|
|||
/* 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/. */
|
||||
|
||||
"use strict";
|
||||
|
||||
this.EXPORTED_SYMBOLS = [
|
||||
"AUSTLMY"
|
||||
];
|
||||
|
||||
const {classes: Cc, interfaces: Ci, results: Cr, utils: Cu} = Components;
|
||||
|
||||
Cu.import("resource://gre/modules/Services.jsm", this);
|
||||
|
||||
this.AUSTLMY = {
|
||||
// Telemetry for the application update background update check occurs when
|
||||
// the background update timer fires after the update interval which is
|
||||
// determined by the app.update.interval preference and its telemetry
|
||||
// histogram IDs have the suffix '_NOTIFY'.
|
||||
// Telemetry for the externally initiated background update check occurs when
|
||||
// a call is made to |checkForBackgroundUpdates| which is typically initiated
|
||||
// by an application when it has determined that the application should have
|
||||
// received an update. This has separate telemetry so it is possible to
|
||||
// analyze using the telemetry data systems that have not been updating when
|
||||
// they should have.
|
||||
|
||||
// The update check was performed by the call to checkForBackgroundUpdates in
|
||||
// nsUpdateService.js.
|
||||
EXTERNAL: "EXTERNAL",
|
||||
// The update check was performed by the call to notify in nsUpdateService.js.
|
||||
NOTIFY: "NOTIFY",
|
||||
|
||||
/**
|
||||
* Values for the UPDATE_CHECK_CODE_NOTIFY and UPDATE_CHECK_CODE_EXTERNAL
|
||||
* Telemetry histograms.
|
||||
*/
|
||||
// No update found (no notification)
|
||||
CHK_NO_UPDATE_FOUND: 0,
|
||||
// Update will be downloaded in the background (background download)
|
||||
CHK_DOWNLOAD_UPDATE: 1,
|
||||
// Showing prompt due to the update.xml specifying showPrompt
|
||||
// (update notification)
|
||||
CHK_SHOWPROMPT_SNIPPET: 2,
|
||||
// Showing prompt due to preference (update notification)
|
||||
CHK_SHOWPROMPT_PREF: 3,
|
||||
// Already has an active update in progress (no notification)
|
||||
CHK_HAS_ACTIVEUPDATE: 8,
|
||||
// A background download is already in progress (no notification)
|
||||
CHK_IS_DOWNLOADING: 9,
|
||||
// An update is already staged (no notification)
|
||||
CHK_IS_STAGED: 10,
|
||||
// An update is already downloaded (no notification)
|
||||
CHK_IS_DOWNLOADED: 11,
|
||||
// Background checks disabled by preference (no notification)
|
||||
CHK_PREF_DISABLED: 12,
|
||||
// Update checks disabled by admin locked preference (no notification)
|
||||
CHK_ADMIN_DISABLED: 13,
|
||||
// Unable to check for updates per hasUpdateMutex() (no notification)
|
||||
CHK_NO_MUTEX: 14,
|
||||
// Unable to check for updates per gCanCheckForUpdates (no notification). This
|
||||
// should be covered by other codes and is recorded just in case.
|
||||
CHK_UNABLE_TO_CHECK: 15,
|
||||
// Background checks disabled for the current session (no notification)
|
||||
CHK_DISABLED_FOR_SESSION: 16,
|
||||
// Unable to perform a background check while offline (no notification)
|
||||
CHK_OFFLINE: 17,
|
||||
// Note: codes 18 - 21 were removed along with the certificate checking code.
|
||||
// General update check failure and threshold reached
|
||||
// (check failure notification)
|
||||
CHK_GENERAL_ERROR_PROMPT: 22,
|
||||
// General update check failure and threshold not reached (no notification)
|
||||
CHK_GENERAL_ERROR_SILENT: 23,
|
||||
// No compatible update found though there were updates (no notification)
|
||||
CHK_NO_COMPAT_UPDATE_FOUND: 24,
|
||||
// Update found for a previous version (no notification)
|
||||
CHK_UPDATE_PREVIOUS_VERSION: 25,
|
||||
// Update found for a version with the never preference set (no notification)
|
||||
CHK_UPDATE_NEVER_PREF: 26,
|
||||
// Update found without a type attribute (no notification)
|
||||
CHK_UPDATE_INVALID_TYPE: 27,
|
||||
// The system is no longer supported (system unsupported notification)
|
||||
CHK_UNSUPPORTED: 28,
|
||||
// Unable to apply updates (manual install to update notification)
|
||||
CHK_UNABLE_TO_APPLY: 29,
|
||||
// Unable to check for updates due to no OS version (no notification)
|
||||
CHK_NO_OS_VERSION: 30,
|
||||
// Unable to check for updates due to no OS ABI (no notification)
|
||||
CHK_NO_OS_ABI: 31,
|
||||
// Invalid url for app.update.url default preference (no notification)
|
||||
CHK_INVALID_DEFAULT_URL: 32,
|
||||
// Update elevation failures or cancelations threshold reached for this
|
||||
// version, OSX only (no notification)
|
||||
CHK_ELEVATION_DISABLED_FOR_VERSION: 35,
|
||||
// User opted out of elevated updates for the available update version, OSX
|
||||
// only (no notification)
|
||||
CHK_ELEVATION_OPTOUT_FOR_VERSION: 36,
|
||||
|
||||
/**
|
||||
* Submit a telemetry ping for the update check result code or a telemetry
|
||||
* ping for a count type histogram count when no update was found. The no
|
||||
* update found ping is separate since it is the typical result, is less
|
||||
* interesting than the other result codes, and it is easier to analyze the
|
||||
* other codes without including it.
|
||||
*
|
||||
* @param aSuffix
|
||||
* The histogram id suffix for histogram IDs:
|
||||
* UPDATE_CHECK_CODE_EXTERNAL
|
||||
* UPDATE_CHECK_CODE_NOTIFY
|
||||
* UPDATE_CHECK_NO_UPDATE_EXTERNAL
|
||||
* UPDATE_CHECK_NO_UPDATE_NOTIFY
|
||||
* @param aCode
|
||||
* An integer value as defined by the values that start with CHK_ in
|
||||
* the above section.
|
||||
*/
|
||||
pingCheckCode: function UT_pingCheckCode(aSuffix, aCode) {
|
||||
try {
|
||||
if (aCode == this.CHK_NO_UPDATE_FOUND) {
|
||||
let id = "UPDATE_CHECK_NO_UPDATE_" + aSuffix;
|
||||
// count type histogram
|
||||
Services.telemetry.getHistogramById(id).add();
|
||||
} else {
|
||||
let id = "UPDATE_CHECK_CODE_" + aSuffix;
|
||||
// enumerated type histogram
|
||||
Services.telemetry.getHistogramById(id).add(aCode);
|
||||
}
|
||||
} catch (e) {
|
||||
Cu.reportError(e);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Submit a telemetry ping for a failed update check's unhandled error code
|
||||
* when the pingCheckCode is CHK_GENERAL_ERROR_SILENT. The histogram is a
|
||||
* keyed count type with key names that are prefixed with 'AUS_CHECK_EX_ERR_'.
|
||||
*
|
||||
* @param aSuffix
|
||||
* The histogram id suffix for histogram IDs:
|
||||
* UPDATE_CHK_EXTENDED_ERROR_EXTERNAL
|
||||
* UPDATE_CHK_EXTENDED_ERROR_NOTIFY
|
||||
* @param aCode
|
||||
* The extended error value return by a failed update check.
|
||||
*/
|
||||
pingCheckExError: function UT_pingCheckExError(aSuffix, aCode) {
|
||||
try {
|
||||
let id = "UPDATE_CHECK_EXTENDED_ERROR_" + aSuffix;
|
||||
let val = "AUS_CHECK_EX_ERR_" + aCode;
|
||||
// keyed count type histogram
|
||||
Services.telemetry.getKeyedHistogramById(id).add(val);
|
||||
} catch (e) {
|
||||
Cu.reportError(e);
|
||||
}
|
||||
},
|
||||
|
||||
// The state code and if present the status error code were read on startup.
|
||||
STARTUP: "STARTUP",
|
||||
// The state code and status error code if present were read after staging.
|
||||
STAGE: "STAGE",
|
||||
|
||||
// Patch type Complete
|
||||
PATCH_COMPLETE: "COMPLETE",
|
||||
// Patch type partial
|
||||
PATCH_PARTIAL: "PARTIAL",
|
||||
// Patch type unknown
|
||||
PATCH_UNKNOWN: "UNKNOWN",
|
||||
|
||||
/**
|
||||
* Values for the UPDATE_DOWNLOAD_CODE_COMPLETE and
|
||||
* UPDATE_DOWNLOAD_CODE_PARTIAL Telemetry histograms.
|
||||
*/
|
||||
DWNLD_SUCCESS: 0,
|
||||
DWNLD_RETRY_OFFLINE: 1,
|
||||
DWNLD_RETRY_NET_TIMEOUT: 2,
|
||||
DWNLD_RETRY_CONNECTION_REFUSED: 3,
|
||||
DWNLD_RETRY_NET_RESET: 4,
|
||||
DWNLD_ERR_NO_UPDATE: 5,
|
||||
DWNLD_ERR_NO_UPDATE_PATCH: 6,
|
||||
DWNLD_ERR_NO_PATCH_FILE: 7,
|
||||
DWNLD_ERR_PATCH_SIZE_LARGER: 8,
|
||||
DWNLD_ERR_PATCH_SIZE_NOT_EQUAL: 9,
|
||||
DWNLD_ERR_BINDING_ABORTED: 10,
|
||||
DWNLD_ERR_ABORT: 11,
|
||||
DWNLD_ERR_DOCUMENT_NOT_CACHED: 12,
|
||||
DWNLD_ERR_VERIFY_NO_REQUEST: 13,
|
||||
DWNLD_ERR_VERIFY_PATCH_SIZE_NOT_EQUAL: 14,
|
||||
DWNLD_ERR_VERIFY_NO_HASH_MATCH: 15,
|
||||
|
||||
/**
|
||||
* Submit a telemetry ping for the update download result code.
|
||||
*
|
||||
* @param aIsComplete
|
||||
* If true the histogram is for a patch type complete, if false the
|
||||
* histogram is for a patch type partial, and when undefined the
|
||||
* histogram is for an unknown patch type. This is used to determine
|
||||
* the histogram ID out of the following histogram IDs:
|
||||
* UPDATE_DOWNLOAD_CODE_COMPLETE
|
||||
* UPDATE_DOWNLOAD_CODE_PARTIAL
|
||||
* @param aCode
|
||||
* An integer value as defined by the values that start with DWNLD_ in
|
||||
* the above section.
|
||||
*/
|
||||
pingDownloadCode: function UT_pingDownloadCode(aIsComplete, aCode) {
|
||||
let patchType = this.PATCH_UNKNOWN;
|
||||
if (aIsComplete === true) {
|
||||
patchType = this.PATCH_COMPLETE;
|
||||
} else if (aIsComplete === false) {
|
||||
patchType = this.PATCH_PARTIAL;
|
||||
}
|
||||
try {
|
||||
let id = "UPDATE_DOWNLOAD_CODE_" + patchType;
|
||||
// enumerated type histogram
|
||||
Services.telemetry.getHistogramById(id).add(aCode);
|
||||
} catch (e) {
|
||||
Cu.reportError(e);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Submit a telemetry ping for the update status state code.
|
||||
*
|
||||
* @param aSuffix
|
||||
* The histogram id suffix for histogram IDs:
|
||||
* UPDATE_STATE_CODE_COMPLETE_STARTUP
|
||||
* UPDATE_STATE_CODE_PARTIAL_STARTUP
|
||||
* UPDATE_STATE_CODE_UNKNOWN_STARTUP
|
||||
* UPDATE_STATE_CODE_COMPLETE_STAGE
|
||||
* UPDATE_STATE_CODE_PARTIAL_STAGE
|
||||
* UPDATE_STATE_CODE_UNKNOWN_STAGE
|
||||
* @param aCode
|
||||
* An integer value as defined by the values that start with STATE_ in
|
||||
* the above section for the update state from the update.status file.
|
||||
*/
|
||||
pingStateCode: function UT_pingStateCode(aSuffix, aCode) {
|
||||
try {
|
||||
let id = "UPDATE_STATE_CODE_" + aSuffix;
|
||||
// enumerated type histogram
|
||||
Services.telemetry.getHistogramById(id).add(aCode);
|
||||
} catch (e) {
|
||||
Cu.reportError(e);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Submit a telemetry ping for the update status error code. This does not
|
||||
* submit a success value which can be determined from the state code.
|
||||
*
|
||||
* @param aSuffix
|
||||
* The histogram id suffix for histogram IDs:
|
||||
* UPDATE_STATUS_ERROR_CODE_COMPLETE_STARTUP
|
||||
* UPDATE_STATUS_ERROR_CODE_PARTIAL_STARTUP
|
||||
* UPDATE_STATUS_ERROR_CODE_UNKNOWN_STARTUP
|
||||
* UPDATE_STATUS_ERROR_CODE_COMPLETE_STAGE
|
||||
* UPDATE_STATUS_ERROR_CODE_PARTIAL_STAGE
|
||||
* UPDATE_STATUS_ERROR_CODE_UNKNOWN_STAGE
|
||||
* @param aCode
|
||||
* An integer value for the error code from the update.status file.
|
||||
*/
|
||||
pingStatusErrorCode: function UT_pingStatusErrorCode(aSuffix, aCode) {
|
||||
try {
|
||||
let id = "UPDATE_STATUS_ERROR_CODE_" + aSuffix;
|
||||
// enumerated type histogram
|
||||
Services.telemetry.getHistogramById(id).add(aCode);
|
||||
} catch (e) {
|
||||
Cu.reportError(e);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Submit the interval in days since the last notification for this background
|
||||
* update check or a boolean if the last notification is in the future.
|
||||
*
|
||||
* @param aSuffix
|
||||
* The histogram id suffix for histogram IDs:
|
||||
* UPDATE_INVALID_LASTUPDATETIME_EXTERNAL
|
||||
* UPDATE_INVALID_LASTUPDATETIME_NOTIFY
|
||||
* UPDATE_LAST_NOTIFY_INTERVAL_DAYS_EXTERNAL
|
||||
* UPDATE_LAST_NOTIFY_INTERVAL_DAYS_NOTIFY
|
||||
*/
|
||||
pingLastUpdateTime: function UT_pingLastUpdateTime(aSuffix) {
|
||||
const PREF_APP_UPDATE_LASTUPDATETIME = "app.update.lastUpdateTime.background-update-timer";
|
||||
if (Services.prefs.prefHasUserValue(PREF_APP_UPDATE_LASTUPDATETIME)) {
|
||||
let lastUpdateTimeSeconds = Services.prefs.getIntPref(PREF_APP_UPDATE_LASTUPDATETIME);
|
||||
if (lastUpdateTimeSeconds) {
|
||||
let currentTimeSeconds = Math.round(Date.now() / 1000);
|
||||
if (lastUpdateTimeSeconds > currentTimeSeconds) {
|
||||
try {
|
||||
let id = "UPDATE_INVALID_LASTUPDATETIME_" + aSuffix;
|
||||
// count type histogram
|
||||
Services.telemetry.getHistogramById(id).add();
|
||||
} catch (e) {
|
||||
Cu.reportError(e);
|
||||
}
|
||||
} else {
|
||||
let intervalDays = (currentTimeSeconds - lastUpdateTimeSeconds) /
|
||||
(60 * 60 * 24);
|
||||
try {
|
||||
let id = "UPDATE_LAST_NOTIFY_INTERVAL_DAYS_" + aSuffix;
|
||||
// exponential type histogram
|
||||
Services.telemetry.getHistogramById(id).add(intervalDays);
|
||||
} catch (e) {
|
||||
Cu.reportError(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Submit a telemetry ping for the last page displayed by the update wizard.
|
||||
*
|
||||
* @param aPageID
|
||||
* The page id for the last page displayed.
|
||||
*/
|
||||
pingWizLastPageCode: function UT_pingWizLastPageCode(aPageID) {
|
||||
let pageMap = { invalid: 0,
|
||||
dummy: 1,
|
||||
checking: 2,
|
||||
pluginupdatesfound: 3,
|
||||
noupdatesfound: 4,
|
||||
manualUpdate: 5,
|
||||
unsupported: 6,
|
||||
updatesfoundbasic: 8,
|
||||
updatesfoundbillboard: 9,
|
||||
downloading: 12,
|
||||
errors: 13,
|
||||
errorextra: 14,
|
||||
errorpatching: 15,
|
||||
finished: 16,
|
||||
finishedBackground: 17,
|
||||
installed: 18 };
|
||||
try {
|
||||
let id = "UPDATE_WIZ_LAST_PAGE_CODE";
|
||||
// enumerated type histogram
|
||||
Services.telemetry.getHistogramById(id).add(pageMap[aPageID] ||
|
||||
pageMap.invalid);
|
||||
} catch (e) {
|
||||
Cu.reportError(e);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Submit a telemetry ping for a boolean type histogram that indicates if the
|
||||
* service is installed and a telemetry ping for a boolean type histogram that
|
||||
* indicates if the service was at some point installed and is now
|
||||
* uninstalled.
|
||||
*
|
||||
* @param aSuffix
|
||||
* The histogram id suffix for histogram IDs:
|
||||
* UPDATE_SERVICE_INSTALLED_EXTERNAL
|
||||
* UPDATE_SERVICE_INSTALLED_NOTIFY
|
||||
* UPDATE_SERVICE_MANUALLY_UNINSTALLED_EXTERNAL
|
||||
* UPDATE_SERVICE_MANUALLY_UNINSTALLED_NOTIFY
|
||||
* @param aInstalled
|
||||
* Whether the service is installed.
|
||||
*/
|
||||
pingServiceInstallStatus: function UT_PSIS(aSuffix, aInstalled) {
|
||||
// Report the error but don't throw since it is more important to
|
||||
// successfully update than to throw.
|
||||
if (!("@mozilla.org/windows-registry-key;1" in Cc)) {
|
||||
Cu.reportError(Cr.NS_ERROR_NOT_AVAILABLE);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
let id = "UPDATE_SERVICE_INSTALLED_" + aSuffix;
|
||||
// boolean type histogram
|
||||
Services.telemetry.getHistogramById(id).add(aInstalled);
|
||||
} catch (e) {
|
||||
Cu.reportError(e);
|
||||
}
|
||||
|
||||
let attempted = 0;
|
||||
try {
|
||||
let wrk = Cc["@mozilla.org/windows-registry-key;1"].
|
||||
createInstance(Ci.nsIWindowsRegKey);
|
||||
wrk.open(wrk.ROOT_KEY_LOCAL_MACHINE,
|
||||
"SOFTWARE\\Mozilla\\MaintenanceService",
|
||||
wrk.ACCESS_READ | wrk.WOW64_64);
|
||||
// Was the service at some point installed, but is now uninstalled?
|
||||
attempted = wrk.readIntValue("Attempted");
|
||||
wrk.close();
|
||||
} catch (e) {
|
||||
// Since this will throw if the registry key doesn't exist (e.g. the
|
||||
// service has never been installed) don't report an error.
|
||||
}
|
||||
|
||||
try {
|
||||
let id = "UPDATE_SERVICE_MANUALLY_UNINSTALLED_" + aSuffix;
|
||||
if (!aInstalled && attempted) {
|
||||
// count type histogram
|
||||
Services.telemetry.getHistogramById(id).add();
|
||||
}
|
||||
} catch (e) {
|
||||
Cu.reportError(e);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Submit a telemetry ping for a count type histogram when the expected value
|
||||
* does not equal the boolean value of a pref or if the pref isn't present
|
||||
* when the expected value does not equal default value. This lessens the
|
||||
* amount of data submitted to telemetry.
|
||||
*
|
||||
* @param aID
|
||||
* The histogram ID to report to.
|
||||
* @param aPref
|
||||
* The preference to check.
|
||||
* @param aDefault
|
||||
* The default value when the preference isn't present.
|
||||
* @param aExpected (optional)
|
||||
* If specified and the value is the same as the value that will be
|
||||
* added the value won't be added to telemetry.
|
||||
*/
|
||||
pingBoolPref: function UT_pingBoolPref(aID, aPref, aDefault, aExpected) {
|
||||
try {
|
||||
let val = aDefault;
|
||||
if (Services.prefs.getPrefType(aPref) != Ci.nsIPrefBranch.PREF_INVALID) {
|
||||
val = Services.prefs.getBoolPref(aPref);
|
||||
}
|
||||
if (val != aExpected) {
|
||||
// count type histogram
|
||||
Services.telemetry.getHistogramById(aID).add();
|
||||
}
|
||||
} catch (e) {
|
||||
Cu.reportError(e);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Submit a telemetry ping for a histogram with the integer value of a
|
||||
* preference when it is not the expected value or the default value when it
|
||||
* is not the expected value. This lessens the amount of data submitted to
|
||||
* telemetry.
|
||||
*
|
||||
* @param aID
|
||||
* The histogram ID to report to.
|
||||
* @param aPref
|
||||
* The preference to check.
|
||||
* @param aDefault
|
||||
* The default value when the pref is not set.
|
||||
* @param aExpected (optional)
|
||||
* If specified and the value is the same as the value that will be
|
||||
* added the value won't be added to telemetry.
|
||||
*/
|
||||
pingIntPref: function UT_pingIntPref(aID, aPref, aDefault, aExpected) {
|
||||
try {
|
||||
let val = aDefault;
|
||||
if (Services.prefs.getPrefType(aPref) != Ci.nsIPrefBranch.PREF_INVALID) {
|
||||
val = Services.prefs.getIntPref(aPref);
|
||||
}
|
||||
if (aExpected === undefined || val != aExpected) {
|
||||
// enumerated or exponential type histogram
|
||||
Services.telemetry.getHistogramById(aID).add(val);
|
||||
}
|
||||
} catch (e) {
|
||||
Cu.reportError(e);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Submit a telemetry ping for all histogram types that take a single
|
||||
* parameter to the telemetry add function and the count type histogram when
|
||||
* the aExpected parameter is specified. If the aExpected parameter is
|
||||
* specified and it equals the value specified by the aValue
|
||||
* parameter the telemetry submission will be skipped.
|
||||
*
|
||||
* @param aID
|
||||
* The histogram ID to report to.
|
||||
* @param aValue
|
||||
* The value to add when aExpected is not defined or the value to
|
||||
* check if it is equal to when aExpected is defined.
|
||||
* @param aExpected (optional)
|
||||
* If specified and the value is the same as the value specified by
|
||||
* aValue parameter the submission will be skipped.
|
||||
*/
|
||||
pingGeneric: function UT_pingGeneric(aID, aValue, aExpected) {
|
||||
try {
|
||||
if (aExpected === undefined) {
|
||||
Services.telemetry.getHistogramById(aID).add(aValue);
|
||||
} else if (aValue != aExpected) {
|
||||
// count type histogram
|
||||
Services.telemetry.getHistogramById(aID).add();
|
||||
}
|
||||
} catch (e) {
|
||||
Cu.reportError(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
Object.freeze(AUSTLMY);
|
|
@ -11,10 +11,9 @@
|
|||
// so we have to use different names.
|
||||
const {classes: CoC, interfaces: CoI, results: CoR, utils: CoU} = Components;
|
||||
|
||||
/* globals DownloadUtils, Services, AUSTLMY */
|
||||
/* globals DownloadUtils, Services */
|
||||
CoU.import("resource://gre/modules/DownloadUtils.jsm", this);
|
||||
CoU.import("resource://gre/modules/Services.jsm", this);
|
||||
CoU.import("resource://gre/modules/UpdateTelemetry.jsm", this);
|
||||
|
||||
const XMLNS_XUL = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||||
|
||||
|
@ -115,15 +114,6 @@ var gUpdates = {
|
|||
*/
|
||||
_runUnload: true,
|
||||
|
||||
/**
|
||||
* Submit on close telemtry values for the update wizard.
|
||||
* @param pageID
|
||||
* The page id for the last page displayed.
|
||||
*/
|
||||
_submitTelemetry: function(aPageID) {
|
||||
AUSTLMY.pingWizLastPageCode(aPageID);
|
||||
},
|
||||
|
||||
/**
|
||||
* Helper function for setButtons
|
||||
* Resets button to original label & accesskey if string is null.
|
||||
|
@ -242,7 +232,6 @@ var gUpdates = {
|
|||
var pageid = document.documentElement.currentPage.pageid;
|
||||
if ("onWizardFinish" in this._pages[pageid])
|
||||
this._pages[pageid].onWizardFinish();
|
||||
this._submitTelemetry(pageid);
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -254,7 +243,6 @@ var gUpdates = {
|
|||
var pageid = document.documentElement.currentPage.pageid;
|
||||
if ("onWizardCancel" in this._pages[pageid])
|
||||
this._pages[pageid].onWizardCancel();
|
||||
this._submitTelemetry(pageid);
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
@ -23,10 +23,6 @@ EXTRA_COMPONENTS += [
|
|||
'nsUpdateServiceStub.js',
|
||||
]
|
||||
|
||||
EXTRA_JS_MODULES += [
|
||||
'UpdateTelemetry.jsm',
|
||||
]
|
||||
|
||||
JAR_MANIFESTS += ['jar.mn']
|
||||
|
||||
with Files('**'):
|
||||
|
|
|
@ -12,7 +12,6 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm", this);
|
|||
Cu.import("resource://gre/modules/FileUtils.jsm", this);
|
||||
Cu.import("resource://gre/modules/Services.jsm", this);
|
||||
Cu.import("resource://gre/modules/ctypes.jsm", this);
|
||||
Cu.import("resource://gre/modules/UpdateTelemetry.jsm", this);
|
||||
Cu.import("resource://gre/modules/AppConstants.jsm", this);
|
||||
Cu.importGlobalProperties(["XMLHttpRequest"]);
|
||||
|
||||
|
@ -949,66 +948,6 @@ function handleFallbackToCompleteUpdate(update, postStaging) {
|
|||
update.setProperty("patchingFailed", oldType);
|
||||
}
|
||||
|
||||
function pingStateAndStatusCodes(aUpdate, aStartup, aStatus) {
|
||||
let patchType = AUSTLMY.PATCH_UNKNOWN;
|
||||
if (aUpdate && aUpdate.selectedPatch && aUpdate.selectedPatch.type) {
|
||||
if (aUpdate.selectedPatch.type == "complete") {
|
||||
patchType = AUSTLMY.PATCH_COMPLETE;
|
||||
} else if (aUpdate.selectedPatch.type == "partial") {
|
||||
patchType = AUSTLMY.PATCH_PARTIAL;
|
||||
}
|
||||
}
|
||||
|
||||
let suffix = patchType + "_" + (aStartup ? AUSTLMY.STARTUP : AUSTLMY.STAGE);
|
||||
let stateCode = 0;
|
||||
let parts = aStatus.split(":");
|
||||
if (parts.length > 0) {
|
||||
switch (parts[0]) {
|
||||
case STATE_NONE:
|
||||
stateCode = 2;
|
||||
break;
|
||||
case STATE_DOWNLOADING:
|
||||
stateCode = 3;
|
||||
break;
|
||||
case STATE_PENDING:
|
||||
stateCode = 4;
|
||||
break;
|
||||
case STATE_APPLYING:
|
||||
stateCode = 6;
|
||||
break;
|
||||
case STATE_APPLIED:
|
||||
stateCode = 7;
|
||||
break;
|
||||
case STATE_APPLIED_OS:
|
||||
stateCode = 8;
|
||||
break;
|
||||
case STATE_SUCCEEDED:
|
||||
stateCode = 10;
|
||||
break;
|
||||
case STATE_DOWNLOAD_FAILED:
|
||||
stateCode = 11;
|
||||
break;
|
||||
case STATE_FAILED:
|
||||
stateCode = 12;
|
||||
break;
|
||||
case STATE_PENDING_ELEVATE:
|
||||
stateCode = 13;
|
||||
break;
|
||||
default:
|
||||
stateCode = 1;
|
||||
}
|
||||
|
||||
if (parts.length > 1) {
|
||||
let statusErrorCode = INVALID_UPDATER_STATE_CODE;
|
||||
if (parts[0] == STATE_FAILED) {
|
||||
statusErrorCode = parseInt(parts[1]) || INVALID_UPDATER_STATUS_CODE;
|
||||
}
|
||||
AUSTLMY.pingStatusErrorCode(suffix, statusErrorCode);
|
||||
}
|
||||
}
|
||||
AUSTLMY.pingStateCode(suffix, stateCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update Patch
|
||||
* @param patch
|
||||
|
@ -1596,7 +1535,6 @@ UpdateService.prototype = {
|
|||
getService(Ci.nsIUpdateManager);
|
||||
var update = um.activeUpdate;
|
||||
var status = readStatusFile(getUpdatesDir());
|
||||
pingStateAndStatusCodes(update, true, status);
|
||||
// STATE_NONE status typically means that the update.status file is present
|
||||
// but a background download error occurred.
|
||||
if (status == STATE_NONE) {
|
||||
|
@ -1764,14 +1702,9 @@ UpdateService.prototype = {
|
|||
if (update.errorCode == NETWORK_ERROR_OFFLINE) {
|
||||
// Register an online observer to try again
|
||||
this._registerOnlineObserver();
|
||||
if (this._pingSuffix) {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_OFFLINE);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Send the error code to telemetry
|
||||
AUSTLMY.pingCheckExError(this._pingSuffix, update.errorCode);
|
||||
update.errorCode = BACKGROUNDCHECK_MULTIPLE_FAILURES;
|
||||
let errCount = Services.prefs.getIntPref(PREF_APP_UPDATE_BACKGROUNDERRORS, 0);
|
||||
errCount++;
|
||||
|
@ -1783,9 +1716,6 @@ UpdateService.prototype = {
|
|||
let prompter = Cc["@mozilla.org/updates/update-prompt;1"].
|
||||
createInstance(Ci.nsIUpdatePrompt);
|
||||
prompter.showUpdateError(update);
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_GENERAL_ERROR_PROMPT);
|
||||
} else {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_GENERAL_ERROR_SILENT);
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -1830,11 +1760,6 @@ UpdateService.prototype = {
|
|||
this._checkForBackgroundUpdates(false);
|
||||
},
|
||||
|
||||
// The suffix used for background update check telemetry histogram ID's.
|
||||
get _pingSuffix() {
|
||||
return this._isNotify ? AUSTLMY.NOTIFY : AUSTLMY.EXTERNAL;
|
||||
},
|
||||
|
||||
/**
|
||||
* Checks for updates in the background.
|
||||
* @param isNotify
|
||||
|
@ -1844,119 +1769,10 @@ UpdateService.prototype = {
|
|||
_checkForBackgroundUpdates: function AUS__checkForBackgroundUpdates(isNotify) {
|
||||
this._isNotify = isNotify;
|
||||
|
||||
// Histogram IDs:
|
||||
// UPDATE_PING_COUNT_EXTERNAL
|
||||
// UPDATE_PING_COUNT_NOTIFY
|
||||
AUSTLMY.pingGeneric("UPDATE_PING_COUNT_" + this._pingSuffix,
|
||||
true, false);
|
||||
|
||||
// Histogram IDs:
|
||||
// UPDATE_UNABLE_TO_APPLY_EXTERNAL
|
||||
// UPDATE_UNABLE_TO_APPLY_NOTIFY
|
||||
AUSTLMY.pingGeneric("UPDATE_UNABLE_TO_APPLY_" + this._pingSuffix,
|
||||
getCanApplyUpdates(), true);
|
||||
// Histogram IDs:
|
||||
// UPDATE_CANNOT_STAGE_EXTERNAL
|
||||
// UPDATE_CANNOT_STAGE_NOTIFY
|
||||
AUSTLMY.pingGeneric("UPDATE_CANNOT_STAGE_" + this._pingSuffix,
|
||||
getCanStageUpdates(), true);
|
||||
// Histogram IDs:
|
||||
// UPDATE_INVALID_LASTUPDATETIME_EXTERNAL
|
||||
// UPDATE_INVALID_LASTUPDATETIME_NOTIFY
|
||||
// UPDATE_LAST_NOTIFY_INTERVAL_DAYS_EXTERNAL
|
||||
// UPDATE_LAST_NOTIFY_INTERVAL_DAYS_NOTIFY
|
||||
AUSTLMY.pingLastUpdateTime(this._pingSuffix);
|
||||
// Histogram IDs:
|
||||
// UPDATE_NOT_PREF_UPDATE_ENABLED_EXTERNAL
|
||||
// UPDATE_NOT_PREF_UPDATE_ENABLED_NOTIFY
|
||||
AUSTLMY.pingBoolPref("UPDATE_NOT_PREF_UPDATE_ENABLED_" + this._pingSuffix,
|
||||
PREF_APP_UPDATE_ENABLED, true, true);
|
||||
// Histogram IDs:
|
||||
// UPDATE_NOT_PREF_UPDATE_AUTO_EXTERNAL
|
||||
// UPDATE_NOT_PREF_UPDATE_AUTO_NOTIFY
|
||||
AUSTLMY.pingBoolPref("UPDATE_NOT_PREF_UPDATE_AUTO_" + this._pingSuffix,
|
||||
PREF_APP_UPDATE_AUTO, true, true);
|
||||
// Histogram IDs:
|
||||
// UPDATE_NOT_PREF_UPDATE_STAGING_ENABLED_EXTERNAL
|
||||
// UPDATE_NOT_PREF_UPDATE_STAGING_ENABLED_NOTIFY
|
||||
AUSTLMY.pingBoolPref("UPDATE_NOT_PREF_UPDATE_STAGING_ENABLED_" +
|
||||
this._pingSuffix,
|
||||
PREF_APP_UPDATE_STAGING_ENABLED, true, true);
|
||||
if (AppConstants.platform == "win" || AppConstants.platform == "macosx") {
|
||||
// Histogram IDs:
|
||||
// UPDATE_PREF_UPDATE_CANCELATIONS_EXTERNAL
|
||||
// UPDATE_PREF_UPDATE_CANCELATIONS_NOTIFY
|
||||
AUSTLMY.pingIntPref("UPDATE_PREF_UPDATE_CANCELATIONS_" + this._pingSuffix,
|
||||
PREF_APP_UPDATE_CANCELATIONS, 0, 0);
|
||||
}
|
||||
if (AppConstants.platform == "macosx") {
|
||||
// Histogram IDs:
|
||||
// UPDATE_PREF_UPDATE_CANCELATIONS_OSX_EXTERNAL
|
||||
// UPDATE_PREF_UPDATE_CANCELATIONS_OSX_NOTIFY
|
||||
AUSTLMY.pingIntPref("UPDATE_PREF_UPDATE_CANCELATIONS_OSX_" +
|
||||
this._pingSuffix,
|
||||
PREF_APP_UPDATE_CANCELATIONS_OSX, 0, 0);
|
||||
}
|
||||
let prefType = Services.prefs.getPrefType(PREF_APP_UPDATE_URL_OVERRIDE);
|
||||
let overridePrefHasValue = prefType != Ci.nsIPrefBranch.PREF_INVALID;
|
||||
// Histogram IDs:
|
||||
// UPDATE_HAS_PREF_URL_OVERRIDE_EXTERNAL
|
||||
// UPDATE_HAS_PREF_URL_OVERRIDE_NOTIFY
|
||||
AUSTLMY.pingGeneric("UPDATE_HAS_PREF_URL_OVERRIDE_" + this._pingSuffix,
|
||||
overridePrefHasValue, false);
|
||||
|
||||
// If a download is in progress or the patch has been staged do nothing.
|
||||
if (this.isDownloading) {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_IS_DOWNLOADING);
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._downloader && this._downloader.patchIsStaged) {
|
||||
let readState = readStatusFile(getUpdatesDir());
|
||||
if (readState == STATE_PENDING ||
|
||||
readState == STATE_PENDING_ELEVATE) {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_IS_DOWNLOADED);
|
||||
} else {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_IS_STAGED);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
let validUpdateURL = true;
|
||||
try {
|
||||
this.backgroundChecker.getUpdateURL(false);
|
||||
} catch (e) {
|
||||
validUpdateURL = false;
|
||||
}
|
||||
// The following checks are done here so they can be differentiated from
|
||||
// foreground checks.
|
||||
if (!UpdateUtils.OSVersion) {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_NO_OS_VERSION);
|
||||
} else if (!UpdateUtils.ABI) {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_NO_OS_ABI);
|
||||
} else if (!validUpdateURL) {
|
||||
if (overridePrefHasValue) {
|
||||
if (Services.prefs.prefHasUserValue(PREF_APP_UPDATE_URL_OVERRIDE)) {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix,
|
||||
AUSTLMY.CHK_INVALID_USER_OVERRIDE_URL);
|
||||
} else {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix,
|
||||
AUSTLMY.CHK_INVALID_DEFAULT_OVERRIDE_URL);
|
||||
}
|
||||
} else {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix,
|
||||
AUSTLMY.CHK_INVALID_DEFAULT_URL);
|
||||
}
|
||||
} else if (!Services.prefs.getBoolPref(PREF_APP_UPDATE_ENABLED, true)) {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_PREF_DISABLED);
|
||||
} else if (!hasUpdateMutex()) {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_NO_MUTEX);
|
||||
} else if (!gCanCheckForUpdates) {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_UNABLE_TO_CHECK);
|
||||
} else if (!this.backgroundChecker._enabled) {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_DISABLED_FOR_SESSION);
|
||||
}
|
||||
|
||||
this.backgroundChecker.checkForUpdates(this, false);
|
||||
},
|
||||
|
||||
|
@ -1970,7 +1786,6 @@ UpdateService.prototype = {
|
|||
*/
|
||||
selectUpdate: function AUS_selectUpdate(updates) {
|
||||
if (updates.length == 0) {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_NO_UPDATE_FOUND);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -1983,7 +1798,6 @@ UpdateService.prototype = {
|
|||
var majorUpdate = null;
|
||||
var minorUpdate = null;
|
||||
var vc = Services.vc;
|
||||
let lastCheckCode = AUSTLMY.CHK_NO_COMPAT_UPDATE_FOUND;
|
||||
|
||||
updates.forEach(function(aUpdate) {
|
||||
// Ignore updates for older versions of the applications and updates for
|
||||
|
@ -1996,7 +1810,6 @@ UpdateService.prototype = {
|
|||
LOG("UpdateService:selectUpdate - skipping update because the " +
|
||||
"update's application version is less than or equal to " +
|
||||
"the current application version.");
|
||||
lastCheckCode = AUSTLMY.CHK_UPDATE_PREVIOUS_VERSION;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2008,7 +1821,6 @@ UpdateService.prototype = {
|
|||
Services.prefs.getBoolPref(neverPrefName, false)) {
|
||||
LOG("UpdateService:selectUpdate - skipping update because the " +
|
||||
"preference " + neverPrefName + " is true");
|
||||
lastCheckCode = AUSTLMY.CHK_UPDATE_NEVER_PREF;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2028,7 +1840,6 @@ UpdateService.prototype = {
|
|||
default:
|
||||
LOG("UpdateService:selectUpdate - skipping unknown update type: " +
|
||||
aUpdate.type);
|
||||
lastCheckCode = AUSTLMY.CHK_UPDATE_INVALID_TYPE;
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
@ -2059,16 +1870,11 @@ UpdateService.prototype = {
|
|||
"install this update, but the user has exceeded the max " +
|
||||
"number of elevation attempts.");
|
||||
update.elevationFailure = true;
|
||||
AUSTLMY.pingCheckCode(
|
||||
this._pingSuffix,
|
||||
AUSTLMY.CHK_ELEVATION_DISABLED_FOR_VERSION);
|
||||
} else if (vc.compare(rejectedVersion, update.appVersion) == 0) {
|
||||
LOG("UpdateService:selectUpdate - the user requires elevation to " +
|
||||
"install this update, but elevation is disabled for this " +
|
||||
"version.");
|
||||
update.elevationFailure = true;
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix,
|
||||
AUSTLMY.CHK_ELEVATION_OPTOUT_FOR_VERSION);
|
||||
} else {
|
||||
LOG("UpdateService:selectUpdate - the user requires elevation to " +
|
||||
"install the update.");
|
||||
|
@ -2088,8 +1894,6 @@ UpdateService.prototype = {
|
|||
Services.prefs.clearUserPref(PREF_APP_UPDATE_ELEVATE_NEVER);
|
||||
}
|
||||
}
|
||||
} else if (!update) {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, lastCheckCode);
|
||||
}
|
||||
|
||||
return update;
|
||||
|
@ -2107,13 +1911,11 @@ UpdateService.prototype = {
|
|||
var um = Cc["@mozilla.org/updates/update-manager;1"].
|
||||
getService(Ci.nsIUpdateManager);
|
||||
if (um.activeUpdate) {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_HAS_ACTIVEUPDATE);
|
||||
return;
|
||||
}
|
||||
|
||||
var updateEnabled = Services.prefs.getBoolPref(PREF_APP_UPDATE_ENABLED, true);
|
||||
if (!updateEnabled) {
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_PREF_DISABLED);
|
||||
LOG("UpdateService:_selectAndInstallUpdate - not prompting because " +
|
||||
"update is disabled");
|
||||
return;
|
||||
|
@ -2132,7 +1934,6 @@ UpdateService.prototype = {
|
|||
"update is not supported for this system");
|
||||
this._showPrompt(update);
|
||||
}
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_UNSUPPORTED);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2140,7 +1941,6 @@ UpdateService.prototype = {
|
|||
LOG("UpdateService:_selectAndInstallUpdate - the user is unable to " +
|
||||
"apply updates... prompting");
|
||||
this._showPrompt(update);
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_UNABLE_TO_APPLY);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2163,7 +1963,6 @@ UpdateService.prototype = {
|
|||
if (update.showPrompt) {
|
||||
LOG("UpdateService:_selectAndInstallUpdate - prompting because the " +
|
||||
"update snippet specified showPrompt");
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_SHOWPROMPT_SNIPPET);
|
||||
this._showPrompt(update);
|
||||
return;
|
||||
}
|
||||
|
@ -2171,7 +1970,6 @@ UpdateService.prototype = {
|
|||
if (!Services.prefs.getBoolPref(PREF_APP_UPDATE_AUTO, true)) {
|
||||
LOG("UpdateService:_selectAndInstallUpdate - prompting because silent " +
|
||||
"install is disabled");
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_SHOWPROMPT_PREF);
|
||||
this._showPrompt(update);
|
||||
return;
|
||||
}
|
||||
|
@ -2181,7 +1979,6 @@ UpdateService.prototype = {
|
|||
if (status == STATE_NONE) {
|
||||
cleanupActiveUpdate();
|
||||
}
|
||||
AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_DOWNLOAD_UPDATE);
|
||||
},
|
||||
|
||||
_showPrompt: function AUS__showPrompt(update) {
|
||||
|
@ -2345,8 +2142,6 @@ UpdateService.prototype = {
|
|||
if (!osApplyToDir) {
|
||||
LOG("UpdateService:applyOsUpdate - Error: osApplyToDir is not defined" +
|
||||
"in the nsIUpdate!");
|
||||
pingStateAndStatusCodes(aUpdate, false,
|
||||
STATE_FAILED + ": " + FOTA_FILE_OPERATION_ERROR);
|
||||
handleUpdateFailure(aUpdate, FOTA_FILE_OPERATION_ERROR);
|
||||
return;
|
||||
}
|
||||
|
@ -2356,8 +2151,6 @@ UpdateService.prototype = {
|
|||
if (!updateFile.exists()) {
|
||||
LOG("UpdateService:applyOsUpdate - Error: OS update is not found at " +
|
||||
updateFile.path);
|
||||
pingStateAndStatusCodes(aUpdate, false,
|
||||
STATE_FAILED + ": " + FOTA_FILE_OPERATION_ERROR);
|
||||
handleUpdateFailure(aUpdate, FOTA_FILE_OPERATION_ERROR);
|
||||
return;
|
||||
}
|
||||
|
@ -2372,8 +2165,6 @@ UpdateService.prototype = {
|
|||
} catch (e) {
|
||||
LOG("UpdateService:applyOsUpdate - Error: Couldn't reboot into recovery" +
|
||||
" to apply FOTA update " + updateFile.path);
|
||||
pingStateAndStatusCodes(aUpdate, false,
|
||||
STATE_FAILED + ": " + FOTA_RECOVERY_ERROR);
|
||||
writeStatusFile(getUpdatesDir(), aUpdate.state = STATE_APPLIED);
|
||||
handleUpdateFailure(aUpdate, FOTA_RECOVERY_ERROR);
|
||||
}
|
||||
|
@ -2675,7 +2466,6 @@ UpdateManager.prototype = {
|
|||
return;
|
||||
}
|
||||
var status = readStatusFile(getUpdatesDir());
|
||||
pingStateAndStatusCodes(update, false, status);
|
||||
var parts = status.split(":");
|
||||
update.state = parts[0];
|
||||
if (update.state == STATE_FAILED && parts[1]) {
|
||||
|
@ -3087,8 +2877,6 @@ Downloader.prototype = {
|
|||
_verifyDownload: function Downloader__verifyDownload() {
|
||||
LOG("Downloader:_verifyDownload called");
|
||||
if (!this._request) {
|
||||
AUSTLMY.pingDownloadCode(this.isCompleteUpdate,
|
||||
AUSTLMY.DWNLD_ERR_VERIFY_NO_REQUEST);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -3097,8 +2885,6 @@ Downloader.prototype = {
|
|||
// Ensure that the file size matches the expected file size.
|
||||
if (destination.fileSize != this._patch.size) {
|
||||
LOG("Downloader:_verifyDownload downloaded size != expected size.");
|
||||
AUSTLMY.pingDownloadCode(this.isCompleteUpdate,
|
||||
AUSTLMY.DWNLD_ERR_VERIFY_PATCH_SIZE_NOT_EQUAL);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -3143,8 +2929,6 @@ Downloader.prototype = {
|
|||
}
|
||||
|
||||
LOG("Downloader:_verifyDownload hashes do not match. ");
|
||||
AUSTLMY.pingDownloadCode(this.isCompleteUpdate,
|
||||
AUSTLMY.DWNLD_ERR_VERIFY_NO_HASH_MATCH);
|
||||
return false;
|
||||
},
|
||||
|
||||
|
@ -3271,7 +3055,6 @@ Downloader.prototype = {
|
|||
downloadUpdate: function Downloader_downloadUpdate(update) {
|
||||
LOG("UpdateService:_downloadUpdate");
|
||||
if (!update) {
|
||||
AUSTLMY.pingDownloadCode(undefined, AUSTLMY.DWNLD_ERR_NO_UPDATE);
|
||||
throw Cr.NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
|
@ -3284,7 +3067,6 @@ Downloader.prototype = {
|
|||
this._patch = this._selectPatch(update, updateDir);
|
||||
if (!this._patch) {
|
||||
LOG("Downloader:downloadUpdate - no patch to download");
|
||||
AUSTLMY.pingDownloadCode(undefined, AUSTLMY.DWNLD_ERR_NO_UPDATE_PATCH);
|
||||
return readStatusFile(updateDir);
|
||||
}
|
||||
this.isCompleteUpdate = this._patch.type == "complete";
|
||||
|
@ -3296,8 +3078,6 @@ Downloader.prototype = {
|
|||
patchFile = this._getUpdateArchiveFile();
|
||||
}
|
||||
if (!patchFile) {
|
||||
AUSTLMY.pingDownloadCode(this.isCompleteUpdate,
|
||||
AUSTLMY.DWNLD_ERR_NO_PATCH_FILE);
|
||||
return STATE_NONE;
|
||||
}
|
||||
|
||||
|
@ -3401,8 +3181,6 @@ Downloader.prototype = {
|
|||
// It's important that we use a different code than
|
||||
// NS_ERROR_CORRUPTED_CONTENT so that tests can verify the difference
|
||||
// between a hash error and a wrong download error.
|
||||
AUSTLMY.pingDownloadCode(this.isCompleteUpdate,
|
||||
AUSTLMY.DWNLD_ERR_PATCH_SIZE_LARGER);
|
||||
this.cancel(Cr.NS_ERROR_UNEXPECTED);
|
||||
return;
|
||||
}
|
||||
|
@ -3413,8 +3191,6 @@ Downloader.prototype = {
|
|||
// It's important that we use a different code than
|
||||
// NS_ERROR_CORRUPTED_CONTENT so that tests can verify the difference
|
||||
// between a hash error and a wrong download error.
|
||||
AUSTLMY.pingDownloadCode(this.isCompleteUpdate,
|
||||
AUSTLMY.DWNLD_ERR_PATCH_SIZE_NOT_EQUAL);
|
||||
this.cancel(Cr.NS_ERROR_UNEXPECTED);
|
||||
return;
|
||||
}
|
||||
|
@ -3495,7 +3271,6 @@ Downloader.prototype = {
|
|||
if (this.background) {
|
||||
shouldShowPrompt = !getCanStageUpdates();
|
||||
}
|
||||
AUSTLMY.pingDownloadCode(this.isCompleteUpdate, AUSTLMY.DWNLD_SUCCESS);
|
||||
|
||||
// Tell the updater.exe we're ready to apply.
|
||||
writeStatusFile(getUpdatesDir(), state);
|
||||
|
@ -3525,8 +3300,6 @@ Downloader.prototype = {
|
|||
// calling downloadUpdate on the active update which continues
|
||||
// downloading the file from where it was.
|
||||
LOG("Downloader:onStopRequest - offline, register online observer: true");
|
||||
AUSTLMY.pingDownloadCode(this.isCompleteUpdate,
|
||||
AUSTLMY.DWNLD_RETRY_OFFLINE);
|
||||
shouldRegisterOnlineObserver = true;
|
||||
deleteActiveUpdate = false;
|
||||
// Each of NS_ERROR_NET_TIMEOUT, ERROR_CONNECTION_REFUSED,
|
||||
|
@ -3540,25 +3313,11 @@ Downloader.prototype = {
|
|||
status == Cr.NS_ERROR_DOCUMENT_NOT_CACHED) &&
|
||||
this.updateService._consecutiveSocketErrors < maxFail) {
|
||||
LOG("Downloader:onStopRequest - socket error, shouldRetrySoon: true");
|
||||
let dwnldCode = AUSTLMY.DWNLD_RETRY_CONNECTION_REFUSED;
|
||||
if (status == Cr.NS_ERROR_NET_TIMEOUT) {
|
||||
dwnldCode = AUSTLMY.DWNLD_RETRY_NET_TIMEOUT;
|
||||
} else if (status == Cr.NS_ERROR_NET_RESET) {
|
||||
dwnldCode = AUSTLMY.DWNLD_RETRY_NET_RESET;
|
||||
} else if (status == Cr.NS_ERROR_DOCUMENT_NOT_CACHED) {
|
||||
dwnldCode = AUSTLMY.DWNLD_ERR_DOCUMENT_NOT_CACHED;
|
||||
}
|
||||
AUSTLMY.pingDownloadCode(this.isCompleteUpdate, dwnldCode);
|
||||
shouldRetrySoon = true;
|
||||
deleteActiveUpdate = false;
|
||||
} else if (status != Cr.NS_BINDING_ABORTED &&
|
||||
status != Cr.NS_ERROR_ABORT) {
|
||||
LOG("Downloader:onStopRequest - non-verification failure");
|
||||
let dwnldCode = AUSTLMY.DWNLD_ERR_BINDING_ABORTED;
|
||||
if (status == Cr.NS_ERROR_ABORT) {
|
||||
dwnldCode = AUSTLMY.DWNLD_ERR_ABORT;
|
||||
}
|
||||
AUSTLMY.pingDownloadCode(this.isCompleteUpdate, dwnldCode);
|
||||
|
||||
// Some sort of other failure, log this in the |statusText| property
|
||||
state = STATE_DOWNLOAD_FAILED;
|
||||
|
|
|
@ -216,7 +216,6 @@
|
|||
"ToolboxProcess.jsm": ["BrowserToolboxProcess"],
|
||||
"tps.jsm": ["ACTIONS", "TPS"],
|
||||
"Traversal.jsm": ["TraversalRules", "TraversalHelper"],
|
||||
"UpdateTelemetry.jsm": ["AUSTLMY"],
|
||||
"userapi.js": ["UserAPI10Client"],
|
||||
"util.js": ["getChromeWindow", "XPCOMUtils", "Services", "Utils", "Async", "Svc", "Str"],
|
||||
"utils.js": ["applicationName", "assert", "Copy", "getBrowserObject", "getChromeWindow", "getWindows", "getWindowByTitle", "getWindowByType", "getWindowId", "getMethodInWindows", "getPreference", "saveDataURL", "setPreference", "sleep", "startTimer", "stopTimer", "takeScreenshot", "unwrapNode", "waitFor", "btoa", "encryptPayload", "isConfiguredWithLegacyIdentity", "ensureLegacyIdentityManager", "setBasicCredentials", "makeIdentityConfig", "configureIdentity", "SyncTestingInfrastructure", "waitForZeroTimer", "Promise", "add_identity_test", "MockFxaStorageManager", "AccountState", "sumHistogram", "CommonUtils", "CryptoUtils", "TestingUtils"],
|
||||
|
|
Loading…
Reference in New Issue