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.

Personas Interactive 1.2 with TweetTheme

I'm excited about the new version of Personas Interactive that Brand Thunder just released.

If you don't know, Personas Interactive builds on the Personas features in Firefox adding in things like multiple background images, Personas specific toolbars, galleries that can be hosted on any site and more. It removes the limitations of Personas.

This new version gives the user more control, including adding social network buttons to every theme and weather customized to your location.

But the coolest thing in it is support for our new TweetTheme. Combined with PI 1.2, TweetTheme gives you a full Twitter experience in your browser, including Twitter in sidebar, tweeting and searching Twitter from your toolbar, as well as a viewer that shows your last twenty tweets. It really shows off the power of Personas Interactive. I hope you'll try it out.

You can click here to install Personas Interactive with TweetTheme.

And you won't believe what Brand Thunder has coming up next. BT:Engage lets you build your own themes that will work with Personas Interactive. You can try it out now!

Firefox 4 Doesn't Recognize New Thawte Code Signing Cert

We just got a new code signing cert from Thawte and after getting it installed, I discovered that Firefox 4 would still show "Author not verified" when installing the XPI. After doing some research, I found this bug - Turn on the code signing trust bit for the Thawte Primary Root CA. It has some information on a workaround, but it wasn't very detailed so I thought I would post it for everyone.

Here's what I did:

Per the Thawte instructions, I use on IE on Windows to manage my certs. After importing my new cert into IE, the first step was to export it. Important: When you export the PFX file do NOT check the box to include all the certificates in the certification path.

Next, I created a new cert database using: certutil -N -d .

Then I imported my cert using pk12util: pk12util -i {filename}.pfx -d

Thawte has created a new intermediate cert to work around this problem. It can be downloaded here.

You need to download it and import it into your database using this command:

certutil -t "c,c,C" -n "thawte" -A -d .< new_thawte.cer

You should now be able to sign your XPI.

One other thing I ran into was finding a version of NSS that worked properly. I ended up using this one.