OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "base/message_loop.h" | 5 #include "base/message_loop.h" |
6 #include "chrome/browser/browser.h" | 6 #include "chrome/browser/browser.h" |
| 7 #include "chrome/browser/google_service_auth_error.h" |
7 #include "chrome/browser/pref_service.h" | 8 #include "chrome/browser/pref_service.h" |
8 #include "chrome/browser/profile.h" | 9 #include "chrome/browser/profile.h" |
9 #include "chrome/browser/sync/glue/sync_backend_host.h" | 10 #include "chrome/browser/sync/glue/sync_backend_host.h" |
10 #include "chrome/browser/sync/sessions/session_state.h" | 11 #include "chrome/browser/sync/sessions/session_state.h" |
11 #include "chrome/browser/tab_contents/tab_contents.h" | 12 #include "chrome/browser/tab_contents/tab_contents.h" |
12 #include "chrome/common/pref_names.h" | 13 #include "chrome/common/pref_names.h" |
13 #include "chrome/test/live_sync/profile_sync_service_test_harness.h" | 14 #include "chrome/test/live_sync/profile_sync_service_test_harness.h" |
14 #include "chrome/test/ui_test_utils.h" | 15 #include "chrome/test/ui_test_utils.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
16 | 17 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 username_(username), password_(password) { | 90 username_(username), password_(password) { |
90 // Ensure the profile has enough prefs registered for use by sync. | 91 // Ensure the profile has enough prefs registered for use by sync. |
91 if (!p->GetPrefs()->FindPreference(prefs::kAcceptLanguages)) | 92 if (!p->GetPrefs()->FindPreference(prefs::kAcceptLanguages)) |
92 TabContents::RegisterUserPrefs(p->GetPrefs()); | 93 TabContents::RegisterUserPrefs(p->GetPrefs()); |
93 } | 94 } |
94 | 95 |
95 bool ProfileSyncServiceTestHarness::SetupSync() { | 96 bool ProfileSyncServiceTestHarness::SetupSync() { |
96 service_ = profile_->GetProfileSyncService(); | 97 service_ = profile_->GetProfileSyncService(); |
97 service_->StartUp(); | 98 service_->StartUp(); |
98 service_->AddObserver(this); | 99 service_->AddObserver(this); |
99 return WaitForServiceInit(); | 100 return WaitForServiceInit(false); |
| 101 } |
| 102 |
| 103 bool ProfileSyncServiceTestHarness::RetryAuthentication() { |
| 104 wait_state_ = WAITING_FOR_ON_BACKEND_INITIALIZED; |
| 105 return WaitForServiceInit(true); |
100 } | 106 } |
101 | 107 |
102 void ProfileSyncServiceTestHarness::SignalStateCompleteWithNextState( | 108 void ProfileSyncServiceTestHarness::SignalStateCompleteWithNextState( |
103 WaitState next_state) { | 109 WaitState next_state) { |
104 | 110 |
105 wait_state_ = next_state; | 111 wait_state_ = next_state; |
106 SignalStateComplete(); | 112 SignalStateComplete(); |
107 } | 113 } |
108 | 114 |
109 void ProfileSyncServiceTestHarness::SignalStateComplete() { | 115 void ProfileSyncServiceTestHarness::SignalStateComplete() { |
110 MessageLoopForUI::current()->Quit(); | 116 MessageLoopForUI::current()->Quit(); |
111 } | 117 } |
112 | 118 |
113 bool ProfileSyncServiceTestHarness::RunStateChangeMachine() { | 119 bool ProfileSyncServiceTestHarness::RunStateChangeMachine() { |
114 WaitState state = wait_state_; | 120 WaitState state = wait_state_; |
115 ProfileSyncService::Status status(service_->QueryDetailedSyncStatus()); | 121 ProfileSyncService::Status status(service_->QueryDetailedSyncStatus()); |
116 switch (wait_state_) { | 122 switch (wait_state_) { |
117 case WAITING_FOR_ON_AUTH_ERROR: { | 123 case WAITING_FOR_ON_AUTH_ERROR: { |
118 SignalStateCompleteWithNextState(WAITING_FOR_ON_BACKEND_INITIALIZED); | 124 SignalStateCompleteWithNextState(WAITING_FOR_ON_BACKEND_INITIALIZED); |
119 break; | 125 break; |
120 } | 126 } |
121 case WAITING_FOR_ON_BACKEND_INITIALIZED: { | 127 case WAITING_FOR_ON_BACKEND_INITIALIZED: { |
| 128 if (service_->GetAuthError().state() != GoogleServiceAuthError::NONE) { |
| 129 SignalStateCompleteWithNextState(AUTH_ERROR); |
| 130 } |
122 if (service_->sync_initialized()) { | 131 if (service_->sync_initialized()) { |
123 SignalStateCompleteWithNextState(WAITING_FOR_NOTIFICATIONS_ENABLED); | 132 SignalStateCompleteWithNextState(WAITING_FOR_NOTIFICATIONS_ENABLED); |
124 } | 133 } |
125 break; | 134 break; |
126 } | 135 } |
127 case WAITING_FOR_NOTIFICATIONS_ENABLED: { | 136 case WAITING_FOR_NOTIFICATIONS_ENABLED: { |
128 if (status.notifications_enabled) { | 137 if (status.notifications_enabled) { |
129 SignalStateCompleteWithNextState(FULLY_SYNCED); | 138 SignalStateCompleteWithNextState(FULLY_SYNCED); |
130 } | 139 } |
131 break; | 140 break; |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 MessageLoopForUI* loop = MessageLoopForUI::current(); | 258 MessageLoopForUI* loop = MessageLoopForUI::current(); |
250 loop->PostDelayedTask( | 259 loop->PostDelayedTask( |
251 FROM_HERE, | 260 FROM_HERE, |
252 NewRunnableMethod(timeout_signal.get(), | 261 NewRunnableMethod(timeout_signal.get(), |
253 &StateChangeTimeoutEvent::Callback), | 262 &StateChangeTimeoutEvent::Callback), |
254 1000 * timeout_seconds); | 263 1000 * timeout_seconds); |
255 ui_test_utils::RunMessageLoop(); | 264 ui_test_utils::RunMessageLoop(); |
256 return timeout_signal->Abort(); | 265 return timeout_signal->Abort(); |
257 } | 266 } |
258 | 267 |
259 bool ProfileSyncServiceTestHarness::WaitForServiceInit() { | 268 bool ProfileSyncServiceTestHarness::WaitForServiceInit(bool is_auth_retry) { |
260 // Wait for the OnAuthError() callback. | 269 if (!is_auth_retry) { |
261 EXPECT_EQ(wait_state_, WAITING_FOR_ON_AUTH_ERROR); | 270 // Wait for the OnAuthError() callback. |
262 EXPECT_TRUE(AwaitStatusChangeWithTimeout(30, | 271 EXPECT_EQ(wait_state_, WAITING_FOR_ON_AUTH_ERROR); |
263 "Waiting for the OnAuthError() callback.")) << | 272 EXPECT_TRUE(AwaitStatusChangeWithTimeout(30, |
264 "OnAuthError() not seen after 30 seconds."; | 273 "Waiting for the OnAuthError() callback.")) << |
| 274 "OnAuthError() not seen after 30 seconds."; |
| 275 } |
265 | 276 |
266 // Enter GAIA credentials and wait for the OnBackendInitialized() callback. | 277 // Enter GAIA credentials and wait for the OnBackendInitialized() callback. |
267 service_->backend()->Authenticate(username_, password_, std::string()); | 278 service_->backend()->Authenticate(username_, password_, std::string()); |
268 EXPECT_EQ(wait_state_, WAITING_FOR_ON_BACKEND_INITIALIZED); | 279 EXPECT_EQ(wait_state_, WAITING_FOR_ON_BACKEND_INITIALIZED); |
269 EXPECT_TRUE(AwaitStatusChangeWithTimeout(30, | 280 EXPECT_TRUE(AwaitStatusChangeWithTimeout(30, |
270 "Waiting for OnBackendInitialized().")) << | 281 "Waiting for OnBackendInitialized().")) << |
271 "OnBackendInitialized() not seen after 30 seconds."; | 282 "OnBackendInitialized() not seen after 30 seconds."; |
272 | 283 |
| 284 if (wait_state_ == AUTH_ERROR) { |
| 285 return false; |
| 286 } |
| 287 |
273 // Choose datatypes to be synced and wait for notifications_enabled to be set | 288 // Choose datatypes to be synced and wait for notifications_enabled to be set |
274 // to true. | 289 // to true. |
275 syncable::ModelTypeSet set; | 290 syncable::ModelTypeSet set; |
276 for (int i = syncable::FIRST_REAL_MODEL_TYPE; | 291 for (int i = syncable::FIRST_REAL_MODEL_TYPE; |
277 i < syncable::MODEL_TYPE_COUNT; ++i) { | 292 i < syncable::MODEL_TYPE_COUNT; ++i) { |
278 set.insert(syncable::ModelTypeFromInt(i)); | 293 set.insert(syncable::ModelTypeFromInt(i)); |
279 } | 294 } |
280 service_->OnUserChoseDatatypes(true, set); | 295 service_->OnUserChoseDatatypes(true, set); |
281 EXPECT_EQ(wait_state_, WAITING_FOR_NOTIFICATIONS_ENABLED); | 296 EXPECT_EQ(wait_state_, WAITING_FOR_NOTIFICATIONS_ENABLED); |
282 EXPECT_TRUE(AwaitStatusChangeWithTimeout(30, | 297 EXPECT_TRUE(AwaitStatusChangeWithTimeout(30, |
283 "Waiting for notifications_enabled to be set to true.")) << | 298 "Waiting for notifications_enabled to be set to true.")) << |
284 "notifications_enabled not set to true after 30 seconds."; | 299 "notifications_enabled not set to true after 30 seconds."; |
285 | 300 |
286 return true; | 301 return true; |
287 } | 302 } |
288 | 303 |
289 const SyncSessionSnapshot* | 304 const SyncSessionSnapshot* |
290 ProfileSyncServiceTestHarness::GetLastSessionSnapshot() const { | 305 ProfileSyncServiceTestHarness::GetLastSessionSnapshot() const { |
291 EXPECT_FALSE(service_ == NULL) << "Sync service has not yet been set up."; | 306 EXPECT_FALSE(service_ == NULL) << "Sync service has not yet been set up."; |
292 return service_->backend()->GetLastSessionSnapshot(); | 307 return service_->backend()->GetLastSessionSnapshot(); |
293 } | 308 } |
OLD | NEW |