| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/model_association_manager.h" | 5 #include "components/sync/driver/model_association_manager.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| 11 #include "components/sync/driver/fake_data_type_controller.h" | 11 #include "components/sync/driver/fake_data_type_controller.h" |
| 12 #include "testing/gmock/include/gmock/gmock.h" | 12 #include "testing/gmock/include/gmock/gmock.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 14 | 14 |
| 15 using ::testing::_; | 15 using ::testing::_; |
| 16 | 16 |
| 17 namespace syncer { | 17 namespace syncer { |
| 18 | 18 |
| 19 class MockModelAssociationManagerDelegate | 19 class MockModelAssociationManagerDelegate |
| 20 : public ModelAssociationManagerDelegate { | 20 : public ModelAssociationManagerDelegate { |
| 21 public: | 21 public: |
| 22 MockModelAssociationManagerDelegate() {} | 22 MockModelAssociationManagerDelegate() {} |
| 23 ~MockModelAssociationManagerDelegate() {} | 23 ~MockModelAssociationManagerDelegate() {} |
| 24 MOCK_METHOD0(OnAllDataTypesReadyForConfigure, void()); | 24 MOCK_METHOD0(OnAllDataTypesReadyForConfigure, void()); |
| 25 MOCK_METHOD2(OnSingleDataTypeAssociationDone, | 25 MOCK_METHOD2(OnSingleDataTypeAssociationDone, |
| 26 void(ModelType type, | 26 void(ModelType type, |
| 27 const DataTypeAssociationStats& association_stats)); | 27 const DataTypeAssociationStats& association_stats)); |
| 28 MOCK_METHOD1(OnSingleDataTypeWillStart, void(ModelType type)); |
| 28 MOCK_METHOD2(OnSingleDataTypeWillStop, | 29 MOCK_METHOD2(OnSingleDataTypeWillStop, |
| 29 void(ModelType, const SyncError& error)); | 30 void(ModelType, const SyncError& error)); |
| 30 MOCK_METHOD1(OnModelAssociationDone, | 31 MOCK_METHOD1(OnModelAssociationDone, |
| 31 void(const DataTypeManager::ConfigureResult& result)); | 32 void(const DataTypeManager::ConfigureResult& result)); |
| 32 }; | 33 }; |
| 33 | 34 |
| 34 FakeDataTypeController* GetController( | 35 FakeDataTypeController* GetController( |
| 35 const DataTypeController::TypeMap& controllers, | 36 const DataTypeController::TypeMap& controllers, |
| 36 ModelType model_type) { | 37 ModelType model_type) { |
| 37 DataTypeController::TypeMap::const_iterator it = controllers.find(model_type); | 38 DataTypeController::TypeMap::const_iterator it = controllers.find(model_type); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 57 }; | 58 }; |
| 58 | 59 |
| 59 // Start a type and make sure ModelAssociationManager callst the |Start| | 60 // Start a type and make sure ModelAssociationManager callst the |Start| |
| 60 // method and calls the callback when it is done. | 61 // method and calls the callback when it is done. |
| 61 TEST_F(SyncModelAssociationManagerTest, SimpleModelStart) { | 62 TEST_F(SyncModelAssociationManagerTest, SimpleModelStart) { |
| 62 controllers_[BOOKMARKS] = base::MakeUnique<FakeDataTypeController>(BOOKMARKS); | 63 controllers_[BOOKMARKS] = base::MakeUnique<FakeDataTypeController>(BOOKMARKS); |
| 63 controllers_[APPS] = base::MakeUnique<FakeDataTypeController>(APPS); | 64 controllers_[APPS] = base::MakeUnique<FakeDataTypeController>(APPS); |
| 64 ModelAssociationManager model_association_manager(&controllers_, &delegate_); | 65 ModelAssociationManager model_association_manager(&controllers_, &delegate_); |
| 65 ModelTypeSet types(BOOKMARKS, APPS); | 66 ModelTypeSet types(BOOKMARKS, APPS); |
| 66 DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types); | 67 DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types); |
| 68 EXPECT_CALL(delegate_, OnSingleDataTypeWillStart(BOOKMARKS)); |
| 69 EXPECT_CALL(delegate_, OnSingleDataTypeWillStart(APPS)); |
| 67 EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); | 70 EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); |
| 68 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) | 71 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) |
| 69 .WillOnce(VerifyResult(expected_result)); | 72 .WillOnce(VerifyResult(expected_result)); |
| 70 | 73 |
| 71 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), | 74 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), |
| 72 DataTypeController::NOT_RUNNING); | 75 DataTypeController::NOT_RUNNING); |
| 73 EXPECT_EQ(GetController(controllers_, APPS)->state(), | 76 EXPECT_EQ(GetController(controllers_, APPS)->state(), |
| 74 DataTypeController::NOT_RUNNING); | 77 DataTypeController::NOT_RUNNING); |
| 75 | 78 |
| 76 // Initialize() kicks off model loading. | 79 // Initialize() kicks off model loading. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 92 } | 95 } |
| 93 | 96 |
| 94 // Start a type and call stop before it finishes associating. | 97 // Start a type and call stop before it finishes associating. |
| 95 TEST_F(SyncModelAssociationManagerTest, StopModelBeforeFinish) { | 98 TEST_F(SyncModelAssociationManagerTest, StopModelBeforeFinish) { |
| 96 controllers_[BOOKMARKS] = base::MakeUnique<FakeDataTypeController>(BOOKMARKS); | 99 controllers_[BOOKMARKS] = base::MakeUnique<FakeDataTypeController>(BOOKMARKS); |
| 97 ModelAssociationManager model_association_manager(&controllers_, &delegate_); | 100 ModelAssociationManager model_association_manager(&controllers_, &delegate_); |
| 98 | 101 |
| 99 ModelTypeSet types; | 102 ModelTypeSet types; |
| 100 types.Put(BOOKMARKS); | 103 types.Put(BOOKMARKS); |
| 101 | 104 |
| 105 EXPECT_CALL(delegate_, OnSingleDataTypeWillStart(BOOKMARKS)); |
| 102 DataTypeManager::ConfigureResult expected_result(DataTypeManager::ABORTED, | 106 DataTypeManager::ConfigureResult expected_result(DataTypeManager::ABORTED, |
| 103 types); | 107 types); |
| 104 | |
| 105 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) | 108 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) |
| 106 .WillOnce(VerifyResult(expected_result)); | 109 .WillOnce(VerifyResult(expected_result)); |
| 107 EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); | 110 EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); |
| 108 | 111 |
| 109 model_association_manager.Initialize(types); | 112 model_association_manager.Initialize(types); |
| 110 model_association_manager.StartAssociationAsync(types); | 113 model_association_manager.StartAssociationAsync(types); |
| 111 | 114 |
| 112 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), | 115 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), |
| 113 DataTypeController::ASSOCIATING); | 116 DataTypeController::ASSOCIATING); |
| 114 model_association_manager.Stop(); | 117 model_association_manager.Stop(); |
| 115 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), | 118 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), |
| 116 DataTypeController::NOT_RUNNING); | 119 DataTypeController::NOT_RUNNING); |
| 117 } | 120 } |
| 118 | 121 |
| 119 // Start a type, let it finish and then call stop. | 122 // Start a type, let it finish and then call stop. |
| 120 TEST_F(SyncModelAssociationManagerTest, StopAfterFinish) { | 123 TEST_F(SyncModelAssociationManagerTest, StopAfterFinish) { |
| 121 controllers_[BOOKMARKS] = base::MakeUnique<FakeDataTypeController>(BOOKMARKS); | 124 controllers_[BOOKMARKS] = base::MakeUnique<FakeDataTypeController>(BOOKMARKS); |
| 122 ModelAssociationManager model_association_manager(&controllers_, &delegate_); | 125 ModelAssociationManager model_association_manager(&controllers_, &delegate_); |
| 123 ModelTypeSet types; | 126 ModelTypeSet types; |
| 124 types.Put(BOOKMARKS); | 127 types.Put(BOOKMARKS); |
| 128 EXPECT_CALL(delegate_, OnSingleDataTypeWillStart(BOOKMARKS)); |
| 125 DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types); | 129 DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types); |
| 126 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) | 130 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) |
| 127 .WillOnce(VerifyResult(expected_result)); | 131 .WillOnce(VerifyResult(expected_result)); |
| 128 EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); | 132 EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); |
| 129 | 133 |
| 130 model_association_manager.Initialize(types); | 134 model_association_manager.Initialize(types); |
| 131 model_association_manager.StartAssociationAsync(types); | 135 model_association_manager.StartAssociationAsync(types); |
| 132 | 136 |
| 133 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), | 137 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), |
| 134 DataTypeController::ASSOCIATING); | 138 DataTypeController::ASSOCIATING); |
| 135 GetController(controllers_, BOOKMARKS)->FinishStart(DataTypeController::OK); | 139 GetController(controllers_, BOOKMARKS)->FinishStart(DataTypeController::OK); |
| 136 | 140 |
| 137 model_association_manager.Stop(); | 141 model_association_manager.Stop(); |
| 138 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), | 142 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), |
| 139 DataTypeController::NOT_RUNNING); | 143 DataTypeController::NOT_RUNNING); |
| 140 } | 144 } |
| 141 | 145 |
| 142 // Make a type fail model association and verify correctness. | 146 // Make a type fail model association and verify correctness. |
| 143 TEST_F(SyncModelAssociationManagerTest, TypeFailModelAssociation) { | 147 TEST_F(SyncModelAssociationManagerTest, TypeFailModelAssociation) { |
| 144 controllers_[BOOKMARKS] = base::MakeUnique<FakeDataTypeController>(BOOKMARKS); | 148 controllers_[BOOKMARKS] = base::MakeUnique<FakeDataTypeController>(BOOKMARKS); |
| 145 ModelAssociationManager model_association_manager(&controllers_, &delegate_); | 149 ModelAssociationManager model_association_manager(&controllers_, &delegate_); |
| 146 ModelTypeSet types; | 150 ModelTypeSet types; |
| 147 types.Put(BOOKMARKS); | 151 types.Put(BOOKMARKS); |
| 152 EXPECT_CALL(delegate_, OnSingleDataTypeWillStart(BOOKMARKS)); |
| 148 DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types); | 153 DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types); |
| 149 EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); | 154 EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); |
| 150 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) | 155 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) |
| 151 .WillOnce(VerifyResult(expected_result)); | 156 .WillOnce(VerifyResult(expected_result)); |
| 152 | 157 |
| 153 model_association_manager.Initialize(types); | 158 model_association_manager.Initialize(types); |
| 154 model_association_manager.StartAssociationAsync(types); | 159 model_association_manager.StartAssociationAsync(types); |
| 155 | 160 |
| 156 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), | 161 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), |
| 157 DataTypeController::ASSOCIATING); | 162 DataTypeController::ASSOCIATING); |
| 158 GetController(controllers_, BOOKMARKS) | 163 GetController(controllers_, BOOKMARKS) |
| 159 ->FinishStart(DataTypeController::ASSOCIATION_FAILED); | 164 ->FinishStart(DataTypeController::ASSOCIATION_FAILED); |
| 160 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), | 165 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), |
| 161 DataTypeController::NOT_RUNNING); | 166 DataTypeController::NOT_RUNNING); |
| 162 } | 167 } |
| 163 | 168 |
| 164 // Ensure configuring stops when a type returns a unrecoverable error. | 169 // Ensure configuring stops when a type returns a unrecoverable error. |
| 165 TEST_F(SyncModelAssociationManagerTest, TypeReturnUnrecoverableError) { | 170 TEST_F(SyncModelAssociationManagerTest, TypeReturnUnrecoverableError) { |
| 166 controllers_[BOOKMARKS] = base::MakeUnique<FakeDataTypeController>(BOOKMARKS); | 171 controllers_[BOOKMARKS] = base::MakeUnique<FakeDataTypeController>(BOOKMARKS); |
| 167 ModelAssociationManager model_association_manager(&controllers_, &delegate_); | 172 ModelAssociationManager model_association_manager(&controllers_, &delegate_); |
| 168 ModelTypeSet types; | 173 ModelTypeSet types; |
| 169 types.Put(BOOKMARKS); | 174 types.Put(BOOKMARKS); |
| 175 EXPECT_CALL(delegate_, OnSingleDataTypeWillStart(BOOKMARKS)); |
| 170 DataTypeManager::ConfigureResult expected_result( | 176 DataTypeManager::ConfigureResult expected_result( |
| 171 DataTypeManager::UNRECOVERABLE_ERROR, types); | 177 DataTypeManager::UNRECOVERABLE_ERROR, types); |
| 172 EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); | 178 EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); |
| 173 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) | 179 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) |
| 174 .WillOnce(VerifyResult(expected_result)); | 180 .WillOnce(VerifyResult(expected_result)); |
| 175 | 181 |
| 176 model_association_manager.Initialize(types); | 182 model_association_manager.Initialize(types); |
| 177 | 183 |
| 178 model_association_manager.StartAssociationAsync(types); | 184 model_association_manager.StartAssociationAsync(types); |
| 179 | 185 |
| 180 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), | 186 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), |
| 181 DataTypeController::ASSOCIATING); | 187 DataTypeController::ASSOCIATING); |
| 182 GetController(controllers_, BOOKMARKS) | 188 GetController(controllers_, BOOKMARKS) |
| 183 ->FinishStart(DataTypeController::UNRECOVERABLE_ERROR); | 189 ->FinishStart(DataTypeController::UNRECOVERABLE_ERROR); |
| 184 } | 190 } |
| 185 | 191 |
| 186 TEST_F(SyncModelAssociationManagerTest, SlowTypeAsFailedType) { | 192 TEST_F(SyncModelAssociationManagerTest, SlowTypeAsFailedType) { |
| 187 controllers_[BOOKMARKS] = base::MakeUnique<FakeDataTypeController>(BOOKMARKS); | 193 controllers_[BOOKMARKS] = base::MakeUnique<FakeDataTypeController>(BOOKMARKS); |
| 188 controllers_[APPS] = base::MakeUnique<FakeDataTypeController>(APPS); | 194 controllers_[APPS] = base::MakeUnique<FakeDataTypeController>(APPS); |
| 189 GetController(controllers_, BOOKMARKS)->SetDelayModelLoad(); | 195 GetController(controllers_, BOOKMARKS)->SetDelayModelLoad(); |
| 190 ModelAssociationManager model_association_manager(&controllers_, &delegate_); | 196 ModelAssociationManager model_association_manager(&controllers_, &delegate_); |
| 191 ModelTypeSet types; | 197 ModelTypeSet types; |
| 192 types.Put(BOOKMARKS); | 198 types.Put(BOOKMARKS); |
| 193 types.Put(APPS); | 199 types.Put(APPS); |
| 194 | 200 |
| 195 DataTypeManager::ConfigureResult expected_result_partially_done( | 201 DataTypeManager::ConfigureResult expected_result_partially_done( |
| 196 DataTypeManager::OK, types); | 202 DataTypeManager::OK, types); |
| 197 | 203 |
| 204 EXPECT_CALL(delegate_, OnSingleDataTypeWillStart(BOOKMARKS)); |
| 205 EXPECT_CALL(delegate_, OnSingleDataTypeWillStart(APPS)); |
| 198 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) | 206 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) |
| 199 .WillOnce(VerifyResult(expected_result_partially_done)); | 207 .WillOnce(VerifyResult(expected_result_partially_done)); |
| 200 | 208 |
| 201 model_association_manager.Initialize(types); | 209 model_association_manager.Initialize(types); |
| 202 model_association_manager.StartAssociationAsync(types); | 210 model_association_manager.StartAssociationAsync(types); |
| 203 GetController(controllers_, APPS)->FinishStart(DataTypeController::OK); | 211 GetController(controllers_, APPS)->FinishStart(DataTypeController::OK); |
| 204 | 212 |
| 205 EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); | 213 EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); |
| 206 model_association_manager.GetTimerForTesting()->user_task().Run(); | 214 model_association_manager.GetTimerForTesting()->user_task().Run(); |
| 207 | 215 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 // is reported and stopped properly. | 263 // is reported and stopped properly. |
| 256 TEST_F(SyncModelAssociationManagerTest, ModelLoadFailBeforeAssociationStart) { | 264 TEST_F(SyncModelAssociationManagerTest, ModelLoadFailBeforeAssociationStart) { |
| 257 controllers_[BOOKMARKS] = base::MakeUnique<FakeDataTypeController>(BOOKMARKS); | 265 controllers_[BOOKMARKS] = base::MakeUnique<FakeDataTypeController>(BOOKMARKS); |
| 258 GetController(controllers_, BOOKMARKS) | 266 GetController(controllers_, BOOKMARKS) |
| 259 ->SetModelLoadError( | 267 ->SetModelLoadError( |
| 260 SyncError(FROM_HERE, SyncError::DATATYPE_ERROR, "", BOOKMARKS)); | 268 SyncError(FROM_HERE, SyncError::DATATYPE_ERROR, "", BOOKMARKS)); |
| 261 ModelAssociationManager model_association_manager(&controllers_, &delegate_); | 269 ModelAssociationManager model_association_manager(&controllers_, &delegate_); |
| 262 ModelTypeSet types; | 270 ModelTypeSet types; |
| 263 types.Put(BOOKMARKS); | 271 types.Put(BOOKMARKS); |
| 264 DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types); | 272 DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types); |
| 273 EXPECT_CALL(delegate_, OnSingleDataTypeWillStart(BOOKMARKS)); |
| 265 EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); | 274 EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); |
| 266 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) | 275 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) |
| 267 .WillOnce(VerifyResult(expected_result)); | 276 .WillOnce(VerifyResult(expected_result)); |
| 268 | 277 |
| 269 model_association_manager.Initialize(types); | 278 model_association_manager.Initialize(types); |
| 270 EXPECT_EQ(DataTypeController::NOT_RUNNING, | 279 EXPECT_EQ(DataTypeController::NOT_RUNNING, |
| 271 GetController(controllers_, BOOKMARKS)->state()); | 280 GetController(controllers_, BOOKMARKS)->state()); |
| 272 model_association_manager.StartAssociationAsync(types); | 281 model_association_manager.StartAssociationAsync(types); |
| 273 EXPECT_EQ(DataTypeController::NOT_RUNNING, | 282 EXPECT_EQ(DataTypeController::NOT_RUNNING, |
| 274 GetController(controllers_, BOOKMARKS)->state()); | 283 GetController(controllers_, BOOKMARKS)->state()); |
| 275 } | 284 } |
| 276 | 285 |
| 277 // Test that a runtime error is handled by stopping the type. | 286 // Test that a runtime error is handled by stopping the type. |
| 278 TEST_F(SyncModelAssociationManagerTest, StopAfterConfiguration) { | 287 TEST_F(SyncModelAssociationManagerTest, StopAfterConfiguration) { |
| 279 controllers_[BOOKMARKS] = base::MakeUnique<FakeDataTypeController>(BOOKMARKS); | 288 controllers_[BOOKMARKS] = base::MakeUnique<FakeDataTypeController>(BOOKMARKS); |
| 280 ModelAssociationManager model_association_manager(&controllers_, &delegate_); | 289 ModelAssociationManager model_association_manager(&controllers_, &delegate_); |
| 281 ModelTypeSet types; | 290 ModelTypeSet types; |
| 282 types.Put(BOOKMARKS); | 291 types.Put(BOOKMARKS); |
| 283 DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types); | 292 DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types); |
| 293 EXPECT_CALL(delegate_, OnSingleDataTypeWillStart(BOOKMARKS)); |
| 284 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) | 294 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) |
| 285 .WillOnce(VerifyResult(expected_result)); | 295 .WillOnce(VerifyResult(expected_result)); |
| 286 | 296 |
| 287 model_association_manager.Initialize(types); | 297 model_association_manager.Initialize(types); |
| 288 model_association_manager.StartAssociationAsync(types); | 298 model_association_manager.StartAssociationAsync(types); |
| 289 | 299 |
| 290 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), | 300 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), |
| 291 DataTypeController::ASSOCIATING); | 301 DataTypeController::ASSOCIATING); |
| 292 GetController(controllers_, BOOKMARKS)->FinishStart(DataTypeController::OK); | 302 GetController(controllers_, BOOKMARKS)->FinishStart(DataTypeController::OK); |
| 293 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), | 303 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), |
| (...skipping 14 matching lines...) Expand all Loading... |
| 308 ModelAssociationManager model_association_manager(&controllers_, &delegate_); | 318 ModelAssociationManager model_association_manager(&controllers_, &delegate_); |
| 309 ModelTypeSet types; | 319 ModelTypeSet types; |
| 310 types.Put(BOOKMARKS); | 320 types.Put(BOOKMARKS); |
| 311 types.Put(APPS); | 321 types.Put(APPS); |
| 312 | 322 |
| 313 ModelTypeSet expected_types_unfinished; | 323 ModelTypeSet expected_types_unfinished; |
| 314 expected_types_unfinished.Put(BOOKMARKS); | 324 expected_types_unfinished.Put(BOOKMARKS); |
| 315 DataTypeManager::ConfigureResult expected_result_partially_done( | 325 DataTypeManager::ConfigureResult expected_result_partially_done( |
| 316 DataTypeManager::OK, types); | 326 DataTypeManager::OK, types); |
| 317 | 327 |
| 328 EXPECT_CALL(delegate_, OnSingleDataTypeWillStart(BOOKMARKS)); |
| 329 EXPECT_CALL(delegate_, OnSingleDataTypeWillStart(APPS)); |
| 318 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) | 330 EXPECT_CALL(delegate_, OnModelAssociationDone(_)) |
| 319 .WillOnce(VerifyResult(expected_result_partially_done)); | 331 .WillOnce(VerifyResult(expected_result_partially_done)); |
| 320 | 332 |
| 321 model_association_manager.Initialize(types); | 333 model_association_manager.Initialize(types); |
| 322 model_association_manager.StartAssociationAsync(types); | 334 model_association_manager.StartAssociationAsync(types); |
| 323 GetController(controllers_, APPS)->FinishStart(DataTypeController::OK); | 335 GetController(controllers_, APPS)->FinishStart(DataTypeController::OK); |
| 324 EXPECT_EQ(GetController(controllers_, APPS)->state(), | 336 EXPECT_EQ(GetController(controllers_, APPS)->state(), |
| 325 DataTypeController::RUNNING); | 337 DataTypeController::RUNNING); |
| 326 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), | 338 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), |
| 327 DataTypeController::ASSOCIATING); | 339 DataTypeController::ASSOCIATING); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 343 GetController(controllers_, APPS)->SetDelayModelLoad(); | 355 GetController(controllers_, APPS)->SetDelayModelLoad(); |
| 344 | 356 |
| 345 // APPS controller requires LoadModels complete before configure. | 357 // APPS controller requires LoadModels complete before configure. |
| 346 GetController(controllers_, APPS)->SetShouldLoadModelBeforeConfigure(true); | 358 GetController(controllers_, APPS)->SetShouldLoadModelBeforeConfigure(true); |
| 347 | 359 |
| 348 ModelAssociationManager model_association_manager(&controllers_, &delegate_); | 360 ModelAssociationManager model_association_manager(&controllers_, &delegate_); |
| 349 ModelTypeSet types(BOOKMARKS, APPS); | 361 ModelTypeSet types(BOOKMARKS, APPS); |
| 350 DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types); | 362 DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types); |
| 351 // OnAllDataTypesReadyForConfigure shouldn't be called, APPS data type is not | 363 // OnAllDataTypesReadyForConfigure shouldn't be called, APPS data type is not |
| 352 // loaded yet. | 364 // loaded yet. |
| 365 EXPECT_CALL(delegate_, OnSingleDataTypeWillStart(BOOKMARKS)); |
| 366 EXPECT_CALL(delegate_, OnSingleDataTypeWillStart(APPS)); |
| 353 EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()).Times(0); | 367 EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()).Times(0); |
| 354 | 368 |
| 355 model_association_manager.Initialize(types); | 369 model_association_manager.Initialize(types); |
| 356 | 370 |
| 357 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), | 371 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), |
| 358 DataTypeController::MODEL_STARTING); | 372 DataTypeController::MODEL_STARTING); |
| 359 EXPECT_EQ(GetController(controllers_, APPS)->state(), | 373 EXPECT_EQ(GetController(controllers_, APPS)->state(), |
| 360 DataTypeController::MODEL_STARTING); | 374 DataTypeController::MODEL_STARTING); |
| 361 | 375 |
| 362 testing::Mock::VerifyAndClearExpectations(&delegate_); | 376 testing::Mock::VerifyAndClearExpectations(&delegate_); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 388 GetController(controllers_, APPS)->SetDelayModelLoad(); | 402 GetController(controllers_, APPS)->SetDelayModelLoad(); |
| 389 | 403 |
| 390 // APPS controller requires LoadModels complete before configure. | 404 // APPS controller requires LoadModels complete before configure. |
| 391 GetController(controllers_, APPS)->SetShouldLoadModelBeforeConfigure(true); | 405 GetController(controllers_, APPS)->SetShouldLoadModelBeforeConfigure(true); |
| 392 | 406 |
| 393 ModelAssociationManager model_association_manager(&controllers_, &delegate_); | 407 ModelAssociationManager model_association_manager(&controllers_, &delegate_); |
| 394 ModelTypeSet types(APPS); | 408 ModelTypeSet types(APPS); |
| 395 DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types); | 409 DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types); |
| 396 // OnAllDataTypesReadyForConfigure shouldn't be called, APPS data type is not | 410 // OnAllDataTypesReadyForConfigure shouldn't be called, APPS data type is not |
| 397 // loaded yet. | 411 // loaded yet. |
| 412 EXPECT_CALL(delegate_, OnSingleDataTypeWillStart(APPS)); |
| 398 EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()).Times(0); | 413 EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()).Times(0); |
| 399 | 414 |
| 400 model_association_manager.Initialize(types); | 415 model_association_manager.Initialize(types); |
| 401 | 416 |
| 402 EXPECT_EQ(GetController(controllers_, APPS)->state(), | 417 EXPECT_EQ(GetController(controllers_, APPS)->state(), |
| 403 DataTypeController::MODEL_STARTING); | 418 DataTypeController::MODEL_STARTING); |
| 404 | 419 |
| 405 testing::Mock::VerifyAndClearExpectations(&delegate_); | 420 testing::Mock::VerifyAndClearExpectations(&delegate_); |
| 406 | 421 |
| 407 EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); | 422 EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 429 GetController(controllers_, BOOKMARKS) | 444 GetController(controllers_, BOOKMARKS) |
| 430 ->SetShouldLoadModelBeforeConfigure(true); | 445 ->SetShouldLoadModelBeforeConfigure(true); |
| 431 GetController(controllers_, APPS)->SetShouldLoadModelBeforeConfigure(true); | 446 GetController(controllers_, APPS)->SetShouldLoadModelBeforeConfigure(true); |
| 432 | 447 |
| 433 ModelAssociationManager model_association_manager(&controllers_, &delegate_); | 448 ModelAssociationManager model_association_manager(&controllers_, &delegate_); |
| 434 ModelTypeSet types(BOOKMARKS, APPS); | 449 ModelTypeSet types(BOOKMARKS, APPS); |
| 435 DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types); | 450 DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types); |
| 436 | 451 |
| 437 // Apps will finish loading but bookmarks won't. | 452 // Apps will finish loading but bookmarks won't. |
| 438 // OnAllDataTypesReadyForConfigure shouldn't be called. | 453 // OnAllDataTypesReadyForConfigure shouldn't be called. |
| 454 EXPECT_CALL(delegate_, OnSingleDataTypeWillStart(BOOKMARKS)); |
| 455 EXPECT_CALL(delegate_, OnSingleDataTypeWillStart(APPS)); |
| 439 EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()).Times(0); | 456 EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()).Times(0); |
| 440 | 457 |
| 441 model_association_manager.Initialize(types); | 458 model_association_manager.Initialize(types); |
| 442 | 459 |
| 443 GetController(controllers_, APPS)->SimulateModelLoadFinishing(); | 460 GetController(controllers_, APPS)->SimulateModelLoadFinishing(); |
| 444 | 461 |
| 445 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), | 462 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), |
| 446 DataTypeController::MODEL_STARTING); | 463 DataTypeController::MODEL_STARTING); |
| 447 EXPECT_EQ(GetController(controllers_, APPS)->state(), | 464 EXPECT_EQ(GetController(controllers_, APPS)->state(), |
| 448 DataTypeController::MODEL_LOADED); | 465 DataTypeController::MODEL_LOADED); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 463 | 480 |
| 464 EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); | 481 EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); |
| 465 // Finish loading BOOKMARKS. This should trigger | 482 // Finish loading BOOKMARKS. This should trigger |
| 466 // OnAllDataTypesReadyForConfigure(). | 483 // OnAllDataTypesReadyForConfigure(). |
| 467 GetController(controllers_, BOOKMARKS)->SimulateModelLoadFinishing(); | 484 GetController(controllers_, BOOKMARKS)->SimulateModelLoadFinishing(); |
| 468 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), | 485 EXPECT_EQ(GetController(controllers_, BOOKMARKS)->state(), |
| 469 DataTypeController::MODEL_LOADED); | 486 DataTypeController::MODEL_LOADED); |
| 470 } | 487 } |
| 471 | 488 |
| 472 } // namespace syncer | 489 } // namespace syncer |
| OLD | NEW |