Customizing Firefox - Extensions and the CCK Wizard
I've saved the most powerful method of customizing Firefox for last - writing an extension. Firefox extensions allow you to customize just about every aspect of Firefox. You can override default behaviors, customize the user interface, change and lock default preferences, even replace entire components.
I've found that when most people think of extensions, they think of consumer extensions like the add-ons available on addons.mozilla.org. But you can also build extensions to meet needs within your business. I've seen extensions for automating the fill in of forms as well as facilitating business processes. If you think a custom Firefox extension would help your business, there are companies that can help you with that, including me.
Going into detail about how to build an extension is not my goal here. There are plenty of resources on the web. MDN is a good place to start. What I would like to do is talk about an extension I built called the CCK Wizard.
Before we talk about what the CCK Wizard is, let's talk about what the CCK was. CCK stands for Client Customization Kit. The primary purpose of the CCK was customizing Netscape Communicator for ISPs. So when Earthlink wanted to deploy a customized Netscape with all their settings, they used the CCK to change the titlebar to say "Netscape Communicator by Earthlink," configure connection settings, set the homepage and more. It also repackaged Netscape with a custom installer. You can read more history here.
When I worked at IBM, one of our goals was to increase the enterprise adoption of Firefox, so I decided to take the concepts of the Mission Control Desktop and the Client Customization Kit and combine them to create a new extension for Firefox called the CCK Wizard.
The CCK Wizard takes you through a wizard to customize Firefox and then generates an XPI at the end that you can install into Firefox to use your customizations. The CCK Wizard allows you to:
- Change the default home page and startup override home page
- Change the title bar text
- Add a help menu item that links to a web page
- Provide sites for which popups, cookies and XPInstalls are allowed by default
- Preinstall browser plug-ins
- Preinstall search engines
- 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
- Set default proxy configurations
- Package other XPIs with your distribution
- Disable about:config
The CCK has been used by many companies including IBM to customize Firefox for their employees.
I would strongly recommend that you take a look at the CCK Wizard if you haven't. It might save you a lot of work.
The CCK Wizard is open source and is maintained at code.google.com. Anyone is welcome to participate.
To be perfectly honest, I have not been able to invest as much time in the CCK Wizard as I want. I've been able to keep it current with changes to Firefox, but have not been able to really give it the love it needs. I'm hoping to be able to carve out more time for it in the future.
And that concludes our series about customizing Firefox. Any questions?

