<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="http://limi.net/feed.xml" rel="self" type="application/atom+xml" /><link href="http://limi.net/" rel="alternate" type="text/html" /><updated>2024-09-06T14:36:00+00:00</updated><id>http://limi.net/feed.xml</id><title type="html">Alex Limi</title><subtitle>Alex Limi on Product &amp; Design</subtitle><entry><title type="html">Checkboxes that kill your product</title><link href="http://limi.net/checkboxes" rel="alternate" type="text/html" title="Checkboxes that kill your product" /><published>2013-10-08T00:00:00+00:00</published><updated>2013-10-08T00:00:00+00:00</updated><id>http://limi.net/checkboxes</id><content type="html" xml:base="http://limi.net/checkboxes"><![CDATA[<p>If I told you that a company is shipping a product to hundreds of millions of users right now, and included in the product are several prominent buttons that will break the product completely if you click them, and possibly lock you out from the Internet — can you guess which product it is?</p>

<p>Sounds like that’s the kind of product that only a large enterprise software company like Oracle or <abbr title="International Business Machines">IBM</abbr> would ship, right? Maybe some of the antivirus extortionware software for Windows? Maybe <abbr title="Virtual Private Network">VPN</abbr> software?</p>

<p>Well, <a href="https://en.wikipedia.org/wiki/Pogo_%28comic_strip%29#.22We_have_met_the_enemy_and_he_is_us..22" title="Quote from Pogo, the comic strip">we have met the enemy, and he is us</a>.
In the currently shipping version, Firefox ships with many options that will render the browser unusable to most people, right in the main settings <abbr title="User Interface">UI</abbr>.</p>

<hr />

<p>How did we get to this point with Firefox? Most of these options exist for historical reasons — whenever there’s a new feature, it often gets a checkbox to turn it off. The other common case is when a feature isn’t obviously useful to everyone, and it’s hard to make an obvious choice about whether to have it enabled by default or not — so we build in a switch. Or sometimes the person implementing it thinks it should have a switch, and nobody stops to ask if it’s a good idea.</p>

<p>I’m not going to retread discussions about this, there are many versions of that article across the web — the main point is that it is usually a failure of design, and a failure to agree on sensible default behaviors. Options are “the cheap way out,” and they usually speak to an inability to agree on what to do in a given situation.</p>

<p><strong>Design by committee often looks like a row of checkboxes.</strong></p>

<p>What I <em>do</em> want to put the focus on, however, is that you <em>have</em> to perform an audit of your product every so often and see how the people using your product have changed, and what kind of functionality that made sense at the time may not make much sense anymore.</p>

<p>Of course, we should start in our own backyard, so here are some obvious examples from Firefox. These are things we need to fix:</p>

<h2 id="load-images-automatically">Load images automatically</h2>

<p>From the Content panel in our settings, try unchecking the box:
<img src="https://i.imgur.com/Xxo6hmw.png" alt="Content Panel" /></p>

<p>Here’s how Google’s front page looks like if you uncheck that box:</p>

<p><img src="https://i.imgur.com/3aLJmS2.png" alt="Google" /></p>

<p>That’s right, you can’t even see the text box you’re supposed to type your search into. Congratulations, we just broke the Internet.</p>

<p>Of course, there are legitimate uses for this, from low-bandwidth situations to web development testing, but that’s where our <a href="https://addons.mozilla.org">excellent add-ons ecosystem</a> comes to the rescue. Are more than 2% of our users likely to use this setting on a regular basis? Probably not.</p>

<h2 id="enable-javascript">Enable JavaScript</h2>

<p>More fun from our Content panel, you can turn off JavaScript with a simple click:</p>

<p><img src="https://i.imgur.com/Xxo6hmw.png" alt="Turn off JavaScript" /></p>

<p>Try booking a travel on Hipmunk without JavaScript:</p>

<p><img src="https://i.imgur.com/c6OOjp7.png" alt="" /></p>

<p>Most sites these days that aren’t just displaying content will fail in interesting &amp; mysterious ways if you don’t have JavaScript enabled. For the general population, Firefox will appear broken.</p>

<blockquote>
  <p>Fun historical fact: If you disabled JavaScript in Netscape 4, <abbr title="Cascading Style Sheets">CSS</abbr> would also stop working — because <abbr title="Cascading Style Sheets">CSS</abbr> was applied to the page using… JavaScript.</p>
</blockquote>

<p>And yes, I know that some people have reasons (privacy, web development) to turn off JavaScript. There are many add-ons that can help with this — but it’s not something that we should ship to hundreds of millions of users.</p>

<h2 id="turning-off-navigation">Turning off navigation</h2>

<p>Firefox is very customizable! In fact, it’s so customizable that we allow you to make the browser unusable with a single click. Try turning off the Navigation Toolbar, for instance:</p>

<p><img src="https://i.imgur.com/W2QOeWQ.png" alt="Navigation Toolbar in Menu" /></p>

<p>Good luck trying to find a web site that can help you fix this problem when your son was clicking around the menus in Firefox yesterday, and today your browser has no buttons:</p>

<p><img src="https://i.imgur.com/0JmJ60q.png" alt="Browser with no buttons" /></p>

<h2 id="turning-off-ssl--tls">Turning off <abbr title="Secure Sockets Layer">SSL</abbr> &amp; <abbr title="Transport Layer Security">TLS</abbr></h2>

<p>Now we’re getting to the “shooting fish in a barrel” category — there are many fun options in this preference panel:</p>

<p><img src="https://i.imgur.com/Q1SRzmH.png" alt="Preference Panel" /></p>

<p>If you turn off <abbr title="Secure Sockets Layer">SSL</abbr> or <abbr title="Transport Layer Security">TLS</abbr>, Gmail, Google Reader, and other Google services will look like this:</p>

<p><img src="https://i.imgur.com/FjDK3dn.png" alt="Error Message" /></p>

<p>Note that we don’t even tell you that you can turn it back on in the settings. We just tell you that it has been disabled, and that you should “contact the website owners to inform them of this problem.”</p>

<p>Good luck trying to do that when you can’t even see the web site or load your email.</p>

<h2 id="the-entire-certificate-manager">The entire certificate manager</h2>

<p>Oh boy, where do we start?</p>

<p><img src="https://i.imgur.com/YxVQID7.png" alt="Certificate Manager" /></p>

<p>Personally, I feel pretty confident that the number of people that know how any of this works can be narrowed down to the people that work in these companies in the list. At least not too far off.</p>

<p>This entire thing — possibly with the exception of the personal certificate list — needs to be moved out into an add-on for people with interest in managing their own certificates. It’s our job as a browser to keep you safe, we shouldn’t outsource this to individuals.</p>

<p>You probably don’t want your bank to look like this because two days ago, you read an article on the Internet — authored by who-knows — telling you to remove an entry in your certificates “for added safety”:</p>

<p><img src="https://i.imgur.com/Zn3auty.png" alt="Bank Site Error" /></p>

<p>Also, is that an <abbr title="Who knows?">NSS</abbr> Internal <abbr title="Really?">PKCS</abbr> #11 module in your pocket, or are you just happy to see me? Do I need to enable my <abbr title="Seriously.">FIPS</abbr>?</p>

<p><img src="https://i.imgur.com/eLDED0a.png" alt="NSS" /></p>

<p>As Privacy Engineer Monica Chew at Mozilla asks, “<a href="https://monica-at-mozilla.blogspot.com/2013/02/writing-for-98.html">Is it really worth having a preference panel that benefits fewer than 2% of users overall?</a>” — obvious spoiler alert: The answer is no.</p>

<p>On the flipside, from that same article: how many users have we broken the web for when 1.6% of them may have <abbr title="Transport Layer Security">TLS</abbr> support turned off, and possibly not be aware of it? Even 1% of a few hundred million isn’t a trivial number of people.</p>

<p>The people that need to do these things should use add-ons, or at the very least an <code>about:config</code> tweak.</p>

<h2 id="override-automatic-cache-management">Override automatic cache management</h2>

<p>Another way to slow down the browser and make Firefox look bad is to give it no disk space to use for caching:</p>

<p><img src="https://i.imgur.com/91N6zzP.png" alt="Cache Management" /></p>

<p>What about computers with very little disk space? Shouldn’t you be able to restrict how much disk space is being used? It turns out, we know that you are low on disk space, and will reduce our usage accordingly. It’s pretty likely that Firefox keeps better track of this than humans do. So let’s make computers do what they’re good at: keeping track of numbers.</p>

<hr />

<p>What have we learned? There are a lot of options in our products that are used by very few people, and some of them can have <em>disastrous</em> effects. We’re trying to design software that can be used by everyone — that also means we have to keep them safe and not make it so easy to break a product they rely on every day. None of these are put there with malicious intent — some of them  even made sense at the time — but it’s time for us to do some scrubbing and cleaning of the Firefox settings.</p>

<p>What about the product that <em>you</em> are building? Is it time to take a fresh look at what kind of options you include?</p>

<p><small>Thanks to Frank Yan, Blake Winton, Tony Santos, Monica Chew, Sid Stamm &amp; Madhava Enros for reading drafts of this.</small></p>]]></content><author><name>Alex Limi</name></author><summary type="html"><![CDATA[A little historical baggage can be a dangerous thing when multiplied by a few hundred million individuals]]></summary></entry><entry><title type="html">Safari adopts proposed Firefox download manager design</title><link href="http://limi.net/safari" rel="alternate" type="text/html" title="Safari adopts proposed Firefox download manager design" /><published>2011-05-04T00:00:00+00:00</published><updated>2011-05-04T00:00:00+00:00</updated><id>http://limi.net/safari</id><content type="html" xml:base="http://limi.net/safari"><![CDATA[<p>Working for Mozilla on designing the next versions of Firefox, one of the great benefits is that we get to do our designs in the open, and improve <em>all</em> web browsers — not just our own product.</p>

<blockquote>
  <p>People are often surprised when we tell them that we’re not trying to “win the marketshare game,” but instead make sure that there is a thriving, diverse ecosystem on the web, with no single dominant player — which at this point, Mozilla has succeeded spectacularly at — compared to a few years ago, when the browser market was stagnant, and one browser dominated the web.</p>
</blockquote>

<p>That’s why it’s so exciting to see our designs being adopted by other browser makers. A while back, I wrote a <a href="/downloads">comprehensive overview on download managers</a> in the major web browsers, and made some recommendations on how to fix them. I also encouraged other browsers to implement this approach.</p>

<p>You can read <a href="/downloads">the entire article</a>, but I’ll give you the short version. Here’s the proposed design that was posted in that article:</p>

<p><img src="/images/sketch-downloads.png" alt="Download panel sketch" /></p>

<p>Sketch by <a href="https://twitter.com/shorlander">Stephen Horlander</a>.</p>

<p>Today, I was very happy to see that Safari has implemented our design in their upcoming release, as evidenced by (screenshots posted at Dustin Curtis’ site, since removed), here’s the image he posted:</p>

<p><img src="/images/safari-download.png" alt="Safari download panel" /></p>

<p>There’s of course a lot more detail to this than just a couple of screenshots — covered in <a href="/downloads">the in-depth article</a> — but they seem to follow the overall design path we described there.</p>

<p>So what’s the status of this work in Firefox? You can follow along over at the <a href="https://wiki.mozilla.org/Firefox/Features/Panel_based_download_window">Download Manager feature page</a>, but the short story is that it’s currently being updated to the new panel <abbr title="User Interface">UI</abbr> that was introduced in Firefox 4, and is currently undergoing review. The aim is to land this as soon as possible, which with our new, <a href="https://wiki.mozilla.org/RapidRelease">accelerated release cycle</a> shouldn’t be far away.</p>]]></content><author><name>Alex Limi</name></author><summary type="html"><![CDATA[Why we design in the open]]></summary></entry><entry><title type="html">User Experience improvements in Firefox 4</title><link href="http://limi.net/firefox-4" rel="alternate" type="text/html" title="User Experience improvements in Firefox 4" /><published>2011-03-15T00:00:00+00:00</published><updated>2011-03-15T00:00:00+00:00</updated><id>http://limi.net/firefox-4</id><content type="html" xml:base="http://limi.net/firefox-4"><![CDATA[<p>With Firefox 4 right around the corner — we might have the final release as early as next week — it’s a good time to take a quick look at some of the user interface and user experience improvements in the release. There’s a million (only slightly less, really) improvements in Firefox 4, and other blogs and our own fantastic engagement team will tell you about the other great improvements — but I thought I’d publish this quick “changes we think you should take a look at” post for those of you who can’t wait.</p>

<h2 id="new-look">New look</h2>

<p>As you probably know, we have an entirely new look across all our platforms — Windows, Mac <abbr title="Mac OS Ten">OS X</abbr> &amp; Linux/<abbr title="Berkeley Software Distribution">BSD</abbr>. Among the improvements:</p>

