CCK Wizard Beta for Firefox 4

Update: Beta 2 available to fix a bug with adding prefs

Have you ever needed to customize Firefox for deployment with in your organization or even to your family? That's what the CCK Wizard is all about. It allows you to create an add-on that customizes Firefox. You can learn more about what it does at addons.mozilla.org.

I've recently updated the CCK Wizard for Firefox 4 and have made a beta available. You can click here to install it. Once everything looks good with the beta, I'll put it on AMO.

So what's the future of the CCK Wizard?

Reimagining the CCK Wizard

When I originally created the CCK Wizard for Firefox, my goal was to keep the user interface as close to the Netscape CCK as possible. Over time, I added new functionality, but I kept holding on to the original design. With Firefox 4 approaching, I think it's time to reimagine what the CCK should be.

I'd really like to try to engage the community in figure out what to do next. What should the UI look like? Is there missing functionality?

So please do me a favor, install the CCK Wizard and post your opinion. I'd love to take the CCK Wizard in a new direction, but I need some helping deciding which way to go.

Creating a Customized Firefox Distribution

You may have heard of the the Firefox Build Your Own Browser Project. On the web page, it says it "is a simple way that your organization can create and distribute a customized version of Firefox." I think BYOB is a great start to solving the distribution problem, but it's missing one key thing - the ability to bundle your own add-ons.

What I'm going to do with this post is explain exactly how BYOB works internally so that you can create your own distribution that has all the customizations you want. There are a some downsides to our method - primarily that we are Windows only and that we can't sign our installers with the Mozilla certificate. But it's the only way we can create a distribution that includes our own add-ons.

Customizing the Firefox Installer on Windows

One of the questions I get asked a lot is how to customize the Firefox installer on Windows and how to bundle extensions with it. I've spent the past few days learning a great deal about this subject, so I thought I would take this opportunity to provide a refresher on working with the Firefox installer on Windows. I'm going to do it as a Q&A so hopefully folks will get answers to the common questions they have.

Standard disclaimer: Under no circumstances should you use this information to create a custom Firefox install and redistribute it to anyone outside your organization. If you want more information, you can consult the Mozilla Foundation Trademark Policy.

What tools do I need to work with the Firefox installer?

The primary tool you need is 7-Zip. I install the MozillaBuild package which gives me all the tools I need. Even though the Firefox Installer is NSIS based, we will not need to use NSIS for most customizations. I'll talk a little bit about the end about what kinds of things you would need NSIS to do.

How do I unpack the Firefox installer?

The Firefox installer is created using 7-Zip. So you can grab any of the Windows installers that end in EXE and unpack them. Any of the Windows installers on the Firefox download page will work. Once you've downloaded the EXE, create a temporary directory and type:

7z x "Firefox Setup 3.6.3.exe"


This will unpack the contents of the installer so we can modify it.

How do I bundle my extension with the Firefox installer?

Bundling your extension with the Firefox installer is just a matter of putting it in the right place. Then when we package up the installer at the end, it will get installed along with Firefox. For most extensions, the right place is nonlocalized/extensions. Inside that directory, create a subdirectory that corresponds to the ID of the extension you want to preinstall with Firefox. Then unzip the XPI into that directory. You can find the ID by looking at the install.rdf file inside the XPI. You can add as many extensions as you want into the installer.

What are some useful extensions I can bundle with Firefox

I've created two extensions that create interesting things to bundle with Firefox. The first is the CCK Wizard. The CCK Wizard can be used to change various defaults in Firefox so that you can customize it for deployment in your organization. The second is Rebrand. Rebrand allows you to change the internal branding used in Firefox.

Can I change the names used in the installer?

Yes, you can change the names used in the installer. To do this, you need to create a directory called distribution inside the localized directory that was created when you unpacked the installer. Create a file called setup.ini in this directory. Here's what it looks like:

[Branding]
BrandFullName=Mike's Browser
BrandShortName=Browser


