How do I automatically apply the same theme to Chromium for all new users?

Note: when I say Chromium, I mean both Google Chrome and Chromium.

What I do know about applying the same settings for applications to all new users is either defining an schema/override file in /usr/share/glib-2.0/schemas or copying the folder/file to /etc/skel.

When a new user is created, that user is automatically given the gsettings/config file.

So my question is - how do I apply a theme to Chromium and get this to apply to all users? Does Chromium use gsettings type settings? If so, which ones?

Does Chromium use config files (e.g. in ~/.config)? If so, which ones?

I happen to be using either Gnome or Unity - but I suspect any answer will apply to any desktop environment.


I've found this link for a similar Q for Chrome - but for Windows.

Does this apply somehow to Ubuntu ... and also to Chromium?


Having had a quick chat in the general room ... /etc/chromium-browser/customizations was mentioned - so this may give a clue on what may need to be done for themes.


User config directory

Chromium does use a ~/.config directory (~/.config/chromium - ~/.config/google-chrome for Google Chrome), customisable using a command line flag:

~ man google-chrome | perl -00 -ne 'print if /\.config/'
       --user-data-dir=DIR
              Specifies  the directory that user data (your "profile") is kept
              in.  Defaults to ~/.config/google-chrome .   Separate  instances
              of  Google  Chrome  must  use  separate  user  data directories;
              repeated invocations of google-chrome  will  reuse  an  existing
              process for a given user data directory.

So, the simplest way to create a new configuration is to run either of these with --user-dir=newconfig, customize as needed, then copy over the newconfig directory to /etc/skel/.config/chromium and /etc/skel/.config/google-chrome.


Administrative policies

The last, but perhaps the most flexible, way would be to use /etc/chromium-browser/policies (or /etc/opt/chrome/policies for Google Chrome). The Chromium Documentation for Administrators has pages for Windows, Mac and Linux.

Essentially, on Linux, you make use of JSON files in policies/managed and policies/recommended. The managed directory is for settings that are enforced - the user can't change them.

I'll just adapt the example given for Linux:

$ cat /etc/chromium/policies/managed/test_policy.json
{
  "HomepageLocation": "www.chromium.org",
  "HomepageIsNewTabPage": false
}

Now, on Chromium, the homepage is locked to www.chromium.org. Correspondingly, if the file had been in recommended, the user can change their home page.

The current list of policies is available here. It lists policies, their descriptions and example values.

To install a theme or an extension, the ExtensionInstallForcelist policy can be used. It can't be recommended, only managed:

$ cat /etc/chromium/policies/managed/test_policy.json
{
    "ExtensionInstallForcelist": [
        "gighmmpiobklfepjocnamgkkbiglidom;https://clients2.google.com/service/update2/crx",
        "jeonacmfdmkgfmmdejlinolgjomhcbmh;https://clients2.google.com/service/update2/crx",
    ],
}

This will install the Adblock Extension and the GData Centers 1 Council Bluffs, Iowa theme.


/etc/chromium-browser/customizations

/etc/chromium-browser/customizations/00-example seems to indicate it can only be used for detecting plugins and adding command line flags:

$ cat etc/chromium-browser/customizations/00-example
##   Register plugins this way.  The two parameters are yours to fill.

#discover_registration /path/to/plugin/plugin.info library-name

##   A way to influence the running. This is read-write for you. Please
##   Append only.

#CHROMIUM_FLAGS="${CHROMIUM_FLAGS} --option=value"

##   Read-only variables guaranteed to be set, with example values.

#APPNAME='chromium-browser'
#BUILD_DIST='Ubuntu 14.04'
#DESKTOP_SESSION='ubuntu'
#LIBDIR='/usr/lib/chromium-browser'
#UPSTREAM_VERSION='34.0.1847.131'

(That's from 48.0.2564.116-0ubuntu0.14.04.1.1111, by the way, despite what the UPSTREAM_VERSION might indicate. And for some reason, only the 32-bit package on Ubuntu 14.04 has it, not the 64-bit one.)

The list of command line flags for Chromium can be found at http://peter.sh/experiments/chromium-command-line-switches/, according to
the Chromium website.

discover_registration doesn't seem to be an executable command - it might be a shell function, but I'm inclined to suspect these files are not parsed by our normal shells. In any case, I think this method is not sufficiently versatile, and it's difficult to override if all you want is for users to start off with some settings while letting them change those later. And the flags don't seem to provide a way of installing a theme or an extension.


GSettings

A quick scan of dconf-editor on my system indicates Google Chrome doesn't use it. Neither, apparently (thanks @Serg), does Chromium.


Conclusion

All told, either of the first two methods can be used, and Google Chrome supports whatever Chromium does, but with different paths. Where Chromium has /etc/chromium-browser and ~/.config/chromium, Google Chrome has /etc/opt/chrome and ~/.config/google-chrome, respectively. The first method is OK for one-time initialization, anything more would require the second method.

Since not all settings can be configured using policies, you might have to use both of them.