<ul>
  <li>Tabs are now on top — and they move into the space in the titlebar when running in maximized mode on Windows,</li>
  <li>Full Windows 7 &amp; Vista integration with <a href="http://en.wikipedia.org/wiki/Windows_Aero">Aero Glass</a>,</li>
  <li>Less busy layout, improved icons and glyphs,</li>
  <li>More space for your web pages,</li>
  <li>Whole-window <a href="http://www.getpersonas.com">Personas</a>,</li>
  <li>…&amp; you can even choose to not have a dedicated search box for an even cleaner look, since you can enter searches directly in the location bar now, and always get a predictable search result.</li>
</ul>

<p>Firefox 3.6 vs Firefox 4 on Windows 7:</p>

<p><img src="/media/firefox-3.6-win.png" alt="" />
<img src="/media/firefox-4-win.png" alt="" /></p>

<p>Firefox 3.6 vs Firefox 4 on Mac <abbr title="Mac OS Ten">OS X</abbr>:</p>

<p><img src="/media/firefox-3.6-mac.png" alt="" />
<img src="/media/firefox-4-mac.png" alt="" /></p>

<p>…and since I don’t have a Linux setup available for screenshots right now, you’ll have to trust <abbr title="GNOME">GNOME</abbr> and Linux hacker Jeff Waugh on this one:</p>

<p><img src="/media/jdub-on-firefox-4.png" alt="" /></p>

<h2 id="more-efficient-menu">More efficient menu</h2>

<p>New single-access menu for Windows 7, Vista &amp; Linux, which was adopted by Opera (and in a similar vein, Chrome unified their two menus into one, too) soon after we put our original designs online<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup>. And for the record, we think this is great — everyone wins, and we get a better <abbr title="User Interface">UI</abbr> in all browsers when this happens!</p>

<p><img src="/media/firefox-menu.png" alt="" /></p>

<h2 id="faster-faster-faster">Faster, faster, faster</h2>

<p>In addition to the impressive speed from our new JavaScript and <abbr title="HyperText Markup Language 5">HTML5</abbr> engines and making use of hardware acceleration, there are a lot of improvements in Firefox 4 that make the user experience much faster, especially when it comes to starting your browser:</p>

<ul>
  <li><strong>Startup:</strong> Firefox 4 starts up in a fraction of the time that Firefox 3 did, and we’ve put a lot of effort into making every part of the Firefox experience just a little bit faster and more efficient.</li>
  <li><strong>New home page:</strong> The home page is no longer loaded over the network, which means you never have to wait for it to load. Our goal was to get you to your web pages as fast as possible.</li>
  <li><strong>Faster restore of a previous browsing session:</strong> When restoring a previous session, we load less pages in parallel, which makes everything more responsive and faster. If you switch to a different tab while these are being loaded, that page will get priority.</li>
  <li><strong>Updating add-ons:</strong> If you use one of the many amazing Firefox add-ons, you are probably tired of waiting for them to upgrade when you start Firefox. This now happens in the background, and gets out of your way.</li>
</ul>

<h2 id="new-functionality">New functionality</h2>

<p>There’s a lot of new functionality in Firefox 4 too, here are some of our favorites:</p>

<ul>
  <li><strong>Sync:</strong> Getting the same experience across all your computers &amp; devices is increasingly important. It’s pretty common to have desktop computers, laptops and mobile phones, and you want them all to have access to your open tabs, history, passwords and bookmarks. Unlike other services, we encrypt <strong>all your data</strong>, <em>before</em> sending it over the network, making Firefox Sync the most secure option if you want to keep your devices in sync. Adding new devices is also incredibly simple. Remember, Firefox 4 is <a href="https://market.android.com/details?id=org.mozilla.firefox">available in the Android Market</a> for your phone, and if you’re on the iPhone, you can use the <a href="http://www.mozilla.com/mobile/home/">Firefox Home</a> companion app.
<img src="/media/app-tabs-firefox-4.png" alt="" /></li>
  <li><strong>App tabs:</strong> If you use web apps like Pandora, Gmail, Twitter, Facebook or any other site that you keep open all day, you’ll love our new app tabs. With a simple right click on any tab, you can pin it to the left side of tabs, which makes it always available, and takes up less space. It will also notify you with a discreet light bulb when there’s new content in the app tab.</li>
  <li><strong>Tab Groups:</strong> If you’re one of those people that have a lot of tabs open, you are probably working on several projects at the same time. A new feature in Firefox 4 called Tab Groups — also known as “Panorama” — lets you group these tabs into projects, and get the projects that you’re not working on right now out of your way. This makes it easier to focus on what you want to do next.
<img src="/media/restartless-install.png" alt="" /></li>
  <li><strong>Install add-ons without restarting:</strong> Tired of having to restart when you install a new add-on? Firefox 4 adds the capability for add-ons to avoid this restart, and as they are updated to make use of this, you shouldn’t have to restart your browser much anymore.</li>
  <li><strong>Add-ons manager:</strong> There’s an entirely new add-ons manager in Firefox 4, which gives more space to managing your add-ons, and makes it easier to find and install new ones.</li>
</ul>

<h2 id="streamlined">Streamlined</h2>

<p>Some of my personal favorite improvements in Firefox 4 are a collection of small tweaks and improvements — there are many, many — and they add up to a significant amount of saved time and reduced friction while using the browser:</p>

<ul>
  <li>Fewer dialogs, fewer questions — our goal was to balance the questions we ask you, so we don’t interrupt you unnecessarily — while still keeping you in control.</li>
  <li>It’s easier to dismiss notifications — those things that tell you about geolocation, password saving, etc. — you can click anywhere outside the notification to close it, and you can get it back if you closed it accidentally.</li>
  <li>If there is an open tab with the same name as a page you’re looking for, you can switch to it directly from the location bar results. (aka. “Switch to tab”)</li>
  <li>Modal dialogs can no longer block other tabs:<img src="/media/inline-js-dialog.png" alt="" /></li>
  <li>Bookmarks bar and add-ons bar are only shown if you are actually using them, and easy to turn on and off.</li>
  <li>Firefox will no longer automatically put you into offline mode unless you ask for it.</li>
</ul>

<p>…&amp; lots more. But I promised this overview would be quick, so I’ll end it here. There’s lots of goodness you should explore by downloading and testing it on your own!</p>

<p>We’ve already started on Firefox 5, 6 &amp; 7 designs under our new accelerated release schedule, and can’t wait to show you what’s next for Firefox.</p>

<p>Now, go <a href="http://firefox.com/RC">download Firefox 4 RC</a> already!</p>

<p>Comments? <a href="http://twitter.com/limi">Find me on Twitter</a>. Looking forward to hear what you think about Firefox 4!</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">
      <p>They managed to ship before we did, which is fair game — and a side effect of doing designs in the open! <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><summary type="html"><![CDATA[UX details worth checking out]]></summary></entry><entry><title type="html">Mythbusting: Why Firefox 4 won’t score 100 on Acid3</title><link href="http://limi.net/acid3" rel="alternate" type="text/html" title="Mythbusting: Why Firefox 4 won’t score 100 on Acid3" /><published>2011-01-25T00:00:00+00:00</published><updated>2011-01-25T00:00:00+00:00</updated><id>http://limi.net/acid3</id><content type="html" xml:base="http://limi.net/acid3"><![CDATA[<p><i>Update, September 16, 2011:</i> The <abbr title="Acid test">Acid3</abbr> test has been updated to drop the tests that weren’t relevant to modern browsers and standards, so any version of Firefox going back to — and including — Firefox 4 will show as scoring 100. Thanks to <a href="https://plus.google.com/107429617152575897589/posts/JdHnqpuUER4">the authors</a> for updating the test. Original article follows.</p>

<hr />

<p><a href="http://en.wikipedia.org/wiki/Acid3" title="Acid3 - Wikipedia, the free encyclopedia"><abbr title="Acid test">Acid3</abbr></a> was a test written by Ian Hickson in 2008 that tests a limited selection of web browser features, and assigns a score from 0 to 100, depending on which features are supported.</p>

<p>Every once in a while — especially around the time of an upcoming new release — people argue that Firefox isn’t standards compliant, since it doesn’t score 100 on this test, but has been scoring 97 for quite a while, and will probably never implement what’s required to reach a score of 100.</p>

<p>Here’s why, explained by Mozilla engineer Boris Zbarsky, from a <a href="http://developers.slashdot.org/comments.pl?sid=1713004&amp;cid=32847010">comment on Slashdot</a>, and reposted with permission — emphasis added by me:</p>

<blockquote>
  <p>Those remaining 3 points are <abbr title="Scalable Vector Graphics">SVG</abbr> Fonts.</p>

  <p>Opera and Webkit implemented (very brokenly, in at least Opera’s case) a small subset of <abbr title="Scalable Vector Graphics">SVG</abbr> 1.1 Fonts; basically just enough to pass <abbr title="Acid test">Acid3</abbr>.</p>

  <p>We don’t particularly want to do that small subset in Gecko, since it gives no benefits to authors or users over the existing downloadable font support (beyond the brownie points on <abbr title="Acid test">Acid3</abbr>).</p>

  <p>On the other hand, support for the full specification in a <abbr title="User Agent">UA</abbr> that also supports <abbr title="HyperText Markup Language">HTML</abbr> is… very difficult. <abbr title="Scalable Vector Graphics">SVG</abbr> fonts are just not designed with integration with <abbr title="HyperText Markup Language">HTML</abbr> in mind. Once you put an <code class="language-plaintext highlighter-rouge">&lt;iframe&gt;</code> in a glyph, all sorts of issues arise — both in terms of the spec being under-defined and in terms of the behavior being very difficult to implement, no matter what the spec said.</p>

  <p><em>At this point, the <abbr title="Scalable Vector Graphics">SVG</abbr> working group has decided that <abbr title="Scalable Vector Graphics">SVG</abbr> Fonts will no longer be a core part of <abbr title="Scalable Vector Graphics">SVG</abbr> but will be a separate specification, and that it might need some serious work if anyone is ever to implement it in full.</em></p>
</blockquote>

<p>Related, Robert O’Callahan has a post on why <a href="http://weblogs.mozillazine.org/roc/archives/2010/06/not_implementin.html">not implementing features is hard</a>, and why it’s sometimes even important. In other words, the <abbr title="Web Open Font Format">WOFF</abbr> font standard is more appropriate, works in more browsers, and is a better way to handle custom font support in browsers. Implementing just enough of the standard to pass a test is disingenuous, and has nothing to do with standards compliance. <abbr title="Acid test">Acid3</abbr> was useful at the time to give the general public a way to see where some of the browsers were falling down expressed as a simple numerical rating — but nearly three years later, with all the major browsers supporting these features, it’s not really relevant anymore.</p>

<hr />

<p>The next time someone posts a comment about how Firefox <em>still</em> doesn’t score 100 on <abbr title="Acid test">Acid3</abbr>, please link them to this article. I wrote this post since there isn’t a highly ranked piece on this if you search for “Firefox <abbr title="Acid test">Acid3</abbr>,” and there should be. Hopefully my site’s search engine ranking can be useful for something.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[…and why that’s a good thing]]></summary></entry><entry><title type="html">Paper Cuts in Firefox 4</title><link href="http://limi.net/papercuts" rel="alternate" type="text/html" title="Paper Cuts in Firefox 4" /><published>2010-06-21T00:00:00+00:00</published><updated>2010-06-21T00:00:00+00:00</updated><id>http://limi.net/papercuts</id><content type="html" xml:base="http://limi.net/papercuts"><![CDATA[<p>A while back, I gave a presentation here at Mozilla based on feedback from a question thread posted to the Reddit web site: “<a href="http://www.reddit.com/r/AskReddit/comments/boipt/i_work_on_the_firefox_user_experience_team_and/">I work on the Firefox User Experience team, and this is your chance to tell me about your pet peeves</a>.”</p>

<p>We got over 2 000 — yeah, that’s <em>two thousand</em> — replies, and spent some time analyzing and grouping the feedback into actionable bug reports and general focus areas, which was then presented to the Mozilla team and worldwide community in a talk here in Mountain View &amp; broadcast on <a href="http://air.mozilla.com/">Air Mozilla</a>.</p>

<p>Unfortunately, the video recording was broken that day, but you can <a href="http://www.scribd.com/doc/31643187">view the presentation slides in <abbr title="HyperText Markup Language 5">HTML5</abbr> format here</a>. Copious amounts of presenter notes were added after the presentation was given, so you should be able to follow it even if you can’t see the recording.</p>

<p>The result of this presentation was that a number of bugs were filed under a “Paper Cuts” umbrella — in other words, the small, annoying issues that you encounter every day in any software — and an effort was started as part of the Firefox 4 effort to eliminate as many of these as we can during the beta period. They are similar in nature to what was called “polish” bugs in the Firefox 3 release cycle, but intentionally narrowly scoped, and managed aggressively to ensure that we have a smaller list that can be worked on.</p>

<h2 id="whats-so-special-about-paper-cut-bugs">What’s so special about Paper Cut bugs?</h2>