BrandFullName will be used to replace "Mozilla Firefox" and BrandShortName will be used to replace "Firefox".

Can I change the images used in the installer?

Yes, you can change the images used in the installer. In that same directory where you put the setup.ini, you can put two files, modern-wizard.bmp and modern-header.bmp. The first images corresponds to the large image on the first page of the installer. The second image corresponds to the small image that is used on later pages of the installer. You can use the linked images as a reference to know what size to make these images.

How do I repackage the installer?

To repackage the installer, first you need to zip up the changes that you made. Type:

7z a -r -t7z app.7z -mx -m0=BCJ2 -m1=LZMA:d24 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3


This will create a file called app.7z that has all the changes we made. Now we need to package that file with some other files to create the final EXE. We'll need the file 7zSD.sfx which you can download from Mozilla. And we'll need a file called app.tag which you can create. It looks like this:

;!@Install@!UTF-8!
Title="Mozilla Firefox"
RunProgram="setup.exe"
;!@InstallEnd@!


Once we have these files, we can run the command:

copy /B 7zSD.sfx+app.tag+app.7z our_new_installer.exe


to package them all as an EXE. Don't forget the /B. It indicates that the files are binary so Windows won't put an EOF marker on them.

Can I change the defaults that are set in the installer like the install directory or the checkboxes?

At this time, there is no way to change the defaults in the installer without rebuilding the installer. There's a bug open on this with a patch, so hopefully this will be fixed for Firefox 4.

Can I make my totally rebranded Firefox coexist nicely with an existing Firefox?

There are a couple ways to do this. The easiest way is to use the -no-remote parameter when you start Firefox. This causes the Firefox you are starting to not connect to the Firefox that is currently running. When you do this, you have to specify a different profile using the -P parameter. Alternatively, you can change the internal identifiers that Firefox uses. Then it will be considered to be a completely different browser. If you choose to do this, you should be aware that you will not receive updates and there will be other side effects. This is not a decision that should be taken lightly. Also, your profiles will be stored in different locations as well. If you want to do this, check out the file application.ini in the nonlocalized directory. The variables you want to change are Vendor and Name. Again, you do this at your own risk.

What can I do if I'm willing to rebuild the installer with NSIS?

If you are willing to rebuild the installer, you can change things like the name of the entry in the Add/Remove programs list, as well as the install directory and other defaults. This is a nontrivial exercise because some of the required files are built as part of the Mozilla build proces and are not available in the build tree. If you're really interested in doing this, you can contact Kaply Consulting and we can talk about it.

I hope this answered some questions folks have. If anyone has any more questions, please don't hesistate to ask.

Hiding the CCK

In previous versions of the CCK, I provided the ability to hide and or/lock the CCK that is generated. Locking prevents the user from uninstalling the add-on, but it is rather useless since the user can still disable it. Hiding preventing the user from disabling or uninstalling.

Unfortunately Mozilla removed the ability for an add-on to hide itself in Firefox 3.6.

Luckily working around this is very easy and will be included in the next version of the CCK Wizard. In order to make this work, I'm going to provide one option that hides the add-on. Lock and hide will no longer be separate. This seems rather logical since the lock option is pretty useless by itself.

Note that none of these options work unless the add-on is installed in the same directory where the Firefox executable is located.

CCK Wizard Update and FAQs

I've updated the CCK Wizard for Firefox 3.6. It's available here. It will be on AMO once the translations are done and if no one finds any major issues. Here's a summary of the changes:

  • Updated for new Firefox 3.6 proxy panel
  • Two CCKs can now coexist (Company Identifiers must be unique to each CCK)
  • Bundling XPIs and JARs no longer uses XPI bundles - they are explicitly installed upon first run of the CCK (please test this if you bundle multple XPIs)
  • All translated CCK Wizards should now be working
  • First run screen added to CCK Wizard install
  • A few bugs fixed

