Default Profile Directory Doesn’t Work in Firefox 46

It was recently discovered that support for using the defaults/profile directory to prepopulate a Firefox profile was removed in Firefox 46.

Here’s an AutoConfig file that adds back the functionality:

//
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/FileUtils.jsm");

if (!Services.prefs.prefHasUserValue("browser.startup.homepage_override.mstone")) {
  // New profile
  var defaultProfileDir = Services.dirsvc.get("GreD", Ci.nsIFile);
  defaultProfileDir.append("defaults");
  defaultProfileDir.append("profile");
  if (defaultProfileDir.exists()) {
    var profileDir = Services.dirsvc.get("ProfD", Ci.nsIFile);
    try {
      copyDir(defaultProfileDir, profileDir);
    } catch (e) {
      Components.utils.reportError(e);
    }
  }
}

function copyDir(aOriginal, aDestination) {
  var enumerator = aOriginal.directoryEntries;
  while (enumerator.hasMoreElements()) {
    var file = enumerator.getNext().QueryInterface(Components.interfaces.nsIFile);
    if (file.isDirectory()) {
      var subdir = aDestination.clone();
      subdir.append(file.leafName);
      try {
        subdir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
        copyDir(file, subdir);
      } catch (e) {
        Components.utils.reportError(e);
      }
    } else {
      try {
        file.copyTo(aDestination, null);
      } catch (e) {
        Components.utils.reportError(e);
      }
    }
  }
}

This should work for most file types, although it probably won’t work for bookmarks.html

I’ll also be adding this functionality to the next version of the CCK2 which will be released later today.

Please note: I reserve the right to delete comments that are offensive or off-topic.

Leave a Reply

Your email address will not be published. Required fields are marked *

14 thoughts on “Default Profile Directory Doesn’t Work in Firefox 46

  1. Mike, what’s your recommended way to cope with bootstrapped extensions?

    I looked into extensions.bootstrappedAddons, there are extensions that require their stuff to be written there in order to show up immediately (e.g. uBlock Origin). According to my knowledge I have to generate a json object containing the extension’s id, type, version and multiprocessCompatible variable. I already managed to get the relevant data out of a xpi, but I’m unsure how to achieve

    {“uBlock0@raymondhill.net”:{“version”:”1.7.4″,”type”:”extension”,”descriptor”:”C:\\Program Files (x86)\\Mozilla Firefox\\profile\\extensions\\uBlock0@raymondhill.net.xpi”,”multiprocessCompatible”:true,”runInSafeMode”:false}}

    for the prefs.js setting.
    How would you do it?

  2. This sucks, I just have a simple batch file that would install and copy the file to Firefox directory and when the user launches Firefox for the first time the file in the browser folder would just copy to the profile. Is there a easier way doing this without modifying all this stuff? It’s very confusing.

  3. Hello,

    I’m trying to implement the autoconfig functionality with the config file you have provided, but I seem to be missing something.

    I’ve created an autoconfig.js file inside of C:\Program Files (x86)\Mozilla Firefox\defaults\pref with the following content:
    pref(“general.config.filename”, “firefox.cfg”);
    pref(“general.config.obscure_value”, 0);

    I’ve created firefox.cfg at the root of C:\Program Files (x86)\Mozilla Firefox with the content directly from your post.

    My profile is stored at C:\Program Files (x86)\Mozilla Firefox\browser\defaults\profile, per the standard that functioned up until Firefox 46, which is the release that they removed the default profile functionality in.

    Thoughts on what I’m missing here?

    Thanks!

    • My code uses defaults/profile not browser/defaults/profile.

      You can add defaultProfileDir.append(“browser”); right after querying the directory for that to work.

  4. Hi Mike, I was wondering if you knew how to add a default mailto: handler. I’d like to configure the organization’s webmail as default handler for mailto: links, so I’ve tried searching for options on about:config but I only stumbled upon the ones shipped with Firefox and not mine. Thanks for the awesome CCK2, it’s really useful!

  5. Some of files was copied with this script, but mimetypes.rdf – not copied or was replaced.
    How to add to default mimetypes.rdf file records like this:

    ………

    ………………..
    In existing profile I can edit mimetype.rdf, but I want to make modifications in default file for new profiles.
    Before version 46.0 profile was created from “defaults” folder but now this didn`t work