<p>I’m glad you asked! The paper cut bugs are issues that are of particular importance to the User Experience team, and as such, we will give priority to help you fix these bugs. It means that we’ll go the extra mile to try and support anyone that helps us with fixing them — so please <a href="https://bugzilla.mozilla.org/showdependencytree.cgi?id=561125&amp;maxdepth=2">have a look at the list</a> and see if there’s anything you think you’re capable of fixing, and feel free to contact me directly or post questions in the bugs themselves if you need clarifications or help.</p>

<p>Some paper cut bugs are complicated and require some re-architecting — for instance, the modal dialog issues currently being handled by Justin Dolske &amp; others — but a lot of them are small, self-contained, and the perfect thing to work on while you’re waiting for review for other projects.</p>

<h2 id="our-overall-priorities">Our overall priorities</h2>

<p>Of the 7 focus areas identified in the presentation, we chose to focus on two areas in particular for Firefox 4:</p>

<ul>
  <li><a href="https://bugzilla.mozilla.org/showdependencytree.cgi?id=565511&amp;maxdepth=2">Startup experience</a></li>
  <li><a href="https://bugzilla.mozilla.org/showdependencytree.cgi?id=565510&amp;maxdepth=2">Focus issues</a></li>
</ul>

<p>This doesn’t mean that the other bugs are any less important — but we obviously have to pick our battles to get stuff done. Don’t let this discourage you from handling bugs in the other focus areas, though!</p>

<h2 id="our-current-paper-cut-heroes">Our current Paper Cut Heroes</h2>

<p>Several of the bugs have seen significant activity over the past month, and I’ll try to call out progress and general awesomeness over the coming weeks. Currently, excellent work is being done on:</p>

<ul>
  <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=59314">Eliminate modal dialogs</a> — Justin Dolske &amp; others have been working on moving all dialogs to be tab-specific instead of window-specific. This means that <abbr title="HyperText Transfer Protocol">HTTP</abbr> authentication dialogs and JavaScript pop-ups no longer force you to answer them before you can switch to a different tab.</li>
  <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=489138">Application updates in the background</a> — Rob Strong is currently working on a service that downloads &amp; applies Firefox application updates transparently in the background, which means you don’t have to wait for the “Firefox is applying your updates” dialog when starting the browser anymore.</li>
  <li>Add-on updates in the background — Dave Townsend, Jennifer Boriss and the rest of the team behind the new add-ons manager have made sure that updates to add-ons are less annoying, and don’t happen on startup anymore. You can still turn on explicit notification of updates if that’s how you roll, but it’s now automatic and transparent for most people.</li>
  <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=565515">Improved tab behaviors</a> — Our intern extraordinaire Frank Yan has been submitting patches to eliminate spurious trackpad input (“fake bounce”) and several other improvements to tab handling.</li>
</ul>

<p>…and lots of other issues, more updates to come in the next few weeks.</p>

<h2 id="want-to-help-out">Want to help out?</h2>

<p>This week’s selection of paper cuts that we are currently looking for help in resolving:</p>

<ul>
  <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=78414">Bug #78414</a> — Application shortcut keys (keyboard commands such as F11, Ctrl+T, Ctrl+R) fail to operate when plug-in (Flash, Acrobat, QuickTime) has focus. This is mostly working on <abbr title="Mac OS Ten">OS X</abbr>, but Windows still has this problem. In general, any qualified keyboard shortcut shouldn’t be sent to the plugin, but go to the browser.</li>
  <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=566489">Bug #566489</a> — Enable inline autocomplete again for <abbr title="Uniform Resource Locators">URLs</abbr>, but make it smarter. With the introduction of the Awesome Bar, we stopped “Speaking <abbr title="Uniform Resource Locator">URL</abbr>,” which affects our perceived performance, since it takes longer to enter a <abbr title="Uniform Resource Locator">URL</abbr> than it did before.</li>
  <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=492544">Bug #492544</a> — Add “Paste &amp; Go” + “Paste &amp; Search” to context menu on location field + search field, respectively.</li>
  <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=565104">Bug #565104</a> — Stop sites from opening popup or popunder windows, even in response to clicks. There’s a new type of “pop-under” that seems to be done by triggering a window open and then quickly focusing back on the current window. There’s no conceivable use for this in a web page/app, so this order of events should be detected, and disallowed.</li>
  <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=565760">Bug #565760</a> — “Forget this password/login” on right click. It should be possible to remove a saved password from a form that is currently storing it.</li>
</ul>

<p>If none of these issues tickled your fancy, take a look at the <a href="https://bugzilla.mozilla.org/showdependencytree.cgi?id=561125&amp;maxdepth=2">full list of paper cut bugs</a> (tree view) — and pick something to fix!</p>

<hr />

<h2 id="overview-of-paper-cuts">Overview of paper cuts</h2>

<p>Here’s a quick overview of the focus areas we are trying to fix, along with links to the bugs that collect these in focus areas:</p>

<h3 id="focus-issues">Focus issues</h3>

<p><a href="https://bugzilla.mozilla.org/showdependencytree.cgi?id=565510&amp;maxdepth=2">Tracked in bug 565510</a>, contains items such as:</p>

<ul>
  <li>Web sites should not be able to steal focus when in chrome</li>
  <li>Flash, <abbr title="Portable Document Format">PDF</abbr> and other plugins steal focus shortcuts, can’t open new tab using keyboard when inside a YouTube video or a <abbr title="Portable Document Format">PDF</abbr>, back button stops working</li>
  <li>Avoid app-modal dialogs, make them tab-modal</li>
</ul>

<h3 id="startup-experience">Startup Experience*</h3>

<p>*Not what you think, focus on perceived performance instead of milliseconds for startup time.</p>

<p><a href="https://bugzilla.mozilla.org/showdependencytree.cgi?id=565511&amp;maxdepth=2">Tracked in bug 565511</a>, contains items such as:</p>

<ul>
  <li>Rebuild profile on upgrade/reinstall</li>
  <li>“Firefox is open but not responding” alert</li>
  <li>Don’t ask about updates all the time</li>
  <li>Ideally: upgrade in the background — if not, upgrade at shutdown, not startup!</li>
  <li>Shutdown takes a long time for some users (30-40 seconds)</li>
  <li>Include BarTab-like behavior by default</li>
  <li>Put “Restart” and “Restart &amp; Save Session” in “Exit” combomenu in the new design?</li>
</ul>

<h3 id="being-in-control">Being in Control</h3>

<p><a href="https://bugzilla.mozilla.org/showdependencytree.cgi?id=565512&amp;maxdepth=2">Tracked in bug 565512</a>, contains items such as:</p>

<ul>
  <li>Control over audio in tabs!</li>
  <li>Web sites shouldn’t be allowed to resize windows they didn’t create (i.e. main window)</li>
  <li>Pop-under ads are back, worse than ever</li>
  <li>Put the user in control of generated windows</li>
  <li>Opening new windows should be user-controllable</li>
  <li><abbr title="Secure Sockets Layer">SSL</abbr>: Add an “I know what I’m doing” option to self-signed certs</li>
  <li>Include option to delete Flash cookies</li>
  <li>Fix Master Password</li>
  <li>Don’t let a web app be able to lock up a tab</li>
  <li>Browse-by-name is inconsistent and confusing</li>
  <li>Make a hotkey to list shortcuts + show them in the right-click menus</li>
  <li>Enable autocomplete again, but make it smarter</li>
  <li>Better preview, especially for <abbr title="Portable Document Format">PDF</abbr> &amp; types we already have viewers for</li>
</ul>

<h3 id="add-ons--plug-ins">Add-ons &amp; Plug-ins</h3>

<p><a href="https://bugzilla.mozilla.org/showdependencytree.cgi?id=565513&amp;maxdepth=2">Tracked in bug 565513</a>, contains items such as:</p>

<ul>
  <li>Don’t wait 3 seconds when installing add-ons from <abbr title="addons.mozilla.org">AMO</abbr> or the inline add-ons browser</li>
  <li>When an add-on is outdated / no longer maintained or working, suggest alternatives</li>
  <li>Click-to-activate for plugins — default for rare-but-perf-killing things like Java</li>
  <li>Don’t let add-ons open new pages</li>
  <li>Don’t let apps install add-ons without consent</li>
  <li>Fix the crufty status bar, extensions add clutter</li>
</ul>

<h3 id="tab-behaviors">Tab Behaviors</h3>

<p><a href="https://bugzilla.mozilla.org/showdependencytree.cgi?id=565515&amp;maxdepth=2">Tracked in bug 565515</a>, contains items such as:</p>

<ul>
  <li>Opening tabs at the end when new &amp; next to when context-triggered is confusing</li>
  <li>New tabs should keep history from the tab that spawned them</li>
  <li>Tab behavior is very personal, expose more prefs here</li>
  <li>Make it easy to close lots of tabs</li>
  <li>Fix tab stack ordering</li>
  <li>Fix Ctrl-tab to use stacks, so it can be used to compare between 2-3 tabs</li>
  <li>Tab reloads when it is detached; this is annoying and unexpected/dangerous</li>
  <li>Don’t separate windows and tabs in the undo stack</li>
  <li>Let me fit more tabs in the bar, make it easier to find the ones I can’t see</li>
  <li>Blank tabs when clicking should never appear</li>
  <li>Can we fix the “Cmd-click window void”?</li>
  <li>Let me have Private and normal windows at the same time</li>
  <li>Ask when hitting ⌘Q</li>
  <li>Better load indicators — separate activity from progress</li>
  <li>Detect whether your webmail client is already open, don’t open new window</li>
  <li>Eliminate fake “bounce” when scrolling tab bar, you can’t see when you’re at the end</li>
</ul>

<h3 id="ui-cruft--consistency"><abbr title="User Interface">UI</abbr> Cruft &amp; Consistency</h3>

<p><a href="https://bugzilla.mozilla.org/showdependencytree.cgi?id=565517&amp;maxdepth=2">Tracked in bug 565517</a>, contains items such as:</p>

<ul>
  <li>Make search field tab-specific &amp; clear when navigating away from results page</li>
  <li>Find in page should to be page-specific, and close when you click outside it, move to top</li>
  <li>Change “Save” to “Download”</li>
  <li>Work offline must die</li>
  <li>Fix downloads!</li>
  <li>Fix mess + ordering in contextual menus; common options first</li>
  <li>“Search Google for…” context menu entry should be in textareas &amp; inputs too</li>
  <li>Fix selection behaviors</li>
  <li>“Paste &amp; Go”; “Paste &amp; Search”</li>
  <li>A useful full-screen browsing experience</li>
  <li>Make Personas work better with the default theme, make them easy to remove</li>
  <li>Favicons on <abbr title="Mac OS Ten">OS X</abbr> bookmarks toolbar + multiple rows supported</li>
</ul>

<h3 id="os-integration">OS Integration</h3>

<p><a href="https://bugzilla.mozilla.org/showdependencytree.cgi?id=565518&amp;maxdepth=2">Tracked in bug 565518</a>, contains items such as:</p>

<ul>
  <li>Multiple screens behavior on Windows is wonky, can we fix?</li>
  <li>Additional Win7 features: Jump lists, windows in Aero Peek, download progress</li>
  <li>Enable <abbr title="NT LAN Manager">NTLM</abbr> authentication for intranets</li>
  <li>MSI installer with group policies</li>
  <li>Hard to assign default apps on Linux</li>
  <li>Use of Keychain on <abbr title="Mac OS Ten">OS X</abbr></li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[Update on paper cut bugs for Firefox 4]]></summary></entry><entry><title type="html">Improving download behaviors in web browsers</title><link href="http://limi.net/downloads" rel="alternate" type="text/html" title="Improving download behaviors in web browsers" /><published>2010-03-25T00:00:00+00:00</published><updated>2010-03-25T00:00:00+00:00</updated><id>http://limi.net/downloads</id><content type="html" xml:base="http://limi.net/downloads"><![CDATA[<p>The confusing &amp; inconsistent state of downloading files using a web browser has long been a pet peeve of mine. The current situation is pretty much a mess in every web browser. Issues with file systems in general notwithstanding, even doing simple downloads to a centrally defined folder can be confusing, even frustrating.</p>

<p><img src="/media/sketch-downloads-wide.png" alt="" title="Sketch by Stephen Horlander" /></p>

<p>The aim of this article is to give an introduction to how the most common browsers behave when it comes to downloading files, what opportunities exist, and close with a set of recommendations for how to fix this in Firefox and other browsers. It is my hope that putting these ideas out there will spur some innovation in this area both in Firefox and competing browsers.</p>

<p>We’ll try to cover the most obvious issues in the most common browsers, so we can all get better at this. This article will cover:</p>

<ul>
  <li>Firefox 3.6,</li>
  <li>Internet Explorer 8,</li>
  <li>Chrome 5 beta,</li>
  <li>&amp; Opera 10.50 beta.</li>
</ul>

<h2 id="beverage-warning">Beverage warning</h2>

<p>Every once in a while, I publish articles that may require some time commitment, because I think the subject matter warrants an in-depth treatment, and because that’s how I roll. As per <a href="http://en.wikiquote.org/wiki/Blaise_Pascal">Blaise Pascal</a>, <em>“Je n’ai fait celle-ci plus longue que parce que je n’ai pas eu le loisir de la faire plus courte”</em> — I would have written a shorter letter, but I did not have the time.</p>

