| Index: components/bookmarks/browser/bookmark_storage.cc
|
| diff --git a/components/bookmarks/browser/bookmark_storage.cc b/components/bookmarks/browser/bookmark_storage.cc
|
| index 38d6579d8733df2671344a8b2b97d69046814bf6..0591fb5cef08117aa3879cf45a3f64f03aa37e5f 100644
|
| --- a/components/bookmarks/browser/bookmark_storage.cc
|
| +++ b/components/bookmarks/browser/bookmark_storage.cc
|
| @@ -53,6 +53,7 @@ void LoadCallback(const base::FilePath& path,
|
| base::SequencedTaskRunner* task_runner) {
|
| startup_metric_utils::ScopedSlowStartupUMA
|
| scoped_timer("Startup.SlowStartupBookmarksLoad");
|
| + bool load_index = false;
|
| bool bookmark_file_exists = base::PathExists(path);
|
| if (bookmark_file_exists) {
|
| JSONFileValueSerializer serializer(path);
|
| @@ -76,15 +77,34 @@ void LoadCallback(const base::FilePath& path,
|
| UMA_HISTOGRAM_TIMES("Bookmarks.DecodeTime",
|
| TimeTicks::Now() - start_time);
|
|
|
| - start_time = TimeTicks::Now();
|
| - AddBookmarksToIndex(details, details->bb_node());
|
| - AddBookmarksToIndex(details, details->other_folder_node());
|
| - AddBookmarksToIndex(details, details->mobile_folder_node());
|
| - UMA_HISTOGRAM_TIMES("Bookmarks.CreateBookmarkIndexTime",
|
| - TimeTicks::Now() - start_time);
|
| + load_index = true;
|
| + }
|
| + }
|
| +
|
| + // Load any extra root nodes now, after the IDs have been potentially
|
| + // reassigned.
|
| + details->LoadExtraNodes();
|
| +
|
| + // Load the index if there are any bookmarks in the extra nodes.
|
| + const BookmarkPermanentNodeList& extra_nodes = details->extra_nodes();
|
| + for (size_t i = 0; i < extra_nodes.size(); ++i) {
|
| + if (!extra_nodes[i]->empty()) {
|
| + load_index = true;
|
| + break;
|
| }
|
| }
|
|
|
| + if (load_index) {
|
| + TimeTicks start_time = TimeTicks::Now();
|
| + AddBookmarksToIndex(details, details->bb_node());
|
| + AddBookmarksToIndex(details, details->other_folder_node());
|
| + AddBookmarksToIndex(details, details->mobile_folder_node());
|
| + for (size_t i = 0; i < extra_nodes.size(); ++i)
|
| + AddBookmarksToIndex(details, extra_nodes[i]);
|
| + UMA_HISTOGRAM_TIMES("Bookmarks.CreateBookmarkIndexTime",
|
| + TimeTicks::Now() - start_time);
|
| + }
|
| +
|
| task_runner->PostTask(FROM_HERE,
|
| base::Bind(&BookmarkStorage::OnLoadFinished, storage));
|
| }
|
| @@ -97,11 +117,13 @@ BookmarkLoadDetails::BookmarkLoadDetails(
|
| BookmarkPermanentNode* bb_node,
|
| BookmarkPermanentNode* other_folder_node,
|
| BookmarkPermanentNode* mobile_folder_node,
|
| + const LoadExtraCallback& load_extra_callback,
|
| BookmarkIndex* index,
|
| int64 max_id)
|
| : bb_node_(bb_node),
|
| other_folder_node_(other_folder_node),
|
| mobile_folder_node_(mobile_folder_node),
|
| + load_extra_callback_(load_extra_callback),
|
| index_(index),
|
| model_sync_transaction_version_(
|
| BookmarkNode::kInvalidSyncTransactionVersion),
|
| @@ -112,6 +134,10 @@ BookmarkLoadDetails::BookmarkLoadDetails(
|
| BookmarkLoadDetails::~BookmarkLoadDetails() {
|
| }
|
|
|
| +void BookmarkLoadDetails::LoadExtraNodes() {
|
| + extra_nodes_ = load_extra_callback_.Run(&max_id_);
|
| +}
|
| +
|
| // BookmarkStorage -------------------------------------------------------------
|
|
|
| BookmarkStorage::BookmarkStorage(
|
|
|