Firefox/Projects/Network Error Pages
Overview
Sprint lead: curtis
Sprinters: johnath, boriss
Description:
More useful/helpful set of network error pages that offer tools helping users get to a useful end point via search, analysis of Places DB, or automatic redirects/reloads.
Status
- Opened a bug for 404 handling: https://bugzilla.mozilla.org/show_bug.cgi?id=482874
- Completed the experimental 404 extension and sent it out for comments.
- Works well for simulated small errors in URLs
- Hard to say how well it works for real errors in the wild.
- Drawing alternatives from the Places DB looks like a practical tool we can use for suggesting alternatives.
- Discussions with Google Link Doctor team are ongoing
- Follow up on experimental access to the service.
- Discussed possible 404 implementation with bzbarsky and others.
- 404 interception unified with the existing error handling architecture is too deep a change to make for 3.1.
- A less intrusive approach similar to the one the experimental 404 extension uses may be possible -- need to investigate further.
- Discussed UI design with jboriss. She has a blog post on the subject at http://jboriss.wordpress.com/2009/03/10/improving-everyones-favorite-feature-404/.
- Implemented Levenshtein Distance algorithm in C++, but have not plugged it into Firefox+Sqlite yet. Should provide better performance and accuracy compared to the approach used in the extension.
- Proposed a plan for actual implementation -- see below.
Proposed Plan
- Target two error types:
- 404 errors.
- DnsNotFound errors.
- Tools to draw on:
- Places alternatives: Places DB + Edit Distance -- can be called automatically.
- Good for errors on URLs that the user has visited before
- Might be especially useful for misspelled hostnames.
- Google Link Doctor
- Assuming partner issues are worked out with Google.
- Can't be called automatically for privacy reasons.
- Available with one click (similar to pre-loaded Google search box)
- Other easy to implement tools
- common transformations (www..example.com --> www.example.com, etc.)
- pre-loaded search box
- etc.
- Places alternatives: Places DB + Edit Distance -- can be called automatically.
- 404 redirection
- do not redirect obvious custom server error pages
- when we do redirect, original error page is available at one click.
- use some heuristic beyond simple page size for identifying default 404 pages
- compare to standard Apache and IIS 404 pages, possibly fuzzy (use edit distance?)
- use EndDocumentLoad (or other event) + redirect
- can't do deep docshell changes for 3.1
- should unify with existing error page architecture in v.next.
- similar to how the Friendly Error extension works now
- implement listener in C++, should be able to access 404 status directly from document.
- use 404 specific error page for 3.1 rather than trying to re-use the generic network error page.
- more design flexibility
- easier to get in before string freeze
- unify with generic network error page in v.next
- Sketches:
- 404 redirection
A near match has been found (http://www.americas.com) along with the level above (http://news.bbc.co.uk), either via Places or Google
- DnsNotFound:
- Extend existing error page with alternatives drawn from Places.
- Add one-click access to Google Link Doctor.
- Other tools.
- Improved design
- Sketches:
- May be constrained by the generic network error page architecture.
- DnsNotFound:
- Constraints
- String Freeze for Beta 4: Mar 19, 2009
- Code Freeze for Beta 4: April 6, 2009
- Constraints
- Security Issues
- Our 404 error page can't be a chrome page, since that could expose us to privilege escalation attacks piggy-backed on XSS attacks.
- Solution: Use an about: URL to access the 404 error page.
- Our 404 error page can't be a chrome page, since that could expose us to privilege escalation attacks piggy-backed on XSS attacks.
To Do
- Get the experimental extension out to concerned parties: Boriss, Johnath, and Aza, etc. Work with Boriss to get a first cut on an official 404 page design.
- Follow up with contact on Link Doctor team about experimental access to the Link Doctor service.
- Extend the 404 extension to intercept other error types so we can use it to prototype improved error page designs.
- Figure out how to plumb 404 interception into Firefox proper (talk to Johnath).
- Investigate implementing a proper edit-distance algorithm in C++ that can be used with Sqlite.
- Come up with a plan for a production-quality Firefox 3.5 patch.
Goals / Use Cases
tbd
Non Goals
tbd
Design
tbd
Bugs
Bug 479922 - Network error pages should give me tools instead of asking me questions
Reference
nsDocShell::DisplayLoadError -- dispatches various error pages
about:neterror
about:config -- urlclassifier.alternate_error_page default string = "blocked" -- for example -- tells nsDocShell::DisplayLoadError to use the "blocked" page instead of the default generic page.
https://johnath.com/ -- triggers a "Secure Connection Failed" error page.
http://example.example.com/ -- triggers an "Address Not Found" error page.
Error Types
Which ones do we want to improve first?
- Some "tools" may broadly apply -- change the generic template? (e.g. search)
- No new pages, just make the existing pages better?
- Add a search field to addressNotFound page.
- neterror important???
- protocolNotFound
- fileNotFound
- dnsNotFound important???
- connectionFailure important???
- netInterrupt
- netTimeout important???
- nssBadCert
- nssFailure2
- phishingBlocked
- malwareBlocked
- malformedURI
- redirectLoop
- unknownSocketType
- netReset
- netOffline
- isprinting
- deniedPortAccess
- proxyResolveFailure
- proxyConnectFailure
- contentEncodingError
- unsafeContentType
dnsNotFound error
URL that results in a dnsNotFound error page
connectionFailure error
URL that results in a connectionFailure error page
[image:xxxxxxxxxxx Screenshot of a connectionFailure error page]
Notes
Can we use Places autocomplete for link correction? A mis-typed link will often be in error in only the last couple of characters -- we can truncate the last 2 or 3 characters and rely on Places auto-complete to give us recommendations...
http://mxr.mozilla.org/mozilla-central/source/toolkit/components/places/tests/autocomplete/
A related alternative would be to construct an edit-distance function and register it with SqlLite. We can then do a query on minimal edit distance (async of course) to get the best link correction matches.
Problem is, how do we hook link correction into the error page? We'd like to provide suggestions inside the web page similar to Google's "did you mean" on the search results page.
More Notes
Google Chrome's Friendly 404 Error Page
Notes Mark III
Summary of error types (FF 1.5)
Google Chrome LinkDoctor Service (linkhelp.clients.google.com)
wget -U "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13" "http://linkhelp.clients.google.com/tbproxy/lh/fixurl?sourceid=navclient%20&hl=en&sd=com&error=http404&url=http://news.speeple.com/sunflowers" wget -U "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13" "http://www.google.com"
Notes: Herdict
Email from Jesse:
Here's the bug I filed with my ideas for error pages: https://bugzilla.mozilla.org/show_bug.cgi?id=479922 and here's the page that Curtis coincidentally wrote: https://wiki.mozilla.org/Firefox3.1/Sprints/Network_Error_Pages Jonathan Zittrain was talking about HerdictWeb (http://www.herdict.org/web/) in building K today and had interesting ideas about integrating it into Firefox's error pages. Instead of Firefox just telling you the site is unreachable, maybe it could tell you whether it has been gone for minutes or months, and whether it is broken for everyone or only for certain ISPs or countries. jz -- Curtis and I are in building S today if you want to come over and chat with us.