3 Answers
3

The newtab page is not generated, it is a resource built-into Chrome that is loaded and processed at runtime. It would of course be easier to modify the New Tab page with an extension, but you can edit it to make your changes permanent (ie, built-in, even when running in bare-minimum mode with all plugins and extensions disabled), however you would have to do so again after each update (though this can be made easier in various ways). If you want to go this route, you can find the New Tab page in the file CHROME.DLL.

First close all instances of Chrome/Chromium (make sure that no instances of chrome.exe are present in the Task Manager), then make a backup copy of chrome.dll (ResHacker does this automatically, but you’ll want a spare copy just in case).

Now open chrome.dll in a resource editor such as ResHacker. The page is in the binary (BINDATA) section, under resource 523—the number may change, but search for the string bookmarkbarattached:bookmarkbarattached;. (For some reason, there is no <title>New Page</title> element in the page, it is added at runtime even though it is a static string and has no dynamic content.)

At this point, you can make whatever changes you wish. You can add elements, scripts, styles, etc.

Other than the obvious (editing compiled, binary files and the need to re-edit after updates), one caveat is that you cannot link to local files (which makes sense since the browser is not a web server). The New Tab page is “located” at the URL chrome://newtab/, so any relative URIs will be relative to that). You can of course use absolute URIs such as http://foobar.org/images/blah.jpg or chrome://theme/css/newtab.css.

When you’re done, compile the script (if the resource-editor has such a button) and save it. Now run Chrome and your New Tab page should be shiny and new.

Below, I edited the New Tab page and threw in a picture in the bottom-right corner that toggles between two graphic files when you click on it (it was originally a simple link to my homepage, but I “fancied it up” to show that you can make significant changes to the New Tab page). I also set the style of the body element to a graphic file on my site, so I can easily change it by changing the file instead of re-editing the DLL file. Of course, even easier still would be to simply add an external style sheet to the page so that any changes can be made to a text file without re-editing the DLL file.

If you aren’t satisfied with just
changing the color of Speed Dial, you
can set a background image to really
change the look. Any image works, but
it currently needs to be hosted
online. The developer notes that they
will soon be adding support for local
background images, so keep an eye out
for future updates.

I was going to replace my old answer with this new updated one that is completely different, but apparently the old one is still valid for newer versions of Chrome, so I figured I would add this as a separate answer.

A few versions back, Chrome was changed so that everything in the browser is a web page. Once they implemented a user stylesheet, it became possible to change pretty much everything in the browser, including its own chrome.

You can indeed change your new-tab-page background without any themes, and easily too. In fact, you can customize most of the new-tab-page as well as other parts of Chrome. The only limitation is that you must use CSS to do it (you cannot replace content at this time).

It starts with a comment (always good to do, especially when the file starts to grow with all your customizations).

It creates a CSS rule for the html element with a themegravity attribute. I picked this because in the version I am using, this was the best way to narrow down the CSS rule to just the background of the NTP. Unfortunately this may vary or change from version to version, so you may have to experiment with the dev tools (F12) to find a good CSS selector that works.

The rule sets the background image to a tiling texture in the WikiMedia store.

It uses the !important modifier to ensure that the rule is used and not overridden by Chrome’s own internal stylesheets.

You can use any valid image for the background (anything that would work in a regular webpage). This gives you great flexibility because valid options include:

Externally hosted images

Local images on the system hard-drive

Built-in resources in Chrome

Base64-encoded image datastreams

Obviously you will want to be careful with externally hosted images to avoid malware as well as for performance reasons (you have to download it), but an external image has the benefit that you can assign an image on a host where the image is dynamically changed. For example, if there were a URL such as http://coolpics.com/dailypic.jpg which changes every day, then setting that would give you a new background every day! ʘ◡ʘ And you only had to use a single line which never even changes. Pretty cool huh?

Like I said before, the background isn’t the only thing you can change, you can change almost everything. All you need to do is to pick the right CSS selectors narrowly enough to target the element without affecting other webpages. This can be a little tricky, but certainly doable, especially since Chrome supports CSS3. And the best part is that the changes are made instantaneously when you save the stylesheet, so you don’t have to mess with installing anything, which makes testing a breeze. (Don’t forget to use the !important modifier.)

For example you can turn this:

into this monstrosity:

This example may not be pretty, but it demonstrates what can be done with just a bit of CSS. Below is the CSS I used to make this ugly sample; it includes a variety of hacks and tweaks that show the different kinds of selectors and images you can use. The selectors I chose work for for the version of Chrome I’m using at the moment without affecting other webpages that I’ve been to.

I’m not sure if Google approves of this usage (knowing them, they probably don’t), but it has worked for the past several versions and will probably continue to do so for a while.
–
SynetechNov 29 '13 at 21:59

Well it seems I was right, Google doesn’t like it when people do things they didn’t think of. They have completely removed all support for user stylesheets in version 33, so this no longer works. Even using a stylesheet extension won’t work because they cannot affect internal pages, so you cannot customize the NTP or fix their horrible UI design.
–
SynetechMar 28 '14 at 1:06