Hi! A bunch of us have been working on a feature to sync user data in Chromium with a Google account. (Surprise! :)) The great news is that we'll be starting to work directly in the Chromium project this week, and let me tell you, are we excited to do that! This email discusses how we're planning to get started, in detail (maybe too much detail... sorry).
We have built a library that implements the client side of our sync protocol<http://sites.google.com/a/chromium.org/dev/developers/design-documents/sync>, as well as the Google server-side infrastructure to serve Google Chrome users and synchronize data to their Google Account. Of course, all the code going into Chromium is open source, and the messages between the client and server use the open protobuf <http://code.google.com/p/protobuf/> format and library. Check out the sync developer page<http://sites.google.com/a/chromium.org/dev/developers/design-documents/sync> if you're interested in low-level goals and technical details. We will be landing this code in a few steps rather than one giant changelist for a number of reasons. First, this makes reviewing a *lot* easier; it isn't the most straightforward code by nature, so the more fine grained scrutiny the code gets, the better. Second, we've been working in a proprietary environment until now because of the dependency of having to build the complementary Google production server environment for syncing. As such, the code uses a small number of internal libraries that we need to open-source or replace, as well as libraries that would be redundant to what Chromium already includes. Removing these, and open sourcing the entire sync engine, is our highest priority and we expect this to take about three weeks. So how will we commit the code in pieces and not totally hose the build in the process? First, a little more background. You may have come across the CHROME_PERSONALIZATION #define when digging through Chromium source code. Right now, this is used in conjunction with a relatively small number of private c++ source files to conditionally build Chromium with sync enabled. These files are in fact a glue layer between Chromium and what is called the "syncapi", which is the bulk of the client library I was talking about above. On windows, syncapi is built into a DLL, and when CHROME_PERSONALIZATION is defined this DLL gets placed alongside chrome.dll for use at runtime. Syncapi builds and runs on Linux, but not Mac (yet). With the initial checkin, we will leave the CHROME_PERSONALIZATION #define as-is, so the sync code will not be built by default. We'll be working hard over the coming weeks to make sure the code passes all existing test suites that are part of the regular buildbot cycle, and on removing the #define. After that, our hope is that we will be free of the DLL altogether and have all the code checked in to the repository, fully functional or not, in a few weeks. We do *not* plan on ever checking in the windows-only syncapi dll to the main chromium repository. So until the dll is no longer needed, the public repository won't have all the bits to actually build Chromium with sync enabled. That said, we want to keep the sync build running smoothly, so we will use a combination of command-line flag (to enable sync) and delay-loading syncapi.dll only when it is needed. This will allow the "glue" code to compile as part of the normal Chromium build without introducing a dependency on this dll, yet still make it possible to run with the dll present. On that note, we're planning to use the syncapi DLL to produce a sync-enabled Google Chrome build for dev-channel users in a week or so, to get the feature into experimentally inclined hands. We have a great deal of infrastructure, both in the browser and in the form of production Google services, that need to start seeing real user traffic and usage. It takes a great deal of testing and confidence inspired by real usage statistics before any complex system like this can be deemed adequate for use by a large user base. So if we want to let all Google Chrome users use sync (and we do! we do!), we've got to get started on this pronto. Our developer page<http://sites.google.com/a/chromium.org/dev/developers/design-documents/sync> also covers the hierarchy of files we're landing that you can expect to start syncing (in the gclient sense) down in the next couple of days. We can't wait (*really*) to work on this with the rest of the Chromium community and going even further in creating the best browzr ever! Thanks for reading, and happy syncing! - the cloudy bunch {idana, nick, nickbaum, chee, munjal, brg, chron, zork, laforge, tejasshah, tim} at chromium.org --~--~---------~--~----~------------~-------~--~----~ Chromium Developers mailing list: chromium-dev@googlegroups.com View archives, change email options, or unsubscribe: http://groups.google.com/group/chromium-dev -~----------~----~----~----~------~----~------~--~---