<p>So find a beverage of a suitable size and persuasion — this stuff can certainly drive <abbr title="User Interface">UI</abbr> designers to go for the hard liquor — and let’s look at the current landscape for browser download handling, and how it can be improved.</p>

<h2 id="existing-approaches">Existing approaches</h2>

<p>It’s useful to have a basic understanding of how downloads are handled in the various browsers:</p>

<h3 id="firefox">Firefox</h3>

<p>Let’s start with Firefox:</p>

<p><img src="/media/downloads-populated.png" alt="" title="Firefox Download Manager" /></p>

<p>In addition to the download window itself, there’s also a download progress indicator in the status bar, that — when clicked — will bring up the download manager window: <img src="/media/download-indicator.png" alt="" title="Download indicator" /></p>

<p>There’s a lot to like about the current download manager in Firefox:</p>

<ul>
  <li>It tells you the size of the file, the domain you got it from, and <em>when</em> you downloaded it.</li>
  <li>It has a built-in filter labeled “Search…” — which is slightly misleading — but it works well for locating files that you have already downloaded.</li>
  <li>The status bar download indicator tells you how much time is left, and provides an easy (although not necessarily very discoverable) way to bring up the download manager window.</li>
</ul>

<p>…but there are also elements that are problematic:</p>

<ul>
  <li>It’s a dedicated window, which easily gets lost if you’re not careful — it will be hidden under the browser window or other windows you activate. This is especially noticable in OSes that are more app-centric than window-centric — prominent examples are Mac <abbr title="Operating System Ten">OS X</abbr>, and now Windows Vista/7.</li>
  <li>It has a lot of “administrative debris” — my pet peeves are:</li>
  <li>The window doesn’t automatically resize to fit the downloads shown,</li>
  <li>Certain personality types (present party included) will obsessively click the “Clear List” button to clean up the list once they are done. Of course, this doesn’t actually remove the history entries of these sites, but more about that later.</li>
  <li>There are still some valid cases here, some people never clear their downloads, and use the search filter to find files they downloaded a long time ago, for instance. This is a use case we should still support.</li>
  <li>When the downloads are done, <em>the download indicator in the status bar disappears</em>. Yes, read that again. It disappears. This is crazy. Just when you need it to activate the downloads window — gone.</li>
</ul>

<h3 id="internet-explorer">Internet Explorer</h3>

<p>Moving on to everyone’s favorite browser, the approach is pretty simple, no dedicated download manager, everything is handled by dialog windows:</p>

<p><img src="/media/ie-security-warning-before.png" alt="" title="Internet Explorer’s download dialog" /></p>

<h4 id="the-good">The good:</h4>

<ul>
  <li>There’s a you-can’t-miss-it dialog when saving, it shows you a dialog box every time you do a download. This is crude, but effective — it works well, especially with novice users.</li>
  <li>Asking where to put the file every time minimizes confusion about where it went <em>to some extent</em> — of course, after a while, this turns into a classic “Whatever” dialog, and the users lose track of it anyway.</li>
  <li>The progress bar shown in the application icon while a download is in progress is nifty: <img src="/media/ie-progress-indicator.png" alt="" title="Internet Explorer download progress indicator" /> — this shows that the download is 50% complete. I believe we are in the process of landing something similar on Windows Vista/7 in the nightly Windows builds of Firefox too.</li>
</ul>

<h4 id="the-bad">The bad:</h4>

<ul>
  <li>Every download opens a separate window, which becomes unmaintainable when you do a lot of downloads, and also leads to a lot of stray windows unless you manually clean them up.</li>
  <li>There’s no way to search in downloads.</li>
  <li>Seeing a dialog box for every single download gets annoying after a while.</li>
  <li>The download window can still get lost, this is magnified with the Vista/7 approach where the windows live inside the icon of the application. Especially frustrating: it will throw up a dialog box that you may miss if you click somewhere else at that exact moment, which results in the download never starting if it was an exe, since it blocks the download until the question has been answered.</li>
  <li>It also seems to ask multiple times whether you really want to download/run the file (once when initiating download, once when running it? There’s some slightly inconsistent behavior here that we haven’t quite been able to figure out the logic behind)</li>
</ul>

<h3 id="safari">Safari</h3>

<p>Nothing revolutionary, overwhelmingly similar to the Firefox approach, with a few improvements and a few missing features. It has the same dedicated “download manager” window approach:</p>

<p><img src="/media/safari-downloads.png" alt="" title="Safari downloads" /></p>

<h4 id="the-good-1">The good:</h4>

<ul>
  <li>Minimalist presentation.</li>
  <li>Easy way to reveal the location on the file system where the file ended up, and it also selects the file for you.</li>
  <li>The same upsides as the Firefox download manager.</li>
</ul>

<h4 id="the-bad-1">The bad:</h4>

<ul>
  <li>The clear button introduces administrative debris (similar to the problem with Firefox).</li>
  <li>No way to search in downloads.</li>
  <li>Doesn’t indicate where the file came from or when you downloaded it.</li>
  <li>Separate window that will disappear behind the main browser window if you use it while waiting for the download — and we have seen people waiting for the download to complete before continuing browsing because they “don’t know how to find the file again” once the window disappears.</li>
  <li>The overhead that comes with it being a separate window (scrolling, minimize/maximize, no auto-resize, etc), also shared with Firefox.</li>
  <li>No indicator of download progress if you can’t see the download window</li>
</ul>

<h3 id="chrome">Chrome</h3>

<p>Chrome has actually done a fair amount of work on attempting to improve download handling, and is — in my opinion — one of the better experiences out there right now when it comes to handling files with a web browser. Of course, it has its share of problems too. The fundamental difference is that it puts downloads in a bar along the bottom of the browser window:</p>

<p><img src="/media/chrome-massive-arrow.png" alt="" title="Chrome’s massive arrow" /></p>

<p>To make sure you don’t miss where the download goes, Chrome seems to follow the age-old philosopy of “if you want people to not miss it, make it big and red.” When you initiate a new download, it displays a falling arrow for approximately a second, to bring your attention to the download bar at the bottom. This does give the impression of “usability testing gone horribly wrong”, where — no matter what the <abbr title="User Interface">UI</abbr> designer does — he can’t get people to notice where the downloaded file went, since there’s no dialog box to obstruct the view and call attention to itself. Hence, the only solution is to add an arrow that is so big that you can’t possibly miss it.</p>

<p>To Chrome’s credit, they have iterated quickly on the download <abbr title="User Interface">UI</abbr> over the past few versions. Earlier versions had the download bar pinned to the tab it was initiated from — which is pretty much exactly the <em>opposite</em> of what you want, since you’re likely to browse other sites until the download is done. Thankfully, this is now fixed, and the download bar is now global.</p>

<p>A curious side effect of the global download bar <abbr title="User Interface">UI</abbr> is that it goes contrary to Chrome’s philosophy of taking up as little space for the browser <abbr title="User Interface">UI</abbr> as possible. The download bar steals the equivalent of two status bars of pixels in every tab you’re using unless you dismiss it by closing it:</p>

<p><img src="/media/chrome-multifile-overflow.png" alt="" title="Chrome’s multifile and overflow" /></p>

<p>Another problem, illustrated above, is that it doesn’t really have a solution for overflow. Similar to how Chrome doesn’t yet have a strategy to deal with the case when you have too many tabs (they just get smaller and smaller until they are unusable), the screenshot above actually contains <em>three</em> downloads — the only problem is that download #3 is (presumably) wrapped to an invisible line below the two visible downloads.</p>

<p>Clicking “Show all downloads…” will bring up a download tab, where you can see all the downloads you have made:</p>

<p><img src="/media/chrome-downloads.png" alt="" title="Chrome’s download window" /></p>

<p>This was an approach originally introduced by Opera, which we’ll talk about next:</p>

<h3 id="opera">Opera</h3>

<p>Does quite a few things right (as usual), but have some weird defaults that mar the overall experience. The idea of downloads-window-as-a-tab was first done in Opera, but can still be improved.</p>

<p><img src="/media/opera-download-window.png" alt="" title="Opera Downloads window" /></p>

<p>Opera shares most of the same issues as most of the other browsers (asks every time it downloads, opening with non-sensical applications like DiskImageMounter, etc), but overall it is standard fare. One thing to note is the amount of Power User functionality included in the main <abbr title="User Interface">UI</abbr>, with things like the “Quick Download” field that will download whatever <abbr title="Uniform Resource Locator">URL</abbr> you paste into it directly, its support for downloading all the resources linked from a page, etc. The quick download field is also curiously positioned in exactly the same location as you would expect to find a search/filter bar, and people do try to use it as such — with predictably bad results.</p>

<h2 id="suggested-improvements-to-the-download-handling-in-firefox">Suggested improvements to the download handling in Firefox</h2>

<p>Informed by what other browsers do for downloads, it’s clear that Firefox already does a good job in comparison — but it can also be made a lot better without an ovwerwhelming amount of work. The infrastructure is solid, we have the necessary functionality for most of this already — but the user experience of how it all fits together can be significantly improved.</p>

<p>From the Firefox point of view, we have a list of things we can do to make the user experience of downloading more streamlined and easier on the users. This advice pretty much applies uniformly across all browsers, and as usual — feel free to steal any of these ideas for other browsers. It’s how we make web browsers better.</p>

<h3 id="replacing-the-download-manager-window">Replacing the download manager window</h3>

<p>The current download manager tries to do a lot in too small a space, so we propose to split the downloads into the following two components:</p>

<p><img src="/media/sketch-downloads-round.png" alt="" title="Sketch by Stephen Horlander" /></p>

<ol>
  <li><em>An easily accessible panel</em> that shows you current state of downloads, your recent downloads, and gives you a good indicator of how far along your download is. Its goal is to surface status, <em>not</em> to perform download management outside of the basics of showing progress &amp; number of files, as well as operations to stop &amp; resume the download. A sketch of our current thinking is shown to the right; it will also light up when starting a download, and possibly add some subtle glow effects to indicate that downloads are in progress, and a more significant event once a download completes.</li>
  <li><em>A more powerful full-window <abbr title="User Interface">UI</abbr></em> for advanced operations like searching, clearing entries, sorting, and everything else related to Download <em>History</em>. This is also where operations like <em>rename</em> or <em>delete</em> are present. This window should ideally be shown as a tab, and since we have tear-off tabs, you can keep the old-style dedicated download window too, if you prefer that.</li>
</ol>

<p>You probably caught on to this idea already, but the main point of #2 is that <em>there is no need for a dedicated download manager</em>. The download manager is a listing of history, and should simply be a filter inside the history window that says “show me only files”. Download history is intimately tied to browsing history, and sometimes the additional context is useful when looking for a download you did as part of a browsing task. Being able to show history, and then narrow down to only show files is a natural way of approaching download history.</p>

<p>Other things that would improve the experience:</p>

<ul>
  <li>
    <p>At the end of the download progress bar, a “what happens next?” indicator could be shown — ie. “is saved in the download folder,” “is opened with iTunes,” etc.</p>
  </li>
  <li>The download history should support simple file system operations (copy/move works, rename), and show where the file is located.</li>
  <li>
    <p>If a file is deleted, ghost it in the download log to indicate that the file has gone missing, and make it possible to re-download.</p>
  </li>
  <li>
    <p>Keep track of the new location if file is moved.</p>
  </li>
  <li>Warn when a download is in progress and you attempt to quit the browser.</li>
  <li>Drag and drop should work from all representations (download panel &amp; download history).</li>
</ul>

<h3 id="file--application-handling">File &amp; application handling</h3>

<p>On the infrastructure side, there are a lot of smaller problems that conspire to give the user a less-than-pleasant experience with regards to how files are handled.</p>

<p>Some of the issues that should be fixed:</p>

