How Firefox Loads Plugins

While debugging getting plugins working again with the CCK Wizard (it broke when Firefox removed platform specific directories in extensions), I learned a lot about how plugins load within Firefox. In particular, I learned a lot how to stop Firefox from loading plugins from different locations. So I thought I would share. Note that this post is primarily about loading plugins on Windows.

Customizing the Firefox Installer on Windows (2012)

This is an update of a previous post. It has some new questions answered as well.

One of the questions I get asked a lot is how to customize the Firefox installer on Windows and how to bundle add-ons with it. This Q&A should give folks answers to the common questions they have. If you have more questions, please post in the comments.

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.

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.