diff --git a/mozilla/browser/base/content/browser.js b/mozilla/browser/base/content/browser.js index 3d89800f41a..1db8ee862d9 100644 --- a/mozilla/browser/base/content/browser.js +++ b/mozilla/browser/base/content/browser.js @@ -657,7 +657,8 @@ function BrowserStartup() # only load url passed in when we're not page cycling if (uriToLoad && !gIsLoadingBlank) { if (window.arguments.length >= 3) - loadURI(uriToLoad, window.arguments[2], window.arguments[3] || null); + loadURI(uriToLoad, window.arguments[2], window.arguments[3] || null, + window.arguments[4] || false); else loadOneOrMoreURIs(uriToLoad); } @@ -1711,7 +1712,7 @@ function openLocationCallback() function BrowserOpenTab() { - gBrowser.loadOneTab("about:blank", null, null, null, false); + gBrowser.loadOneTab("about:blank", null, null, null, false, false); if (gURLBar) setTimeout(function() { gURLBar.focus(); }, 0); } @@ -1732,9 +1733,9 @@ function delayedOpenWindow(chrome, flags, href, postData) /* Required because the tab needs time to set up its content viewers and get the load of the URI kicked off before becoming the active content area. */ -function delayedOpenTab(aUrl, aReferrer, aCharset, aPostData) +function delayedOpenTab(aUrl, aReferrer, aCharset, aPostData, aAllowThirdPartyFixup) { - gBrowser.loadOneTab(aUrl, aReferrer, aCharset, aPostData, false); + gBrowser.loadOneTab(aUrl, aReferrer, aCharset, aPostData, false, aAllowThirdPartyFixup); } function BrowserOpenFileWindow() @@ -1803,12 +1804,16 @@ function BrowserCloseWindow() closeWindow(true); } -function loadURI(uri, referrer, postData) +function loadURI(uri, referrer, postData, allowThirdPartyFixup) { try { if (postData === undefined) postData = null; - getWebNavigation().loadURI(uri, nsIWebNavigation.LOAD_FLAGS_NONE, referrer, postData, null); + var flags = nsIWebNavigation.LOAD_FLAGS_NONE; + if (allowThirdPartyFixup) { + flags = nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP; + } + getWebNavigation().loadURI(uri, flags, referrer, postData, null); } catch (e) { } } @@ -1821,13 +1826,14 @@ function BrowserLoadURL(aTriggeringEvent, aPostData) aTriggeringEvent.altKey) { handleURLBarRevert(); content.focus(); - gBrowser.loadOneTab(url, null, null, aPostData, false); + gBrowser.loadOneTab(url, null, null, aPostData, false, + true /* allow third party fixup */); gURLBar.value = url; aTriggeringEvent.preventDefault(); aTriggeringEvent.stopPropagation(); } else - loadURI(url, null, aPostData); + loadURI(url, null, aPostData, true /* allow third party fixup */); content.focus(); } @@ -2667,7 +2673,8 @@ var newTabButtonObserver = { var url = getShortcutOrURI(draggedText, postData); if (url) { getBrowser().dragDropSecurityCheck(aEvent, aDragSession, url); - openNewTabWith(url, null, postData.value, aEvent); + // allow third-party services to fixup this URL + openNewTabWith(url, null, postData.value, aEvent, true); } }, getSupportedFlavours: function () @@ -2702,7 +2709,8 @@ var newWindowButtonObserver = { var url = getShortcutOrURI(draggedText, postData); if (url) { getBrowser().dragDropSecurityCheck(aEvent, aDragSession, url); - openNewWindowWith(url, null, postData.value); + // allow third-party services to fixup this URL + openNewWindowWith(url, null, postData.value, true); } }, getSupportedFlavours: function () @@ -2742,7 +2750,7 @@ var goButtonObserver = { .getService(Components.interfaces.nsIScriptSecurityManager); const nsIScriptSecMan = Components.interfaces.nsIScriptSecurityManager; secMan.checkLoadURI(gBrowser.currentURI, uri, nsIScriptSecMan.DISALLOW_SCRIPT_OR_DATA); - loadURI(uri.spec, null, postData.value); + loadURI(uri.spec, null, postData.value, true); } catch (ex) {} }, getSupportedFlavours: function () @@ -2823,7 +2831,7 @@ const BrowserSearch = { var ss = Cc["@mozilla.org/browser/search-service;1"]. getService(Ci.nsIBrowserSearchService); var searchForm = ss.defaultEngine.searchForm; - loadURI(searchForm, null, null); + loadURI(searchForm, null, null, false); } }, @@ -2854,9 +2862,9 @@ const BrowserSearch = { if (useNewTab) { getBrowser().loadOneTab(submission.uri.spec, null, null, - submission.postData); + submission.postData, false); } else - loadURI(submission.uri.spec, null, submission.postData); + loadURI(submission.uri.spec, null, submission.postData, false); }, /** @@ -3763,7 +3771,7 @@ nsBrowserAccess.prototype = break; case nsCI.nsIBrowserDOMWindow.OPEN_NEWTAB : var loadInBackground = gPrefService.getBoolPref("browser.tabs.loadDivertedInBackground"); - var newTab = gBrowser.loadOneTab("about:blank", null, null, null, loadInBackground); + var newTab = gBrowser.loadOneTab("about:blank", null, null, null, loadInBackground, false); newWindow = gBrowser.getBrowserForTab(newTab).docShell .QueryInterface(nsCI.nsIInterfaceRequestor) .getInterface(nsCI.nsIDOMWindow); @@ -4560,15 +4568,15 @@ nsContextMenu.prototype = { // Open linked-to URL in a new window. openLink : function () { - openNewWindowWith(this.linkURL, this.docURL, null); + openNewWindowWith(this.linkURL, this.docURL, null, false); }, // Open linked-to URL in a new tab. openLinkInTab : function () { - openNewTabWith(this.linkURL, this.docURL, null, null); + openNewTabWith(this.linkURL, this.docURL, null, null, false); }, // Open frame in a new tab. openFrameInTab : function () { - openNewTabWith(this.target.ownerDocument.location.href, null, null, null); + openNewTabWith(this.target.ownerDocument.location.href, null, null, null, false); }, // Reload clicked-in frame. reloadFrame : function () { @@ -4576,11 +4584,11 @@ nsContextMenu.prototype = { }, // Open clicked-in frame in its own window. openFrame : function () { - openNewWindowWith(this.target.ownerDocument.location.href, null, null); + openNewWindowWith(this.target.ownerDocument.location.href, null, null, false); }, // Open clicked-in frame in the same window. showOnlyThisFrame : function () { - window.loadURI(this.target.ownerDocument.location.href, null, null); + window.loadURI(this.target.ownerDocument.location.href, null, null, false); }, // View Partial Source viewPartialSource : function ( context ) { @@ -5142,7 +5150,7 @@ function asyncOpenWebPanel(event) var url = getShortcutOrURI(wrapper.href, postData); if (!url) return true; - loadURI(url, null, postData.value); + loadURI(url, null, postData.value, false); event.preventDefault(); return false; } @@ -5231,13 +5239,13 @@ function handleLinkClick(event, href, linkNode) #else if (event.ctrlKey) { #endif - openNewTabWith(href, docURL, null, event); + openNewTabWith(href, docURL, null, event, false); event.stopPropagation(); return true; } // if left button clicked if (event.shiftKey) { - openNewWindowWith(href, docURL, null); + openNewWindowWith(href, docURL, null, false); event.stopPropagation(); return true; } @@ -5258,9 +5266,9 @@ function handleLinkClick(event, href, linkNode) tab = true; } if (tab) - openNewTabWith(href, docURL, null, event); + openNewTabWith(href, docURL, null, event, false); else - openNewWindowWith(href, docURL, null); + openNewWindowWith(href, docURL, null, false); event.stopPropagation(); return true; } @@ -5328,7 +5336,7 @@ var contentAreaDNDObserver = { case "navigator:browser": var postData = { }; var uri = getShortcutOrURI(url, postData); - loadURI(uri, null, postData.value); + loadURI(uri, null, postData.value, false); break; case "navigator:view-source": viewSource(url); diff --git a/mozilla/browser/base/content/openLocation.js b/mozilla/browser/base/content/openLocation.js index 941bc85aba4..14631e0feaa 100644 --- a/mozilla/browser/base/content/openLocation.js +++ b/mozilla/browser/base/content/openLocation.js @@ -101,18 +101,21 @@ function open() url = dialog.input.value; try { + // Whichever target we use for the load, we allow third-party services to + // fixup the URI switch (dialog.openWhereList.value) { case "0": - browser.loadURI(url, null, postData.value); + browser.loadURI(url, null, postData.value, true); break; case "1": - window.opener.delayedOpenWindow(getBrowserURL(), "all,dialog=no", url, postData.value); + window.opener.delayedOpenWindow(getBrowserURL(), "all,dialog=no", + url, postData.value, null, null, true); break; case "3": if (browser.getBrowser && browser.getBrowser().localName == "tabbrowser") - browser.delayedOpenTab(url, null, null, postData.value); + browser.delayedOpenTab(url, null, null, postData.value, true); else - browser.loadURI(url, null, postData.value); // Just do a normal load. + browser.loadURI(url, null, postData.value, true); // Just do a normal load. break; } } diff --git a/mozilla/browser/base/content/utilityOverlay.js b/mozilla/browser/base/content/utilityOverlay.js index 0b9bda4c262..9b6a226d92f 100644 --- a/mozilla/browser/base/content/utilityOverlay.js +++ b/mozilla/browser/base/content/utilityOverlay.js @@ -120,7 +120,7 @@ function getBoolPref ( prefname, def ) function openUILink( url, e, ignoreButton, ignoreAlt ) { var where = whereToOpenLink(e, ignoreButton, ignoreAlt); - openUILinkIn(url, where); + openUILinkIn(url, where, false); } @@ -193,8 +193,12 @@ function whereToOpenLink( e, ignoreButton, ignoreAlt ) * "tabshifted" same as "tab" but in background if default is to select new tabs, and vice versa * "window" new window * "save" save to disk (with no filename hint!) + * + * allowThirdPartyFixup controls whether third party services such as Google's + * I Feel Lucky are allowed to interpret this URL. This parameter may be + * undefined, which is treated as false. */ -function openUILinkIn( url, where ) +function openUILinkIn( url, where, allowThirdPartyFixup ) { if (!where) return; @@ -230,7 +234,8 @@ function openUILinkIn( url, where ) case "tabshifted": case "tab": var loadInBackground = getBoolPref("browser.tabs.loadBookmarksInBackground", false); - browser.loadOneTab(url, null, null, null, loadInBackground); + browser.loadOneTab(url, null, null, null, loadInBackground, + allowThirdPartyFixup || false); break; } } diff --git a/mozilla/browser/components/bookmarks/content/bookmarks.js b/mozilla/browser/components/bookmarks/content/bookmarks.js index de8a9b72b7a..ce3d313512b 100644 --- a/mozilla/browser/components/bookmarks/content/bookmarks.js +++ b/mozilla/browser/components/bookmarks/content/bookmarks.js @@ -686,7 +686,7 @@ var BookmarksCommand = { if (url == "") return; - openUILinkIn(url, aTargetBrowser); + openUILinkIn(url, aTargetBrowser, false); }, openGroupBookmark: function (aURI, aTargetBrowser) diff --git a/mozilla/browser/components/places/content/controller.js b/mozilla/browser/components/places/content/controller.js index d16586adf92..780906a9cfc 100755 --- a/mozilla/browser/components/places/content/controller.js +++ b/mozilla/browser/components/places/content/controller.js @@ -1282,7 +1282,7 @@ var PlacesController = { if (node) { var browser = this._getBrowserWindow(); if (browser) - browser.openNewWindowWith(node.uri, null, null); + browser.openNewWindowWith(node.uri, null, null, false); else this._openBrowserWith(node.uri); } @@ -1296,7 +1296,7 @@ var PlacesController = { if (node) { var browser = this._getBrowserWindow(); if (browser) - browser.loadURI(node.uri, null, null); + browser.loadURI(node.uri, null, null, false); else this._openBrowserWith(node.uri); } diff --git a/mozilla/browser/components/search/content/search.xml b/mozilla/browser/components/search/content/search.xml index 959825aefd6..e4d9b3dc401 100644 --- a/mozilla/browser/components/search/content/search.xml +++ b/mozilla/browser/components/search/content/search.xml @@ -226,7 +226,7 @@ /* openDialog("chrome://browser/content/search/edit-engines.xul", "", "modal,centerscreen"); */ var regionBundle = document.getElementById("bundle_browser_region"); - loadURI(regionBundle.getString("searchEnginesURL"), null, null); + loadURI(regionBundle.getString("searchEnginesURL"), null, null, false); } else { this.currentEngine = aEvent.target.engine; this.focus(); @@ -270,11 +270,11 @@ if (aInNewTab) { content.focus(); - getBrowser().loadOneTab(url, null, null, postData.value, false); + getBrowser().loadOneTab(url, null, null, postData.value, false, false); if (gURLBar) gURLBar.value = url; } else - loadURI(url, null, postData.value); + loadURI(url, null, postData.value, false); content.focus(); ]]>