<ul>
  <li><strong>Replace “Save” with “Download” in the menus?</strong> People do get confused by the difference between Save and Download. Right now, you “Save” a page in Google Docs when you edit, but you can also “Save” the page itself to disk on your computer. How are you supposed to know which one does what? Additionally, the word “download” has entered the mainstream vocabulary; for better or for worse. In the Firefox menu, we currently have a “Save As,” but no “Download” — should we stop using the word “Save” in our <abbr title="User Interface">UI</abbr> to make it more consistent? It makes sense, but probably requires some testing to find out whether people are comfortable with it. <a href="https://web.archive.org/web/20111230042953/http://www.mozillalabs.com/testpilot/2010/03/17/popular-menu-buttons/">According to the Test Pilot studies</a>, people use this menu entry quite a bit.</li>
  <li><strong>Don’t ask every time, just do the default action for the common file types.</strong> If you ask questions all the time, people stop paying attention. This is the classic <abbr title="User Interface">UI</abbr> problem that Windows traditionally had when compared to Mac <abbr title="Operating System Ten">OS X</abbr>. If there’s a very logical, straightforward outcome of an action — don’t get in the way of the user. At Mozilla, we jokingly call the “OK” button the “Whatever” button, and there’s even <a href="https://web.archive.org/web/20160316212356/https://blog.mozilla.org/dolske/2007/10/21/whatever/">an extension</a> that replaces all “OK/Agree/Yes” buttons with “Whatever” buttons to drive the point home.</li>
  <li><strong>Make the default action simple, make the advanced action powerful.</strong> “Open With” (Save As?) should be how you get to adjust location/options. When you choose to special-case something (ie. explicitly choose to download using the right-click menu), we should give you all of the”explicit” options — you might want to rename the file and choose a location when you save it. If you just click the file, we give you the file, no questions asked.</li>
  <li><strong>The browser should be better at remembering locations.</strong> It should remember where on the file system you got the last file you uploaded to the current site from, and the other way around — if you ask to download a file from a site, and you’ve done it before, we should remember which folder you saved it to. This has partially landed in the Firefox nightly builds, and when I go back to using a version of Firefox (or other browsers), it makes me a very sad panda when it’s missing. Essential.</li>
  <li><strong>Support Content-MD5 for downloads.</strong> File corruption when downloading is becoming increasingly common, and is something we should protect you against. If the server supports it, we should verify the checksum of the file once it has been downloaded, and warn you if the file doesn’t seem like it was transfered intact. There’s already <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=232030">a somewhat related bug for this</a> — but hopefully this can be unblocked by only applying it to downloaded files. We also probably need a new header these days for arbitrary hashes that are not MD5, e.g. Content-Hash: sha256/jh42k5jgh345kj234</li>
  <li><strong>Detect duplicates.</strong> We should tell you that you already have a file if we know that you do — and MD5/SHA-1 can really supercharge this. Wouldn’t it be cool if Firefox said “You already downloaded this file, it’s over here, do you really want us to download it again?”</li>
  <li><strong>Improve the Applications preference panel.</strong> Firefox already gives you more control than any other browser here, but we should do a better job at pulling the most common applications to the top of the list. Things like how you handle email, web feeds and where you save your downloaded files should be at the top of the list. We should also indicate which entries you have changed, so these are at the top of the list too — and leave the default settings in a state where it’s obvious that you haven’t changed them.
<img src="/media/open-with-null.png" alt="" title="Not Firefox’ proudest moment." /></li>
  <li><strong>Clean up file type mappings.</strong> We should let the <abbr title="Operating System">OS</abbr> handle the <abbr title="Multipurpose Internet Mail Extensions">MIME</abbr> types, or clone what it currently does (while blacklisting certain things like EXEs). Some examples where this is currently wrong on my <abbr title="Operating System Ten">OS X</abbr> setup:</li>
  <li>Zip files show as “Stuffit Expander,” even though my system has never had (and never will have!) Stuffit Expander installed</li>
  <li><abbr title="MPEG 1 Layer 3">MP3</abbr> files say they are going to open with “QuickTime Player,” but actually end up in iTunes instead</li>
  <li>There’s a general mismatch where we seem to assume that if a file is of the “QuickTime Player” type (doh), it will open in that application.</li>
  <li>See also screenshot above. How this is even possible is beyond me. But it should be fixed.</li>
</ul>

<h3 id="in-content-display-of-content-we-know-how-to-handle">In-content display of content we know how to handle</h3>

<p>Firefox has always been about giving control to the user, which is why a dialog like this seems a little out of place:</p>

<p><img src="/media/never-force-downloads.png" alt="" title="Never force downloads" /></p>

<p>Why can’t I open this file in the browser? Firefox knows how to render a <abbr title="Portable Network Graphics">PNG</abbr> file, why should I have to open the Preview application (oh, and <abbr title="What the h*ck">WTF</abbr> is a “Preview Document”) just to look at the file?</p>

<p>In this case, the web site author or server software set the <code class="language-plaintext highlighter-rouge">content-disposition: attachment</code> header, which means that they insist on the image being downloaded. We should of course recognize and respect this, but we can do better, and present a <abbr title="User Interface">UI</abbr> that gives you an idea of what you’re about to download, so you can make that decision yourself, and not have it made for you:</p>

<p><img src="/media/inline-content.png" alt="" title="Inline content" /></p>

<p>The concept is to reframe the download <abbr title="User Interface">UI</abbr> to be a bit more like a print preview — you see the content, and get a bar on top with options, a “download preview,” if you will. Here is how it could work:</p>

<ul>
  <li>If the browser was instructed to pop up a download dialog box, a bar is displayed at the top of the page with commands to save the file, or to send the file to an external application. This also solves the current issue where download dialogs are modal, and will steal focus if you’re in a different tab.</li>
  <li>Similar to the download dialog box, users have the option of setting the default behavior (preview, download, send to external app), but we default to preview.</li>
  <li>We try to increase the set of files that we can preview in the browser to common types like <abbr title="Portable Document Format">PDF</abbr>, and perhaps even other document types — this might have security implications, so needs to be done with care.</li>
  <li>Open doc/<abbr title="Portable Document Format">PDF</abbr> inline, but give the option to save it to disk — people generally just want to read stuff, not put junk in their download folder.</li>
</ul>

<p>Additionally, when a plugin is being used to render content in the content area — and the browser did not instruct Firefox to download the file — we should probably display the same bar with command to download or open in an external application. In a lot of cases the user might be viewing a QuickTime movie or listening to an <abbr title="MPEG 1 Layer 3">MP3</abbr> and they think “how can I download this?” The actual answer is to go to File → Save As, but because that is so rarely done, people usually do not successfully come to that conclusion.</p>

<h3 id="avoiding-the-minefields-of-the-web">Avoiding the “minefields of the web”</h3>

<p>In the event that a download can’t be previewed (the user can’t “stay on the Web”), or the user asked Firefox to remember another behavior for the type of content, like automatic download or automatically sending to another app, we should change the cursor icon to indicate the action when they hover on the link, so that they always know what is going to happen ahead of time.</p>

<p><img src="/media/cursor-indicators.png" alt="" title="Cursor indicating file type" /></p>

<p>We’d like to introduce indicators in the cursor/pointer to give you a bit of warning before you click things that aren’t actually web pages. Showing a small envelope icon for <code class="language-plaintext highlighter-rouge">mailto:</code>, a small document icon for PDFs (on hover) could be a simple way to indicating that clicking the link will have a somewhat unexpected result.</p>

<ul>
  <li>
    <p>Cursor should show the file type — or protocol in the case of <code class="language-plaintext highlighter-rouge">mailto:</code> — to counter “the land mines of the internet.” The most common are <abbr title="Portable Document Format">PDF</abbr> files, <code class="language-plaintext highlighter-rouge">mailto:</code> links, iTunes store links.</p>
  </li>
  <li>
    <p>Tag cursor icon with file type icon if link is a binary file.</p>
  </li>
</ul>

<p>Starting an application like a <abbr title="Portable Document Format">PDF</abbr> reader or an email client — or just downloading any file — can take a lot of time, and is often an unexpected effect of clicking a link on a page. We should able to give people a better expectation of what will happen before they do this.</p>

<h3 id="unifying-security-questions">Unifying security questions</h3>

<p>On modern versions of Windows and Mac <abbr title="Operating System Ten">OS X</abbr>, the “this is a dangerous file from the internet” dialog has been handed off to the <abbr title="Operating System">OS</abbr> itself:</p>

<p><img src="/media/ie-explorer-security-warning.png" alt="" title="Windows Explorer warning for executable" /></p>

<p><img src="/media/safari-file-warning.png" alt="" title="Mac Finder warning for executables" /></p>

<p>This means that when downloading anything using Firefox, you’ll get <em>two</em> questions about whether you want to open the file on these operating systems. This is unnecessary, and we should avoid asking on the platforms that already have this enabled. It’s not a real security measure in any case — and we should definitely still ask for so-called “drive-by downloads.”</p>

<h3 id="drive-by-downloads">Drive-by downloads</h3>

<p>In general, we want to do the right thing when you download files — but there are cases where we should <em>always</em> show the download dialog, the cases known as “drive-by downloads.” In short, these downloads are triggered by events that were not caused by you clicking a link. A common variant is the page that redirects to a downloadable file, so you didn’t actually click the link to get the file.</p>

<p>There are likely to be edge cases that we don’t know about, but we should be able to find a compromise between usability and security — and err on the side of security when it isn’t possible to detect what the obvious thing to do is.</p>

<h2 id="next-steps--feedback">Next steps &amp; feedback</h2>

<p>Of course, we want to hear your ideas. Any obvious things that could be improved, any interesting approaches in other browsers or applications? The preferred approach is to put something on your blog (as long as you mention my name on the blog and link to this post, I’ll discover it), or you can give feedback in <a href="http://groups.google.com/group/mozilla.dev.usability/">Mozilla’s dev.usability forum</a>.</p>

<p>Looking forward to hear your thoughts on this, and we hope this document can help make downloading in <em>all</em> web browsers better.</p>

<p><abbr title="Post Scriptum">PS</abbr>: I will update this post with links to bug numbers in the Bugzilla issue tracker once we have decided how the individual issues should be filed, and with a meta-bug that you can subscribe to if you’re interested in them all. I will post a short notice on this site when it’s ready.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Saving the world, one file at a time]]></summary></entry><entry><title type="html">Firefox Mac installation experience — revisited</title><link href="http://limi.net/mac-installer-revisited" rel="alternate" type="text/html" title="Firefox Mac installation experience — revisited" /><published>2009-11-23T00:00:00+00:00</published><updated>2009-11-23T00:00:00+00:00</updated><id>http://limi.net/mac-installer-revisited</id><content type="html" xml:base="http://limi.net/mac-installer-revisited"><![CDATA[<p>Recently, I posted an article on how to <a href="/mac-installer">improve the Firefox installer experience</a> on the <abbr title="Mac OS Ten">OS X</abbr> platform, and how we were looking at making the user experience better for first-time Mac users and people coming from other platforms.</p>

<p>After posting the first article, we continued investigating how to make the installation experience better, and a developer urged us to check out how <a href="http://delicious-monster.com/">Delicious Library</a> did it — by giving people the option to move the application to the right folder when it was first launched.</p>

<p>A few days later, the article got picked up by a number of Mac blogs and news sites — among the most well-known: <a href="http://daringfireball.net/2009/09/how_should_mac_apps_be_distributed">Daring Fireball</a>, <a href="http://digg.com/apple/The_confusing_art_of_installing_apps">Digg</a>, <a href="http://www.tuaw.com/2009/09/21/the-confusing-art-of-installing-apps/">TUAW</a>, <a href="http://www.osnews.com/story/22195/Improving_the_Mac_OS_X_Application_Installation_Process">OSNews</a>, as well as the French <a href="http://www.macgeneration.com/news/voir/136495/firefox-nouvel-installeur-et-abandon-de-tiger">MacGeneration</a>.</p>

<p>Soon, the hate mail started trickling in. “Nothing is wrong with the Mac install experience.” “People that can’t teach themselves how disk images work shouldn’t be allowed to use a Mac!” et cetera. I wish I was making this up, but these <em>are</em> from real emails. Fun stuff.</p>

<p>But there was also a surprisingly large, second group of people: software developers and support people. To quote from one of the emails:</p>

<blockquote>
  <p>“As a former Mac Genius I have literally seen hundreds (thousands?) of instances of the issue you describe. I have heard the confusion regarding two Firefox icons, and ‘why does it always take so long?’ [when starting an application]”</p>
</blockquote>

<p>They all offered up different ways to get around the issues with disk image-based installs, but there was one common thread in all their responses:</p>

<p><em>The disk image-based process for installing applications in <abbr title="Mac OS Ten">OS X</abbr> is broken.</em></p>

<p>We mentioned the Delicious Library install behavior earlier — Daring Fireball linked to <a href="http://www.potionfactory.com/node/251">great write-up</a> from the developer of the application <a href="http://www.potionfactory.com/thehitlist/">The Hit List</a> — where developer Andy Kim describes this move-on-launch behavior in detail. Even cooler, he released <a href="http://github.com/potionfactory/LetsMove/">the code to do this</a> as open source.</p>

<p>In short, it detects whether the application gets launched from a disk image or the downloads folder, and offers to move the application to an appropriate location:</p>

<p><img src="/media/applications-move.png" alt="" /></p>

<p>As a long-time Mac user, I strongly agree that installers shouldn’t be used unless absolutely necessary. But there’s also a difference when you have an audience as big as Firefox does, and different concerns that were minor with a smaller user base suddenly become a significant roadblock for adoption. This is why we initially investigated having an installer.</p>

<p>However, given the option to detect when people are launching it from the disk image or the Downloads folder, we can accomplish what we want without an installer. When we saw the Delicious Library<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup> behavior, the installer option was no longer something we wanted to pursue.</p>

<h2 id="our-options-given-an-installer-less-setup">Our options, given an installer-less setup</h2>

