Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(240)

Unified Diff: chrome/browser/sync/glue/bookmark_model_associator.cc

Issue 6931018: Initial implementation of "Synced Bookmarks" folder. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Merge Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync/glue/bookmark_model_associator.cc
diff --git a/chrome/browser/sync/glue/bookmark_model_associator.cc b/chrome/browser/sync/glue/bookmark_model_associator.cc
index c8395013242dde72c88ab48e2ccda0c9c04fa1a1..c01829bc5b36ecb50cc711f07207200d3835cdee 100644
--- a/chrome/browser/sync/glue/bookmark_model_associator.cc
+++ b/chrome/browser/sync/glue/bookmark_model_associator.cc
@@ -6,6 +6,7 @@
#include <stack>
+#include "base/command_line.h"
#include "base/hash_tables.h"
#include "base/message_loop.h"
#include "base/task.h"
@@ -17,6 +18,7 @@
#include "chrome/browser/sync/syncable/autofill_migration.h"
#include "chrome/browser/sync/syncable/nigori_util.h"
#include "chrome/browser/sync/util/cryptographer.h"
+#include "chrome/common/chrome_switches.h"
#include "content/browser/browser_thread.h"
namespace browser_sync {
@@ -40,6 +42,7 @@ namespace browser_sync {
// TODO(ncarter): Pull these tags from an external protocol specification
// rather than hardcoding them here.
static const char kBookmarkBarTag[] = "bookmark_bar";
+static const char kSyncedBookmarksTag[] = "synced_bookmarks";
static const char kOtherBookmarksTag[] = "other_bookmarks";
// Bookmark comparer for map of bookmark nodes.
@@ -232,6 +235,7 @@ void BookmarkModelAssociator::Disassociate(int64 sync_id) {
bool BookmarkModelAssociator::SyncModelHasUserCreatedNodes(bool* has_nodes) {
DCHECK(has_nodes);
*has_nodes = false;
+ bool has_synced_folder = true;
int64 bookmark_bar_sync_id;
if (!GetSyncIdForTaggedNode(kBookmarkBarTag, &bookmark_bar_sync_id)) {
return false;
@@ -240,6 +244,10 @@ bool BookmarkModelAssociator::SyncModelHasUserCreatedNodes(bool* has_nodes) {
if (!GetSyncIdForTaggedNode(kOtherBookmarksTag, &other_bookmarks_sync_id)) {
return false;
}
+ int64 synced_bookmarks_sync_id;
+ if (!GetSyncIdForTaggedNode(kSyncedBookmarksTag, &synced_bookmarks_sync_id)) {
+ has_synced_folder = false;
+ }
sync_api::ReadTransaction trans(user_share_);
@@ -253,10 +261,18 @@ bool BookmarkModelAssociator::SyncModelHasUserCreatedNodes(bool* has_nodes) {
return false;
}
+ sync_api::ReadNode synced_bookmarks_node(&trans);
+ if (has_synced_folder &&
+ !synced_bookmarks_node.InitByIdLookup(synced_bookmarks_sync_id)) {
+ return false;
+ }
+
// Sync model has user created nodes if either one of the permanent nodes
// has children.
*has_nodes = bookmark_bar_node.GetFirstChildId() != sync_api::kInvalidId ||
- other_bookmarks_node.GetFirstChildId() != sync_api::kInvalidId;
+ other_bookmarks_node.GetFirstChildId() != sync_api::kInvalidId ||
+ (has_synced_folder &&
+ synced_bookmarks_node.GetFirstChildId() != sync_api::kInvalidId);
return true;
}
@@ -346,14 +362,32 @@ bool BookmarkModelAssociator::BuildAssociations() {
<< "are running against an out-of-date server?";
return false;
}
+ // We only need to ensure that the "synced bookmarks" folder exists on the
+ // server if the command line flag is set.
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableSyncedBookmarksFolder) &&
+ !AssociateTaggedPermanentNode(bookmark_model_->synced_node(),
+ kSyncedBookmarksTag)) {
+ LOG(ERROR) << "Server did not create top-level synced nodes. Possibly "
+ << "we are running against an out-of-date server?";
+ return false;
+ }
int64 bookmark_bar_sync_id = GetSyncIdFromChromeId(
bookmark_model_->GetBookmarkBarNode()->id());
DCHECK(bookmark_bar_sync_id != sync_api::kInvalidId);
int64 other_bookmarks_sync_id = GetSyncIdFromChromeId(
bookmark_model_->other_node()->id());
DCHECK(other_bookmarks_sync_id != sync_api::kInvalidId);
+ int64 synced_bookmarks_sync_id = GetSyncIdFromChromeId(
+ bookmark_model_->synced_node()->id());
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableSyncedBookmarksFolder)) {
+ DCHECK(synced_bookmarks_sync_id != sync_api::kInvalidId);
+ }
std::stack<int64> dfs_stack;
+ if (synced_bookmarks_sync_id != sync_api::kInvalidId)
+ dfs_stack.push(synced_bookmarks_sync_id);
dfs_stack.push(other_bookmarks_sync_id);
dfs_stack.push(bookmark_bar_sync_id);
@@ -486,14 +520,24 @@ bool BookmarkModelAssociator::LoadAssociations() {
// We should always be able to find the permanent nodes.
return false;
}
+ int64 synced_bookmarks_id = -1;
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableSyncedBookmarksFolder) &&
+ !GetSyncIdForTaggedNode(kSyncedBookmarksTag, &synced_bookmarks_id)) {
+ // We should always be able to find the permanent nodes.
+ return false;
+ }
// Build a bookmark node ID index since we are going to repeatedly search for
// bookmark nodes by their IDs.
BookmarkNodeIdIndex id_index;
id_index.AddAll(bookmark_model_->GetBookmarkBarNode());
id_index.AddAll(bookmark_model_->other_node());
+ id_index.AddAll(bookmark_model_->synced_node());
std::stack<int64> dfs_stack;
+ if (synced_bookmarks_id != -1)
+ dfs_stack.push(synced_bookmarks_id);
dfs_stack.push(other_bookmarks_id);
dfs_stack.push(bookmark_bar_id);
@@ -522,6 +566,7 @@ bool BookmarkModelAssociator::LoadAssociations() {
// Don't try to call NodesMatch on permanent nodes like bookmark bar and
// other bookmarks. They are not expected to match.
if (node != bookmark_model_->GetBookmarkBarNode() &&
+ node != bookmark_model_->synced_node() &&
node != bookmark_model_->other_node() &&
!NodesMatch(node, &sync_parent))
return false;
« no previous file with comments | « chrome/browser/sync/glue/bookmark_change_processor.cc ('k') | chrome/browser/sync/profile_sync_service_bookmark_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698