зеркало из https://github.com/mozilla/gecko-dev.git
194 строки
6.3 KiB
JavaScript
194 строки
6.3 KiB
JavaScript
/* 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";
|
|
|
|
var Cc = Components.classes;
|
|
var Ci = Components.interfaces;
|
|
var Cu = Components.utils;
|
|
|
|
this.EXPORTED_SYMBOLS = [ "AboutHomeUtils", "AboutHome" ];
|
|
|
|
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
|
Cu.import("resource://gre/modules/Services.jsm");
|
|
|
|
XPCOMUtils.defineLazyModuleGetter(this, "AppConstants",
|
|
"resource://gre/modules/AppConstants.jsm");
|
|
XPCOMUtils.defineLazyModuleGetter(this, "AutoMigrate",
|
|
"resource:///modules/AutoMigrate.jsm");
|
|
XPCOMUtils.defineLazyModuleGetter(this, "fxAccounts",
|
|
"resource://gre/modules/FxAccounts.jsm");
|
|
XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils",
|
|
"resource://gre/modules/PrivateBrowsingUtils.jsm");
|
|
|
|
// Url to fetch snippets, in the urlFormatter service format.
|
|
const SNIPPETS_URL_PREF = "browser.aboutHomeSnippets.updateUrl";
|
|
|
|
// Should be bumped up if the snippets content format changes.
|
|
const STARTPAGE_VERSION = 4;
|
|
|
|
this.AboutHomeUtils = {
|
|
get snippetsVersion() {
|
|
return STARTPAGE_VERSION;
|
|
},
|
|
|
|
/*
|
|
* showKnowYourRights - Determines if the user should be shown the
|
|
* about:rights notification. The notification should *not* be shown if
|
|
* we've already shown the current version, or if the override pref says to
|
|
* never show it. The notification *should* be shown if it's never been seen
|
|
* before, if a newer version is available, or if the override pref says to
|
|
* always show it.
|
|
*/
|
|
get showKnowYourRights() {
|
|
// Look for an unconditional override pref. If set, do what it says.
|
|
// (true --> never show, false --> always show)
|
|
try {
|
|
return !Services.prefs.getBoolPref("browser.rights.override");
|
|
} catch (e) { }
|
|
// Ditto, for the legacy EULA pref.
|
|
try {
|
|
return !Services.prefs.getBoolPref("browser.EULA.override");
|
|
} catch (e) { }
|
|
|
|
if (!AppConstants.MOZILLA_OFFICIAL) {
|
|
// Non-official builds shouldn't show the notification.
|
|
return false;
|
|
}
|
|
|
|
// Look to see if the user has seen the current version or not.
|
|
var currentVersion = Services.prefs.getIntPref("browser.rights.version");
|
|
try {
|
|
return !Services.prefs.getBoolPref("browser.rights." + currentVersion + ".shown");
|
|
} catch (e) { }
|
|
|
|
// Legacy: If the user accepted a EULA, we won't annoy them with the
|
|
// equivalent about:rights page until the version changes.
|
|
try {
|
|
return !Services.prefs.getBoolPref("browser.EULA." + currentVersion + ".accepted");
|
|
} catch (e) { }
|
|
|
|
// We haven't shown the notification before, so do so now.
|
|
return true;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Returns the URL to fetch snippets from, in the urlFormatter service format.
|
|
*/
|
|
XPCOMUtils.defineLazyGetter(AboutHomeUtils, "snippetsURL", function() {
|
|
let updateURL = Services.prefs
|
|
.getCharPref(SNIPPETS_URL_PREF)
|
|
.replace("%STARTPAGE_VERSION%", STARTPAGE_VERSION);
|
|
return Services.urlFormatter.formatURL(updateURL);
|
|
});
|
|
|
|
/**
|
|
* This code provides services to the about:home page. Whenever
|
|
* about:home needs to do something chrome-privileged, it sends a
|
|
* message that's handled here.
|
|
*/
|
|
var AboutHome = {
|
|
MESSAGES: [
|
|
"AboutHome:RestorePreviousSession",
|
|
"AboutHome:Downloads",
|
|
"AboutHome:Bookmarks",
|
|
"AboutHome:History",
|
|
"AboutHome:Addons",
|
|
"AboutHome:Sync",
|
|
"AboutHome:Settings",
|
|
],
|
|
|
|
init() {
|
|
for (let msg of this.MESSAGES) {
|
|
Services.mm.addMessageListener(msg, this);
|
|
}
|
|
},
|
|
|
|
// Additional listeners are registered in nsBrowserGlue.js
|
|
receiveMessage(aMessage) {
|
|
let window = aMessage.target.ownerGlobal;
|
|
|
|
switch (aMessage.name) {
|
|
case "AboutHome:RestorePreviousSession":
|
|
let ss = Cc["@mozilla.org/browser/sessionstore;1"].
|
|
getService(Ci.nsISessionStore);
|
|
if (ss.canRestoreLastSession) {
|
|
ss.restoreLastSession();
|
|
}
|
|
break;
|
|
|
|
case "AboutHome:Downloads":
|
|
window.BrowserDownloadsUI();
|
|
break;
|
|
|
|
case "AboutHome:Bookmarks":
|
|
window.PlacesCommandHook.showPlacesOrganizer("UnfiledBookmarks");
|
|
break;
|
|
|
|
case "AboutHome:History":
|
|
window.PlacesCommandHook.showPlacesOrganizer("History");
|
|
break;
|
|
|
|
case "AboutHome:Addons":
|
|
window.BrowserOpenAddonsMgr();
|
|
break;
|
|
|
|
case "AboutHome:Sync":
|
|
window.openPreferences("paneSync", { urlParams: { entrypoint: "abouthome" }, origin: "aboutHome" });
|
|
break;
|
|
|
|
case "AboutHome:Settings":
|
|
window.openPreferences(undefined, {origin: "aboutHome"} );
|
|
break;
|
|
|
|
case "AboutHome:RequestUpdate":
|
|
this.sendAboutHomeData(aMessage.target);
|
|
break;
|
|
|
|
case "AboutHome:MaybeShowMigrateMessage":
|
|
AutoMigrate.shouldShowMigratePrompt(aMessage.target).then((prompt) => {
|
|
if (prompt) {
|
|
AutoMigrate.showUndoNotificationBar(aMessage.target);
|
|
}
|
|
});
|
|
break;
|
|
}
|
|
},
|
|
|
|
// Send all the chrome-privileged data needed by about:home. This
|
|
// gets re-sent when the search engine changes.
|
|
sendAboutHomeData(target) {
|
|
let wrapper = {};
|
|
Components.utils.import("resource:///modules/sessionstore/SessionStore.jsm",
|
|
wrapper);
|
|
let ss = wrapper.SessionStore;
|
|
|
|
ss.promiseInitialized.then(function() {
|
|
let data = {
|
|
showRestoreLastSession: ss.canRestoreLastSession,
|
|
snippetsURL: AboutHomeUtils.snippetsURL,
|
|
showKnowYourRights: AboutHomeUtils.showKnowYourRights,
|
|
snippetsVersion: AboutHomeUtils.snippetsVersion,
|
|
};
|
|
|
|
if (AboutHomeUtils.showKnowYourRights) {
|
|
// Set pref to indicate we've shown the notification.
|
|
let currentVersion = Services.prefs.getIntPref("browser.rights.version");
|
|
Services.prefs.setBoolPref("browser.rights." + currentVersion + ".shown", true);
|
|
}
|
|
|
|
if (target && target.messageManager) {
|
|
target.messageManager.sendAsyncMessage("AboutHome:Update", data);
|
|
} else {
|
|
let mm = Cc["@mozilla.org/globalmessagemanager;1"].getService(Ci.nsIMessageListenerManager);
|
|
mm.broadcastAsyncMessage("AboutHome:Update", data);
|
|
}
|
|
}).catch(function onError(x) {
|
|
Cu.reportError("Error in AboutHome.sendAboutHomeData: " + x);
|
|
});
|
|
},
|
|
|
|
};
|