<dl>
  <dt>Ship a <abbr title="Disk Image">DMG</abbr> like we currently do, and add disk image detection</dt>
  <dd>
    <p><i>Pro:</i> Provides a dedicated disk image window in the Finder with only one choice — presentation is nicer, and it’s more obvious what to do next. Makes it easy to see which version of Firefox the disk image contains.</p>
  </dd>
  <dd>
    <p><i>Con:</i> Leaves the disk image behind, unless we include code to unmount &amp; delete the disk image as part of the application.</p>
  </dd>
  <dt>Ship as an internet-enabled <abbr title="Disk Image">DMG</abbr> or as a <abbr title="ZIP">ZIP</abbr> file, with the “Downloads” folder detection</dt>
  <dd>
    <p><i>Pro:</i> Both <abbr title="ZIP">ZIP</abbr> files and internet-enabled disk images automatically unpack, leaving less clutter on the file system.</p>
  </dd>
  <dd>
    <p><i>Con:</i> Leaves the file in the “Downloads” directory, where it may not be visible if there’s a lot of clutter. It also makes it harder to see which version of Firefox you have downloaded.</p>
  </dd>
</dl>

<p>We’re partial to the internet-enabled <abbr title="Disk Image">DMG</abbr> solution since it’s less involved, leaves fewer stray files on the system — it unpacks the the disk image <abbr title="and">&amp;</abbr> removes it, leaving you with just the application-but allows you to retrieve it from the Trash if you really need it. and requires less of a change to the current installer build process.</p>

<p>Our — admittedly minor — issues with <abbr title="ZIP">ZIP</abbr> when compared to the <abbr title="Disk Image">DMG</abbr> approach are:</p>

<ul>
  <li>Unpacking the <abbr title="ZIP">ZIP</abbr> file will leave the original archive in the “Downloads” folder, so you have to remove it manually — unless you changed that setting. We want to leave as little clutter as possible.</li>
  <li>The <abbr title="Cyclic Redundancy Check">CRC</abbr> error checking that <abbr title="ZIP">ZIP</abbr> uses to verify its files is slightly less robust than the <abbr title="Disk Image">DMG</abbr> equivalent. It’s usually good enough, so this is also a minor issue.</li>
</ul>

<p>Considering this, and with the goal of making the change as non-intrusive as possible for our current build setup, the internet-enabled disk image is our preferred approach.</p>

<h2 id="the-new-firefox-installation-experience">The new Firefox installation experience</h2>

<p>After considering all of the above factors, we believe the Firefox installation experience on <abbr title="Mac OS Ten">OS X</abbr> should ideally look like this:</p>

<ol>
  <li>Initiate the Firefox download.</li>
  <li>When download completes, Safari will unpack the disk image, throw away the <abbr title="Disk Image">DMG</abbr> file, and show a Firefox icon in its download window — as well as selecting it in the Finder in the background.</li>
  <li>When you double-click the Firefox file, it gives you the options to:
    <ul>
      <li>Move Firefox to the Applications folder</li>
      <li>Add Firefox to the Dock</li>
      <li><abbr title="and">&amp;</abbr> set Firefox as your default browser.…all of these actions are optional, of course.</li>
    </ul>
  </li>
</ol>

<p>We believe this gives us the best of both worlds — predictability and flexibility for the power users, and simplicity and for people that are new to the Mac. We hope you agree.</p>

<p>As explained in the previous article, the Firefox team is currently busy getting the 3.6 release out on time — so if you’re a Mac developer with some spare cycles to make this happen, <a href="http://groups.google.com/group/mozilla.dev.apps.firefox/topics">get in touch</a>. You even have <a href="http://github.com/potionfactory/LetsMove/">the code to get you started</a>.</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">
      <p>I don’t actually know who invented this behavior, but it’s a very elegant solution given the constraints. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><summary type="html"><![CDATA[A second look at the issues with installation of firefox on the mac, with recommendations on how to fix them]]></summary></entry><entry><title type="html">Making browsers faster: Resource Packages</title><link href="http://limi.net/resource-packages" rel="alternate" type="text/html" title="Making browsers faster: Resource Packages" /><published>2009-11-17T00:00:00+00:00</published><updated>2009-11-17T00:00:00+00:00</updated><id>http://limi.net/resource-packages</id><content type="html" xml:base="http://limi.net/resource-packages"><![CDATA[<p>Update, summer 2011: The Firefox team has decided to pursue these types of improvements via <abbr title="Speedy">SPDY</abbr> and <abbr title="HyperText Transfer Protocol">HTTP</abbr> Pipelining instead, but I will keep this original article about Resource Packages online for historical purposes.</p>

<hr />

<p>What if there was a backwards compatible way to transfer all of the resources that are used on every single page in your site — <abbr title="Cascading Style Sheets">CSS</abbr>, <abbr title="JavaScript">JS</abbr>, images, anything else — in a single <abbr title="HyperText Transfer Protocol">HTTP</abbr> request at the start of the first visit to the page? This is what Resource Package support in browsers will let you do.</p>

<hr />

<p>Update: There’s now a proper <a href="http://people.mozilla.com/~jlebar/respkg/">Resource Package specification</a>, and any details there override whatever is written here. This article is a bit more conversational, and is useful to understand what we’re trying to do. If you’re looking for specifics — like what formats we support and how we parse — please refer to the formal specification instead of this article.</p>

<hr />

<p>When it comes to browser performance, it’s widely known that a lot of the time is spent waiting for <abbr title="HyperText Transfer Protocol">HTTP</abbr> requests. You are probably familiar with the issue; a well-known optimization technique is to reduce the number of <abbr title="HyperText Transfer Protocol">HTTP</abbr> requests that are done for a given web site, since browsers only do 2–6 requests in parallel. This is why techniques like <a href="http://www.alistapart.com/articles/sprites">image spriting</a> exist.</p>

<p>There are problems with image spriting, though. In addition to <a href="http://blog.vlad1.com/2009/06/22/to-sprite-or-not-to-sprite/">potentially severe memory penalties</a>, they obfuscate the code — “What is this icon at 704px, exactly?” — and every time you add a new icon, you have to update the sprite file, which adds to the maintenance burden.</p>

<p>Some images can’t be sprited (think about YouTube, which easily serves up 40 <abbr title="Joint Photographic Expert Group">JPEG</abbr> thumbnails on a given page), and there’s also other resources like JavaScript &amp; <abbr title="Cascading Style Sheets">CSS</abbr>, which — while possible to combine — at the very least need one file each. You can see how this quickly saturates the available parallel <abbr title="HyperText Transfer Protocol">HTTP</abbr> pipelines.</p>

<p>Even if bandwidth is getting better, and the internet is getting faster, latency are actually getting worse in a lot of cases. With mobile internet browsing, and to some extent <abbr title="United States">US</abbr> domestic cable internet and <abbr title="Digital Subscriber Line">DSL</abbr>, the round-trip time for a single request can be slow, even if it downloads relatively fast once the transfer starts.</p>

<p>While there are lots of workarounds to solve this class of problems, we suggest a standard approach that all browsers makers can easily implement, and that is <em>backwards compatible</em> with browsers that do not support it. We also want a solution that works for all types of resources, not only image bitmaps, and one that doesn’t require any new tools, file types or protocols.</p>

<h2 id="goals">Goals</h2>

<p>This proposal has the following goals:</p>

<ul>
  <li>Make it possible to serve all the resources (images, stylesheets, javascript) required by a page in a single <abbr title="HyperText Transfer Protocol">HTTP</abbr> request, freeing up the other parallel requests to fetch resources that are page-specific.</li>
  <li>Be as simple to implement as possible, so anyone with a passing familiarity with <abbr title="HyperText Markup Language">HTML</abbr> should be able to perform the optimization.</li>
  <li>Be entirely transparent to browsers that do not support it.</li>
  <li>Avoid retransmission of existing resources.</li>
  <li>Use existing tools that are widely used on all platforms.</li>
  <li>Support the “80% use case” over adding a lot of complexity to the spec.</li>
</ul>

<h2 id="non-goals">Non-goals</h2>

<p>Some explicit non-goals of this proposal:</p>

<ul>
  <li>Invent new file formats</li>
  <li>Invent new compression formats</li>
</ul>

<h2 id="implementation">Implementation</h2>

<p>Our goal is to be compression-format independent, but the obvious candidates for support are:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">tar.gz</code>, aka. <code class="language-plaintext highlighter-rouge">.tgz</code> files — <abbr title="Multipurpose Internet Mail Extensions">MIME</abbr> type: <code class="language-plaintext highlighter-rouge">application/x-tar-gz</code></li>
  <li><code class="language-plaintext highlighter-rouge">ZIP</code> files — <abbr title="Multipurpose Internet Mail Extensions">MIME</abbr> type: <code class="language-plaintext highlighter-rouge">application/ZIP</code></li>
</ul>

<p>While both <code class="language-plaintext highlighter-rouge">ZIP</code> and <code class="language-plaintext highlighter-rouge">tar.gz</code> files do not have not the most elegant or efficient packing format out there, they have the following very desirable traits:</p>

<ul>
  <li>Easily available reference implementations.</li>
  <li>Can be unpacked even in partial state — which means that we can stream the file, and put <abbr title="Cascading Style Sheets">CSS</abbr> and JavaScript first in the archive, and they will unpacked and made available before the entire file has been downloaded.</li>
  <li>Excellent toolchain support, available on all major platforms, so it’s easy for web developers to use.</li>
</ul>

<p>Other formats, like <code class="language-plaintext highlighter-rouge">bZIP</code> may be more efficient in terms of file size, but they aren’t streamable and can’t be unpacked as partial files — so they are considered unfit for this particular purpose.</p>

<p>We propose this markup to signal a ZIPped resource package:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;link rel="resource-package" 
      type="application/ZIP" 
      href="site-resources.zip" /&gt;
</code></pre></div></div>

<p>The default <abbr title="Multipurpose Internet Mail Extensions">MIME</abbr> type for a resource package will be <code class="language-plaintext highlighter-rouge">application/x-tar-gz</code>, and you can omit it in documents where it is valid, like in <abbr title="HyperText Markup Language 5">HTML5</abbr>, where an equivalent would be:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;link rel="resource-package" 
      href="site-resources.tar.gz" /&gt;
</code></pre></div></div>

<p>This will tell the browser to download this file first, and use the resources contained in the file instead of the referenced images, style sheets and javascript files — or for that matter, any other file. Browsers should prefer the files in the resource package, and do individual requests for images that are not contained in the package.</p>

<p>A given browser will probably block downloading any resources until the lists of files that are available in resource packages have been accounted for — or there may be a way to do opportunistic requests or similar, we leave this up to the browser vendor unless there’s a compelling reason to specify how this should work.</p>

<p>Older browsers that do not support resource packages will simply ignore this tag, and fetch the files normally, with one <abbr title="HyperText Transfer Protocol">HTTP</abbr> request for each.</p>

<h2 id="path-handling">Path handling</h2>

<p>Paths will be rendered relative to where the resource package is located, so you can supply additional directories inside the resource package to mimic existing site structure.</p>

<p>The resource package is referenced as follows in a page somewhere on the site <code class="language-plaintext highlighter-rouge">www.example.com</code>:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;link rel="resource-package" 
      type="application/ZIP" 
      href="/static/site-resources.zip" /&gt;
</code></pre></div></div>

<p>The <abbr title="ZIP">ZIP</abbr> file has this internal structure:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>javascript/jquery.js
css/reset.css
css/grid.css
css/main.css
images/save.png
images/info.png
</code></pre></div></div>

<p>In this example, the resolved path to the <code class="language-plaintext highlighter-rouge">main.css</code> file would be <code class="language-plaintext highlighter-rouge">http://www.example.com/static/css/main.css</code>. Notice how the path inside the resource package is added to the path where the actual file is located.</p>

<h2 id="file-listing-using-inline-html">File listing using inline <abbr title="HyperText Markup Language">HTML</abbr></h2>

<p>The most efficient way to declare what’s in the resource package without blocking to wait for the first part of it to load, is to do it inline in the resource package <code class="language-plaintext highlighter-rouge">&lt;link&gt;</code> tag itself:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;link rel="resource-package" 
      type="application/ZIP" 
      href="/static/site-resources.zip"
      content="javascript/jquery.js;
               css/reset.css;
               css/grid.css;
               css/main.css;
               images/save.png;
               images/info.png" /&gt;
</code></pre></div></div>

<p>The only problem with the above is that it will break validation for existing specifications like <abbr title="HyperText Markup Language">HTML</abbr> 4 and <abbr title="Extended HyperText Markup Language">XHTML</abbr> 1.x, so we also support an alternate syntax, (ab)using the <code class="language-plaintext highlighter-rouge">title</code> attribute to get the same result:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;link rel="resource-package" 
      type="application/ZIP" 
      href="/static/site-resources.zip"
      title="javascript/jquery.js;
             css/reset.css;
             css/grid.css;
             css/main.css;
             images/save.png;
             images/info.png" /&gt;
</code></pre></div></div>

<p>This makes the file work with the existing validators and older standards.</p>

<h2 id="fallback">Fallback</h2>

