[Sync] Add support for associating a new Synced Bookmarks node.

Previously we would result in an unrecoverable error when the server sends
us a newly created Synced Bookmarks node. We now properly detect and associate
it, allowing us to also associate new bookmarks created under the Synced
Bookmarks folder.

In addition, we soften our conditions for unrecoverable errors. A bookmark
that cannot be added is ignored, instead of triggering an error. There are
very few of these, and are likely triggered by a crash during initial
association. 

BUG=108978
TEST=sync_integration_tests


Review URL: http://codereview.chromium.org/9570055

git-svn-id: http://src.chromium.org/svn/trunk/src/net/tools/testserver@127101 4ff67af0-8c30-449e-8e8b-ad334ec8d88c
diff --git a/testserver.py b/testserver.py
index 28405ff..11a7ad8 100755
--- a/testserver.py
+++ b/testserver.py
@@ -1649,16 +1649,17 @@
   """Handler for the main HTTP sync server."""
 
   def __init__(self, request, client_address, sync_http_server):
-    get_handlers = [self.ChromiumSyncMigrationOpHandler,
-                    self.ChromiumSyncTimeHandler,
+    get_handlers = [self.ChromiumSyncTimeHandler,
+                    self.ChromiumSyncMigrationOpHandler,
+                    self.ChromiumSyncCredHandler,
                     self.ChromiumSyncDisableNotificationsOpHandler,
                     self.ChromiumSyncEnableNotificationsOpHandler,
                     self.ChromiumSyncSendNotificationOpHandler,
                     self.ChromiumSyncBirthdayErrorOpHandler,
                     self.ChromiumSyncTransientErrorOpHandler,
-                    self.ChromiumSyncSyncTabsOpHandler,
                     self.ChromiumSyncErrorOpHandler,
-                    self.ChromiumSyncCredHandler]
+                    self.ChromiumSyncSyncTabsOpHandler,
+                    self.ChromiumSyncCreateSyncedBookmarksOpHandler]
 
     post_handlers = [self.ChromiumSyncCommandHandler,
                      self.ChromiumSyncTimeHandler]
@@ -1858,6 +1859,18 @@
     self.wfile.write(raw_reply)
     return True;
 
+  def ChromiumSyncCreateSyncedBookmarksOpHandler(self):
+    test_name = "/chromiumsync/createsyncedbookmarks"
+    if not self._ShouldHandleRequest(test_name):
+      return False
+    result, raw_reply = self.server._sync_handler.HandleCreateSyncedBookmarks()
+    self.send_response(result)
+    self.send_header('Content-Type', 'text/html')
+    self.send_header('Content-Length', len(raw_reply))
+    self.end_headers()
+    self.wfile.write(raw_reply)
+    return True;
+
 
 def MakeDataDir():
   if options.data_dir: