Bug 935377 - Firefox should fix common scheme typos, r=dolske

This commit is contained in:
Christian Legnitto 2014-01-12 12:02:27 -08:00
parent 2faa3798f1
commit a7ce12665b
13 changed files with 50 additions and 16 deletions

View File

@ -1839,8 +1839,10 @@ function loadURI(uri, referrer, postData, allowThirdPartyFixup) {
postData = null; postData = null;
var flags = nsIWebNavigation.LOAD_FLAGS_NONE; var flags = nsIWebNavigation.LOAD_FLAGS_NONE;
if (allowThirdPartyFixup) if (allowThirdPartyFixup) {
flags |= nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP; flags |= nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP;
flags |= nsIWebNavigation.LOAD_FLAGS_FIXUP_SCHEME_TYPOS;
}
try { try {
gBrowser.loadURIWithFlags(uri, flags, referrer, null, postData); gBrowser.loadURIWithFlags(uri, flags, referrer, null, postData);

View File

@ -82,7 +82,8 @@ function open()
switch (dialog.openWhereList.value) { switch (dialog.openWhereList.value) {
case "0": case "0":
var webNav = Components.interfaces.nsIWebNavigation; var webNav = Components.interfaces.nsIWebNavigation;
var flags = webNav.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP; var flags = webNav.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP |
webNav.LOAD_FLAGS_FIXUP_SCHEME_TYPOS;
if (!mayInheritPrincipal) if (!mayInheritPrincipal)
flags |= webNav.LOAD_FLAGS_DISALLOW_INHERIT_OWNER; flags |= webNav.LOAD_FLAGS_DISALLOW_INHERIT_OWNER;
browser.gBrowser.loadURIWithFlags(url, flags, null, null, postData); browser.gBrowser.loadURIWithFlags(url, flags, null, null, postData);

View File

@ -1601,8 +1601,10 @@
b.userTypedValue = aURI; b.userTypedValue = aURI;
let flags = Ci.nsIWebNavigation.LOAD_FLAGS_NONE; let flags = Ci.nsIWebNavigation.LOAD_FLAGS_NONE;
if (aAllowThirdPartyFixup) if (aAllowThirdPartyFixup) {
flags |= Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP; flags |= Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP;
flags |= Ci.nsIWebNavigation.LOAD_FLAGS_FIXUP_SCHEME_TYPOS;
}
if (aFromExternal) if (aFromExternal)
flags |= Ci.nsIWebNavigation.LOAD_FLAGS_FROM_EXTERNAL; flags |= Ci.nsIWebNavigation.LOAD_FLAGS_FROM_EXTERNAL;
if (aDisableMCB) if (aDisableMCB)
@ -4480,7 +4482,10 @@
} else { } else {
// Load in an existing tab. // Load in an existing tab.
try { try {
this.tabbrowser.getBrowserForTab(tab).loadURIWithFlags(url, Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP); let webNav = Ci.nsIWebNavigation;
let flags = webNav.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP |
webNav.LOAD_FLAGS_FIXUP_SCHEME_TYPOS;
this.tabbrowser.getBrowserForTab(tab).loadURIWithFlags(url, flags);
if (!bgLoad) if (!bgLoad)
this.selectedItem = tab; this.selectedItem = tab;
} catch(ex) { } catch(ex) {

View File

@ -293,7 +293,9 @@
} }
function loadCurrent() { function loadCurrent() {
let flags = Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP; let webnav = Ci.nsIWebNavigation;
let flags = webnav.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP |
webnav.LOAD_FLAGS_FIXUP_SCHEME_TYPOS;
// Pass LOAD_FLAGS_DISALLOW_INHERIT_OWNER to prevent any loads from // Pass LOAD_FLAGS_DISALLOW_INHERIT_OWNER to prevent any loads from
// inheriting the currently loaded document's principal, unless this // inheriting the currently loaded document's principal, unless this
// URL is marked as safe to inherit (e.g. came from a bookmark // URL is marked as safe to inherit (e.g. came from a bookmark

View File

@ -300,8 +300,10 @@ function openLinkIn(url, where, params) {
switch (where) { switch (where) {
case "current": case "current":
let flags = Ci.nsIWebNavigation.LOAD_FLAGS_NONE; let flags = Ci.nsIWebNavigation.LOAD_FLAGS_NONE;
if (aAllowThirdPartyFixup) if (aAllowThirdPartyFixup) {
flags |= Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP; flags |= Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP;
flags |= Ci.nsIWebNavigation.LOAD_FLAGS_FIXUP_SCHEME_TYPOS;
}
if (aDisallowInheritPrincipal) if (aDisallowInheritPrincipal)
flags |= Ci.nsIWebNavigation.LOAD_FLAGS_DISALLOW_INHERIT_OWNER; flags |= Ci.nsIWebNavigation.LOAD_FLAGS_DISALLOW_INHERIT_OWNER;
w.gBrowser.loadURIWithFlags(url, flags, aReferrerURI, null, aPostData); w.gBrowser.loadURIWithFlags(url, flags, aReferrerURI, null, aPostData);

View File

@ -54,9 +54,12 @@ function shouldLoadURI(aURI) {
function resolveURIInternal(aCmdLine, aArgument) { function resolveURIInternal(aCmdLine, aArgument) {
var uri = aCmdLine.resolveURI(aArgument); var uri = aCmdLine.resolveURI(aArgument);
var urifixup = Components.classes["@mozilla.org/docshell/urifixup;1"]
.getService(nsIURIFixup);
if (!(uri instanceof nsIFileURL)) { if (!(uri instanceof nsIFileURL)) {
return uri; return urifixup.createFixupURI(aArgument,
urifixup.FIXUP_FLAG_FIX_SCHEME_TYPOS);
} }
try { try {
@ -71,9 +74,6 @@ function resolveURIInternal(aCmdLine, aArgument) {
// doesn't exist. Try URI fixup heuristics: see bug 290782. // doesn't exist. Try URI fixup heuristics: see bug 290782.
try { try {
var urifixup = Components.classes["@mozilla.org/docshell/urifixup;1"]
.getService(nsIURIFixup);
uri = urifixup.createFixupURI(aArgument, 0); uri = urifixup.createFixupURI(aArgument, 0);
} }
catch (e) { catch (e) {

View File

@ -368,12 +368,16 @@ var BrowserUI = {
Task.spawn(function() { Task.spawn(function() {
let postData = {}; let postData = {};
let webNav = Ci.nsIWebNavigation;
let flags = webNav.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP |
webNav.LOAD_FLAGS_FIXUP_SCHEME_TYPOS;
aURI = yield Browser.getShortcutOrURI(aURI, postData); aURI = yield Browser.getShortcutOrURI(aURI, postData);
Browser.loadURI(aURI, { flags: Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP, postData: postData }); Browser.loadURI(aURI, { flags: flags, postData: postData });
// Delay doing the fixup so the raw URI is passed to loadURIWithFlags // Delay doing the fixup so the raw URI is passed to loadURIWithFlags
// and the proper third-party fixup can be done // and the proper third-party fixup can be done
let fixupFlags = Ci.nsIURIFixup.FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP; let fixupFlags = Ci.nsIURIFixup.FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP |
Ci.nsIURIFixup.FIXUP_FLAG_FIX_SCHEME_TYPOS;
let uri = gURIFixup.createFixupURI(aURI, fixupFlags); let uri = gURIFixup.createFixupURI(aURI, fixupFlags);
gHistSvc.markPageAsTyped(uri); gHistSvc.markPageAsTyped(uri);

View File

@ -172,7 +172,10 @@ var Browser = {
let self = this; let self = this;
function loadStartupURI() { function loadStartupURI() {
if (activationURI) { if (activationURI) {
self.addTab(activationURI, true, null, { flags: Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP }); let webNav = Ci.nsIWebNavigation;
let flags = webNav.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP |
webNav.LOAD_FLAGS_FIXUP_SCHEME_TYPOS;
self.addTab(activationURI, true, null, { flags: flags });
} else { } else {
let uri = commandURL || Browser.getHomePage(); let uri = commandURL || Browser.getHomePage();
self.addTab(uri, true); self.addTab(uri, true);

View File

@ -1271,6 +1271,7 @@ nsScriptSecurityManager::CheckLoadURIStrWithPrincipal(nsIPrincipal* aPrincipal,
uint32_t flags[] = { uint32_t flags[] = {
nsIURIFixup::FIXUP_FLAG_NONE, nsIURIFixup::FIXUP_FLAG_NONE,
nsIURIFixup::FIXUP_FLAG_FIX_SCHEME_TYPOS,
nsIURIFixup::FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP, nsIURIFixup::FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP,
nsIURIFixup::FIXUP_FLAGS_MAKE_ALTERNATE_URI, nsIURIFixup::FIXUP_FLAGS_MAKE_ALTERNATE_URI,
nsIURIFixup::FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP | nsIURIFixup::FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP |

View File

@ -1583,6 +1583,9 @@ nsDocShell::LoadURI(nsIURI * aURI,
if (aLoadFlags & LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP) if (aLoadFlags & LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP)
flags |= INTERNAL_LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP; flags |= INTERNAL_LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP;
if (aLoadFlags & LOAD_FLAGS_FIXUP_SCHEME_TYPOS)
flags |= INTERNAL_LOAD_FLAGS_FIXUP_SCHEME_TYPOS;
if (aLoadFlags & LOAD_FLAGS_FIRST_LOAD) if (aLoadFlags & LOAD_FLAGS_FIRST_LOAD)
flags |= INTERNAL_LOAD_FLAGS_FIRST_LOAD; flags |= INTERNAL_LOAD_FLAGS_FIRST_LOAD;
@ -4272,6 +4275,9 @@ nsDocShell::LoadURI(const char16_t * aURI,
if (aLoadFlags & LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP) { if (aLoadFlags & LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP) {
fixupFlags |= nsIURIFixup::FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP; fixupFlags |= nsIURIFixup::FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP;
} }
if (aLoadFlags & LOAD_FLAGS_FIXUP_SCHEME_TYPOS) {
fixupFlags |= nsIURIFixup::FIXUP_FLAG_FIX_SCHEME_TYPOS;
}
nsCOMPtr<nsIInputStream> fixupStream; nsCOMPtr<nsIInputStream> fixupStream;
rv = sURIFixup->CreateFixupURI(uriString, fixupFlags, rv = sURIFixup->CreateFixupURI(uriString, fixupFlags,
getter_AddRefs(fixupStream), getter_AddRefs(fixupStream),

View File

@ -44,7 +44,7 @@ interface nsIReflowObserver;
typedef unsigned long nsLoadFlags; typedef unsigned long nsLoadFlags;
[scriptable, builtinclass, uuid(55ca6545-7ce4-49ad-8117-8286ca9c61bb)] [scriptable, builtinclass, uuid(e3ea830d-2614-4aeb-9ec3-b8f744b03b80)]
interface nsIDocShell : nsIDocShellTreeItem interface nsIDocShell : nsIDocShellTreeItem
{ {
/** /**
@ -111,6 +111,8 @@ interface nsIDocShell : nsIDocShellTreeItem
// Whether the load should be treated as srcdoc load, rather than a URI one. // Whether the load should be treated as srcdoc load, rather than a URI one.
const long INTERNAL_LOAD_FLAGS_IS_SRCDOC = 0x40; const long INTERNAL_LOAD_FLAGS_IS_SRCDOC = 0x40;
const long INTERNAL_LOAD_FLAGS_FIXUP_SCHEME_TYPOS = 0x80;
/** /**
* Loads the given URI. This method is identical to loadURI(...) except * Loads the given URI. This method is identical to loadURI(...) except
* that its parameter list is broken out instead of being packaged inside * that its parameter list is broken out instead of being packaged inside

View File

@ -16,7 +16,7 @@ interface nsIURI;
* location, stop or restart an in process load, or determine where the object * location, stop or restart an in process load, or determine where the object
* has previously gone. * has previously gone.
*/ */
[scriptable, uuid(28404f7e-0f17-4dc3-a21a-2074d8659b02)] [scriptable, uuid(dbd6241d-c76e-42c0-9410-930589d803a2)]
interface nsIWebNavigation : nsISupports interface nsIWebNavigation : nsISupports
{ {
/** /**
@ -191,6 +191,11 @@ interface nsIWebNavigation : nsISupports
*/ */
const unsigned long LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP = 0x100000; const unsigned long LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP = 0x100000;
/**
* This flag specifies that common scheme typos should be corrected.
*/
const unsigned long LOAD_FLAGS_FIXUP_SCHEME_TYPOS = 0x200000;
/* Note that flag 0x80000 is available. */ /* Note that flag 0x80000 is available. */
/** /**

View File

@ -1427,7 +1427,8 @@ var BrowserApp = {
// Pass LOAD_FLAGS_DISALLOW_INHERIT_OWNER to prevent any loads from // Pass LOAD_FLAGS_DISALLOW_INHERIT_OWNER to prevent any loads from
// inheriting the currently loaded document's principal. // inheriting the currently loaded document's principal.
let flags = Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP; let flags = Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP |
Ci.nsIWebNavigation.LOAD_FLAGS_FIXUP_SCHEME_TYPOS;
if (data.userEntered) { if (data.userEntered) {
flags |= Ci.nsIWebNavigation.LOAD_FLAGS_DISALLOW_INHERIT_OWNER; flags |= Ci.nsIWebNavigation.LOAD_FLAGS_DISALLOW_INHERIT_OWNER;
} }