| OLD | NEW | 
|---|
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "components/sync/driver/glue/sync_backend_registrar.h" | 5 #include "components/sync/driver/glue/sync_backend_registrar.h" | 
| 6 | 6 | 
| 7 #include "base/location.h" | 7 #include "base/location.h" | 
| 8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" | 
| 9 #include "base/single_thread_task_runner.h" | 9 #include "base/single_thread_task_runner.h" | 
| 10 #include "components/sync/base/model_type.h" | 10 #include "components/sync/base/model_type.h" | 
| 11 #include "components/sync/core/test/test_user_share.h" | 11 #include "components/sync/core/test/test_user_share.h" | 
| 12 #include "components/sync/driver/change_processor_mock.h" | 12 #include "components/sync/driver/change_processor_mock.h" | 
| 13 #include "components/sync/driver/fake_sync_client.h" | 13 #include "components/sync/driver/fake_sync_client.h" | 
| 14 #include "components/sync/driver/glue/browser_thread_model_worker.h" | 14 #include "components/sync/driver/glue/browser_thread_model_worker.h" | 
| 15 #include "components/sync/driver/sync_api_component_factory_mock.h" | 15 #include "components/sync/driver/sync_api_component_factory_mock.h" | 
| 16 #include "components/sync/engine/passive_model_worker.h" | 16 #include "components/sync/engine/passive_model_worker.h" | 
| 17 #include "testing/gmock/include/gmock/gmock.h" | 17 #include "testing/gmock/include/gmock/gmock.h" | 
| 18 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" | 
| 19 | 19 | 
| 20 namespace browser_sync { | 20 namespace syncer { | 
| 21 | 21 | 
| 22 namespace { | 22 namespace { | 
| 23 | 23 | 
| 24 using ::testing::_; | 24 using ::testing::_; | 
| 25 using ::testing::InSequence; | 25 using ::testing::InSequence; | 
| 26 using ::testing::Return; | 26 using ::testing::Return; | 
| 27 using ::testing::StrictMock; | 27 using ::testing::StrictMock; | 
| 28 using syncer::FIRST_REAL_MODEL_TYPE; |  | 
| 29 using syncer::AUTOFILL; |  | 
| 30 using syncer::BOOKMARKS; |  | 
| 31 using syncer::PREFERENCES; |  | 
| 32 using syncer::THEMES; |  | 
| 33 using syncer::NIGORI; |  | 
| 34 using syncer::PASSWORDS; |  | 
| 35 using syncer::MODEL_TYPE_COUNT; |  | 
| 36 using syncer::ModelSafeGroup; |  | 
| 37 using syncer::ModelSafeRoutingInfo; |  | 
| 38 using syncer::ModelTypeSet; |  | 
| 39 using syncer::ModelType; |  | 
| 40 using syncer::ModelTypeFromInt; |  | 
| 41 | 28 | 
| 42 void TriggerChanges(SyncBackendRegistrar* registrar, ModelType type) { | 29 void TriggerChanges(SyncBackendRegistrar* registrar, ModelType type) { | 
| 43   registrar->OnChangesApplied(type, 0, NULL, | 30   registrar->OnChangesApplied(type, 0, NULL, ImmutableChangeRecordList()); | 
| 44                               syncer::ImmutableChangeRecordList()); |  | 
| 45   registrar->OnChangesComplete(type); | 31   registrar->OnChangesComplete(type); | 
| 46 } | 32 } | 
| 47 | 33 | 
| 48 class RegistrarSyncClient : public sync_driver::FakeSyncClient { | 34 class RegistrarSyncClient : public FakeSyncClient { | 
| 49  public: | 35  public: | 
| 50   RegistrarSyncClient( | 36   RegistrarSyncClient( | 
| 51       const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner, | 37       const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner, | 
| 52       const scoped_refptr<base::SingleThreadTaskRunner>& db_task_runner, | 38       const scoped_refptr<base::SingleThreadTaskRunner>& db_task_runner, | 
| 53       const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner) | 39       const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner) | 
| 54       : ui_task_runner_(ui_task_runner), | 40       : ui_task_runner_(ui_task_runner), | 
| 55         db_task_runner_(db_task_runner), | 41         db_task_runner_(db_task_runner), | 
| 56         file_task_runner_(file_task_runner) {} | 42         file_task_runner_(file_task_runner) {} | 
| 57 | 43 | 
| 58   scoped_refptr<syncer::ModelSafeWorker> CreateModelWorkerForGroup( | 44   scoped_refptr<ModelSafeWorker> CreateModelWorkerForGroup( | 
| 59       ModelSafeGroup group, | 45       ModelSafeGroup group, | 
| 60       syncer::WorkerLoopDestructionObserver* observer) override { | 46       WorkerLoopDestructionObserver* observer) override { | 
| 61     switch (group) { | 47     switch (group) { | 
| 62       case syncer::GROUP_UI: | 48       case GROUP_UI: | 
| 63         return new BrowserThreadModelWorker(ui_task_runner_, group, observer); | 49         return new BrowserThreadModelWorker(ui_task_runner_, group, observer); | 
| 64       case syncer::GROUP_DB: | 50       case GROUP_DB: | 
| 65         return new BrowserThreadModelWorker(db_task_runner_, group, observer); | 51         return new BrowserThreadModelWorker(db_task_runner_, group, observer); | 
| 66       case syncer::GROUP_FILE: | 52       case GROUP_FILE: | 
| 67         return new BrowserThreadModelWorker(file_task_runner_, group, observer); | 53         return new BrowserThreadModelWorker(file_task_runner_, group, observer); | 
| 68       case syncer::GROUP_PASSIVE: | 54       case GROUP_PASSIVE: | 
| 69         return new syncer::PassiveModelWorker(observer); | 55         return new PassiveModelWorker(observer); | 
| 70       default: | 56       default: | 
| 71         return nullptr; | 57         return nullptr; | 
| 72     } | 58     } | 
| 73   } | 59   } | 
| 74 | 60 | 
| 75  private: | 61  private: | 
| 76   const scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; | 62   const scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; | 
| 77   const scoped_refptr<base::SingleThreadTaskRunner> db_task_runner_; | 63   const scoped_refptr<base::SingleThreadTaskRunner> db_task_runner_; | 
| 78   const scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; | 64   const scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; | 
| 79 }; | 65 }; | 
| 80 | 66 | 
| 81 // Flaky: https://crbug.com/498238 | 67 // Flaky: https://crbug.com/498238 | 
| 82 class SyncBackendRegistrarTest : public testing::Test { | 68 class SyncBackendRegistrarTest : public testing::Test { | 
| 83  public: | 69  public: | 
| 84   void TestNonUIDataTypeActivationAsync(sync_driver::ChangeProcessor* processor, | 70   void TestNonUIDataTypeActivationAsync(ChangeProcessor* processor, | 
| 85                                         base::WaitableEvent* done) { | 71                                         base::WaitableEvent* done) { | 
| 86     registrar_->ActivateDataType(AUTOFILL, syncer::GROUP_DB, processor, | 72     registrar_->ActivateDataType(AUTOFILL, GROUP_DB, processor, | 
| 87                                  test_user_share_.user_share()); | 73                                  test_user_share_.user_share()); | 
| 88     ExpectRoutingInfo(registrar_.get(), {{AUTOFILL, syncer::GROUP_DB}}); | 74     ExpectRoutingInfo(registrar_.get(), {{AUTOFILL, GROUP_DB}}); | 
| 89     ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet(AUTOFILL)); | 75     ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet(AUTOFILL)); | 
| 90     TriggerChanges(registrar_.get(), AUTOFILL); | 76     TriggerChanges(registrar_.get(), AUTOFILL); | 
| 91     done->Signal(); | 77     done->Signal(); | 
| 92   } | 78   } | 
| 93 | 79 | 
| 94  protected: | 80  protected: | 
| 95   SyncBackendRegistrarTest() | 81   SyncBackendRegistrarTest() | 
| 96       : db_thread_("DBThreadForTest"), | 82       : db_thread_("DBThreadForTest"), | 
| 97         file_thread_("FileThreadForTest"), | 83         file_thread_("FileThreadForTest"), | 
| 98         sync_thread_(NULL) {} | 84         sync_thread_(NULL) {} | 
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 131   void ExpectHasProcessorsForTypes(const SyncBackendRegistrar& registrar, | 117   void ExpectHasProcessorsForTypes(const SyncBackendRegistrar& registrar, | 
| 132                                    ModelTypeSet types) { | 118                                    ModelTypeSet types) { | 
| 133     for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { | 119     for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { | 
| 134       ModelType model_type = ModelTypeFromInt(i); | 120       ModelType model_type = ModelTypeFromInt(i); | 
| 135       EXPECT_EQ(types.Has(model_type), | 121       EXPECT_EQ(types.Has(model_type), | 
| 136                 registrar_->IsTypeActivatedForTest(model_type)); | 122                 registrar_->IsTypeActivatedForTest(model_type)); | 
| 137     } | 123     } | 
| 138   } | 124   } | 
| 139 | 125 | 
| 140   size_t GetWorkersSize() { | 126   size_t GetWorkersSize() { | 
| 141     std::vector<scoped_refptr<syncer::ModelSafeWorker>> workers; | 127     std::vector<scoped_refptr<ModelSafeWorker>> workers; | 
| 142     registrar_->GetWorkers(&workers); | 128     registrar_->GetWorkers(&workers); | 
| 143     return workers.size(); | 129     return workers.size(); | 
| 144   } | 130   } | 
| 145 | 131 | 
| 146   const scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() { | 132   const scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() { | 
| 147     return message_loop_.task_runner(); | 133     return message_loop_.task_runner(); | 
| 148   } | 134   } | 
| 149 | 135 | 
| 150   const scoped_refptr<base::SingleThreadTaskRunner> db_task_runner() { | 136   const scoped_refptr<base::SingleThreadTaskRunner> db_task_runner() { | 
| 151     return db_thread_.task_runner(); | 137     return db_thread_.task_runner(); | 
| 152   } | 138   } | 
| 153 | 139 | 
| 154   const scoped_refptr<base::SingleThreadTaskRunner> file_task_runner() { | 140   const scoped_refptr<base::SingleThreadTaskRunner> file_task_runner() { | 
| 155     return db_thread_.task_runner(); | 141     return db_thread_.task_runner(); | 
| 156   } | 142   } | 
| 157 | 143 | 
| 158   base::MessageLoop message_loop_; | 144   base::MessageLoop message_loop_; | 
| 159   base::Thread db_thread_; | 145   base::Thread db_thread_; | 
| 160   base::Thread file_thread_; | 146   base::Thread file_thread_; | 
| 161 | 147 | 
| 162   syncer::TestUserShare test_user_share_; | 148   TestUserShare test_user_share_; | 
| 163   std::unique_ptr<RegistrarSyncClient> sync_client_; | 149   std::unique_ptr<RegistrarSyncClient> sync_client_; | 
| 164   std::unique_ptr<SyncBackendRegistrar> registrar_; | 150   std::unique_ptr<SyncBackendRegistrar> registrar_; | 
| 165 | 151 | 
| 166   base::Thread* sync_thread_; | 152   base::Thread* sync_thread_; | 
| 167 }; | 153 }; | 
| 168 | 154 | 
| 169 TEST_F(SyncBackendRegistrarTest, ConstructorEmpty) { | 155 TEST_F(SyncBackendRegistrarTest, ConstructorEmpty) { | 
| 170   registrar_->SetInitialTypes(ModelTypeSet()); | 156   registrar_->SetInitialTypes(ModelTypeSet()); | 
| 171   EXPECT_FALSE(registrar_->IsNigoriEnabled()); | 157   EXPECT_FALSE(registrar_->IsNigoriEnabled()); | 
| 172   EXPECT_EQ(4u, GetWorkersSize()); | 158   EXPECT_EQ(4u, GetWorkersSize()); | 
| 173   ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); | 159   ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); | 
| 174   ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 160   ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 
| 175 } | 161 } | 
| 176 | 162 | 
| 177 TEST_F(SyncBackendRegistrarTest, ConstructorNonEmpty) { | 163 TEST_F(SyncBackendRegistrarTest, ConstructorNonEmpty) { | 
| 178   registrar_->RegisterNonBlockingType(BOOKMARKS); | 164   registrar_->RegisterNonBlockingType(BOOKMARKS); | 
| 179   registrar_->SetInitialTypes(ModelTypeSet(BOOKMARKS, NIGORI, PASSWORDS)); | 165   registrar_->SetInitialTypes(ModelTypeSet(BOOKMARKS, NIGORI, PASSWORDS)); | 
| 180   EXPECT_TRUE(registrar_->IsNigoriEnabled()); | 166   EXPECT_TRUE(registrar_->IsNigoriEnabled()); | 
| 181   EXPECT_EQ(4u, GetWorkersSize()); | 167   EXPECT_EQ(4u, GetWorkersSize()); | 
| 182   EXPECT_EQ(ModelTypeSet(NIGORI), registrar_->GetLastConfiguredTypes()); | 168   EXPECT_EQ(ModelTypeSet(NIGORI), registrar_->GetLastConfiguredTypes()); | 
| 183   // Bookmarks dropped because it is nonblocking. | 169   // Bookmarks dropped because it is nonblocking. | 
| 184   // Passwords dropped because of no password store. | 170   // Passwords dropped because of no password store. | 
| 185   ExpectRoutingInfo(registrar_.get(), {{NIGORI, syncer::GROUP_PASSIVE}}); | 171   ExpectRoutingInfo(registrar_.get(), {{NIGORI, GROUP_PASSIVE}}); | 
| 186   ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 172   ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 
| 187 } | 173 } | 
| 188 | 174 | 
| 189 TEST_F(SyncBackendRegistrarTest, ConstructorNonEmptyReversedInitialization) { | 175 TEST_F(SyncBackendRegistrarTest, ConstructorNonEmptyReversedInitialization) { | 
| 190   // The blocking types get to set initial types before NonBlocking types here. | 176   // The blocking types get to set initial types before NonBlocking types here. | 
| 191   registrar_->SetInitialTypes(ModelTypeSet(BOOKMARKS, NIGORI, PASSWORDS)); | 177   registrar_->SetInitialTypes(ModelTypeSet(BOOKMARKS, NIGORI, PASSWORDS)); | 
| 192   registrar_->RegisterNonBlockingType(BOOKMARKS); | 178   registrar_->RegisterNonBlockingType(BOOKMARKS); | 
| 193   EXPECT_TRUE(registrar_->IsNigoriEnabled()); | 179   EXPECT_TRUE(registrar_->IsNigoriEnabled()); | 
| 194   EXPECT_EQ(4u, GetWorkersSize()); | 180   EXPECT_EQ(4u, GetWorkersSize()); | 
| 195   EXPECT_EQ(ModelTypeSet(NIGORI), registrar_->GetLastConfiguredTypes()); | 181   EXPECT_EQ(ModelTypeSet(NIGORI), registrar_->GetLastConfiguredTypes()); | 
| 196   // Bookmarks dropped because it is nonblocking. | 182   // Bookmarks dropped because it is nonblocking. | 
| 197   // Passwords dropped because of no password store. | 183   // Passwords dropped because of no password store. | 
| 198   ExpectRoutingInfo(registrar_.get(), {{NIGORI, syncer::GROUP_PASSIVE}}); | 184   ExpectRoutingInfo(registrar_.get(), {{NIGORI, GROUP_PASSIVE}}); | 
| 199   ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 185   ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 
| 200 } | 186 } | 
| 201 | 187 | 
| 202 TEST_F(SyncBackendRegistrarTest, ConfigureDataTypes) { | 188 TEST_F(SyncBackendRegistrarTest, ConfigureDataTypes) { | 
| 203   registrar_->RegisterNonBlockingType(BOOKMARKS); | 189   registrar_->RegisterNonBlockingType(BOOKMARKS); | 
| 204   registrar_->SetInitialTypes(ModelTypeSet()); | 190   registrar_->SetInitialTypes(ModelTypeSet()); | 
| 205 | 191 | 
| 206   // Add. | 192   // Add. | 
| 207   const ModelTypeSet types1(BOOKMARKS, NIGORI, AUTOFILL); | 193   const ModelTypeSet types1(BOOKMARKS, NIGORI, AUTOFILL); | 
| 208   EXPECT_EQ(types1, registrar_->ConfigureDataTypes(types1, ModelTypeSet())); | 194   EXPECT_EQ(types1, registrar_->ConfigureDataTypes(types1, ModelTypeSet())); | 
| 209   ExpectRoutingInfo(registrar_.get(), {{BOOKMARKS, syncer::GROUP_NON_BLOCKING}, | 195   ExpectRoutingInfo(registrar_.get(), {{BOOKMARKS, GROUP_NON_BLOCKING}, | 
| 210                                        {NIGORI, syncer::GROUP_PASSIVE}, | 196                                        {NIGORI, GROUP_PASSIVE}, | 
| 211                                        {AUTOFILL, syncer::GROUP_PASSIVE}}); | 197                                        {AUTOFILL, GROUP_PASSIVE}}); | 
| 212   ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 198   ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 
| 213   EXPECT_EQ(types1, registrar_->GetLastConfiguredTypes()); | 199   EXPECT_EQ(types1, registrar_->GetLastConfiguredTypes()); | 
| 214 | 200 | 
| 215   // Add and remove. | 201   // Add and remove. | 
| 216   const ModelTypeSet types2(PREFERENCES, THEMES); | 202   const ModelTypeSet types2(PREFERENCES, THEMES); | 
| 217   EXPECT_EQ(types2, registrar_->ConfigureDataTypes(types2, types1)); | 203   EXPECT_EQ(types2, registrar_->ConfigureDataTypes(types2, types1)); | 
| 218 | 204 | 
| 219   ExpectRoutingInfo(registrar_.get(), {{PREFERENCES, syncer::GROUP_PASSIVE}, | 205   ExpectRoutingInfo(registrar_.get(), | 
| 220                                        {THEMES, syncer::GROUP_PASSIVE}}); | 206                     {{PREFERENCES, GROUP_PASSIVE}, {THEMES, GROUP_PASSIVE}}); | 
| 221   ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 207   ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 
| 222   EXPECT_EQ(types2, registrar_->GetLastConfiguredTypes()); | 208   EXPECT_EQ(types2, registrar_->GetLastConfiguredTypes()); | 
| 223 | 209 | 
| 224   // Remove. | 210   // Remove. | 
| 225   EXPECT_TRUE(registrar_->ConfigureDataTypes(ModelTypeSet(), types2).Empty()); | 211   EXPECT_TRUE(registrar_->ConfigureDataTypes(ModelTypeSet(), types2).Empty()); | 
| 226   ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); | 212   ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); | 
| 227   ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 213   ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 
| 228   EXPECT_EQ(ModelTypeSet(), registrar_->GetLastConfiguredTypes()); | 214   EXPECT_EQ(ModelTypeSet(), registrar_->GetLastConfiguredTypes()); | 
| 229 } | 215 } | 
| 230 | 216 | 
| 231 TEST_F(SyncBackendRegistrarTest, ActivateDeactivateUIDataType) { | 217 TEST_F(SyncBackendRegistrarTest, ActivateDeactivateUIDataType) { | 
| 232   InSequence in_sequence; | 218   InSequence in_sequence; | 
| 233   registrar_->SetInitialTypes(ModelTypeSet()); | 219   registrar_->SetInitialTypes(ModelTypeSet()); | 
| 234 | 220 | 
| 235   // Should do nothing. | 221   // Should do nothing. | 
| 236   TriggerChanges(registrar_.get(), BOOKMARKS); | 222   TriggerChanges(registrar_.get(), BOOKMARKS); | 
| 237 | 223 | 
| 238   StrictMock<sync_driver::ChangeProcessorMock> change_processor_mock; | 224   StrictMock<ChangeProcessorMock> change_processor_mock; | 
| 239   EXPECT_CALL(change_processor_mock, StartImpl()); | 225   EXPECT_CALL(change_processor_mock, StartImpl()); | 
| 240   EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); | 226   EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); | 
| 241   EXPECT_CALL(change_processor_mock, ApplyChangesFromSyncModel(NULL, _, _)); | 227   EXPECT_CALL(change_processor_mock, ApplyChangesFromSyncModel(NULL, _, _)); | 
| 242   EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); | 228   EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); | 
| 243   EXPECT_CALL(change_processor_mock, CommitChangesFromSyncModel()); | 229   EXPECT_CALL(change_processor_mock, CommitChangesFromSyncModel()); | 
| 244   EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(false)); | 230   EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(false)); | 
| 245 | 231 | 
| 246   const ModelTypeSet types(BOOKMARKS); | 232   const ModelTypeSet types(BOOKMARKS); | 
| 247   EXPECT_EQ(types, registrar_->ConfigureDataTypes(types, ModelTypeSet())); | 233   EXPECT_EQ(types, registrar_->ConfigureDataTypes(types, ModelTypeSet())); | 
| 248   registrar_->ActivateDataType(BOOKMARKS, syncer::GROUP_UI, | 234   registrar_->ActivateDataType(BOOKMARKS, GROUP_UI, &change_processor_mock, | 
| 249                                &change_processor_mock, |  | 
| 250                                test_user_share_.user_share()); | 235                                test_user_share_.user_share()); | 
| 251   ExpectRoutingInfo(registrar_.get(), {{BOOKMARKS, syncer::GROUP_UI}}); | 236   ExpectRoutingInfo(registrar_.get(), {{BOOKMARKS, GROUP_UI}}); | 
| 252   ExpectHasProcessorsForTypes(*registrar_, types); | 237   ExpectHasProcessorsForTypes(*registrar_, types); | 
| 253 | 238 | 
| 254   TriggerChanges(registrar_.get(), BOOKMARKS); | 239   TriggerChanges(registrar_.get(), BOOKMARKS); | 
| 255 | 240 | 
| 256   registrar_->DeactivateDataType(BOOKMARKS); | 241   registrar_->DeactivateDataType(BOOKMARKS); | 
| 257   ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); | 242   ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); | 
| 258   ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 243   ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 
| 259 | 244 | 
| 260   // Should do nothing. | 245   // Should do nothing. | 
| 261   TriggerChanges(registrar_.get(), BOOKMARKS); | 246   TriggerChanges(registrar_.get(), BOOKMARKS); | 
| 262 } | 247 } | 
| 263 | 248 | 
| 264 TEST_F(SyncBackendRegistrarTest, ActivateDeactivateNonUIDataType) { | 249 TEST_F(SyncBackendRegistrarTest, ActivateDeactivateNonUIDataType) { | 
| 265   InSequence in_sequence; | 250   InSequence in_sequence; | 
| 266   registrar_->SetInitialTypes(ModelTypeSet()); | 251   registrar_->SetInitialTypes(ModelTypeSet()); | 
| 267 | 252 | 
| 268   // Should do nothing. | 253   // Should do nothing. | 
| 269   TriggerChanges(registrar_.get(), AUTOFILL); | 254   TriggerChanges(registrar_.get(), AUTOFILL); | 
| 270 | 255 | 
| 271   StrictMock<sync_driver::ChangeProcessorMock> change_processor_mock; | 256   StrictMock<ChangeProcessorMock> change_processor_mock; | 
| 272   EXPECT_CALL(change_processor_mock, StartImpl()); | 257   EXPECT_CALL(change_processor_mock, StartImpl()); | 
| 273   EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); | 258   EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); | 
| 274   EXPECT_CALL(change_processor_mock, ApplyChangesFromSyncModel(NULL, _, _)); | 259   EXPECT_CALL(change_processor_mock, ApplyChangesFromSyncModel(NULL, _, _)); | 
| 275   EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); | 260   EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); | 
| 276   EXPECT_CALL(change_processor_mock, CommitChangesFromSyncModel()); | 261   EXPECT_CALL(change_processor_mock, CommitChangesFromSyncModel()); | 
| 277   EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(false)); | 262   EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(false)); | 
| 278 | 263 | 
| 279   const ModelTypeSet types(AUTOFILL); | 264   const ModelTypeSet types(AUTOFILL); | 
| 280   EXPECT_EQ(types, registrar_->ConfigureDataTypes(types, ModelTypeSet())); | 265   EXPECT_EQ(types, registrar_->ConfigureDataTypes(types, ModelTypeSet())); | 
| 281 | 266 | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
| 299 // handled correctly in SyncBackendRegistrar. | 284 // handled correctly in SyncBackendRegistrar. | 
| 300 TEST_F(SyncBackendRegistrarTest, ConfigureNonBlockingDataType) { | 285 TEST_F(SyncBackendRegistrarTest, ConfigureNonBlockingDataType) { | 
| 301   registrar_->RegisterNonBlockingType(AUTOFILL); | 286   registrar_->RegisterNonBlockingType(AUTOFILL); | 
| 302   registrar_->RegisterNonBlockingType(BOOKMARKS); | 287   registrar_->RegisterNonBlockingType(BOOKMARKS); | 
| 303 | 288 | 
| 304   ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); | 289   ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); | 
| 305   // Simulate that initial sync was already done for AUTOFILL. | 290   // Simulate that initial sync was already done for AUTOFILL. | 
| 306   registrar_->AddRestoredNonBlockingType(AUTOFILL); | 291   registrar_->AddRestoredNonBlockingType(AUTOFILL); | 
| 307   // It should be added to routing info and set of configured types. | 292   // It should be added to routing info and set of configured types. | 
| 308   EXPECT_EQ(ModelTypeSet(AUTOFILL), registrar_->GetLastConfiguredTypes()); | 293   EXPECT_EQ(ModelTypeSet(AUTOFILL), registrar_->GetLastConfiguredTypes()); | 
| 309   ExpectRoutingInfo(registrar_.get(), {{AUTOFILL, syncer::GROUP_NON_BLOCKING}}); | 294   ExpectRoutingInfo(registrar_.get(), {{AUTOFILL, GROUP_NON_BLOCKING}}); | 
| 310 | 295 | 
| 311   // Configure two non-blocking types. Initial sync wasn't done for BOOKMARKS so | 296   // Configure two non-blocking types. Initial sync wasn't done for BOOKMARKS so | 
| 312   // it should be included in types to be downloaded. | 297   // it should be included in types to be downloaded. | 
| 313   ModelTypeSet types_to_add(AUTOFILL, BOOKMARKS); | 298   ModelTypeSet types_to_add(AUTOFILL, BOOKMARKS); | 
| 314   ModelTypeSet newly_added_types = | 299   ModelTypeSet newly_added_types = | 
| 315       registrar_->ConfigureDataTypes(types_to_add, ModelTypeSet()); | 300       registrar_->ConfigureDataTypes(types_to_add, ModelTypeSet()); | 
| 316   EXPECT_EQ(ModelTypeSet(BOOKMARKS), newly_added_types); | 301   EXPECT_EQ(ModelTypeSet(BOOKMARKS), newly_added_types); | 
| 317   EXPECT_EQ(types_to_add, registrar_->GetLastConfiguredTypes()); | 302   EXPECT_EQ(types_to_add, registrar_->GetLastConfiguredTypes()); | 
| 318   ExpectRoutingInfo(registrar_.get(), | 303   ExpectRoutingInfo(registrar_.get(), {{AUTOFILL, GROUP_NON_BLOCKING}, | 
| 319                     {{AUTOFILL, syncer::GROUP_NON_BLOCKING}, | 304                                        {BOOKMARKS, GROUP_NON_BLOCKING}}); | 
| 320                      {BOOKMARKS, syncer::GROUP_NON_BLOCKING}}); |  | 
| 321 } | 305 } | 
| 322 | 306 | 
| 323 class SyncBackendRegistrarShutdownTest : public testing::Test { | 307 class SyncBackendRegistrarShutdownTest : public testing::Test { | 
| 324  public: | 308  public: | 
| 325   void BlockDBThread() { | 309   void BlockDBThread() { | 
| 326     EXPECT_FALSE(db_thread_lock_.Try()); | 310     EXPECT_FALSE(db_thread_lock_.Try()); | 
| 327 | 311 | 
| 328     db_thread_blocked_.Signal(); | 312     db_thread_blocked_.Signal(); | 
| 329     base::AutoLock l(db_thread_lock_); | 313     base::AutoLock l(db_thread_lock_); | 
| 330   } | 314   } | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 374 | 358 | 
| 375   base::Lock db_thread_lock_; | 359   base::Lock db_thread_lock_; | 
| 376   base::RunLoop run_loop_; | 360   base::RunLoop run_loop_; | 
| 377   base::Closure quit_closure_; | 361   base::Closure quit_closure_; | 
| 378 }; | 362 }; | 
| 379 | 363 | 
| 380 // Wrap SyncBackendRegistrar so that we can monitor its lifetime. | 364 // Wrap SyncBackendRegistrar so that we can monitor its lifetime. | 
| 381 class TestRegistrar : public SyncBackendRegistrar { | 365 class TestRegistrar : public SyncBackendRegistrar { | 
| 382  public: | 366  public: | 
| 383   explicit TestRegistrar( | 367   explicit TestRegistrar( | 
| 384       sync_driver::SyncClient* sync_client, | 368       SyncClient* sync_client, | 
| 385       const scoped_refptr<base::SingleThreadTaskRunner>& ui_thread, | 369       const scoped_refptr<base::SingleThreadTaskRunner>& ui_thread, | 
| 386       const scoped_refptr<base::SingleThreadTaskRunner>& db_thread, | 370       const scoped_refptr<base::SingleThreadTaskRunner>& db_thread, | 
| 387       const scoped_refptr<base::SingleThreadTaskRunner>& file_thread, | 371       const scoped_refptr<base::SingleThreadTaskRunner>& file_thread, | 
| 388       SyncBackendRegistrarShutdownTest* test) | 372       SyncBackendRegistrarShutdownTest* test) | 
| 389       : SyncBackendRegistrar("test", | 373       : SyncBackendRegistrar("test", | 
| 390                              sync_client, | 374                              sync_client, | 
| 391                              std::unique_ptr<base::Thread>(), | 375                              std::unique_ptr<base::Thread>(), | 
| 392                              ui_thread, | 376                              ui_thread, | 
| 393                              db_thread, | 377                              db_thread, | 
| 394                              file_thread), | 378                              file_thread), | 
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 439 | 423 | 
| 440   db_thread_lock_.Release(); | 424   db_thread_lock_.Release(); | 
| 441 | 425 | 
| 442   // Run the main thread loop until all workers have been removed and the | 426   // Run the main thread loop until all workers have been removed and the | 
| 443   // registrar destroyed. | 427   // registrar destroyed. | 
| 444   run_loop_.Run(); | 428   run_loop_.Run(); | 
| 445 } | 429 } | 
| 446 | 430 | 
| 447 }  // namespace | 431 }  // namespace | 
| 448 | 432 | 
| 449 }  // namespace browser_sync | 433 }  // namespace syncer | 
| OLD | NEW | 
|---|