diff --git a/mozilla/modules/libpref/src/init/all.js b/mozilla/modules/libpref/src/init/all.js index 299bb8bbc07..95513e6435e 100644 --- a/mozilla/modules/libpref/src/init/all.js +++ b/mozilla/modules/libpref/src/init/all.js @@ -139,11 +139,6 @@ pref("browser.forms.submit.backwards_compatible", true); // Tab browser preferences. pref("browser.tabs.autoHide", true); pref("browser.tabs.forceHide", false); -pref("browser.tabs.loadInBackground", false); -pref("browser.tabs.opentabfor.middleclick", false); -pref("browser.tabs.opentabfor.urlbar", false); -pref("browser.tabs.opentabfor.windowopen", false); -pref("browser.tabs.opentabfor.bookmarks", false); pref("browser.tabs.warnOnClose", true); pref("browser.tabs.warnOnCloseOther", true); // 0 = append, 1 = replace diff --git a/mozilla/xpfe/bootstrap/browser-prefs.js b/mozilla/xpfe/bootstrap/browser-prefs.js index f6c41f65321..72017ae0596 100644 --- a/mozilla/xpfe/bootstrap/browser-prefs.js +++ b/mozilla/xpfe/bootstrap/browser-prefs.js @@ -112,6 +112,12 @@ pref("browser.search.param.Google.1.default", "chrome://navigator/content/search pref("browser.history.grouping", "day"); pref("browser.sessionhistory.max_entries", 50); +// Tabbed browser +pref("browser.tabs.loadDivertedInBackground", false); +pref("browser.tabs.loadInBackground", false); +pref("browser.tabs.opentabfor.middleclick", false); +pref("browser.tabs.opentabfor.urlbar", false); + // Translation service pref("browser.translation.service", "chrome://navigator-region/locale/region.properties"); pref("browser.translation.serviceDomain", "chrome://navigator-region/locale/region.properties"); diff --git a/mozilla/xpfe/browser/resources/content/navigator.js b/mozilla/xpfe/browser/resources/content/navigator.js index 7c025ed75df..18365d9fed6 100644 --- a/mozilla/xpfe/browser/resources/content/navigator.js +++ b/mozilla/xpfe/browser/resources/content/navigator.js @@ -430,6 +430,60 @@ const gTabOpenObserver = { } }; +const nsIBrowserDOMWindow = Components.interfaces.nsIBrowserDOMWindow; +const nsIInterfaceRequestor = Components.interfaces.nsIInterfaceRequestor; + +function nsBrowserAccess() { +} + +nsBrowserAccess.prototype = { + openURI: function openURI(aURI, aOpener, aWhere, aContext) { + if (aWhere == nsIBrowserDOMWindow.OPEN_DEFAULTWINDOW) + if (aContext == nsIBrowserDOMWindow.OPEN_EXTERNAL) + aWhere = pref.getIntPref("browser.link.open_external"); + else + aWhere = pref.getIntPref("browser.link.open_newwindow"); + var uri = aURI ? aURI.spec : "about:blank"; + var referrer = aOpener ? aOpener.QueryInterface(nsIInterfaceRequestor) + .getInterface(nsIWebNavigation) + .currentURI : null; + switch (aWhere) { + case nsIBrowserDOMWindow.OPEN_NEWWINDOW: + return window.openDialog(getBrowserURL(), "_blank", "all,dialog=no", + uri, null, referrer); + case nsIBrowserDOMWindow.OPEN_NEWTAB: + var newTab = gBrowser.addTab("about:blank"); + if (!pref.getBoolPref("browser.tabs.loadDivertedInBackground")) + gBrowser.selectedTab = newTab; + var browser = gBrowser.getBrowserForTab(newTab); + try { + browser.loadURI(uri, referrer); + } catch (e) {} + return browser.contentWindow; + default: + if (!aOpener) { + loadURI(uri); + return content; + } + aOpener = new XPCNativeWrapper(aOpener, "top").top; + try { + aOpener.QueryInterface(nsIInterfaceRequestor) + .getInterface(nsIWebNavigation) + .loadURI(uri, nsIWebNavigation.LOAD_FLAGS_NONE, + referrer, null, null); + } catch (e) {} + return aOpener; + } + }, + isTabContentWindow: function isTabContentWindow(aWindow) { + var browsers = gBrowser.browsers; + for (var i = 0; browsers.item(i); i++) + if (browsers[i].contentWindow == aWindow) + return true; + return false; + } +} + function Startup() { // init globals @@ -637,6 +691,9 @@ function Startup() // Perform default browser checking (after window opens). setTimeout( checkForDefaultBrowser, 0 ); + // hook up browser access support + window.browserDOMWindow = new nsBrowserAccess(); + // hook up remote support if (XREMOTESERVICE_CONTRACTID in Components.classes) { var remoteService; @@ -739,6 +796,9 @@ function Shutdown() observerService.removeObserver(gTabOpenObserver, "open-new-tab-request", false); } + // shut down browser access support + window.browserDOMWindow = null; + try { getBrowser().removeProgressListener(window.XULBrowserWindow); } catch (ex) {