Index: chrome/browser/history/starred_url_database.cc |
diff --git a/chrome/browser/history/starred_url_database.cc b/chrome/browser/history/starred_url_database.cc |
index 5336e07180f628468d3047c02493c3aa170a98fd..d0cc85c96d49f7678d763c4b4e637b665df12f52 100644 |
--- a/chrome/browser/history/starred_url_database.cc |
+++ b/chrome/browser/history/starred_url_database.cc |
@@ -66,6 +66,9 @@ void FillInStarredEntry(const sql::Statement& s, StarredEntry* entry) { |
case 3: |
entry->type = history::StarredEntry::OTHER; |
break; |
+ case 4: |
+ entry->type = history::StarredEntry::SYNCED; |
+ break; |
default: |
NOTREACHED(); |
break; |
@@ -213,6 +216,9 @@ StarID StarredURLDatabase::CreateStarredEntryRow(URLID url_id, |
case history::StarredEntry::OTHER: |
statement.BindInt(0, 3); |
break; |
+ case history::StarredEntry::SYNCED: |
+ statement.BindInt(0, 4); |
+ break; |
default: |
NOTREACHED(); |
} |
@@ -435,6 +441,29 @@ bool StarredURLDatabase::EnsureStarredIntegrityImpl( |
return false; |
} |
+ // Make sure the synced node exists. |
+ StarredNode* synced_node = GetNodeByType(*roots, StarredEntry::SYNCED); |
+ if (!synced_node) { |
+ LOG(WARNING) << "No bookmark synced folder in database"; |
+ StarredEntry entry; |
+ entry.folder_id = GetMaxFolderID() + 1; |
+ // TODO (yfriedman): Is this index right? |
+ if (entry.folder_id == 1) { |
+ NOTREACHED() << "Unable to get new id for synced bookmarks folder"; |
+ return false; |
+ } |
+ entry.id = CreateStarredEntryRow( |
+ 0, entry.folder_id, 0, UTF8ToUTF16("synced"), base::Time::Now(), 0, |
+ history::StarredEntry::SYNCED); |
+ if (!entry.id) { |
+ NOTREACHED() << "Unable to create synced bookmarks folder"; |
+ return false; |
+ } |
+ entry.type = StarredEntry::SYNCED; |
+ StarredNode* synced_node = new StarredNode(entry); |
+ roots->insert(synced_node); |
+ } |
+ |
// Make sure the other node exists. |
StarredNode* other_node = GetNodeByType(*roots, StarredEntry::OTHER); |
if (!other_node) { |
@@ -545,11 +574,17 @@ bool StarredURLDatabase::MigrateBookmarksToFileImpl(const FilePath& path) { |
entry.type = history::StarredEntry::OTHER; |
BookmarkNode other_node(0, GURL()); |
other_node.Reset(entry); |
+ entry.type = history::StarredEntry::SYNCED; |
+ BookmarkNode synced_node(0, GURL()); |
+ synced_node.Reset(entry); |
std::map<history::UIStarID, history::StarID> folder_id_to_id_map; |
typedef std::map<history::StarID, BookmarkNode*> IDToNodeMap; |
IDToNodeMap id_to_node_map; |
+ history::UIStarID synced_folder_folder_id = 0; |
+ history::StarID synced_folder_id = 0; |
+ |
history::UIStarID other_folder_folder_id = 0; |
history::StarID other_folder_id = 0; |
@@ -562,6 +597,10 @@ bool StarredURLDatabase::MigrateBookmarksToFileImpl(const FilePath& path) { |
other_folder_id = i->id; |
other_folder_folder_id = i->folder_id; |
} |
+ if (i->type == history::StarredEntry::SYNCED) { |
+ synced_folder_id = i->id; |
+ synced_folder_folder_id = i->folder_id; |
+ } |
} |
} |
@@ -573,12 +612,17 @@ bool StarredURLDatabase::MigrateBookmarksToFileImpl(const FilePath& path) { |
id_to_node_map[other_folder_id] = &other_node; |
folder_id_to_id_map[other_folder_folder_id] = other_folder_id; |
} |
+ if (synced_folder_folder_id) { |
+ id_to_node_map[synced_folder_id] = &synced_node; |
+ folder_id_to_id_map[synced_folder_folder_id] = synced_folder_id; |
+ } |
// Iterate through the entries again creating the nodes. |
for (std::vector<history::StarredEntry>::iterator i = entries.begin(); |
i != entries.end(); ++i) { |
if (!i->parent_folder_id) { |
DCHECK(i->type == history::StarredEntry::BOOKMARK_BAR || |
+ i->type == history::StarredEntry::SYNCED || |
i->type == history::StarredEntry::OTHER); |
// Only entries with no parent should be the bookmark bar and other |
// bookmarks folders. |
@@ -616,7 +660,7 @@ bool StarredURLDatabase::MigrateBookmarksToFileImpl(const FilePath& path) { |
// Save to file. |
BookmarkCodec encoder; |
scoped_ptr<Value> encoded_bookmarks( |
- encoder.Encode(&bookmark_bar_node, &other_node)); |
+ encoder.Encode(&bookmark_bar_node, &other_node, &synced_node)); |
std::string content; |
base::JSONWriter::Write(encoded_bookmarks.get(), true, &content); |