diff --git a/mozilla/modules/libpref/src/init/all.js b/mozilla/modules/libpref/src/init/all.js
index b4480b4f583..c424d08b039 100644
--- a/mozilla/modules/libpref/src/init/all.js
+++ b/mozilla/modules/libpref/src/init/all.js
@@ -64,6 +64,7 @@ pref("backups.number_of_prefs_copies", 1);
// 0 = blank, 1 = home (browser.startup.homepage), 2 = last
pref("browser.startup.page", 1);
pref("browser.startup.homepage", "chrome://navigator-region/locale/region.properties");
+pref("browser.startup.homepage.count", 1);
// "browser.startup.homepage_override" was for 4.x
pref("browser.startup.homepage_override.1", true);
pref("browser.startup.autoload_homepage", true);
diff --git a/mozilla/xpfe/browser/resources/content/navigator.js b/mozilla/xpfe/browser/resources/content/navigator.js
index 30660228afe..79d2459d3fc 100644
--- a/mozilla/xpfe/browser/resources/content/navigator.js
+++ b/mozilla/xpfe/browser/resources/content/navigator.js
@@ -124,9 +124,7 @@ const gHomepagePrefListener =
if (topic != "nsPref:changed")
return;
- var homePage = getHomePage();
- if (homePage)
- setTooltipText("home-button", homePage);
+ updateHomeButtonTooltip();
}
};
@@ -227,6 +225,22 @@ function contentAreaFrameFocus()
}
}
+function updateHomeButtonTooltip()
+{
+ const XUL_NAMESPACE = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+ var homePage = getHomePage();
+ var tooltip = document.getElementById("home-button-tooltip-inner");
+
+ while (tooltip.firstChild)
+ tooltip.removeChild(tooltip.firstChild);
+
+ for (var i in homePage) {
+ var label = document.createElementNS(XUL_NAMESPACE, "label");
+ label.setAttribute("value", homePage[i]);
+ tooltip.appendChild(label);
+ }
+}
+
//////////////////////////////// BOOKMARKS ////////////////////////////////////
function UpdateBookmarksLastVisitedDate(event)
@@ -290,18 +304,19 @@ function getBrowser()
function getHomePage()
{
- var url;
+ var URIs = [];
try {
- url = pref.getComplexValue("browser.startup.homepage",
- Components.interfaces.nsIPrefLocalizedString).data;
- } catch (e) {
+ URIs[0] = pref.getComplexValue("browser.startup.homepage",
+ Components.interfaces.nsIPrefLocalizedString).data;
+ var count = pref.getIntPref("browser.startup.homepage.count");
+ for (var i = 1; i < count; ++i) {
+ URIs[i] = pref.getComplexValue("browser.startup.homepage."+i,
+ Components.interfaces.nsIPrefLocalizedString).data;
+ }
+ } catch(e) {
}
- // use this if we can't find the pref
- if (!url)
- url = gNavigatorRegionBundle.getString("homePageDefault");
-
- return url;
+ return URIs;
}
function UpdateBackForwardButtons()
@@ -401,9 +416,7 @@ function Startup()
// Do all UI building here:
// set home button tooltip text
- var homePage = getHomePage();
- if (homePage)
- document.getElementById("home-button").setAttribute("tooltiptext", homePage);
+ updateHomeButtonTooltip();
// initialize observers and listeners
window.XULBrowserWindow = new nsBrowserStatusHandler();
@@ -483,8 +496,12 @@ function Startup()
var uriToLoad;
// Check for window.arguments[0]. If present, use that for uriToLoad.
- if ("arguments" in window && window.arguments.length >= 1 && window.arguments[0])
- uriToLoad = window.arguments[0];
+ if ("arguments" in window && window.arguments.length >= 1 && window.arguments[0]) {
+ var uriArray = window.arguments[0].split('\n');
+ uriToLoad = uriArray.splice(0, 1);
+ if (uriArray.length > 0)
+ window.setTimeout(function(arg) { for (var i in arg) gBrowser.addTab(arg[i]); }, 0, uriArray);
+ }
if (uriToLoad && uriToLoad != "about:blank") {
gURLBar.value = uriToLoad;
@@ -701,7 +718,12 @@ function BrowserReloadSkipCache()
function BrowserHome()
{
var homePage = getHomePage();
- loadURI(homePage);
+ if (homePage.length == 1) {
+ loadURI(homePage[0]);
+ } else {
+ for (var i in homePage)
+ gBrowser.addTab(homePage[i]);
+ }
}
function OpenBookmarkGroup(element, datasource)
diff --git a/mozilla/xpfe/browser/resources/content/navigator.xul b/mozilla/xpfe/browser/resources/content/navigator.xul
index 85083d999ce..52bb85b776c 100644
--- a/mozilla/xpfe/browser/resources/content/navigator.xul
+++ b/mozilla/xpfe/browser/resources/content/navigator.xul
@@ -245,9 +245,13 @@ Contributor(s):
ondragexit="nsDragAndDrop.dragExit(event, personalToolbarDNDObserver); event.preventBubble()"
ondragover="nsDragAndDrop.dragOver(event, personalToolbarDNDObserver); event.preventBubble()">
+
+
+
GetLocalizedUnicharPref(PREF_BROWSER_STARTUP_HOMEPAGE, getter_Copies(uri));
+ if (NS_FAILED(rv))
+ return rv;
+
+ PRInt32 count = 0;
+ rv = aPref->GetIntPref("browser.startup.homepage.count", &count);
+
+ // if we couldn't get the pref (unlikely) or only have one homepage
+ if (NS_FAILED(rv) || count <= 1) {
+ *aResult = ToNewUnicode(uri);
+ return NS_OK;
+ }
+
+ // The "homepage" is a group of pages, put them in uriList separated by '\n'
+ nsAutoString uriList(uri);
+
+ for (PRInt32 i = 1; i < count; ++i) {
+ nsCAutoString pref(NS_LITERAL_CSTRING("browser.startup.homepage."));
+ pref.AppendInt(i);
+
+ rv = aPref->GetLocalizedUnicharPref(pref.get(), getter_Copies(uri));
+ if (NS_FAILED(rv))
+ return rv;
+
+ uriList.Append(PRUnichar('\n'));
+ uriList.Append(uri);
+ }
+
+ *aResult = ToNewUnicode(uriList);
+ return NS_OK;
+}
+
NS_IMETHODIMP nsBrowserContentHandler::GetDefaultArgs(PRUnichar **aDefaultArgs)
{
if (!aDefaultArgs)
@@ -769,10 +806,8 @@ NS_IMETHODIMP nsBrowserContentHandler::GetDefaultArgs(PRUnichar **aDefaultArgs)
if (NS_SUCCEEDED(rv)) {
switch (choice) {
case 1: {
- nsXPIDLString url;
- rv = prefs->GetLocalizedUnicharPref(PREF_BROWSER_STARTUP_HOMEPAGE, getter_Copies(url));
- args = url;
- break;
+ // skip the code below
+ return GetHomePageGroup(prefs, aDefaultArgs);
}
case 2: {
nsCOMPtr history(do_GetService(kCGlobalHistoryCID));
diff --git a/mozilla/xpfe/components/prefwindow/resources/content/pref-navigator.js b/mozilla/xpfe/components/prefwindow/resources/content/pref-navigator.js
index db1040347eb..f9bf02d1dfd 100644
--- a/mozilla/xpfe/components/prefwindow/resources/content/pref-navigator.js
+++ b/mozilla/xpfe/components/prefwindow/resources/content/pref-navigator.js
@@ -49,6 +49,120 @@ const WINDOWMEDIATOR_CONTRACTID = "@mozilla.org/appshell/window-mediator;1";
const PREFSERVICE_CONTRACTID = "@mozilla.org/preferences-service;1";
var gDefaultPage;
+var gData;
+
+function setHomePageValue(value)
+{
+ var homePageField = document.getElementById("browserStartupHomepage");
+ homePageField.value = value;
+}
+
+function getGroupIsSetMessage()
+{
+ var prefUtilitiesBundle = document.getElementById("bundle_prefutilities");
+ return prefUtilitiesBundle.getString("groupIsSet");
+}
+
+function getMostRecentBrowser()
+{
+ var windowManager = Components.classes[WINDOWMEDIATOR_CONTRACTID]
+ .getService(nsIWindowMediator);
+
+ var browserWindow = windowManager.getMostRecentWindow("navigator:browser");
+ if (browserWindow)
+ return browserWindow.document.getElementById("content");
+
+ return null;
+}
+
+function getCurrentPage()
+{
+ var url;
+ var tabbrowser = getMostRecentBrowser();
+ if (tabbrowser)
+ url = tabbrowser.currentURI.spec;
+
+ return url;
+}
+
+function getCurrentPageGroup()
+{
+ var URIs = [];
+ var tabbrowser = getMostRecentBrowser();
+ if (tabbrowser) {
+ var browsers = tabbrowser.browsers;
+ for (var i = 0; i < browsers.length; ++i)
+ URIs[i] = browsers[i].currentURI.spec;
+ }
+
+ return URIs;
+}
+
+function getDefaultPage()
+{
+ var prefService = Components.classes[PREFSERVICE_CONTRACTID]
+ .getService(nsIPrefService);
+ var pref = prefService.getDefaultBranch(null);
+ return pref.getComplexValue("browser.startup.homepage",
+ nsIPrefLocalizedString).data;
+}
+
+function updateHomePageButtons()
+{
+ var homepage = document.getElementById("browserStartupHomepage").value;
+
+ // disable the "current page" button if the current page
+ // is already the homepage
+ var currentPageButton = document.getElementById("browserUseCurrent");
+ currentPageButton.disabled = homepage == getCurrentPage();
+
+ // disable the "default page" button if the default page
+ // is already the homepage
+ var defaultPageButton = document.getElementById("browserUseDefault");
+ defaultPageButton.disabled = (homepage == gDefaultPage);
+
+ // homePages.length == 1 if:
+ // - we're called from startup and there's one homepage
+ // - we're called from "current page" or "choose file"
+ // - the user typed something in the location field
+ // in those cases we only want to enable the button if:
+ // - there's more than one tab in the most recent browser
+ // otherwise we have a group of homepages:
+ // - we're called from startup and there's a group of homepages
+ // - we're called from "current group"
+ // in those cases we only want to enable the button if:
+ // - there's more than one tab in the most recent browser and
+ // the current group doesn't match the group of homepages
+
+ var enabled = false;
+
+ var homePages = gData.navigatorData.homePages;
+ if (homePages.length == 1) {
+ var browser = getMostRecentBrowser();
+ enabled = browser && browser.browsers.length > 1;
+ } else {
+ var currentURIs = getCurrentPageGroup();
+ if (currentURIs.length == homePages.length) {
+ for (var i = 0; !enabled && i < homePages.length; ++i) {
+ if (homePages[i] != currentURIs[i])
+ enabled = true;
+ }
+ } else if (currentURIs.length > 1) {
+ enabled = true;
+ }
+ }
+
+ var currentPageGroupButton = document.getElementById("browserUseCurrentGroup");
+ currentPageGroupButton.disabled = !enabled;
+}
+
+function locationInputHandler()
+{
+ var navigatorData = gData.navigatorData;
+ var homePage = document.getElementById("browserStartupHomepage");
+ navigatorData.homePages = [ homePage.value ];
+ updateHomePageButtons();
+}
function selectFile()
{
@@ -66,6 +180,10 @@ function selectFile()
if (ret == nsIFilePicker.returnOK) {
var folderField = document.getElementById("browserStartupHomepage");
folderField.value = fp.fileURL.spec;
+ var url = fp.fileURL.spec;
+ setHomePageValue(url);
+ gData.navigatorData.homePages = [ url ];
+ updateHomePageButtons();
}
}
@@ -73,62 +191,105 @@ function setHomePageToCurrentPage()
{
var url = getCurrentPage();
if (url) {
- var homePageField = document.getElementById("browserStartupHomepage");
- homePageField.value = url;
+ setHomePageValue(url);
+ gData.navigatorData.homePages = [ url ];
+ updateHomePageButtons();
+ }
+}
+
+function setHomePageToCurrentGroup()
+{
+ var URIs = getCurrentPageGroup();
+ if (URIs.length > 0) {
+ setHomePageValue(gData.navigatorData.groupIsSet);
+ gData.navigatorData.homePages = URIs;
+ updateHomePageButtons();
}
- updateHomePageButtons();
}
function setHomePageToDefaultPage()
{
- var homePageField = document.getElementById("browserStartupHomepage");
- homePageField.value = gDefaultPage;
+ setHomePageValue(gDefaultPage);
+ gData.navigatorData.homePages = [ gDefaultPage ];
updateHomePageButtons();
}
-function getCurrentPage()
+function init()
{
- var windowManager = Components.classes[WINDOWMEDIATOR_CONTRACTID]
- .getService(nsIWindowMediator);
- var browser, url;
- var browserWindow = windowManager.getMostRecentWindow("navigator:browser");
- if (browserWindow) {
- browser = browserWindow.document.getElementById("content");
- if (browser) {
- url = browser.webNavigation.currentURI.spec;
+ var prefWindow = parent.hPrefWindow;
+
+ gData = prefWindow.wsm.dataManager
+ .pageData["chrome://communicator/content/pref/pref-navigator.xul"]
+
+ gDefaultPage = getDefaultPage();
+
+ if ("navigatorData" in gData)
+ return;
+
+ var navigatorData = {};
+
+ navigatorData.groupIsSet = getGroupIsSetMessage();
+
+ var URIs = [];
+ try {
+ URIs[0] = prefWindow.getPref("localizedstring",
+ "browser.startup.homepage");
+
+ var count = prefWindow.getPref("int",
+ "browser.startup.homepage.count");
+
+ for (var i = 1; i < count; ++i) {
+ URIs[i] = prefWindow.getPref("localizedstring",
+ "browser.startup.homepage."+i);
}
+ navigatorData.homePages = URIs;
+ } catch(e) {
}
- return url;
-}
+ gData.navigatorData = navigatorData;
-function getDefaultPage()
-{
- var prefService = Components.classes[PREFSERVICE_CONTRACTID]
- .getService(nsIPrefService);
- var pref = prefService.getDefaultBranch(null);
- return pref.getComplexValue("browser.startup.homepage",
- nsIPrefLocalizedString).data;
-}
-
-function locationInputHandler()
-{
- updateHomePageButtons();
+ prefWindow.registerOKCallbackFunc(doOnOk);
}
function Startup()
{
+ init();
+
+ var navigatorData = gData.navigatorData;
+
+ var homePages = navigatorData.homePages;
+ if (homePages.length == 1)
+ setHomePageValue(homePages[0]);
+ else
+ setHomePageValue(navigatorData.groupIsSet);
+
updateHomePageButtons();
-
- gDefaultPage = getDefaultPage();
}
-function updateHomePageButtons()
+function doOnOk()
{
- var homepage = document.getElementById("browserStartupHomepage").value;
- var currentPageButton = document.getElementById("browserUseCurrent");
- var defaultPageButton = document.getElementById("browserUseDefault");
- currentPageButton.disabled = (homepage == getCurrentPage());
- defaultPageButton.disabled = (homepage == gDefaultPage);
+ var prefWindow = parent.hPrefWindow;
+ // OK could have been hit from another panel, so we need to
+ // get at navigatorData the long but safer way
+ var navigatorData = prefWindow.wsm.dataManager
+ .pageData["chrome://communicator/content/pref/pref-navigator.xul"]
+ .navigatorData;
+
+ var URIs = navigatorData.homePages;
+
+ prefWindow.setPref("string", "browser.startup.homepage", URIs[0]);
+
+ var i = 1;
+ for (; i < URIs.length; ++i)
+ prefWindow.setPref("string", "browser.startup.homepage."+i, URIs[i]);
+
+ const countPref = "browser.startup.homepage.count";
+
+ // remove the old user prefs values that we didn't overwrite
+ var oldCount = prefWindow.getPref("int", countPref);
+ for (; i < oldCount; ++i)
+ prefWindow.pref.ClearUserPref("browser.startup.homepage."+i);
+
+ prefWindow.setPref("int", countPref, URIs.length);
}
diff --git a/mozilla/xpfe/components/prefwindow/resources/content/pref-navigator.xul b/mozilla/xpfe/components/prefwindow/resources/content/pref-navigator.xul
index a7b5b7b4de8..c23a78f091d 100644
--- a/mozilla/xpfe/components/prefwindow/resources/content/pref-navigator.xul
+++ b/mozilla/xpfe/components/prefwindow/resources/content/pref-navigator.xul
@@ -37,10 +37,9 @@
@@ -66,19 +65,21 @@
+ oninput="locationInputHandler();"/>
+
-
+