| Index: components/sync/driver/non_ui_data_type_controller_unittest.cc
|
| diff --git a/components/sync/driver/non_ui_data_type_controller_unittest.cc b/components/sync/driver/non_ui_data_type_controller_unittest.cc
|
| index 3c2542c8692a4bf535c5d039a8c6dd0e080ee4e3..92d611aa6a63e2bf7c72b6661afa813d6f7d614b 100644
|
| --- a/components/sync/driver/non_ui_data_type_controller_unittest.cc
|
| +++ b/components/sync/driver/non_ui_data_type_controller_unittest.cc
|
| @@ -5,6 +5,7 @@
|
| #include "components/sync/driver/non_ui_data_type_controller.h"
|
|
|
| #include <memory>
|
| +#include <utility>
|
| #include <vector>
|
|
|
| #include "base/bind.h"
|
| @@ -61,24 +62,19 @@ ACTION_P(SaveChangeProcessor, scoped_change_processor) {
|
| scoped_change_processor->reset(arg2);
|
| }
|
|
|
| -ACTION_P(GetWeakPtrToSyncableService, syncable_service) {
|
| - // Have to do this within an Action to ensure it's not evaluated on the wrong
|
| - // thread.
|
| - return syncable_service->AsWeakPtr();
|
| -}
|
| -
|
| class SharedChangeProcessorMock : public SharedChangeProcessor {
|
| public:
|
| explicit SharedChangeProcessorMock(syncer::ModelType type)
|
| : SharedChangeProcessor(type) {}
|
|
|
| - MOCK_METHOD5(Connect,
|
| - base::WeakPtr<syncer::SyncableService>(
|
| - SyncClient*,
|
| - GenericChangeProcessorFactory*,
|
| - syncer::UserShare*,
|
| - syncer::DataTypeErrorHandler*,
|
| - const base::WeakPtr<syncer::SyncMergeResult>&));
|
| + base::WeakPtr<syncer::SyncableService> Connect(
|
| + SyncClient*,
|
| + GenericChangeProcessorFactory*,
|
| + syncer::UserShare*,
|
| + std::unique_ptr<syncer::DataTypeErrorHandler>,
|
| + const base::WeakPtr<syncer::SyncMergeResult>&) {
|
| + return std::move(connect_return_);
|
| + }
|
| MOCK_METHOD0(Disconnect, bool());
|
| MOCK_METHOD2(ProcessSyncChanges,
|
| syncer::SyncError(const tracked_objects::Location&,
|
| @@ -92,12 +88,17 @@ class SharedChangeProcessorMock : public SharedChangeProcessor {
|
| MOCK_CONST_METHOD1(GetDataTypeContext, bool(std::string*));
|
| MOCK_METHOD1(RecordAssociationTime, void(base::TimeDelta time));
|
|
|
| + void SetConnectReturn(base::WeakPtr<syncer::SyncableService> service) {
|
| + connect_return_ = service;
|
| + }
|
| +
|
| protected:
|
| - virtual ~SharedChangeProcessorMock() {}
|
| + virtual ~SharedChangeProcessorMock() { DCHECK(!connect_return_); }
|
| MOCK_METHOD2(OnUnrecoverableError,
|
| void(const tracked_objects::Location&, const std::string&));
|
|
|
| private:
|
| + base::WeakPtr<syncer::SyncableService> connect_return_;
|
| DISALLOW_COPY_AND_ASSIGN(SharedChangeProcessorMock);
|
| };
|
|
|
| @@ -108,15 +109,13 @@ class NonUIDataTypeControllerFake : public NonUIDataTypeController {
|
| NonUIDataTypeControllerMock* mock,
|
| SharedChangeProcessor* change_processor,
|
| scoped_refptr<base::SingleThreadTaskRunner> backend_task_runner)
|
| - : NonUIDataTypeController(base::ThreadTaskRunnerHandle::Get(),
|
| - base::Closure(),
|
| - sync_client),
|
| + : NonUIDataTypeController(kType, base::Closure(), sync_client),
|
| blocked_(false),
|
| mock_(mock),
|
| change_processor_(change_processor),
|
| backend_task_runner_(backend_task_runner) {}
|
| + ~NonUIDataTypeControllerFake() override {}
|
|
|
| - syncer::ModelType type() const override { return kType; }
|
| syncer::ModelSafeGroup model_safe_group() const override {
|
| return syncer::GROUP_DB;
|
| }
|
| @@ -140,6 +139,10 @@ class NonUIDataTypeControllerFake : public NonUIDataTypeController {
|
| return change_processor_.get();
|
| }
|
|
|
| + std::unique_ptr<syncer::DataTypeErrorHandler> CreateErrorHandler() override {
|
| + return NonUIDataTypeController::CreateErrorHandler();
|
| + }
|
| +
|
| protected:
|
| bool PostTaskOnBackendThread(const tracked_objects::Location& from_here,
|
| const base::Closure& task) override {
|
| @@ -160,8 +163,6 @@ class NonUIDataTypeControllerFake : public NonUIDataTypeController {
|
| }
|
|
|
| private:
|
| - ~NonUIDataTypeControllerFake() override {}
|
| -
|
| struct PendingTask {
|
| PendingTask(const tracked_objects::Location& from_here,
|
| const base::Closure& task)
|
| @@ -189,8 +190,8 @@ class SyncNonUIDataTypeControllerTest : public testing::Test,
|
| backend_thread_.Start();
|
| change_processor_ = new SharedChangeProcessorMock(kType);
|
| // All of these are refcounted, so don't need to be released.
|
| - dtc_mock_ = new StrictMock<NonUIDataTypeControllerMock>();
|
| - non_ui_dtc_ = new NonUIDataTypeControllerFake(
|
| + dtc_mock_ = base::MakeUnique<StrictMock<NonUIDataTypeControllerMock>>();
|
| + non_ui_dtc_ = base::MakeUnique<NonUIDataTypeControllerFake>(
|
| this, dtc_mock_.get(), change_processor_.get(),
|
| backend_thread_.task_runner());
|
| }
|
| @@ -223,8 +224,7 @@ class SyncNonUIDataTypeControllerTest : public testing::Test,
|
| }
|
|
|
| void SetAssociateExpectations() {
|
| - EXPECT_CALL(*change_processor_.get(), Connect(_, _, _, _, _))
|
| - .WillOnce(GetWeakPtrToSyncableService(&syncable_service_));
|
| + change_processor_->SetConnectReturn(syncable_service_.AsWeakPtr());
|
| EXPECT_CALL(*change_processor_.get(), CryptoReadyIfNecessary())
|
| .WillOnce(Return(true));
|
| EXPECT_CALL(*change_processor_.get(), SyncModelHasUserCreatedNodes(_))
|
| @@ -266,8 +266,8 @@ class SyncNonUIDataTypeControllerTest : public testing::Test,
|
| ModelLoadCallbackMock model_load_callback_;
|
| // Must be destroyed after non_ui_dtc_.
|
| syncer::FakeSyncableService syncable_service_;
|
| - scoped_refptr<NonUIDataTypeControllerFake> non_ui_dtc_;
|
| - scoped_refptr<NonUIDataTypeControllerMock> dtc_mock_;
|
| + std::unique_ptr<NonUIDataTypeControllerFake> non_ui_dtc_;
|
| + std::unique_ptr<NonUIDataTypeControllerMock> dtc_mock_;
|
| scoped_refptr<SharedChangeProcessorMock> change_processor_;
|
| std::unique_ptr<syncer::SyncChangeProcessor> saved_change_processor_;
|
| };
|
| @@ -284,8 +284,7 @@ TEST_F(SyncNonUIDataTypeControllerTest, StartOk) {
|
|
|
| TEST_F(SyncNonUIDataTypeControllerTest, StartFirstRun) {
|
| SetStartExpectations();
|
| - EXPECT_CALL(*change_processor_.get(), Connect(_, _, _, _, _))
|
| - .WillOnce(GetWeakPtrToSyncableService(&syncable_service_));
|
| + change_processor_->SetConnectReturn(syncable_service_.AsWeakPtr());
|
| EXPECT_CALL(*change_processor_.get(), CryptoReadyIfNecessary())
|
| .WillOnce(Return(true));
|
| EXPECT_CALL(*change_processor_.get(), SyncModelHasUserCreatedNodes(_))
|
| @@ -319,8 +318,7 @@ TEST_F(SyncNonUIDataTypeControllerTest, AbortDuringStartModels) {
|
| // cleanly.
|
| TEST_F(SyncNonUIDataTypeControllerTest, StartAssociationFailed) {
|
| SetStartExpectations();
|
| - EXPECT_CALL(*change_processor_.get(), Connect(_, _, _, _, _))
|
| - .WillOnce(GetWeakPtrToSyncableService(&syncable_service_));
|
| + change_processor_->SetConnectReturn(syncable_service_.AsWeakPtr());
|
| EXPECT_CALL(*change_processor_.get(), CryptoReadyIfNecessary())
|
| .WillOnce(Return(true));
|
| EXPECT_CALL(*change_processor_.get(), SyncModelHasUserCreatedNodes(_))
|
| @@ -346,8 +344,7 @@ TEST_F(SyncNonUIDataTypeControllerTest,
|
| SetStartExpectations();
|
| SetStartFailExpectations(DataTypeController::UNRECOVERABLE_ERROR);
|
| // Set up association to fail with an unrecoverable error.
|
| - EXPECT_CALL(*change_processor_.get(), Connect(_, _, _, _, _))
|
| - .WillOnce(GetWeakPtrToSyncableService(&syncable_service_));
|
| + change_processor_->SetConnectReturn(syncable_service_.AsWeakPtr());
|
| EXPECT_CALL(*change_processor_.get(), CryptoReadyIfNecessary())
|
| .WillRepeatedly(Return(true));
|
| EXPECT_CALL(*change_processor_.get(), SyncModelHasUserCreatedNodes(_))
|
| @@ -362,8 +359,7 @@ TEST_F(SyncNonUIDataTypeControllerTest, StartAssociationCryptoNotReady) {
|
| SetStartExpectations();
|
| SetStartFailExpectations(DataTypeController::NEEDS_CRYPTO);
|
| // Set up association to fail with a NEEDS_CRYPTO error.
|
| - EXPECT_CALL(*change_processor_.get(), Connect(_, _, _, _, _))
|
| - .WillOnce(GetWeakPtrToSyncableService(&syncable_service_));
|
| + change_processor_->SetConnectReturn(syncable_service_.AsWeakPtr());
|
| EXPECT_CALL(*change_processor_.get(), CryptoReadyIfNecessary())
|
| .WillRepeatedly(Return(false));
|
| EXPECT_EQ(DataTypeController::NOT_RUNNING, non_ui_dtc_->state());
|
| @@ -383,8 +379,7 @@ TEST_F(SyncNonUIDataTypeControllerTest, AbortDuringAssociation) {
|
| base::WaitableEvent::InitialState::NOT_SIGNALED);
|
|
|
| SetStartExpectations();
|
| - EXPECT_CALL(*change_processor_.get(), Connect(_, _, _, _, _))
|
| - .WillOnce(GetWeakPtrToSyncableService(&syncable_service_));
|
| + change_processor_->SetConnectReturn(syncable_service_.AsWeakPtr());
|
| EXPECT_CALL(*change_processor_.get(), CryptoReadyIfNecessary())
|
| .WillOnce(Return(true));
|
| EXPECT_CALL(*change_processor_.get(), SyncModelHasUserCreatedNodes(_))
|
| @@ -422,8 +417,6 @@ TEST_F(SyncNonUIDataTypeControllerTest, StartAfterSyncShutdown) {
|
| Mock::VerifyAndClearExpectations(change_processor_.get());
|
| Mock::VerifyAndClearExpectations(dtc_mock_.get());
|
|
|
| - EXPECT_CALL(*change_processor_.get(), Connect(_, _, _, _, _))
|
| - .WillOnce(Return(base::WeakPtr<syncer::SyncableService>()));
|
| non_ui_dtc_->UnblockBackendTasks();
|
| WaitForDTC();
|
| }
|
| @@ -468,7 +461,7 @@ TEST_F(SyncNonUIDataTypeControllerTest, StopStart) {
|
| EXPECT_EQ(DataTypeController::RUNNING, non_ui_dtc_->state());
|
| }
|
|
|
| -TEST_F(SyncNonUIDataTypeControllerTest, OnSingleDataTypeUnrecoverableError) {
|
| +TEST_F(SyncNonUIDataTypeControllerTest, OnUnrecoverableError) {
|
| SetStartExpectations();
|
| SetAssociateExpectations();
|
| SetActivateExpectations(DataTypeController::OK);
|
| @@ -483,9 +476,8 @@ TEST_F(SyncNonUIDataTypeControllerTest, OnSingleDataTypeUnrecoverableError) {
|
| non_ui_dtc_->type());
|
| backend_thread_.task_runner()->PostTask(
|
| FROM_HERE,
|
| - base::Bind(
|
| - &NonUIDataTypeControllerFake::OnSingleDataTypeUnrecoverableError,
|
| - non_ui_dtc_, error));
|
| + base::Bind(&syncer::DataTypeErrorHandler::OnUnrecoverableError,
|
| + base::Passed(non_ui_dtc_->CreateErrorHandler()), error));
|
| WaitForDTC();
|
| }
|
|
|
|
|