Making Firefox 10 More Like Firefox 3.6

Update: A preference was introduced in Firefox 12 for allowing tabs on bottom. I've update the add-on to account for this.

With the release of the Firefox 10 ESR and the upcoming end of life of Firefox 3.6, I am getting more and more requests to add functionality to the CCK to make Firefox 10 look more like Firefox 3.6. Rather than add those features to the CCK, I'm providing a separate add-on to satisfy that need.

Resolving Intranet URLs

On problem with Firefox that enterprises commonly report is that there is no easy way to tell Firefox that http://name is a URL on your intranet. Firefox will go through the normal process of attempting to add www and com to the name and it will fail. I think I've found a solution.

Happy Belated New Year!

One of things that has kind of become a tradition for me is the New Year's message at my church.

The message this year was focused was on creating new habits. I called it "Helpful Habits for a Happy New Year."

The five areas I picked were:

  • Physical Habits
  • Intellectual Habits
  • Financial Habits
  • Emotional Habits
  • Spiritual Habits

I would encourage you in this New Year, pick a couple of those areas and come up with new habits that you are going to start. And habits you are going to stop.Then write it down! Keep yourself accountable. And make this a great new year.

If you'd like to give it a listen, it's here.

The CCK and Firefox 8

URGENT UPDATE: Using distribution.ini to set extensions.disableScopes does not work in Firefox 8. I've opened a bug for this. The only workaround is to create a JS file in the defaults/preferences directory (you will have to create this directory) where Firefox is installed and set the value there:

pref("extensions.autoDisableScopes", 0);

Also, note that the correct value to disable this feature is 0 (zero).

----------

I've received my first email about the fact that with Firefox 8, users are now asked if they want to disable your CCK, depending on how you chose to install it (probably in one of those places that Mozilla now considers "forbidden")

If you have NOT deployed Firefox 8, in your organization yet, you need to read this article about disabling the various dialogs that appear.

The problem is that you need to set these preferences in Firefox 7 via something like the CCK so that the dialogs won't appear. If you're already moved to Firefox 8, it's too late.

In the future, it is now recommended that you ship your CCK using the distribution mechanism which I documented last year.

Honestly, there's no really good solution to this for enterprise, but the right place to participate in the discussion is the Enterprise Working Group Mailing List. (Although there isn't much discussion going on there anymore.)

Solving the Bugzilla Backlog

I've been doing a lot of complaining lately in directly violation of my first post of the year.

Going forward, I'm going to try harder to offer solutions instead of just doing a lot of complaining.

So, lately with Tyler Downer's post, there's been a lot of talk about Bugzilla and triage and other things. Yesterday, I was debugging a problem and discovered a bug that had been open for 5+ years with no fix (even though the component it was in had been rewritten in the mean time). (And before you ask, yes I posted a patch.)

The fact is that Bugzilla is a mess, not just with unconfirmed bugs, but with bugs that are no longer relevant, bugs that have already been fixed and more.

So here's my thought:

Stop all non critical activity on the Mozilla project for one week. All development, all test, etc. Have everyone in the community (and I mean everyone) attack Bugzilla and get it as cleaned up as possible. Have awards for the people that resolve the most bugs.

Thoughts?

Improving Stakeholder Communication in Firefox

As I've been watching this rapid release thing continue to unfold, I've been thinking about what it is that truly went wrong in the messaging. The fact that at this point, Mozilla executives are having to continue to try to sell this to people means that something went wrong in how they executed the change. As I thought about it more and more, I realized what a big part of the problem was - stakeholders.

Richlistbox Tricks for your Add-on

I've been messing around with richlistboxes a bit and I learned a couple of things, so I thought I would share.

The first thing I learned is that richlistboxes don't participate in layout the same way as a listbox, particularly in a (edit: tabbed panel in a dialog) dialog. If you dynamically add items to them, they will push other items off the dialog. (edit: Rows attribute should have never been in the richlistbox docs - I removed it)There's a "rows" attribute on the richlistbox that would seem to be for this, but it doesn't work. Most people probably just end up setting max-height or explicit height and width, but I don't like that. Here's what I came up with.

If you are going to dynamically add items to the listbox, set it to flex and then query the width and height during window load and explicitly set the width and height to be those values:

  var listbox = document.getElementById("myrichlistbox");
  var listboxStyle = window.getComputedStyle(listbox, null);
  var width = parseInt(listboxStyle.getPropertyValue("width"));
  var height = parseInt(listboxStyle.getPropertyValue("height"));
  listbox.setAttribute("width", width);
  listbox.setAttribute("height", height);

If you are adding items in the XUL using a template or being explicit, hide the richlistbox and put a vbox in its place. Then during load, query the size of the vbox, set those sizes to the rich listbox and hide the vbox/show the richlistbox.

The second thing I learned is that headers don't work properly in richlistboxes. Like me, you probably placed headers at the top of your richlistbox the same way you would for a listbox thinking, "It's a listbox, so listbox headers should work."But you might have noticed that when you scroll your richlistbox, the headers scroll away. Working around this was a little trickier. Come to find out, richlistboxes don't support headers properly. To fix it, I found the one place in Firefox that uses a richlistbox and has a header - the Applications tab in preferences. Here's the code:

<richlistbox>
  <listheader style="border: 0; padding: 0; -moz-appearance: none;">
    <treecol value="First Header"/>
    <treecol value="Second Header"/>
  </listheader>
</richlistbox>

The style stuff looks ugly, but it's to make it appear properly on Linux.

I hope these tips will save my fellow add-on developers some work.

Change is Expensive

Firefox Button

One of the statements that keeps getting thrown around in the discussion about the Firefox rapid release process is that because the releases are every six weeks, there isn't really enough time for any major changes. This statement is patently false, and there's an easy way to prove that - the Firefox button.

The Firefox button was a huge change for Firefox 4. I would wager it cost (or will cost) companies across the world tens of thousands of dollars (or more) in rewriting of support scripts, redoing of screen shots and actual support calls.

Let's assume for just a minute that the switch to the Firefox button had been done within the context of the rapid release cycle. How would it have happened? Could it have been phased in? Could it somehow have been done across multiple releases? No. The answer is that between two "minor" releases, the change would have simply been made. What's the takeaway?

Whether or not a change is major or minor has nothing to do with time. It only has to do with the change.

So how do you mitigate a situation like this? I'm glad you ask. You do what Microsoft did and provide a Group Policy (or preference) to turn on the menu bar by default. This allows the browser to be deployed without taking this change. I received quite a few emails when Firefox 4 was released with folks asking this specific question. I had to tell them that there was simply no easy way to do it in Firefox without writing an extension. I considered adding it into the CCK Wizard, but simply haven't had time.

We'll finish with a story. Last week my wife finally bit the bullet and upgraded from Firefox 3.6 to Firefox 4/5. She's technical and has been using web browsers for 10+ years. Her first comment? "Where did my menu go?" I said, "Everything is in the Firefox button now." She said, "I want my menu back." So I showed her how to get rid of the Firefox button and go back to the old menu.

You're messing with 10+ years of muscle memory here. Change is hard. And expensive.