Can we use this tool to configure browser set-up i.e Nav Bar / File Menu on off etc.? (Items that are saved in the localstore.rdf or is it easier to just copy your preferred localstore.rdf file as part of your install?
If the answer to the initial question is yes then how is this configured - at the Customize Preferences screen?
At this point, the CCK doesn't do that kind of customization. I created a separate add-on to do that:
http://mike.kaply.com/2012/02/13/making-firefox-10-more-like-firefox-3-6/
Hi. I'm new to this and I cant seem to find a user's manual or a step by step on how to use CCK effectively. I understand that that would be too much of a burden to put together. I tried using CCK, but there is much I am missing. I guess CCK assumes a background in computer Science, which I don't have... Soo for a guy like me, how do I use this program effectively?
I mainly want to use it to set bookmarks, to set the home page on the browser and to disable setting desktop backgrounds. Is there somewhere I can go for help?
Thanks
So for you, you can pretty much ignore most of the stuff in the CCK Wizard.
You need a name and a version. Then go to the page and fill in the homepage. Then go to the bookmarks page and fill that in.
Anything you don't understand, you can ignore.
Now as far as the desktop background thing goes, there's no way to disable that in the CCK. You have to remove that menuitem completely.
What kind of environment are you in? What kind of control do you have over the machines?
I am the tech coordinator/Net Admin for a K-8 School. We've been having a lot of issues with students finding inappropriate pictures and making them the background on the desktop using the "Set as desktop background" command from both Safari and Firefox.
Most of the student computers use MAC OS 10.5.8 with PPC machines (G4 and G5's) and the firefox version is 3.6.24.
They use a generic network/roaming account called "Student" with a lot of the preferences (including the Set desktop background) turned off, but they get around that by using the command we want to disable.
Any thoughts on that issue would be appreciated..
BTW, I did go through the wizard, as you suggested, but I'm not seeing the changes I made..
Thanks
Francisco, the CCK generates an extension which you would then need to install on the appropriate machines to override the things you want.
I think I can help with what you need. I'll just contact you via email.
I a also a K-8 Technology Coordinator and have the same issues as Francisco. Is there anyway you can email me this info as well!
Thanks
So, I'm floundering a bit. I'm trying to get rid of the first time run page, stop the checking for updates and set a homepage. We are using thin clients that autologon to an RDS environment. It's using a mandatory profile, and there is a group policy which i can edit. Firefox version is currently 3.6.28, and appears to be virtualized, running via C:\Program Files (x86)\Microsoft Application Virtualization Client\sfttray.exe. Any ideas/suggestions? Thanks.
Your setup is ripe for using an autoconfig file versus CCK.
See:
http://mike.kaply.com/2012/03/16/customizing-firefox-autoconfig-files/
You want to set app.update.enabled to false, browser.startup.homepage_override.mstone to ignore and browser.startup.homepage to data:text/plain,browser.startup.homepage=http://yourhomepage
I might not be right on that last one. If it doesn't work, let me know.
So I should mention I know nothing about javascript. So, would I enter the settings like this?:
// IMPORTANT: Start your code on the 2nd line
pref("app.update.enabled", false);
pref("browser.startup.homepage_override.mstone", ignore);
pref("browser.startup.homepage", "http://myhomepage");
Also, since this virtualized and the executable does not appear to me, where will i place the config file? Thanks.
Close:
pref("browser.startup.homepage_override.mstone", "ignore");
pref("browser.startup.homepage", "data:text/plain,http://myhomepage");
As far as where to place the file, you'll need to find the original Firefox install (on the server) and update the files there.
Hi Mike.
Great work on the CCK, if this works for me, it would be fantastic!
I have Firefox 13.01 installed on a shared computer (actually, terminal server, but that shouldnt matter). Previously on older versions of FF, I have created a config file to set the items I require (Homepage, Proxy, a couple of general options). Its been fine, but I suspect that no longer works under FF13.01?
So, I have configured the CCK, and it does exactly what I want if I manually browse to the add-in and add it, but I want it to be automated for every user.
I created a subdirectory at \program files\mozilla firefox\extentions\{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}
I got the GUID from the install.rdf. Is that correct?
I then copied the cck.xpi and other files into that directory, and expected it to be automatically applied for users, but its not working.
Do you have any tips for young players? Can you help?
Thanks.
You're doing pretty good.
Actually an autoconfig file should work fine on Firefox 13.0.1. There have been no changes that break that.
As far as installing the CCK goes, you have to unzip the contents of the CCK into the directory under mozilla firefox\extensions.
Also, I'm curious as to why you used that ID for your CCK? You can just use an ID like somename@company.tld.
This post should have the info you need.
http://mike.kaply.com/2012/02/09/integrating-add-ons-into-firefox/
Hi Mike.
Further to my last comment, if the same can be achieved with a configured .js file (like I used to), then that will also be fine. I notice a comment above about;
pref(“browser.startup.homepage”, “data:text/plain,http://myhomepage”);
How do I configure the .js file and what else do I need to do?
This article about autoconfig files will explain what you need to do:
http://mike.kaply.com/2012/03/16/customizing-firefox-autoconfig-files/
I'm not sure if my customization via the CCK Wizard works correctly (or at all). Is there a way to determine if it works as it is supposed to?
thanks, Manuel
The CCK Wizard generates an XPI that can be installed into Firefox just like any other extension. That's the easiest way to test it.
Can I use the CCK Wizard to customize FF 13 to look like FF 12, with the FF 12-size icons? (I am not a computer expert at all!)
I'm not sure what you mean. Firefox 13 and Firefox 12 don't have different size icons.
But the answer is no, the CCK does not provide for that kind of customization.
Can't seem to get the .js and .cfg files to work. Here is content of Firefox.cfg (in the executable folder):
// IMPORTANT: Start your code on the 2nd line
pref("app.update.enabled", false);
pref("browser.startup.homepage_override.mstone", "ignore");
pref("browser.startup.homepage", "data:text/plain,http://myhomepage");
...and here is Default.js (in the Defaults\pref subfolder):
pref('general.config.filename', 'firefox.cfg');
pref('general.config.obscure_value', 0);
What am i missing?
I'm not sure if this is an artifact of WordPress, or your paste, but I see different quotes (open/close) on your Javascript.
I've had other people have the problem that they accidentally used unicode quotes instead of regular quotes.
Yay! The quotes were affecting the file. I had originally cut from examples on your posts, and one from the autoconfig had the different quote. Anyway, I decided to retype both files from scratch. It then opened Firefox to "data:text/plain,http://myhomepage" instead of "http://myhomepage". So I removed data:text/plain, and it worked. I also wanted to suppress the welcome page, so I added the line for that from your comments on the autoconfig post, and that worked too. Here's the final text from the .cfg file:
// IMPORTANT: Start your code on the 2nd line
pref("app.update.enabled", false);
pref("browser.startup.hompage_override.mstone", "ignore");
pref("startup.homepage_welcome_url", "");
pref("browser.startup.homepage", "http://myhomepage");
Thanks a ton for your help!
Yeah, the quotes are definitely an issue on the blog.
I need to figure out if I can stop WordPress from doing that.
This is working great. The only thing is it launches the settings import wizard, because it's reloading a fresh user profile each logon. Would the following fix that (guessing here)?
pref("browser.cache.disk.smart_size.first_run",false);
To prevent profile migration, you have to add a file called override.ini.
See:
http://mike.kaply.com/2012/02/14/customizing-the-firefox-installer-on-windows-2012/
Search on "Can I stop Firefox from attempting to migrate settings from other browsers?"
P.S. Testing on a regular machine before virtualizing.
That did it. Thanks again!
Hi Mike,
I am using CCK wizard 1.3.4 with Firefox 15.0.1 and I have filled in
1)A startup homepage but it does not override the default settings
2)A popup denied list of sites which does not override the default settings. By the way, I did not find PopupDeniedSites in about:config.
3)A preference "network.negotiate-auth.trusted-uris" but it seems to override user's settings only if it is locked
4)My enterprise CA certificate but it does not show in the trusted CA list
5)A proxy packfile which works fine
Can you help me with these issues?
I apologize for missing this.
Are you still having these problems?