Customizing Firefox with the CCK Wizard

New version with fix for search engines not working.

FYI, I’m making a beta of the CCK Wizard available today for Firefox 3.

If you are deploying Firefox in your enterprise, educational institution, or even your household, you’ll want to check out the CCK Wizard (info at that link is a little dated right now).The CCK Wizard is an implementation of the old Netscape CCK that allows you to customize various aspects of Firefox and then contain all of those customizations in a single Firefox extension. Here are some of the things you can do

  • Add an identifier to the user agent string
  • Change the default home page and startup override home page
  • Change the title bar text
  • Change the animated logo
  • Add a web page and tooltip used for the animated logo
  • Add a help menu item that links to a web page
  • Provide sites for which popups and XPInstalls are allowed by default
  • Preinstall browser plug-ins
  • Preinstall search engines
  • Change the default search engine
  • Add folders, bookmarks and live bookmarks to the personal toolbar
  • Add folders, bookmarks and live bookmarks to the bookmarks folder
  • Set default preferences
  • Lock preferences
  • Add registry keys (Windows only)
  • Add certificates (See NOTE below)
  • Set default proxy configurations
  • Package other XPIs with your distribution
  • Disable about:config

Note that if you customize Firefox using the CCK Wizard, there are certain restrictions on redistribution outside of your organization, especially if you add certificates. Read the Mozilla Foundation Trademark policies for more info, or contact

And please let me know if you find any bugs.

The Browser With No Name

(Post updated to remove money reference. I was simply referring to the fact that Mozilla and Firefox have equity in their brand and most brands require royalty payments with the use of their branding.

Also, to be clear, this post is 100% my opinion, not IBM’s or any other company.)

I’ve been thinking more about shipping custom versions of Firefox and I think I finally figured out what bothers me so much about the situation:

If you take away the Firefox name, which Mozilla requires you to do, you are left with no distinguishable identity at all.

And please don’t tell me that “Mozilla” is the identity. Mozilla describes lots of different technology, as well as a foundation and a company. It’s not the core identity of the Firefox browser.

When I look at typical open source projects, I see their “free” identity and their “branded” identity. For instance Apache is the “free” identity, and some of the “branded” identities are Oracle Database or the IBM WebSphere application server. There’s a core Linux/GNU “free” identity and “branded” identities like Red Hat Linux and Ubuntu Linux. StarOffice and Lotus Symphony are “branded” identities for the “free” OpenOffice technology. I could name many more, but in all of these cases, the “branded” identities do not usually hide (and they are certainly not required to hide) the “free” identity that they are based on.

But what about Firefox? Firefox only has a “branded” identity. It does not have a “free” identity. If you take away the Firefox name (I’m not talking about logos here), you are left with software that has no name. Right now it is called Minefield, and in the past it has been Deer Park or Bon Echo, but it doesn’t have a name. You can’t even say it’s based on Mozilla Firefox, even if it is. (I’m not convinced this is enforceable, but it is what Mozilla says you have to do.)

We can better explain this with an example. Let’s say a company like Disney wanted to create version of Firefox that included a Disney extension and had a some custom theming for Disney, as well as some Disney bookmarks. They approach Mozilla first, but Mozilla says “no.” Disney now has two choices. They can either attempt to create “Firefox Community Edition, Disney version” or ship something from Disney called “the Disney Browser.” This browser would be Firefox modified with an extension, some theming and some rebranding, but all Mozilla and Firefox names would have to be removed, and they could not tell anyone that it is based on Firefox.

Now as far as the community edition idea goes, I don’t think this is what Mozilla intended and I believe they would complain. As a matter of fact, I bet you are going to see the whole community edition idea go away because it allows for the misuse of the Firefox trademark. In addition, the idea is so ambiguous, it’s kind of worthless anyway (Change certain preference settings? Where is this documented?).

“The Disney Browser” is a more likely scenario, and I think you will see that in the future, but honestly it’s just kind of sad. Why can’t someone say that the browser they ship is Firefox? Especially if the code inside is 100% Firefox with some theming/branding or extensions?

Mozilla really needs to fix this. The browser IS Firefox. The source code IS Firefox. They simply ship a branded version called “Mozilla Firefox” that uses their logos, their theme and their extensions. Other people should be free to use the name Firefox without Mozilla and without the Firefox logos, since Firefox is the ONLY term that identifies the browser. It’s not Mozilla. It’s Firefox. This is how other open source projects operate, and this is how Mozilla should operate. Unless they can come up with a good name that describes that browser without any branding.

Updating OpenService for Microformats

This post details the ongoing work that Gustavo Garcia and I have been doing at Our stated goal is to figure out the best way to extend Microsoft’s OpenService specification to allow for microformat support (and possibly other functionality). We definitely want to have more discussion on this, so if you are interested, please participate. Note that Microsoft has suggested that any changes we make be in a new name space to allow for good coexistence with IE. We’re investigating that.

This post assumes you have a basic understanding of what OpenService looks like, so you might want to read up on that first. So without further ado, here are our suggested changes to OpenService.

Support for more contexts

Currently IE supports three contexts: selection, link and document. A given action is applied based on the context where the user right clicks. For microformats, we would add support for microformat names as a possible context. We would also allow those microformat names to be followed by an item in the microformat so that actions could be shown based on the availability of data in the microformat. For example,

would indicate that the action would be available for any adr.

would indicate that the action would be available for any adr that also had a postal-code.

Domain scoping of actions

Currently a given action is available on every website. There are some actions that should only be displayed for a given site. For instance, cork’ uses tags to reference their wines, but they really only make sense in the context of their site. To solve this, we would introduce a new attribute to activityAction called domain that would specify which website should have the given action available.

More substitution variables

The substitution variables for the actions would have to be enhanced to allow for the substitution of values in the microformat. Here’s an example:


This action queries the country-name property directly from the adr microformat and substitutes it. If the referenced property is a plural property, all the items are put in one string separated by a space and then substituted.

Scripting Support

Unfortunately, for complex web services, just substituting variables in URLs and parameters is not enough. So to further enhance the functionality of the OpenServices XML files, we propose that scripting be allowed. These scripts would be evaluated in a sandbox with the contents of the microformat available as local variables (possibly prepended with the microformat name) with some additional helper functions added (XMLHTTPRequest, writing to a temporary directory). A simple example of where this is needed is Google Calendar. Google Calendar requires that if there is a dtstart, there must be a dtend. There’s really no way to convey this with simple string substitution. For some web services, some pretty complex JavaScript is needed. Here’s an example of how JavaScript might work.


Here we were able to use JavaScript to create some basic logic around the date and then the correct value is returned.

This idea is probably the most controversial, but I don’t see a better way to get the richness that is needed to interact with certain web services. If anyone has better ideas, I’d love to hear them.

Action Discovery on Web Pages

We’d also like to see the ability for a web page to advertise that they have a service available, similar to how OpenSearch works. For OpenService, it might look something like this:

We’re still working out how this would be discoverable to the user, but we think it should be in the specification.

On a completely unrelated note, if you are the praying kind, please keep the Chapman family in your prayers. They lost their 5 year old daughter yesterday in a tragic accident. My cousin Melissa works for them as their nanny, so she needs your prayers as well. She’s taking this pretty hard. Thanks.

Where are the microformats in Firefox 3?

With Firefox 3 RC1 available, I’m getting asked “Where are the microformats?” The answer is that there is a microformats API in Firefox 3, but unfortunately there is nothing available in the UI for this release. There are a couple reasons why this is the case, so I thought I would take some time to explain.

The primary reason that microformats aren’t exposed in the Firefox UI is that there was never any agreement as to how to expose them. Originally the idea was to have a “rich media sidebar,” but after implementing that in Operator, it was realized that it wouldn’t have much content in it most of the time. Plus sidebars take up a lot of real estate. Having a toolbar in Firefox didn’t make a lot of sense since, again, there would be a lot of screen real estate needed for something that the user wouldn’t use very much (yet). I liked the idea of an icon on the URL bar similar to how RSS feeds work, but the consensus was that noone wanted the awesome bar to become cluttered with small icons on the right. The other option was to make them available only when you right click on microformats, but this wasn’t very discoverable and the technical aspects of making it discoverable (icons on hover, etc.) were a little daunting. There was one really good idea related to adding a kind of bar on the left side that showed where the microformats were, but that idea really needed to be prototyped. So in the end, we were left with nothing in the UI.

There was also a second problem that wasn’t discussed as much, but was still a big issue – how to plug in new services. Currently Operator uses the concept of user scripts to allow the installation of additional microformats and connections to web services. Unfortunately, the method I chose (raw JavaScript files) introduces security and other issues. It works for Operator, but would not be a good method to put into the core browser.

So where does that leave things? We still haven’t solved the UI problem, but Microsoft has come up with a solution for the services problem that I am currently in the process of integrating into Operator. It’s called OpenService. I mentioned a few posts ago that I’m extending the specification a little bit so we can define Operator web services connections using XML. Tomorrow, I’ll go into some detail as to what I’m doing. Hopefully I can get some good feedback and work with Microsoft to standardize my additions to the specification.

Powered by Firefox

The discussion of how to brand products that use Mozilla technology has come up again. (1 2 3 4 5) This discussion has actually come up repeatedly over the years, with no conclusion. In the past I’ve given my opinion to Mozilla directly, but now I have a blog. So here’s my opinion.

I believe there are at least two very distinct situations here:

  • Shipping Mozilla technology (for instance, embedding Mozilla)
  • Shipping a customized version of the Firefox browser

Unfortunately both these things have all been lumped into “powered by Mozilla,” but customizing Firefox is not “powered by Mozilla,” it is “powered by Firefox”.

(Incidentally the term “powered by Firefox” has been used before to describe the Companion extension which was “developed in partnership by Mozilla and” and “chang[es] the browser’s look and feel.”)