<p>There should be no compatibility issues with old browsers, as they will just load the individual files instead of the resource package.</p>

<p>Browsers that don’t implement this will seem slow in comparison to other browsers. Luckily, it should be a simple addition to any of the modern browsers.</p>

<h2 id="file-listing-using-a-manifest-file">File listing using a manifest file</h2>

<p>You can also give the browser the ability to know what files are in the resource package file without reading the entire file first, by adding a <em>manifest</em> file that can contain this information. This file can be supplied as a separate file (useful if combining with Offline Resources), or as the first file in the file itself. Of course, this will be slower to get than defining the contents inline in the <abbr title="HyperText Markup Language">HTML</abbr>, but can be easier and cleaner to implement, especially if you’re using offline resource support already.</p>

<p>Example <code class="language-plaintext highlighter-rouge">manifest.txt</code> file:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>javascript/jquery.js
styles/reset.css
styles/grid.css
styles/main.css
images/save.png
images/info.png
</code></pre></div></div>

<ul>
  <li>This file <em>must</em> be the first file in the archive.</li>
  <li>This file <em>must</em> be named <code class="language-plaintext highlighter-rouge">manifest.txt</code> when supplied as part of the archive.</li>
</ul>

<p>If this simple format looks familiar, that’s not a coincidence. Initially, we were looking at using either an XML or JSON format to specify this, but we believe it’s easier to add a couple of new abilities to the offline resource specification instead. When using resource packages with <a href="https://developer.mozilla.org/En/Offline_resources_in_Firefox">Offline Resources</a> (which are also <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/offline.html">part of the <abbr title="HyperText Markup Language 5">HTML5</abbr> spec</a>), we’d like it to be easy to extend the rules, so the offline manifest with resource package support could look like this:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>CACHE: resources=/static/siteresources.zip
javascript/jquery.js
styles/reset.css
styles/grid.css
styles/main.css
images/save.png
images/info.png

\# The above section lists the files in siteresources.zip.
\# To start a new section, do:
CACHE:
images/outside-package.png
</code></pre></div></div>

<p>The only thing we’d need to add to the <abbr title="HyperText Markup Language 5">HTML5</abbr> offline spec is that it should ignore anything on the same line after <code class="language-plaintext highlighter-rouge">CACHE:</code> if it doesn’t know how to handle it. This means that you could potentially put the resource package definitions in your Offline Resources manifest — we would also support doing it the other way around, and put the Offline Resources manifest inside the resource package.</p>

<p>This isn’t a requirement for implementing the initial version of resource packages, however — but could be an easy way to add support for it to the offline resource specification. If there’s a better way to do it, let me know.</p>

<h2 id="duplicate-files-and-override-behavior">Duplicate files and override behavior</h2>

<p>If a resource is defined twice on the same path — e.g. using multiple resource-packages — the file defined last takes priority. This enables an application with offline mode to synchronize changes without downloading the entire resource package again.</p>

<p>For example, on the first sync, the browser sees a resource package like this:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;link rel="resource-package" href="/documents/offline-0.zip" /&gt;
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">offline-0.zip</code> contains:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>manifest.txt 
doc1.html 
doc2.html 
</code></pre></div></div>

<p>Offline the application would be able to access documents at <code class="language-plaintext highlighter-rouge">/documents/doc1.html</code> and <code class="language-plaintext highlighter-rouge">/documents/doc2.html</code>.</p>

<p>The user then performs another sync and the browser now sees:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;link rel="resource-package" href="/documents/offline-0.zip" /&gt;
&lt;link rel="resource-package" href="/documents/offline-1.zip" /&gt;
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">offline-1.zip</code> contains:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>manifest.txt 
doc1.html 
doc3.html
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">doc1.html</code> and <code class="language-plaintext highlighter-rouge">doc3.html</code> would now be read from the <code class="language-plaintext highlighter-rouge">offline-1.zip</code>, <code class="language-plaintext highlighter-rouge">doc2.html</code> would continue to be read from <code class="language-plaintext highlighter-rouge">offline-0.zip</code>.</p>

<p>Even for use outside of the offline applications space, it allows pages to easily override the site look and feel with section-specific images and styling. A page could serve up:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;link rel="resource-package" href="/static/main-theme.zip" /&gt;
&lt;link rel="resource-package" href="/static/section-theme.zip" /&gt;
</code></pre></div></div>

<p>Resources in <code class="language-plaintext highlighter-rouge">section-theme.zip</code> would take precedence over the content in <code class="language-plaintext highlighter-rouge">main-theme.zip</code> — making it easy to do overrides without replacing the entire resource package.</p>

<h2 id="two-simple-examples">Two simple examples</h2>

<p>It’s not hard to see where Resource Packages could be useful in existing sites, two obvious categories would be:</p>

<p>Supply the core layout &amp; functionality of a site</p>

<p>Typically, you would ship over all the <abbr title="Cascading Style Sheets">CSS</abbr>, <abbr title="JavaScript">JS</abbr> and images that are used on every page in the site. These could be cached quite aggressively, and even use <a href="http://en.wikipedia.org/wiki/HTTP_ETag">ETags</a> to invalidate the resource package when needed.</p>

<p>The thumbnail search result case</p>

<p>Consider a <a href="http://www.youtube.com/results?search_query=ninja+cat">typical YouTube search results</a> page. It contains 20-40 thumbnails of videos, and there’s no easy way to add all these images into an image sprite, since the long tail of search results would vary a lot. Resource Packages would let you build a <abbr title="ZIP">ZIP</abbr> of search result thumbnails on the fly, and ship them all over in one <abbr title="HyperText Transfer Protocol">HTTP</abbr> request. It would require some <abbr title="Central Processing Unit">CPU</abbr> power, but would be much faster for the end-user. This wouldn’t have to be cached, or could be cached on a per-search basis.</p>

<h2 id="other-approaches">Other approaches</h2>

<p>There are several other approaches that could solve parts of this problem, but they all have issues with current browsers and graceful degradation and/or are trying to solve a slightly different problem:</p>

<p><abbr title="HyperText Transfer Protocol">HTTP</abbr> pipelining</p>

<p>This is a more aggressive way of utilizing the <abbr title="HyperText Transfer Protocol">HTTP</abbr> keep-alive mode, but is not implemented correctly by all web servers. Proxies have a hard time with it, some browsers also do, so it’s not really working unless you want to be aggressive and/or whitelist/blacklist certain servers.</p>

<p>It also causes a “head-of-line blocking” issue, where if you request X and Y on the same connection and X is slow, then Y is slowed too.</p>

<p>Multipart <abbr title="Multipurpose Internet Mail Extensions">MIME</abbr></p>

<p>Hard for integrators, requires special packing that isn’t trivial to do, and has poor browser support.</p>

<p><abbr title="Java Archive">JAR</abbr> files or anything using data: <abbr title="Uniform Resource Locators">URLs</abbr></p>

<p>No reasonable fallback mode, as the file name is embedded in the href/src link, and browsers that doesn’t support it just won’t render it.</p>

<p><abbr title="Speedy">SPDY</abbr></p>

<p>While this effort from Google aims to make everything faster, it is largely orthogonal to what we’re trying to do with Resource Packages. It also requires you to retrofit both web browsers <em>and</em> web servers to make it work, which means it will take quite a while before this will be in common use. Resource Packages work without any changes to the web server software, and will work as soon as any browser supports it — with no adverse effects to the browsers that don’t.</p>

<h2 id="additional-notes">Additional notes</h2>

<ul>
  <li>The <abbr title="ZIP">ZIP</abbr> format doesn’t have <abbr title="Multipurpose Internet Mail Extensions">MIME</abbr> type support, so this will have to be solved by the browser based on filename extensions or other heuristics. We don’t believe this to be a problem, since browsers already have to do this.</li>
  <li>All the resources in the package will have the same headers (expiry, <a href="http://en.wikipedia.org/wiki/HTTP_ETag">ETags</a>, etc.) as the resource package itself. If you need different expiry dates or other caching settings, you should specify multiple resource files with different cache headers.</li>
  <li>You can specify a charset in the resource package definition. If unspecified, it is assumed that any non-binary files inside are <abbr title="Unicode Transformation Format 8">UTF-8</abbr>.</li>
</ul>

<h2 id="next-steps">Next steps</h2>

<p>We have sent this out to the major browser vendors for feedback, and we will be implementing this in the next upcoming release of Firefox — which tentatively has the version number 3.7, but this may change.</p>

<h2 id="faq">FAQ</h2>

<p>Does zipping up multiple optimized PNGs or other files work with <abbr title="ZIP">ZIP</abbr>? Can it potentially increase file size or lead to a high unpacking <abbr title="Central Processing Unit">CPU</abbr> overhead?</p>

<p><abbr title="ZIP">ZIP</abbr> automatically chooses the best of deflation or no compression. Images will usually not be compressed, since they already are, text files like <abbr title="Cascading Style Sheets">CSS</abbr>/<abbr title="JavaScript">JS</abbr> will be. In general, <abbr title="Central Processing Unit">CPU</abbr> impact from unzipping is negligible, even on slow devices.</p>

<p>How does this affect mobile devices, which have limited <abbr title="Central Processing Units">CPUs</abbr>?</p>

<p>More realistic concerns are cache ability and bandwidth — as well as the latency on mobile networks — and memory. A lot of mobile browsers only keeps things in the browser cache at all if the individual file is something like 20kB or less. For returning visitors, you suddenly need to download one large file again, instead of having multiple small files locally.</p>

<p>In general, mobile browsers clear their caches quite aggressively — although with the resource package spec, one would hope that they would implement more optimal handling and prioritize caching these, since they more likely to be valuable for browsing performance than another random image/<abbr title="Cascading Style Sheets">CSS</abbr>/<abbr title="JavaScript">JS</abbr> file in a site.</p>

<p>How would Resource Packages work with <abbr title="Content Delivery Networks">CDNs</abbr>?</p>

<p>There would be no special handling, these mirrors would just carry the resource package file like any other file they are supplying.</p>

<p>How would you manage priority in the resource package? It would be useful to decide which files get downloaded first.</p>

<p>The priority is managed by the order they are added to the resource package. If you want a specific order, it’s trivial to specify this on the command line, so we aren’t adding any special syntax for this. Also, we have to do it this way to take advantages of the ability to unpack and display resources while the file is still downloading.</p>

<p>I worry about reduced parallelism. Lots of sites make heavy use of resource sharding across many hostnames to take advantage of multiple connections. Won’t this be a problem?</p>

<p>Sites usually use multiple hostnames to get around per-host connection limits, which are almost entirely a latency issue — not a bandwidth issue. Resource packages make multiple hostnames unnecessary, because it solves the latency issue a different way.</p>

<h2 id="acknowledgments">Acknowledgments</h2>

<ul>
  <li><a href="http://www.culater.net/">Mike Solomon</a> from YouTube for encouraging me to propose a solution to this issue.</li>
  <li><a href="http://dbaron.org/">David Baron</a> &amp; <a href="http://fantasai.inkedblade.net">Elika Etemad</a> from Mozilla for comments on the implementation feasibility, and for helping identify prior art.</li>
  <li><a href="http://blog.vlad1.com">Vladimir Vukićević</a> &amp; <a href="http://sicking.cc/">Jonas Sicking</a> from Mozilla for help with adapting the Offline Resources standard to handle Resource Packages.</li>
  <li><a href="http://almaer.com">Dion Almaer</a> &amp; <a href="http://benzilla.galbraiths.org/">Ben Galbraith</a> from Palm, <a href="http://stevesouders.com">Steve Souders</a>, <a href="http://greggman.com/">Gregg Tavares</a> &amp; <a href="http://alex.dojotoolkit.org/">Alex Russell</a> from Google &amp; the Chrome team for feedback on the proposal from an implementer’s perspective.</li>
  <li><a href="http://www.benmathews.net/">Ben Mathews</a> from Facebook for feedback on compression formats.</li>
  <li><a href="http://objectvibe.net/blog">Laurence Rowe</a> from <a href="http://www.jarn.com/">Jarn</a> for suggestions on how to handle duplicates/overrides.</li>
</ul>

<h2 id="improvements--feedback">Improvements &amp; feedback</h2>

<p>If you have any suggestions on how to improve this proposal, comment in the open thread over at <a href="http://groups.google.com/group/mozilla.dev.platform/browse_thread/thread/31779262c6b05205">Mozilla’s dev.platform forum</a>. It has been filed as <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=529208">bug #529208</a> in Bugzilla for those of you that want to monitor its progress.</p>

<hr />

<p>Proposal State: Ready for prototype implementation</p>

<p>Revision 7: Feb 22nd, 2010 — Added new information on compression formats, both <code class="language-plaintext highlighter-rouge">ZIP</code> and <code class="language-plaintext highlighter-rouge">tar.gz</code> files are now part of the spec.</p>

<p>Revision 6: Feb 12th, 2010 — Added a defined behavior for what happens when resources are defined twice.</p>

<p>Revision 5: January 10th, 2010 — added inline definition of resource package content in a manner that is compatible with HTML4/<abbr title="Extended HyperText Markup Language">XHTML</abbr> validators.</p>

<p>Revision 4: Nov 16th, 2009 — first published &amp; widely circulated version, added Offline Resources support</p>

<p>Revision 3: Nov 10th, 2009</p>

<p>Revision 2: Sep 1st, 2009</p>

<p>Revision 1: Jun 15th, 2009</p>]]></content><author><name></name></author><summary type="html"><![CDATA[A proposal to make downloading web page resources faster in all browsers]]></summary></entry><entry><title type="html">Tab matching in the Location Bar</title><link href="http://limi.net/tab-matching" rel="alternate" type="text/html" title="Tab matching in the Location Bar" /><published>2009-09-29T00:00:00+00:00</published><updated>2009-09-29T00:00:00+00:00</updated><id>http://limi.net/tab-matching</id><content type="html" xml:base="http://limi.net/tab-matching"><![CDATA[<p>One of the minor tweaks that we want in Firefox is the ability to switch tabs using the location bar. Yours truly has signed up to help shepherd this into the 3.7 release on the <abbr title="User Interface">UI</abbr> side.</p>

