| Index: chrome/browser/sync/profile_sync_service_bookmark_unittest.cc
|
| diff --git a/chrome/browser/sync/profile_sync_service_bookmark_unittest.cc b/chrome/browser/sync/profile_sync_service_bookmark_unittest.cc
|
| index 1ed8d918dc14e55865f8f6f67b11f21c3f676bad..1236cf64782accce7bdf3af96d17adec05d6cf57 100644
|
| --- a/chrome/browser/sync/profile_sync_service_bookmark_unittest.cc
|
| +++ b/chrome/browser/sync/profile_sync_service_bookmark_unittest.cc
|
| @@ -12,7 +12,11 @@
|
| #include <map>
|
| #include <queue>
|
| #include <stack>
|
| +#include <utility>
|
|
|
| +#include "base/bind.h"
|
| +#include "base/bind_helpers.h"
|
| +#include "base/files/file_util.h"
|
| #include "base/location.h"
|
| #include "base/macros.h"
|
| #include "base/memory/scoped_ptr.h"
|
| @@ -24,21 +28,18 @@
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "base/time/time.h"
|
| #include "build/build_config.h"
|
| -#include "chrome/browser/bookmarks/bookmark_model_factory.h"
|
| -#include "chrome/browser/bookmarks/managed_bookmark_service_factory.h"
|
| -#include "chrome/browser/favicon/favicon_service_factory.h"
|
| -#include "chrome/browser/history/history_service_factory.h"
|
| -#include "chrome/test/base/testing_profile.h"
|
| #include "components/bookmarks/browser/base_bookmark_model_observer.h"
|
| #include "components/bookmarks/browser/bookmark_model.h"
|
| +#include "components/bookmarks/browser/bookmark_utils.h"
|
| #include "components/bookmarks/managed/managed_bookmark_service.h"
|
| #include "components/bookmarks/test/bookmark_test_helpers.h"
|
| +#include "components/bookmarks/test/test_bookmark_client.h"
|
| +#include "components/browser_sync/browser/profile_sync_test_util.h"
|
| #include "components/sync_bookmarks/bookmark_change_processor.h"
|
| #include "components/sync_bookmarks/bookmark_model_associator.h"
|
| #include "components/sync_driver/data_type_error_handler.h"
|
| #include "components/sync_driver/data_type_error_handler_mock.h"
|
| #include "components/sync_driver/fake_sync_client.h"
|
| -#include "content/public/test/test_browser_thread_bundle.h"
|
| #include "sync/api/sync_error.h"
|
| #include "sync/api/sync_merge_result.h"
|
| #include "sync/internal_api/public/change_record.h"
|
| @@ -55,8 +56,6 @@
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| -namespace browser_sync {
|
| -
|
| using bookmarks::BookmarkModel;
|
| using bookmarks::BookmarkNode;
|
| using syncer::BaseNode;
|
| @@ -64,13 +63,19 @@ using testing::_;
|
| using testing::Return;
|
| using testing::StrictMock;
|
|
|
| +namespace browser_sync {
|
| +
|
| +namespace {
|
| +
|
| #if defined(OS_ANDROID) || defined(OS_IOS)
|
| static const bool kExpectMobileBookmarks = true;
|
| #else
|
| static const bool kExpectMobileBookmarks = false;
|
| #endif // defined(OS_ANDROID) || defined(OS_IOS)
|
|
|
| -namespace {
|
| +std::string ReturnEmptyString() {
|
| + return std::string();
|
| +}
|
|
|
| void MakeServerUpdate(syncer::WriteTransaction* trans,
|
| syncer::WriteNode* node) {
|
| @@ -88,28 +93,6 @@ void MakeServerUpdate(syncer::WriteTransaction* trans, int64_t id) {
|
| MakeServerUpdate(trans, &node);
|
| }
|
|
|
| -class TestSyncClient : public sync_driver::FakeSyncClient {
|
| - public:
|
| - explicit TestSyncClient(Profile* profile) : profile_(profile) {}
|
| -
|
| - BookmarkModel* GetBookmarkModel() override {
|
| - return BookmarkModelFactory::GetForProfile(profile_);
|
| - }
|
| -
|
| - favicon::FaviconService* GetFaviconService() override {
|
| - return FaviconServiceFactory::GetForProfile(
|
| - profile_, ServiceAccessType::EXPLICIT_ACCESS);
|
| - }
|
| -
|
| - history::HistoryService* GetHistoryService() override {
|
| - return HistoryServiceFactory::GetForProfile(
|
| - profile_, ServiceAccessType::EXPLICIT_ACCESS);
|
| - }
|
| -
|
| - private:
|
| - Profile* profile_;
|
| -};
|
| -
|
| // FakeServerChange constructs a list of syncer::ChangeRecords while modifying
|
| // the sync model, and can pass the ChangeRecord list to a
|
| // syncer::SyncObserver (i.e., the ProfileSyncService) to test the client
|
| @@ -368,21 +351,30 @@ class ExtensiveChangesBookmarkModelObserver
|
| DISALLOW_COPY_AND_ASSIGN(ExtensiveChangesBookmarkModelObserver);
|
| };
|
|
|
| -
|
| class ProfileSyncServiceBookmarkTest : public testing::Test {
|
| protected:
|
| enum LoadOption { LOAD_FROM_STORAGE, DELETE_EXISTING_STORAGE };
|
| enum SaveOption { SAVE_TO_STORAGE, DONT_SAVE_TO_STORAGE };
|
|
|
| ProfileSyncServiceBookmarkTest()
|
| - : sync_client_(&profile_),
|
| - model_(NULL),
|
| + : managed_bookmark_service_(new bookmarks::ManagedBookmarkService(
|
| + profile_sync_service_bundle_.pref_service(),
|
| + base::Bind(ReturnEmptyString))),
|
| local_merge_result_(syncer::BOOKMARKS),
|
| - syncer_merge_result_(syncer::BOOKMARKS) {}
|
| + syncer_merge_result_(syncer::BOOKMARKS) {
|
| + CHECK(data_dir_.CreateUniqueTempDir());
|
| + browser_sync::ProfileSyncServiceBundle::SyncClientBuilder builder(
|
| + &profile_sync_service_bundle_);
|
| + builder.SetBookmarkModelCallback(base::Bind(
|
| + &ProfileSyncServiceBookmarkTest::model, base::Unretained(this)));
|
| + sync_client_ = builder.Build();
|
| + bookmarks::RegisterProfilePrefs(
|
| + profile_sync_service_bundle_.pref_service()->registry());
|
| + }
|
|
|
| ~ProfileSyncServiceBookmarkTest() override {
|
| + static_cast<KeyedService*>(managed_bookmark_service_.get())->Shutdown();
|
| StopSync();
|
| - UnloadBookmarkModel();
|
| }
|
|
|
| void SetUp() override { test_user_share_.SetUp(); }
|
| @@ -448,14 +440,37 @@ class ProfileSyncServiceBookmarkTest : public testing::Test {
|
| return node.GetId();
|
| }
|
|
|
| + // Create a BookmarkModel. If |delete_bookmarks| is true, the bookmarks file
|
| + // will be deleted before starting up the BookmarkModel.
|
| + scoped_ptr<BookmarkModel> CreateBookmarkModel(bool delete_bookmarks) {
|
| + const base::FilePath& data_path = data_dir_.path();
|
| + auto model = make_scoped_ptr<BookmarkModel>(new BookmarkModel(
|
| + make_scoped_ptr(new bookmarks::TestBookmarkClient())));
|
| + managed_bookmark_service_->BookmarkModelCreated(model.get());
|
| + int64_t next_id = 0;
|
| + static_cast<bookmarks::TestBookmarkClient*>(model->client())
|
| + ->SetExtraNodesToLoad(
|
| + managed_bookmark_service_->GetLoadExtraNodesCallback().Run(
|
| + &next_id));
|
| + if (delete_bookmarks) {
|
| + base::DeleteFile(data_path.Append(FILE_PATH_LITERAL("dummy_bookmarks")),
|
| + false);
|
| + }
|
| +
|
| + model->Load(profile_sync_service_bundle_.pref_service(), std::string(),
|
| + data_path, base::ThreadTaskRunnerHandle::Get(),
|
| + base::ThreadTaskRunnerHandle::Get());
|
| + bookmarks::test::WaitForBookmarkModelToLoad(model.get());
|
| + return model;
|
| + }
|
| +
|
| // Load (or re-load) the bookmark model. |load| controls use of the
|
| // bookmarks file on disk. |save| controls whether the newly loaded
|
| // bookmark model will write out a bookmark file as it goes.
|
| void LoadBookmarkModel(LoadOption load, SaveOption save) {
|
| bool delete_bookmarks = load == DELETE_EXISTING_STORAGE;
|
| - profile_.CreateBookmarkModel(delete_bookmarks);
|
| - model_ = BookmarkModelFactory::GetForProfile(&profile_);
|
| - bookmarks::test::WaitForBookmarkModelToLoad(model_);
|
| + model_.reset();
|
| + model_ = CreateBookmarkModel(delete_bookmarks);
|
| // This noticeably speeds up the unit tests that request it.
|
| if (save == DONT_SAVE_TO_STORAGE)
|
| model_->ClearStore();
|
| @@ -493,14 +508,7 @@ class ProfileSyncServiceBookmarkTest : public testing::Test {
|
|
|
| const int kNumPermanentNodes = 3;
|
| const std::string permanent_tags[kNumPermanentNodes] = {
|
| -#if defined(OS_IOS) || defined(OS_ANDROID)
|
| - "synced_bookmarks",
|
| -#endif // defined(OS_IOS) || defined(OS_ANDROID)
|
| - "bookmark_bar",
|
| - "other_bookmarks",
|
| -#if !defined(OS_IOS) && !defined(OS_ANDROID)
|
| - "synced_bookmarks",
|
| -#endif // !defined(OS_IOS) && !defined(OS_ANDROID)
|
| + "bookmark_bar", "other_bookmarks", "synced_bookmarks",
|
| };
|
| syncer::WriteTransaction trans(FROM_HERE, test_user_share_.user_share());
|
| syncer::ReadNode root(&trans);
|
| @@ -544,9 +552,8 @@ class ProfileSyncServiceBookmarkTest : public testing::Test {
|
|
|
| // Set up model associator.
|
| model_associator_.reset(new BookmarkModelAssociator(
|
| - BookmarkModelFactory::GetForProfile(&profile_), &sync_client_,
|
| - test_user_share_.user_share(), &mock_error_handler_,
|
| - kExpectMobileBookmarks));
|
| + model_.get(), sync_client_.get(), test_user_share_.user_share(),
|
| + &mock_error_handler_, kExpectMobileBookmarks));
|
|
|
| local_merge_result_ = syncer::SyncMergeResult(syncer::BOOKMARKS);
|
| syncer_merge_result_ = syncer::SyncMergeResult(syncer::BOOKMARKS);
|
| @@ -607,12 +614,6 @@ class ProfileSyncServiceBookmarkTest : public testing::Test {
|
| // refactoring TestUserShare.
|
| }
|
|
|
| - void UnloadBookmarkModel() {
|
| - profile_.CreateBookmarkModel(false /* delete_bookmarks */);
|
| - model_ = NULL;
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - }
|
| -
|
| bool InitSyncNodeFromChromeNode(const BookmarkNode* bnode,
|
| BaseNode* sync_node) {
|
| return model_associator_->InitSyncNodeFromChromeId(bnode->id(),
|
| @@ -746,15 +747,9 @@ class ProfileSyncServiceBookmarkTest : public testing::Test {
|
|
|
| void ExpectModelMatch(syncer::BaseTransaction* trans) {
|
| const BookmarkNode* root = model_->root_node();
|
| -#if defined(OS_IOS) || defined(OS_ANDROID)
|
| - EXPECT_EQ(root->GetIndexOf(model_->mobile_node()), 0);
|
| - EXPECT_EQ(root->GetIndexOf(model_->bookmark_bar_node()), 1);
|
| - EXPECT_EQ(root->GetIndexOf(model_->other_node()), 2);
|
| -#else
|
| EXPECT_EQ(root->GetIndexOf(model_->bookmark_bar_node()), 0);
|
| EXPECT_EQ(root->GetIndexOf(model_->other_node()), 1);
|
| EXPECT_EQ(root->GetIndexOf(model_->mobile_node()), 2);
|
| -#endif // defined(OS_IOS) || defined(OS_ANDROID)
|
|
|
| std::stack<int64_t> stack;
|
| stack.push(bookmark_bar_id());
|
| @@ -793,7 +788,7 @@ class ProfileSyncServiceBookmarkTest : public testing::Test {
|
| model_->bookmark_bar_node()->id());
|
| }
|
|
|
| - BookmarkModel* model() { return model_; }
|
| + BookmarkModel* model() { return model_.get(); }
|
|
|
| syncer::TestUserShare* test_user_share() { return &test_user_share_; }
|
|
|
| @@ -805,7 +800,7 @@ class ProfileSyncServiceBookmarkTest : public testing::Test {
|
|
|
| void ResetChangeProcessor() {
|
| change_processor_ = make_scoped_ptr(new BookmarkChangeProcessor(
|
| - &sync_client_, model_associator_.get(), &mock_error_handler_));
|
| + sync_client_.get(), model_associator_.get(), &mock_error_handler_));
|
| }
|
|
|
| sync_driver::DataTypeErrorHandlerMock* mock_error_handler() {
|
| @@ -818,20 +813,22 @@ class ProfileSyncServiceBookmarkTest : public testing::Test {
|
| return model_associator_.get();
|
| }
|
|
|
| - bookmarks::ManagedBookmarkService* GetManagedBookmarkService() {
|
| - return ManagedBookmarkServiceFactory::GetForProfile(&profile_);
|
| + bookmarks::ManagedBookmarkService* managed_bookmark_service() {
|
| + return managed_bookmark_service_.get();
|
| }
|
|
|
| private:
|
| - content::TestBrowserThreadBundle thread_bundle_;
|
| + base::ScopedTempDir data_dir_;
|
| + base::MessageLoop message_loop_;
|
| + browser_sync::ProfileSyncServiceBundle profile_sync_service_bundle_;
|
|
|
| - TestingProfile profile_;
|
| - TestSyncClient sync_client_;
|
| - BookmarkModel* model_;
|
| + scoped_ptr<sync_driver::FakeSyncClient> sync_client_;
|
| + scoped_ptr<BookmarkModel> model_;
|
| syncer::TestUserShare test_user_share_;
|
| scoped_ptr<BookmarkChangeProcessor> change_processor_;
|
| StrictMock<sync_driver::DataTypeErrorHandlerMock> mock_error_handler_;
|
| scoped_ptr<BookmarkModelAssociator> model_associator_;
|
| + scoped_ptr<bookmarks::ManagedBookmarkService> managed_bookmark_service_;
|
|
|
| syncer::SyncMergeResult local_merge_result_;
|
| syncer::SyncMergeResult syncer_merge_result_;
|
| @@ -1937,7 +1934,6 @@ TEST_F(ProfileSyncServiceBookmarkTestWithData, Persistence) {
|
| // simulates what would happen if the browser were to shutdown normally,
|
| // and then relaunch.
|
| StopSync();
|
| - UnloadBookmarkModel();
|
| LoadBookmarkModel(LOAD_FROM_STORAGE, SAVE_TO_STORAGE);
|
| StartSync();
|
|
|
| @@ -1983,7 +1979,6 @@ TEST_F(ProfileSyncServiceBookmarkTestWithData, MergeWithEmptyBookmarkModel) {
|
| StopSync();
|
|
|
| // Blow away the bookmark model -- it should be empty afterwards.
|
| - UnloadBookmarkModel();
|
| LoadBookmarkModel(DELETE_EXISTING_STORAGE, DONT_SAVE_TO_STORAGE);
|
| EXPECT_EQ(model()->bookmark_bar_node()->child_count(), 0);
|
| EXPECT_EQ(model()->other_node()->child_count(), 0);
|
| @@ -2004,7 +1999,6 @@ TEST_F(ProfileSyncServiceBookmarkTestWithData, MergeExpectedIdenticalModels) {
|
| WriteTestDataToBookmarkModel();
|
| ExpectModelMatch();
|
| StopSync();
|
| - UnloadBookmarkModel();
|
|
|
| // At this point both the bookmark model and the server should have the
|
| // exact same data and it should match the test data.
|
| @@ -2013,7 +2007,6 @@ TEST_F(ProfileSyncServiceBookmarkTestWithData, MergeExpectedIdenticalModels) {
|
| ExpectBookmarkModelMatchesTestData();
|
| ExpectModelMatch();
|
| StopSync();
|
| - UnloadBookmarkModel();
|
|
|
| // Now reorder some bookmarks in the bookmark model and then merge. Make
|
| // sure we get the order of the server after merge.
|
| @@ -2615,9 +2608,7 @@ TEST_F(ProfileSyncServiceBookmarkTest, TestUnsupportedNodes) {
|
| int sync_bookmark_count = GetSyncBookmarkCount();
|
|
|
| // Create a bookmark under managed_node() permanent folder.
|
| - bookmarks::ManagedBookmarkService* managed_bookmark_service =
|
| - GetManagedBookmarkService();
|
| - const BookmarkNode* folder = managed_bookmark_service->managed_node();
|
| + const BookmarkNode* folder = managed_bookmark_service()->managed_node();
|
| const BookmarkNode* node = model()->AddURL(
|
| folder, 0, base::ASCIIToUTF16("node"), GURL("http://www.node.com/"));
|
|
|
|
|