Index: chrome/browser/bookmarks/bookmark_model.cc |
=================================================================== |
--- chrome/browser/bookmarks/bookmark_model.cc (revision 17017) |
+++ chrome/browser/bookmarks/bookmark_model.cc (working copy) |
@@ -89,6 +89,7 @@ |
: profile_(profile), |
loaded_(false), |
persist_ids_(false), |
+ file_changed_(false), |
root_(GURL()), |
bookmark_bar_node_(NULL), |
other_node_(NULL), |
@@ -392,6 +393,9 @@ |
PrefService* pref_service = profile_->GetPrefs(); |
pref_service->SetBoolean(kPrefPersistIDs, persist_ids_); |
} |
+ // Need to save the bookmark data if the value of persist IDs changes. |
+ if (store_.get()) |
+ store_->ScheduleSave(); |
} |
bool BookmarkModel::IsBookmarkedNoLock(const GURL& url) { |
@@ -449,6 +453,8 @@ |
bookmark_bar_node_ = details->bb_node(); |
other_node_ = details->other_folder_node(); |
next_node_id_ = details->max_id(); |
+ if (details->computed_checksum() != details->stored_checksum()) |
+ SetFileChanged(); |
index_.reset(details->index()); |
details->release(); |
@@ -700,6 +706,16 @@ |
return next_node_id_++; |
} |
+void BookmarkModel::SetFileChanged() { |
+ file_changed_ = true; |
+ // If bookmarks file changed externally, the IDs may have changed externally. |
+ // in that case, the decoder may have reassigned IDs to make them unique. |
+ // So when the file has changed externally and IDs are persisted, we should |
+ // save the bookmarks file to persist new IDs. |
+ if (persist_ids_ && store_.get()) |
+ store_->ScheduleSave(); |
+} |
+ |
BookmarkStorage::LoadDetails* BookmarkModel::CreateLoadDetails() { |
BookmarkNode* bb_node = CreateBookmarkNode(); |
BookmarkNode* other_folder_node = CreateOtherBookmarksNode(); |