<p>This proposal is based on existing work from <a href="https://twitter.com/faaborg">Alex Faaborg</a> and thoughts from Madhava Enros and Aza Raskin around putting tabs in the location bar, and doesn’t stray very far from their proposals, so read those first.</p>

<p>There are some smaller changes we want to try, as they simplify the interface:</p>

<p><img src="/images/switch-to-tab.png" alt="" />
<em>Apologies for butchering Faaborg’s original image for demonstration purposes. We might also want to tweak the wording to say something like “Switch to open tab” or similar to emphasize that aspect.</em></p>

<dl>
  <dt>List the two choices adjacent to each other instead of using keyboard qualifiers like Shift or Alt</dt>
  <dd>
    <p>We don’t want to introduce modes here if we can avoid it.</p>
  </dd>
  <dt>Don’t show the <abbr title="Uniform Resource Locator">URL</abbr> as part of the entry for the already open tab</dt>
  <dd>
    <p>Loading a <abbr title="Uniform Resource Locator">URL</abbr> means loading the page — so we use this as an implicit indicator that the page will actually be loaded in the current tab if you select that entry.</p>
  </dd>
  <dt>The prioritized case is to switch to the active tab if one exists</dt>
  <dd>
    <p>We have to test different weightings vs. <a href="https://developer.mozilla.org/en/The_Places_frecency_algorithm">frecency</a> and how it works in real-life scenarios, but we should be able to find a setting that makes it accurate and predictable.</p>
  </dd>
  <dt>Only the non-standard case needs a label</dt>
  <dd>
    <p>We don’t want to use a tab icon or similar here, since there’s already way too much visual noise in the AwesomeBar layout.1 1I’m hoping we can convince Messieurs Stephen Horlander or Sean Martell to give the location bar results some visual design love for Firefox 3.7. In particular, we should get rid of the underline in the current style, since underline generally signifies a link in the browser context, and is a poor choice for a highlighting mechanism. This will require some user testing — but if it’s too confusing, we could add in another label.</p>
  </dd>
</dl>

<p>An upside of the combined approach is that the entries in the location bar results will keep the same size as the existing ones.</p>

<h2 id="tab-matching-preferences">Tab Matching Preferences</h2>

<p>We will give people control of whether they want already opened tabs to show up in their location bar results. We add this setting to the location bar settings we already have in the preference pane:</p>

<p>When using the location bar, suggest:</p>

<ul>
  <li>History</li>
  <li>Bookmarks</li>
  <li><em>Tabs</em></li>
</ul>

<p>Tabs will be off by default, as this is more of a “power user” setting. You have to explicitly choose to turn it on if you want it. This is done to minimize impact for existing users, and to keep the location bar behavior simpler.</p>

<p>We’ll do some user testing with it on by default and see how people react, but we suspect it will be confusing for a non-trivial number of our users. If it turns out it isn’t, we’ll make it enabled by default.</p>

<h2 id="related-interface-tweaks">Related interface tweaks</h2>

<p>We also need more data on how it should behave when you have multiple windows. The current thinking is that it will match any tab in any window. We’ll have to do some testing to see if this is too confusing for people, switching to a different window is definitely a different experience. We might end up restricting it to only match within the current window instead.</p>

<p>Another behavior we should fix as part of this improvement is how the Firefox <abbr title="User Interface">UI</abbr> behaves if you have the location bar hidden — currently you get the following dialog if you hit ⌘L to enter a <abbr title="Uniform Resource Locator">URL</abbr> when that part of the <abbr title="User Interface">UI</abbr> is hidden:</p>

<p><img src="/images/open-web-location.png" alt="" /></p>

<p>This is a remnant of the old “Open” dialog from earlier versions of Firefox. Instead of showing this, the location bar should slide down from the top and give you the interface you’re already familiar with, and disappear again once you have entered a <abbr title="Uniform Resource Locator">URL</abbr>. This way, you can hide both the location bar and the tabs, and just use the location bar to manage both. This also works well with full-screen mode.</p>

<p>We can always tweak this behavior once we have the initial implementation in place, but if there’s anything we didn’t think of — or improvements to the proposed approach — we’re always open to suggestions. In this case, please leave your comments on the <a href="https://wiki.mozilla.org/Talk:Firefox/Projects/Tab_Matches_in_Awesomebar">Mozilla Wiki page for Tab Matching</a> — thanks!</p>]]></content><author><name></name></author><summary type="html"><![CDATA[We want to bring tab matching to the location bar]]></summary></entry><entry><title type="html">Improving the Mac installer for Firefox</title><link href="http://limi.net/mac-installer" rel="alternate" type="text/html" title="Improving the Mac installer for Firefox" /><published>2009-09-14T00:00:00+00:00</published><updated>2009-09-14T00:00:00+00:00</updated><id>http://limi.net/mac-installer</id><content type="html" xml:base="http://limi.net/mac-installer"><![CDATA[<p>Lately, the <a href="http://blog.mozilla.com/metrics/" title="Blog of Metrics">Metrics team</a> here at Mozilla have conducted some great research into why some people leave the installer before Firefox is finished installing, <a href="http://blog.mozilla.com/metrics/2009/07/30/an-improved-experience-for-2000000-non-firefox-users/" title="An Improved Experience for 2,000,000 non-Firefox Users">uncovering a couple of bugs in the process</a>, and improving the way we ask people <a href="http://blog.mozilla.com/metrics/2009/08/03/more-changes-coming-to-the-firefox-installer/" title="More Changes Coming to the Firefox Installer">what will be their default browser</a>.</p>

<p>(Also make sure you read <a href="/mac-installer-revisited">part 2 of this article</a>)</p>

<p>The team looked specifically at the Windows installer — which makes sense, since that’s where most of our new users are coming from — but there are some substantial issues with the Mac install experience that we will explain in more detail.</p>

<h2 id="where-apple-failed">Where Apple failed</h2>

<p>There’s a lot to like about Mac <abbr title="Mac OS Ten">OS X</abbr>, but in their quest to make things as simple and uncomplicated as possible, Apple actually made some things worse for the (mythical) average user, as well as for people new to the Mac. One of these areas is application installation.</p>

<p>If you are unfamiliar with the Mac <abbr title="Mac OS Ten">OS X</abbr> install process, let us quickly outline how application installation on Mac <abbr title="Mac OS Ten">OS X</abbr> works:</p>

<ol>
  <li>Download the file.</li>
  <li>Open the disk image.</li>
  <li>Drag the application to your Applications folder.</li>
  <li>Optionally add the application to the Dock.</li>
</ol>

<p>While this process is familiar to experienced Mac users, and removes the need for uninstall scripts, very few new users that recently purchased their first Mac know how to do this. Unless they have a friend that has shown them how it works, it doesn’t make sense to anyone coming from a different platform.</p>

<p>To mitigate this, the download page for Firefox — as well as pretty much every other Mac application on the planet — attempts to tell you what to do once you have downloaded the disk image:</p>

<p><img src="/media/firefox-three-steps.png" alt="" /></p>

<p>The problem with this should be obvious — by the time the download is complete, that web page is usually long gone, and many people don’t read these kind of instructions at all.</p>

<p>To make matters even worse, Firefox is often one of the first applications that people new to the Mac go to download and install, since they want the familiar browser they have used earlier. They might catch on to how this works later, but it’s a fair bet that they don’t know this as new Mac users.</p>

<p>Some common errors that we have seen repeatedly among informal testing with friends and family are:</p>

<dl>
  <dt>Dragging the application to the dock directly</dt>
  <dd>
    <p>This creates a link to the file <em>inside</em> the disk image, which means that every time they try starting Firefox, the disk image is unpacked and mounted, and starting of Firefox becomes very slow, which makes it a bad experience.</p>
  </dd>
  <dt>Thinking that starting Firefox is done by opening the disk image every time</dt>
  <dd>
    <p>This is very common, and the logic is that the first time they started Firefox, they had to do this, so they continue doing it. This makes starting Firefox a chore, since it takes a lot of clicks to accomplish.</p>
  </dd>
</dl>

<p>What’s interesting is that Apple <em>are</em> aware of this problem, and even added a warning that shows up when you try to run an application from the disk image:</p>

<p><img src="/media/firefox-image-warning.png" alt="" /></p>

<p>Quick, spot the problem! It doesn’t actually tell you anything about <em>why</em> it’s a bad idea to run stuff from a disk image — or even what you can do to avoid the problem — they just state that you’re about to do so. Oh, and that the file is from the Dangerous Internet. For a company that <a href="http://developer.apple.com/mac/library/documentation/UserExperience/Conceptual/AppleHIGuidelines/XHIGWindows/XHIGWindows.html#//apple_ref/doc/uid/20000961-TP10" title="Apple Human Interface Guidelines: Alerts">prides itself on informative dialog boxes</a>, this is quite surprising.</p>

<h2 id="how-we-can-make-the-mac-install-experience-better">How we can make the Mac install experience better</h2>

<p>We can make some simple fixes to the current approach to make the experience better for people new to the Mac, while still retaining the power to put the file anywhere, per the classic <abbr title="Mac OS Ten">OS X</abbr> model.</p>

<dl>
  <dt>What problems do we want to solve?</dt>
  <dd>
    <p>People that don’t understand the standard installation process on Mac should be helped towards their goal.</p>
  </dd>
  <dd>Downloading Firefox and then forgetting about the download should be less common.</dd>
  <dd>Maintain the standard installation model for the users that prefer the drag &amp; drop install method.</dd>
  <dd>Make it possible to set Firefox as your default browser during the install process.</dd>
</dl>

<p>How do we fix these problems? By supplying a dedicated installer in the disk image, similar to the standard Mac <abbr title="Mac OS Ten">OS X</abbr> application installer:</p>

<p><img src="/media/plone-installer.png" alt="" /></p>

<p>We can fix all of these by using some capabilities of the standard Mac package installer and disk image creation tools supplied by Apple. In particular, they have features where you can <a href="http://osdir.com/ml/os.opendarwin.webkit.devel/2007-12/msg00037.html" title="Auto-launch installer after download">run an installer when a disk image is mounted</a>, like Apple does with some of their own disk images. This, combined with the auto-mounting of disk images downloaded via Safari, gives us an installation flow that is likely to not lose people along the way.</p>

<p>The final installation flow should look like this:</p>

<ol>
  <li>Start the Firefox download.</li>
  <li>When the download is complete, the disk image will mount automatically (if they were using Safari), and the Firefox installer runs.</li>
  <li>The install procedure continues similar to how it happens on Windows.</li>
  <li>As the last step of the process, the installer lets you set Firefox as the default browser, and start the application immediately. We have seen users forget that they just installed Firefox if you don’t let them start it at the end of the process, and make that the default choice.</li>
</ol>

<p>Note that experienced Mac users should be able to cancel the installer at any time and drag the Firefox application to the location they want instead, thus there should be no loss of functionality or flexibility for them.</p>

<h2 id="help-us-make-it-happen">Help us make it happen</h2>

<p>At Mozilla, we’re currently in crunch mode to get Firefox 3.6 ready, and therefore we have limited resources to look at creating a proper installer for Mac <abbr title="Mac OS Ten">OS X</abbr> right now. If you’re an experienced Mac <abbr title="Mac OS Ten">OS X</abbr> developer that would like to help out with creating a new installer that we can help test, we’d love to hear from you. Please send an email to the <a href="http://groups.google.com/group/mozilla.dev.apps.firefox/topics">dev.apps.firefox Google Group</a> — or via the <a href="https://lists.mozilla.org/listinfo/dev-apps-firefox">traditional mailing list</a> interface. If you want to track progress, we have filed a <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=516362">bug for the installer improvement</a> that you can subscribe to.</p>

<p>Also make sure you read <a href="/mac-installer-revisited">part 2 of this article</a>.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[With a renewed focus on improving the Firefox install experience — what can we improve on the Mac?]]></summary></entry></feed>