But what would “powered by Firefox” mean in practice? I believe that it would mean a customized version of Firefox that adds to Firefox, but does not take away (more detail on that later). Here are some browsers that are “powered by Firefox.”

You’ll notice that these are all produced by Google or Mozilla. So why doesn’t Mozilla allow someone other than Google and themselves to ship customized versions of Firefox that are labeled as such? They certainly indicate that it is possible, but clearly it is not happening. I think I know why. It’s because of Mozilla’s Distribution Trademark Policy.

I understand that Mozilla Corporation owns the Firefox trademarks and as such, they have the right to do whatever they want with them and to actively work to protect the quality of a browser associated with those trademarks. I also understand that Mozilla Corporation is a business, and it is in their interest to partner with companies to produce customized versions of Firefox for revenue. But for them to dictate that the Mozilla Corporation is the only company that can customize Firefox and call it “Firefox” and use the Firefox logos is simply stifling competition.

There need to be better rules in place for other entities that want to customize the browser and distribute browsers with those customizations.

(And please don’t try to invoke Firefox Community Edition here. That’s not what we’re talking about. You can’t use logos and honestly calling something “My Company Browser – Firefox Community Edition” is a little cumbersome. Not to mention that fact that Mozilla provides no guidance on rebranding the installer or customizing just the name of the browser without rebuilding the whole thing from scratch.)

I propose that a new policy be created to supplement the Mozilla Community Edition Policy allowing for the creation of Firefox Brand Edition or Brand Browser – Powered by Firefox.

Here are some suggestions for how this would look:

  • Underlying browser must be a shipping version of Firefox and must receive updates from Mozilla
  • Default theme may be changed but user must have the ability to switch back to the original Firefox theme
  • Extensions may be installed provided they do not remove any built in Firefox behavior or hide it from the user
  • Extensions may not be hidden, but they may be marked uninstallable (note users can still disable them)
  • Browser must be installed in a directory other than “Mozilla Firefox” (to allow for coexistence with an official Firefox)
  • If the bookmarks are customized, the original bookmarks must be provided in some manner
  • Search engines may not be removed, but they may be added and the default may be changed

I would love to see Mozilla Corporation do something in this area so that some other businesses can compete with them on a level playing field.

As a side note, enterprises don’t have to worry about this restrictions as long as the customized browser is distributed within their organization (which is one entity). Note you need to be careful about distributing to independent contractors, as technically they are not your employees and you might violate the Mozilla Corp. distribution policy.

Update on Activities, Microformats and Operator

I haven’t blogged in a while, so I wanted to give everyone a quick update on som of my projects.


Version 0.7.1 of Firefox Activities is waiting patiently to be moved out of the AMO sandbox. Unfortunately my 0.7 version had a memory leak, so I missed my chance. Once Firefox 3.0b5 was released, the AMO queue got very long and 0.7.1 is lost somewhere in that queue.

That version matches the IE version of Activities feature for feature, except for the floating button that appears when you select text. Activities management is much better, and I was able to support both the uppercase and lower case version of the API (which I complained about earlier). In addition, the code has been substantially rewritten so that it doesn’t affect the global namespace at all.

Microformats in Firefox 3

I thought my Microformats API for Firefox 3 had settled down, but Dmitry’s Acid Test combined with Clint Talbert’s great unit tests and a post on the microformats-discuss list uncovered a few more issues. Unfortunately time is short, so only the API change will make it. Hopefully we’ll get the other parser fixes in a point release.


I’ve actually been spending quite a bit of time on Operator lately, working with Gustavo García to figure out how to move to an XML model for user scripts using Microsoft’s OpenService Format as a basis. Our primary motivation for this is to allow the installation of user scripts on the fly instead of the current model where you have to download them. We’ve actually made quite a bit of progress in this space, and hope to have something out soon for testing. Note Operator will still support the old user scripts model, especially for scripts that need access to things like the file system.

Here’s an example of what one of these new scripts might look like:

    Find with MapQuest

We’re also planning to allow small pieces of JavaScript to be embedded in the XML to allow more complex actions. These will be run in a sandbox to prevent security issues. If you want to be involved in the discussion of how we are going to do this, check out the microformats wiki.

Happy Birthday Mozilla

I guess I’ll pipe in here since I’m one of the few (only?) non-Netscape then, non-Mozilla now employees that was involved ten years ago and is still involved today.

Ten years ago, I was on a a team of IBM and Netscape folks that was working to make sure the code we wrote when we ported Netscape Navigator to OS/2 made it into the first release of the Mozilla code. And it did. We worked with a lot of great people back then at Netscape and IBM, a few of whom are still on the project today.

Things have changed a lot since then. Our home away from home, the Netscape Partner Engineering Center, is now a parking lot. But believe it or not, there are still OS/2 builds.

It was an amazing time and even through the ups and downs, I’ve really enjoyed working with this community.

Thanks for the memories, and here’s to ten more years.