--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -492,17 +492,16 @@ var BrowserApp = {
// When a restricted key is pressed in DOM full-screen mode, we should display
// the "Press ESC to exit" warning message.
window.addEventListener("MozShowFullScreenWarning", showFullScreenWarning, true);
NativeWindow.init();
FormAssistant.init();
IndexedDB.init();
- HealthReportStatusListener.init();
XPInstallObserver.init();
CharacterEncoding.init();
ActivityObserver.init();
RemoteDebugger.init();
UserAgentOverrides.init();
DesktopUserAgent.init();
Distribution.init();
Tabs.init();
@@ -5667,202 +5666,16 @@ var FormAssistant = {
return true;
currentElement = currentElement.parentElement;
}
return false;
}
};
-/**
- * An object to watch for Gecko status changes -- add-on installs, pref changes
- * -- and reflect them back to Java.
- */
-var HealthReportStatusListener = {
- PREF_ACCEPT_LANG: "intl.accept_languages",
- PREF_BLOCKLIST_ENABLED: "extensions.blocklist.enabled",
-
- PREF_TELEMETRY_ENABLED: AppConstants.MOZ_TELEMETRY_REPORTING ?
- "toolkit.telemetry.enabled" :
- null,
-
- init: function () {
- try {
- AddonManager.addAddonListener(this);
- } catch (ex) {
- dump("Failed to initialize add-on status listener. FHR cannot report add-on state. " + ex);
- }
-
- dump("Adding HealthReport:RequestSnapshot observer.");
- Services.obs.addObserver(this, "HealthReport:RequestSnapshot", false);
- Services.prefs.addObserver(this.PREF_ACCEPT_LANG, this, false);
- Services.prefs.addObserver(this.PREF_BLOCKLIST_ENABLED, this, false);
- if (this.PREF_TELEMETRY_ENABLED) {
- Services.prefs.addObserver(this.PREF_TELEMETRY_ENABLED, this, false);
- }
- },
-
- observe: function (aSubject, aTopic, aData) {
- switch (aTopic) {
- case "HealthReport:RequestSnapshot":
- HealthReportStatusListener.sendSnapshotToJava();
- break;
- case "nsPref:changed":
- let response = {
- type: "Pref:Change",
- pref: aData,
- isUserSet: Services.prefs.prefHasUserValue(aData),
- };
-
- switch (aData) {
- case this.PREF_ACCEPT_LANG:
- response.value = Services.prefs.getCharPref(aData);
- break;
- case this.PREF_TELEMETRY_ENABLED:
- case this.PREF_BLOCKLIST_ENABLED:
- response.value = Services.prefs.getBoolPref(aData);
- break;
- default:
- console.log("Unexpected pref in HealthReportStatusListener: " + aData);
- return;
- }
-
- Messaging.sendRequest(response);
- break;
- }
- },
-
- MILLISECONDS_PER_DAY: 24 * 60 * 60 * 1000,
-
- COPY_FIELDS: [
- "blocklistState",
- "userDisabled",
- "appDisabled",
- "version",
- "type",
- "scope",
- "foreignInstall",
- "hasBinaryComponents",
- ],
-
- // Add-on types for which full details are recorded in FHR.
- // All other types are ignored.
- FULL_DETAIL_TYPES: [
- "plugin",
- "extension",
- "service",
- ],
-
- /**
- * Return true if the add-on is not of a type for which we report full details.
- * These add-ons will still make it over to Java, but will be filtered out.
- */
- _shouldIgnore: function (aAddon) {
- return this.FULL_DETAIL_TYPES.indexOf(aAddon.type) == -1;
- },
-
- _dateToDays: function (aDate) {
- return Math.floor(aDate.getTime() / this.MILLISECONDS_PER_DAY);
- },
-
- jsonForAddon: function (aAddon) {
- let o = {};
- if (aAddon.installDate) {
- o.installDay = this._dateToDays(aAddon.installDate);
- }
- if (aAddon.updateDate) {
- o.updateDay = this._dateToDays(aAddon.updateDate);
- }
-
- for (let field of this.COPY_FIELDS) {
- o[field] = aAddon[field];
- }
-
- return o;
- },
-
- notifyJava: function (aAddon, aNeedsRestart, aAction="Addons:Change") {
- let json = this.jsonForAddon(aAddon);
- if (this._shouldIgnore(aAddon)) {
- json.ignore = true;
- }
- Messaging.sendRequest({ type: aAction, id: aAddon.id, json: json });
- },
-
- // Add-on listeners.
- onEnabling: function (aAddon, aNeedsRestart) {
- this.notifyJava(aAddon, aNeedsRestart);
- },
- onDisabling: function (aAddon, aNeedsRestart) {
- this.notifyJava(aAddon, aNeedsRestart);
- },
- onInstalling: function (aAddon, aNeedsRestart) {
- this.notifyJava(aAddon, aNeedsRestart);
- },
- onUninstalling: function (aAddon, aNeedsRestart) {
- this.notifyJava(aAddon, aNeedsRestart, "Addons:Uninstalling");
- },
- onPropertyChanged: function (aAddon, aProperties) {
- this.notifyJava(aAddon);
- },
- onOperationCancelled: function (aAddon) {
- this.notifyJava(aAddon);
- },
-
- sendSnapshotToJava: function () {
- AddonManager.getAllAddons(function (aAddons) {
- let jsonA = {};
- if (aAddons) {
- for (let i = 0; i < aAddons.length; ++i) {
- let addon = aAddons[i];
- try {
- let addonJSON = HealthReportStatusListener.jsonForAddon(addon);
- if (HealthReportStatusListener._shouldIgnore(addon)) {
- addonJSON.ignore = true;
- }
- jsonA[addon.id] = addonJSON;
- } catch (e) {
- // Just skip this add-on.
- }
- }
- }
-
- // Now add prefs.
- let jsonP = {};
- for (let pref of [this.PREF_BLOCKLIST_ENABLED, this.PREF_TELEMETRY_ENABLED]) {
- if (!pref) {
- // This will be the case for PREF_TELEMETRY_ENABLED in developer builds.
- continue;
- }
- jsonP[pref] = {
- pref: pref,
- value: Services.prefs.getBoolPref(pref),
- isUserSet: Services.prefs.prefHasUserValue(pref),
- };
- }
- for (let pref of [this.PREF_ACCEPT_LANG]) {
- jsonP[pref] = {
- pref: pref,
- value: Services.prefs.getCharPref(pref),
- isUserSet: Services.prefs.prefHasUserValue(pref),
- };
- }
-
- console.log("Sending snapshot message.");
- Messaging.sendRequest({
- type: "HealthReport:Snapshot",
- json: {
- addons: jsonA,
- prefs: jsonP,
- },
- });
- }.bind(this));
- },
-};
-
var XPInstallObserver = {
init: function() {
Services.obs.addObserver(this, "addon-install-origin-blocked", false);
Services.obs.addObserver(this, "addon-install-disabled", false);
Services.obs.addObserver(this, "addon-install-blocked", false);
Services.obs.addObserver(this, "addon-install-started", false);
Services.obs.addObserver(this, "xpi-signature-changed", false);
Services.obs.addObserver(this, "browser-delayed-startup-finished", false);