Some other items of note:

As I mentioned before, I've moved CCK Wizard development to Google Code. Please feel free to open up bugs there.

Going forward, I'm going to add the ability to do more locking down of functionality in Firefox. If you have specific needs, please open bugs in Google Code.

To close this post out, I want to answer a couple questions about CCK Wizard that are asked a lot.

What is the right way to install the CCK?

There are multiple ways the CCK can be installed based on your needs. I'll go through all those ways.

Standard install - The XPI that is created by the CCK Wizard is just a Firefox extension, so as such it can be placed on a web page and users can simply click to install. You can get more information on how to do this from the Mozilla developer center.

In the Firefox directory - Extensions can be installed directly into the Firefox directory. Inside of the directory where the Firefox executable is located, there is a directory called extensions. Inside this directory, you can create a directory with the same ID as your CCK and then unzip your CCK into that directory. This is the only location where you can hide the add-on.

As part of a Firefox install - I've previously documented how to bundle the CCK in the installer and how to package the installer on Windows. These instructions still hold true.

Globally - There are designated locations in different operating systems where extensions can be installed and they are picked up by Firefox. You can get more information on these locations at the Mozilla Developer Center. This involves unzipping the CCK package in a specific location on the users hard drive into a directory that is named the same as the ID of the CCK. Using this method, you can manage the CCK package centrally and the user cannot uninstall the CCK from Firefox.

Via the Windows Registry - If you are on Windows, extensions can be installed via the Windows registry. This is documented at the Mozilla Developer Center. This involves unzipping the CCK package that you created to a central location and then adding a registry key that tells Firefox where to find the CCK. Using this method, you can manage the CCK package centrally and the user cannot uninstall the CCK from Firefox.

What do the options "Do not show this extension in the extension manager" and "Prevent the uninstall of this extension" do? They don't seem to work for me.

These options only work if your CCK is located in the extensions directory where the Firefox executable is located.

If you have any more questions, feel free to ask in the comments.

Do you need to do even more customization of Firefox for your organization? That's what we do. Contact Kaply Consulting.

CCK Wizard Status

With the release of Firefox 3.6, people are already asking me about a new CCK Wizard. I am working on an update. You can get a beta of that here. Primary changes are more information on the proxy page, ability to open an existing CCK and better coexistence of multiple CCKs.

Most interesting news on the CCK front is that I've decided to move it to Google Code instead of maintaining in the Mozilla trees. The URL is http://code.google.com/p/ff-cckwizard/. My primary reason for doing this is honestly that I'm not really contributing to Mozilla/Firefox proper anymore and messing with Mercurial isn't worth it for me (I know, lame excuse.) It has some other advantages, though, like having my own bug reporting system and not having to get any reviews/approvals for checkins.

So if you have ideas/suggestions/bugs for the CCK Wizard, please open them in Google Code.

Also note that CCK Wizard is something I do on the side, so my time is limited. Contributions help. I know there are a lot of folks who depend on this for the business. Any and all love is appreciated.

I Couldn't Stay Away From the CCK

So it just so happens that some of the work I'm doing before I leave IBM involves the CCK, so I ended up working on it and fixing some bugs. In addition, a company asked for a feature that was pretty easy to implement. So here for your testing pleasure is:

CCK Wizard version 1.2.5

Here's a summary of what's changed:

  • Dropped support for Firefox 2
  • Added support for specifying sites where cookies are always allowed
  • Added support for specifying sites to deny popups/installs/cookies
  • Rewrote CCKService XPCOM Component to be a little cleaner
  • Fixed problem where sometimes a created CCK wouldn't install (ZIP path problem)
  • Fixed problem where sometimes bookmarks weren't created on first load
  • Fixed problem where bookmarks weren't created in the same order as specified in the CCK Wizard
  • Made the additional help menu look better on Mac

Enjoy!

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 licensing@mozilla.org.

And please let me know if you find any bugs.