| 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..5f095a97c27d4bfbd2cbc51d1fc10e6cbf386162 100644
|
| --- a/components/bookmarks/browser/bookmark_storage.cc
|
| +++ b/components/bookmarks/browser/bookmark_storage.cc
|
| @@ -12,9 +12,11 @@
|
| #include "base/metrics/histogram.h"
|
| #include "base/sequenced_task_runner.h"
|
| #include "base/time/time.h"
|
| +#include "base/values.h"
|
| #include "components/bookmarks/browser/bookmark_codec.h"
|
| #include "components/bookmarks/browser/bookmark_index.h"
|
| #include "components/bookmarks/browser/bookmark_model.h"
|
| +#include "components/bookmarks/browser/managed_bookmarks_tracker.h"
|
| #include "components/bookmarks/common/bookmark_constants.h"
|
| #include "components/startup_metric_utils/startup_metric_utils.h"
|
|
|
| @@ -50,9 +52,11 @@ void AddBookmarksToIndex(BookmarkLoadDetails* details,
|
| void LoadCallback(const base::FilePath& path,
|
| BookmarkStorage* storage,
|
| BookmarkLoadDetails* details,
|
| + scoped_ptr<base::ListValue> initial_managed_bookmarks,
|
| 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 +80,31 @@ 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 the managed bookmarks.
|
| + if (!initial_managed_bookmarks->empty()) {
|
| + int64 max_node_id = ManagedBookmarksTracker::LoadInitial(
|
| + details->managed_node(),
|
| + initial_managed_bookmarks.get(),
|
| + details->max_id());
|
| + details->managed_node()->set_visible(!details->managed_node()->empty());
|
| + details->set_max_id(max_node_id);
|
| + load_index = true;
|
| + }
|
| +
|
| + 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());
|
| + AddBookmarksToIndex(details, details->managed_node());
|
| + 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,
|
| + BookmarkPermanentNode* managed_node,
|
| BookmarkIndex* index,
|
| int64 max_id)
|
| : bb_node_(bb_node),
|
| other_folder_node_(other_folder_node),
|
| mobile_folder_node_(mobile_folder_node),
|
| + managed_node_(managed_node),
|
| index_(index),
|
| model_sync_transaction_version_(
|
| BookmarkNode::kInvalidSyncTransactionVersion),
|
| @@ -134,16 +156,19 @@ BookmarkStorage::~BookmarkStorage() {
|
|
|
| void BookmarkStorage::LoadBookmarks(
|
| scoped_ptr<BookmarkLoadDetails> details,
|
| + scoped_ptr<base::ListValue> initial_managed_bookmarks,
|
| const scoped_refptr<base::SequencedTaskRunner>& task_runner) {
|
| DCHECK(!details_.get());
|
| DCHECK(details);
|
| details_ = details.Pass();
|
| - sequenced_task_runner_->PostTask(FROM_HERE,
|
| - base::Bind(&LoadCallback,
|
| - writer_.path(),
|
| - make_scoped_refptr(this),
|
| - details_.get(),
|
| - task_runner));
|
| + sequenced_task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&LoadCallback,
|
| + writer_.path(),
|
| + make_scoped_refptr(this),
|
| + details_.get(),
|
| + base::Passed(&initial_managed_bookmarks),
|
| + task_runner));
|
| }
|
|
|
| void BookmarkStorage::ScheduleSave() {
|
|
|