Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(44)

Side by Side Diff: chrome/browser/sync/profile_sync_service_harness.cc

Issue 7024058: [Sync] Clean up sync logging (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: even more logging Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/sync/profile_sync_service_harness.h" 5 #include "chrome/browser/sync/profile_sync_service_harness.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <algorithm> 8 #include <algorithm>
9 #include <iterator> 9 #include <iterator>
10 #include <ostream> 10 #include <ostream>
11 #include <set> 11 #include <set>
12 #include <sstream>
12 #include <vector> 13 #include <vector>
13 14
14 #include "base/json/json_writer.h" 15 #include "base/json/json_writer.h"
15 #include "base/logging.h" 16 #include "base/logging.h"
16 #include "base/memory/ref_counted.h" 17 #include "base/memory/ref_counted.h"
17 #include "base/message_loop.h" 18 #include "base/message_loop.h"
18 #include "base/task.h" 19 #include "base/task.h"
19 #include "base/tracked.h" 20 #include "base/tracked.h"
20 #include "chrome/browser/profiles/profile.h" 21 #include "chrome/browser/profiles/profile.h"
21 #include "chrome/browser/sync/sessions/session_state.h" 22 #include "chrome/browser/sync/sessions/session_state.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 84
84 bool StateChangeTimeoutEvent::Abort() { 85 bool StateChangeTimeoutEvent::Abort() {
85 aborted_ = true; 86 aborted_ = true;
86 caller_ = NULL; 87 caller_ = NULL;
87 return !did_timeout_; 88 return !did_timeout_;
88 } 89 }
89 90
90 ProfileSyncServiceHarness::ProfileSyncServiceHarness( 91 ProfileSyncServiceHarness::ProfileSyncServiceHarness(
91 Profile* profile, 92 Profile* profile,
92 const std::string& username, 93 const std::string& username,
93 const std::string& password, 94 const std::string& password)
94 int id)
95 : waiting_for_encryption_type_(syncable::UNSPECIFIED), 95 : waiting_for_encryption_type_(syncable::UNSPECIFIED),
96 wait_state_(INITIAL_WAIT_STATE), 96 wait_state_(INITIAL_WAIT_STATE),
97 profile_(profile), 97 profile_(profile),
98 service_(NULL), 98 service_(NULL),
99 timestamp_match_partner_(NULL), 99 timestamp_match_partner_(NULL),
100 username_(username), 100 username_(username),
101 password_(password), 101 password_(password),
102 id_(id) { 102 profile_debug_name_(profile->GetDebugName()) {
103 if (IsSyncAlreadySetup()) { 103 if (IsSyncAlreadySetup()) {
104 service_ = profile_->GetProfileSyncService(); 104 service_ = profile_->GetProfileSyncService();
105 service_->AddObserver(this); 105 service_->AddObserver(this);
106 wait_state_ = FULLY_SYNCED; 106 wait_state_ = FULLY_SYNCED;
107 } 107 }
108 } 108 }
109 109
110 // static 110 // static
111 ProfileSyncServiceHarness* ProfileSyncServiceHarness::CreateAndAttach( 111 ProfileSyncServiceHarness* ProfileSyncServiceHarness::CreateAndAttach(
112 Profile* profile) { 112 Profile* profile) {
113 if (!profile->HasProfileSyncService()) { 113 if (!profile->HasProfileSyncService()) {
114 NOTREACHED() << "Profile has never signed into sync."; 114 NOTREACHED() << "Profile has never signed into sync.";
115 return NULL; 115 return NULL;
116 } 116 }
117 return new ProfileSyncServiceHarness(profile, "", "", 0); 117 return new ProfileSyncServiceHarness(profile, "", "");
118 } 118 }
119 119
120 void ProfileSyncServiceHarness::SetCredentials(const std::string& username, 120 void ProfileSyncServiceHarness::SetCredentials(const std::string& username,
121 const std::string& password) { 121 const std::string& password) {
122 username_ = username; 122 username_ = username;
123 password_ = password; 123 password_ = password;
124 } 124 }
125 125
126 bool ProfileSyncServiceHarness::IsSyncAlreadySetup() { 126 bool ProfileSyncServiceHarness::IsSyncAlreadySetup() {
127 return profile_->HasProfileSyncService(); 127 return profile_->HasProfileSyncService();
128 } 128 }
129 129
130 bool ProfileSyncServiceHarness::SetupSync() { 130 bool ProfileSyncServiceHarness::SetupSync() {
131 syncable::ModelTypeSet synced_datatypes; 131 syncable::ModelTypeSet synced_datatypes;
132 for (int i = syncable::FIRST_REAL_MODEL_TYPE; 132 for (int i = syncable::FIRST_REAL_MODEL_TYPE;
133 i < syncable::MODEL_TYPE_COUNT; ++i) { 133 i < syncable::MODEL_TYPE_COUNT; ++i) {
134 synced_datatypes.insert(syncable::ModelTypeFromInt(i)); 134 synced_datatypes.insert(syncable::ModelTypeFromInt(i));
135 } 135 }
136 bool result = SetupSync(synced_datatypes); 136 bool result = SetupSync(synced_datatypes);
137 if (result == false) { 137 if (result == false) {
138 std::string status = GetServiceStatus(); 138 std::string status = GetServiceStatus();
139 LOG(ERROR) << "Client " << id_ << ": SetupSync failed. Syncer status:\n" 139 LOG(ERROR) << profile_debug_name_
140 << status; 140 << ": SetupSync failed. Syncer status:\n" << status;
141 } else { 141 } else {
142 VLOG(1) << "Client " << id_ << ": SetupSync successful."; 142 VLOG(1) << profile_debug_name_ << ": SetupSync successful.";
143 } 143 }
144 return result; 144 return result;
145 } 145 }
146 146
147 bool ProfileSyncServiceHarness::SetupSync( 147 bool ProfileSyncServiceHarness::SetupSync(
148 const syncable::ModelTypeSet& synced_datatypes) { 148 const syncable::ModelTypeSet& synced_datatypes) {
149 // Initialize the sync client's profile sync service object. 149 // Initialize the sync client's profile sync service object.
150 service_ = profile_->GetProfileSyncService(""); 150 service_ = profile_->GetProfileSyncService("");
151 if (service_ == NULL) { 151 if (service_ == NULL) {
152 LOG(ERROR) << "SetupSync(): service_ is null."; 152 LOG(ERROR) << "SetupSync(): service_ is null.";
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 } 203 }
204 204
205 void ProfileSyncServiceHarness::SignalStateComplete() { 205 void ProfileSyncServiceHarness::SignalStateComplete() {
206 MessageLoop::current()->Quit(); 206 MessageLoop::current()->Quit();
207 } 207 }
208 208
209 bool ProfileSyncServiceHarness::RunStateChangeMachine() { 209 bool ProfileSyncServiceHarness::RunStateChangeMachine() {
210 WaitState original_wait_state = wait_state_; 210 WaitState original_wait_state = wait_state_;
211 switch (wait_state_) { 211 switch (wait_state_) {
212 case WAITING_FOR_ON_BACKEND_INITIALIZED: { 212 case WAITING_FOR_ON_BACKEND_INITIALIZED: {
213 LogClientInfo("WAITING_FOR_ON_BACKEND_INITIALIZED", 1); 213 VLOG(1) << "WAITING_FOR_ON_BACKEND_INITIALIZED: " << GetClientInfo();
214 if (service()->sync_initialized()) { 214 if (service()->sync_initialized()) {
215 // The sync backend is initialized. 215 // The sync backend is initialized.
216 SignalStateCompleteWithNextState(WAITING_FOR_INITIAL_SYNC); 216 SignalStateCompleteWithNextState(WAITING_FOR_INITIAL_SYNC);
217 } 217 }
218 break; 218 break;
219 } 219 }
220 case WAITING_FOR_INITIAL_SYNC: { 220 case WAITING_FOR_INITIAL_SYNC: {
221 LogClientInfo("WAITING_FOR_INITIAL_SYNC", 1); 221 VLOG(1) << "WAITING_FOR_INITIAL_SYNC: " << GetClientInfo();
222 if (IsSynced()) { 222 if (IsSynced()) {
223 // The first sync cycle is now complete. We can start running tests. 223 // The first sync cycle is now complete. We can start running tests.
224 SignalStateCompleteWithNextState(FULLY_SYNCED); 224 SignalStateCompleteWithNextState(FULLY_SYNCED);
225 break; 225 break;
226 } 226 }
227 if (service()->passphrase_required_reason() == 227 if (service()->passphrase_required_reason() ==
228 sync_api::REASON_SET_PASSPHRASE_FAILED) { 228 sync_api::REASON_SET_PASSPHRASE_FAILED) {
229 // A passphrase is required for decryption and we don't have it. Do not 229 // A passphrase is required for decryption and we don't have it. Do not
230 // wait any more. 230 // wait any more.
231 SignalStateCompleteWithNextState(SET_PASSPHRASE_FAILED); 231 SignalStateCompleteWithNextState(SET_PASSPHRASE_FAILED);
232 break; 232 break;
233 } 233 }
234 break; 234 break;
235 } 235 }
236 case WAITING_FOR_SYNC_TO_FINISH: { 236 case WAITING_FOR_SYNC_TO_FINISH: {
237 LogClientInfo("WAITING_FOR_SYNC_TO_FINISH", 1); 237 VLOG(1) << "WAITING_FOR_SYNC_TO_FINISH: " << GetClientInfo();
238 if (IsSynced()) { 238 if (IsSynced()) {
239 // The sync cycle we were waiting for is complete. 239 // The sync cycle we were waiting for is complete.
240 SignalStateCompleteWithNextState(FULLY_SYNCED); 240 SignalStateCompleteWithNextState(FULLY_SYNCED);
241 break; 241 break;
242 } 242 }
243 if (service()->passphrase_required_reason() == 243 if (service()->passphrase_required_reason() ==
244 sync_api::REASON_SET_PASSPHRASE_FAILED) { 244 sync_api::REASON_SET_PASSPHRASE_FAILED) {
245 // A passphrase is required for decryption and we don't have it. Do not 245 // A passphrase is required for decryption and we don't have it. Do not
246 // wait any more. 246 // wait any more.
247 SignalStateCompleteWithNextState(SET_PASSPHRASE_FAILED); 247 SignalStateCompleteWithNextState(SET_PASSPHRASE_FAILED);
248 break; 248 break;
249 } 249 }
250 if (!GetStatus().server_reachable) { 250 if (!GetStatus().server_reachable) {
251 // The client cannot reach the sync server because the network is 251 // The client cannot reach the sync server because the network is
252 // disabled. There is no need to wait anymore. 252 // disabled. There is no need to wait anymore.
253 SignalStateCompleteWithNextState(SERVER_UNREACHABLE); 253 SignalStateCompleteWithNextState(SERVER_UNREACHABLE);
254 break; 254 break;
255 } 255 }
256 break; 256 break;
257 } 257 }
258 case WAITING_FOR_UPDATES: { 258 case WAITING_FOR_UPDATES: {
259 LogClientInfo("WAITING_FOR_UPDATES", 1); 259 VLOG(1) << "WAITING_FOR_UPDATES: " << GetClientInfo();
260 DCHECK(timestamp_match_partner_); 260 DCHECK(timestamp_match_partner_);
261 if (!MatchesOtherClient(timestamp_match_partner_)) { 261 if (!MatchesOtherClient(timestamp_match_partner_)) {
262 // The client is not yet fully synced; keep waiting until we converge. 262 // The client is not yet fully synced; keep waiting until we converge.
263 break; 263 break;
264 } 264 }
265 timestamp_match_partner_->service()->RemoveObserver(this); 265 timestamp_match_partner_->service()->RemoveObserver(this);
266 timestamp_match_partner_ = NULL; 266 timestamp_match_partner_ = NULL;
267 267
268 SignalStateCompleteWithNextState(FULLY_SYNCED); 268 SignalStateCompleteWithNextState(FULLY_SYNCED);
269 break; 269 break;
270 } 270 }
271 case WAITING_FOR_PASSPHRASE_REQUIRED: { 271 case WAITING_FOR_PASSPHRASE_REQUIRED: {
272 LogClientInfo("WAITING_FOR_PASSPHRASE_REQUIRED", 1); 272 VLOG(1) << "WAITING_FOR_PASSPHRASE_REQUIRED: " << GetClientInfo();
273 if (service()->IsPassphraseRequired()) { 273 if (service()->IsPassphraseRequired()) {
274 // A passphrase is now required. Wait for it to be accepted. 274 // A passphrase is now required. Wait for it to be accepted.
275 SignalStateCompleteWithNextState(WAITING_FOR_PASSPHRASE_ACCEPTED); 275 SignalStateCompleteWithNextState(WAITING_FOR_PASSPHRASE_ACCEPTED);
276 } 276 }
277 break; 277 break;
278 } 278 }
279 case WAITING_FOR_PASSPHRASE_ACCEPTED: { 279 case WAITING_FOR_PASSPHRASE_ACCEPTED: {
280 LogClientInfo("WAITING_FOR_PASSPHRASE_ACCEPTED", 1); 280 VLOG(1) << "WAITING_FOR_PASSPHRASE_ACCEPTED: " << GetClientInfo();
281 if (service()->ShouldPushChanges() && 281 if (service()->ShouldPushChanges() &&
282 !service()->IsPassphraseRequired()) { 282 !service()->IsPassphraseRequired()) {
283 // The passphrase has been accepted, and sync has been restarted. 283 // The passphrase has been accepted, and sync has been restarted.
284 SignalStateCompleteWithNextState(FULLY_SYNCED); 284 SignalStateCompleteWithNextState(FULLY_SYNCED);
285 } 285 }
286 break; 286 break;
287 } 287 }
288 case WAITING_FOR_ENCRYPTION: { 288 case WAITING_FOR_ENCRYPTION: {
289 LogClientInfo("WAITING_FOR_ENCRYPTION", 1); 289 VLOG(1) << "WAITING_FOR_ENCRYPTION: " << GetClientInfo();
290 if (IsSynced() && 290 if (IsSynced() &&
291 IsTypeEncrypted(waiting_for_encryption_type_) && 291 IsTypeEncrypted(waiting_for_encryption_type_) &&
292 GetLastSessionSnapshot()->num_conflicting_updates == 0) { 292 GetLastSessionSnapshot()->num_conflicting_updates == 0) {
293 // Encryption is now complete for the the type in which we were waiting. 293 // Encryption is now complete for the the type in which we were waiting.
294 SignalStateCompleteWithNextState(FULLY_SYNCED); 294 SignalStateCompleteWithNextState(FULLY_SYNCED);
295 break; 295 break;
296 } 296 }
297 if (!GetStatus().server_reachable) { 297 if (!GetStatus().server_reachable) {
298 // The client cannot reach the sync server because the network is 298 // The client cannot reach the sync server because the network is
299 // disabled. There is no need to wait anymore. 299 // disabled. There is no need to wait anymore.
300 SignalStateCompleteWithNextState(SERVER_UNREACHABLE); 300 SignalStateCompleteWithNextState(SERVER_UNREACHABLE);
301 break; 301 break;
302 } 302 }
303 break; 303 break;
304 } 304 }
305 case WAITING_FOR_SYNC_CONFIGURATION: { 305 case WAITING_FOR_SYNC_CONFIGURATION: {
306 LogClientInfo("WAITING_FOR_SYNC_CONFIGURATION", 1); 306 VLOG(1) << "WAITING_FOR_SYNC_CONFIGURATION: " << GetClientInfo();
307 if (service()->ShouldPushChanges()) { 307 if (service()->ShouldPushChanges()) {
308 // The Datatype manager is configured and sync is fully initialized. 308 // The Datatype manager is configured and sync is fully initialized.
309 SignalStateCompleteWithNextState(FULLY_SYNCED); 309 SignalStateCompleteWithNextState(FULLY_SYNCED);
310 } 310 }
311 break; 311 break;
312 } 312 }
313 case SERVER_UNREACHABLE: { 313 case SERVER_UNREACHABLE: {
314 LogClientInfo("SERVER_UNREACHABLE", 1); 314 VLOG(1) << "SERVER_UNREACHABLE: " << GetClientInfo();
315 if (GetStatus().server_reachable) { 315 if (GetStatus().server_reachable) {
316 // The client was offline due to the network being disabled, but is now 316 // The client was offline due to the network being disabled, but is now
317 // back online. Wait for the pending sync cycle to complete. 317 // back online. Wait for the pending sync cycle to complete.
318 SignalStateCompleteWithNextState(WAITING_FOR_SYNC_TO_FINISH); 318 SignalStateCompleteWithNextState(WAITING_FOR_SYNC_TO_FINISH);
319 } 319 }
320 break; 320 break;
321 } 321 }
322 case SET_PASSPHRASE_FAILED: { 322 case SET_PASSPHRASE_FAILED: {
323 // A passphrase is required for decryption. There is nothing the sync 323 // A passphrase is required for decryption. There is nothing the sync
324 // client can do until SetPassphrase() is called. 324 // client can do until SetPassphrase() is called.
325 LogClientInfo("SET_PASSPHRASE_FAILED", 1); 325 VLOG(1) << "SET_PASSPHRASE_FAILED: " << GetClientInfo();
326 break; 326 break;
327 } 327 }
328 case FULLY_SYNCED: { 328 case FULLY_SYNCED: {
329 // The client is online and fully synced. There is nothing to do. 329 // The client is online and fully synced. There is nothing to do.
330 LogClientInfo("FULLY_SYNCED", 1); 330 VLOG(1) << "FULLY_SYNCED: " << GetClientInfo();
331 break; 331 break;
332 } 332 }
333 case SYNC_DISABLED: { 333 case SYNC_DISABLED: {
334 // Syncing is disabled for the client. There is nothing to do. 334 // Syncing is disabled for the client. There is nothing to do.
335 LogClientInfo("SYNC_DISABLED", 1); 335 VLOG(1) << "SYNC_DISABLED: " << GetClientInfo();
336 break; 336 break;
337 } 337 }
338 default: 338 default:
339 // Invalid state during observer callback which may be triggered by other 339 // Invalid state during observer callback which may be triggered by other
340 // classes using the the UI message loop. Defer to their handling. 340 // classes using the the UI message loop. Defer to their handling.
341 break; 341 break;
342 } 342 }
343 return original_wait_state != wait_state_; 343 return original_wait_state != wait_state_;
344 } 344 }
345 345
346 void ProfileSyncServiceHarness::OnStateChanged() { 346 void ProfileSyncServiceHarness::OnStateChanged() {
347 RunStateChangeMachine(); 347 RunStateChangeMachine();
348 } 348 }
349 349
350 bool ProfileSyncServiceHarness::AwaitPassphraseRequired() { 350 bool ProfileSyncServiceHarness::AwaitPassphraseRequired() {
351 LogClientInfo("AwaitPassphraseRequired", 1); 351 VLOG(1) << "AwaitPassphraseRequired: " << GetClientInfo();
352 if (wait_state_ == SYNC_DISABLED) { 352 if (wait_state_ == SYNC_DISABLED) {
353 LOG(ERROR) << "Sync disabled for Client " << id_ << "."; 353 LOG(ERROR) << "Sync disabled for " << profile_debug_name_ << ".";
354 return false; 354 return false;
355 } 355 }
356 356
357 if (service()->IsPassphraseRequired()) { 357 if (service()->IsPassphraseRequired()) {
358 // It's already true that a passphrase is required; don't wait. 358 // It's already true that a passphrase is required; don't wait.
359 return true; 359 return true;
360 } 360 }
361 361
362 wait_state_ = WAITING_FOR_PASSPHRASE_REQUIRED; 362 wait_state_ = WAITING_FOR_PASSPHRASE_REQUIRED;
363 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, 363 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs,
364 "Waiting for passphrase to be required."); 364 "Waiting for passphrase to be required.");
365 } 365 }
366 366
367 bool ProfileSyncServiceHarness::AwaitPassphraseAccepted() { 367 bool ProfileSyncServiceHarness::AwaitPassphraseAccepted() {
368 LogClientInfo("AwaitPassphraseAccepted", 1); 368 VLOG(1) << "AwaitPassphraseAccepted: " << GetClientInfo();
369 if (wait_state_ == SYNC_DISABLED) { 369 if (wait_state_ == SYNC_DISABLED) {
370 LOG(ERROR) << "Sync disabled for Client " << id_ << "."; 370 LOG(ERROR) << "Sync disabled for " << profile_debug_name_ << ".";
371 return false; 371 return false;
372 } 372 }
373 373
374 if (service()->ShouldPushChanges() && 374 if (service()->ShouldPushChanges() &&
375 !service()->IsPassphraseRequired()) { 375 !service()->IsPassphraseRequired()) {
376 // Passphrase is already accepted; don't wait. 376 // Passphrase is already accepted; don't wait.
377 return true; 377 return true;
378 } 378 }
379 379
380 wait_state_ = WAITING_FOR_PASSPHRASE_ACCEPTED; 380 wait_state_ = WAITING_FOR_PASSPHRASE_ACCEPTED;
381 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, 381 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs,
382 "Waiting for passphrase to be accepted."); 382 "Waiting for passphrase to be accepted.");
383 } 383 }
384 384
385 bool ProfileSyncServiceHarness::AwaitBackendInitialized() { 385 bool ProfileSyncServiceHarness::AwaitBackendInitialized() {
386 LogClientInfo("AwaitBackendInitialized", 1); 386 VLOG(1) << "AwaitBackendInitialized: " << GetClientInfo();
387 if (service()->sync_initialized()) { 387 if (service()->sync_initialized()) {
388 // The sync backend host has already been initialized; don't wait. 388 // The sync backend host has already been initialized; don't wait.
389 return true; 389 return true;
390 } 390 }
391 391
392 wait_state_ = WAITING_FOR_ON_BACKEND_INITIALIZED; 392 wait_state_ = WAITING_FOR_ON_BACKEND_INITIALIZED;
393 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, 393 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs,
394 "Waiting for OnBackendInitialized()."); 394 "Waiting for OnBackendInitialized().");
395 } 395 }
396 396
397 bool ProfileSyncServiceHarness::AwaitSyncRestart() { 397 bool ProfileSyncServiceHarness::AwaitSyncRestart() {
398 LogClientInfo("AwaitSyncRestart", 1); 398 VLOG(1) << "AwaitSyncRestart: " << GetClientInfo();
399 if (service()->ShouldPushChanges()) { 399 if (service()->ShouldPushChanges()) {
400 // Sync has already been restarted; don't wait. 400 // Sync has already been restarted; don't wait.
401 return true; 401 return true;
402 } 402 }
403 403
404 // Wait for the sync backend to be initialized. 404 // Wait for the sync backend to be initialized.
405 if (!AwaitBackendInitialized()) { 405 if (!AwaitBackendInitialized()) {
406 LOG(ERROR) << "OnBackendInitialized() not seen after " 406 LOG(ERROR) << "OnBackendInitialized() not seen after "
407 << kLiveSyncOperationTimeoutMs / 1000 407 << kLiveSyncOperationTimeoutMs / 1000
408 << " seconds."; 408 << " seconds.";
409 return false; 409 return false;
410 } 410 }
411 411
412 // Wait for sync configuration to complete. 412 // Wait for sync configuration to complete.
413 wait_state_ = WAITING_FOR_SYNC_CONFIGURATION; 413 wait_state_ = WAITING_FOR_SYNC_CONFIGURATION;
414 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, 414 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs,
415 "Waiting for sync configuration."); 415 "Waiting for sync configuration.");
416 } 416 }
417 417
418 bool ProfileSyncServiceHarness::AwaitSyncCycleCompletion( 418 bool ProfileSyncServiceHarness::AwaitSyncCycleCompletion(
419 const std::string& reason) { 419 const std::string& reason) {
420 LogClientInfo("AwaitSyncCycleCompletion", 1); 420 VLOG(1) << "AwaitSyncCycleCompletion: " << GetClientInfo();
421 if (wait_state_ == SYNC_DISABLED) { 421 if (wait_state_ == SYNC_DISABLED) {
422 LOG(ERROR) << "Sync disabled for Client " << id_ << "."; 422 LOG(ERROR) << "Sync disabled for " << profile_debug_name_ << ".";
423 return false; 423 return false;
424 } 424 }
425 425
426 if (IsSynced()) { 426 if (IsSynced()) {
427 // Client is already synced; don't wait. 427 // Client is already synced; don't wait.
428 return true; 428 return true;
429 } 429 }
430 430
431 if (wait_state_ == SERVER_UNREACHABLE) { 431 if (wait_state_ == SERVER_UNREACHABLE) {
432 // Client was offline; wait for it to go online, and then wait for sync. 432 // Client was offline; wait for it to go online, and then wait for sync.
433 AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason); 433 AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason);
434 DCHECK_EQ(wait_state_, WAITING_FOR_SYNC_TO_FINISH); 434 DCHECK_EQ(wait_state_, WAITING_FOR_SYNC_TO_FINISH);
435 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason); 435 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason);
436 }
437
438 DCHECK(service()->sync_initialized());
439 wait_state_ = WAITING_FOR_SYNC_TO_FINISH;
440 AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason);
441 if (wait_state_ == FULLY_SYNCED) {
442 // Client is online; sync was successful.
443 return true;
444 } else if (wait_state_ == SERVER_UNREACHABLE) {
445 // Client is offline; sync was unsuccessful.
446 LOG(ERROR) << "Client went offline after waiting for sync to finish";
447 return false;
436 } else { 448 } else {
437 DCHECK(service()->sync_initialized()); 449 LOG(ERROR) << "Invalid wait state: " << wait_state_;
438 wait_state_ = WAITING_FOR_SYNC_TO_FINISH; 450 return false;
439 AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason);
440 if (wait_state_ == FULLY_SYNCED) {
441 // Client is online; sync was successful.
442 return true;
443 } else if (wait_state_ == SERVER_UNREACHABLE) {
444 // Client is offline; sync was unsuccessful.
445 return false;
446 } else {
447 LOG(ERROR) << "Invalid wait state:" << wait_state_;
448 return false;
449 }
450 } 451 }
451 } 452 }
452 453
453 bool ProfileSyncServiceHarness::AwaitMutualSyncCycleCompletion( 454 bool ProfileSyncServiceHarness::AwaitMutualSyncCycleCompletion(
454 ProfileSyncServiceHarness* partner) { 455 ProfileSyncServiceHarness* partner) {
455 LogClientInfo("AwaitMutualSyncCycleCompletion", 1); 456 VLOG(1) << "AwaitMutualSyncCycleCompletion: " << GetClientInfo();
456 if (!AwaitSyncCycleCompletion("Sync cycle completion on active client.")) 457 if (!AwaitSyncCycleCompletion("Sync cycle completion on active client."))
457 return false; 458 return false;
458 return partner->WaitUntilTimestampMatches(this, 459 return partner->WaitUntilTimestampMatches(this,
459 "Sync cycle completion on passive client."); 460 "Sync cycle completion on passive client.");
460 } 461 }
461 462
462 bool ProfileSyncServiceHarness::AwaitGroupSyncCycleCompletion( 463 bool ProfileSyncServiceHarness::AwaitGroupSyncCycleCompletion(
463 std::vector<ProfileSyncServiceHarness*>& partners) { 464 std::vector<ProfileSyncServiceHarness*>& partners) {
464 LogClientInfo("AwaitGroupSyncCycleCompletion", 1); 465 VLOG(1) << "AwaitGroupSyncCycleCompletion: " << GetClientInfo();
465 if (!AwaitSyncCycleCompletion("Sync cycle completion on active client.")) 466 if (!AwaitSyncCycleCompletion("Sync cycle completion on active client."))
466 return false; 467 return false;
467 bool return_value = true; 468 bool return_value = true;
468 for (std::vector<ProfileSyncServiceHarness*>::iterator it = 469 for (std::vector<ProfileSyncServiceHarness*>::iterator it =
469 partners.begin(); it != partners.end(); ++it) { 470 partners.begin(); it != partners.end(); ++it) {
470 if ((this != *it) && ((*it)->wait_state_ != SYNC_DISABLED)) { 471 if ((this != *it) && ((*it)->wait_state_ != SYNC_DISABLED)) {
471 return_value = return_value && 472 return_value = return_value &&
472 (*it)->WaitUntilTimestampMatches(this, 473 (*it)->WaitUntilTimestampMatches(this,
473 "Sync cycle completion on partner client."); 474 "Sync cycle completion on partner client.");
474 } 475 }
(...skipping 10 matching lines...) Expand all
485 clients.begin(); it != clients.end(); ++it) { 486 clients.begin(); it != clients.end(); ++it) {
486 if ((*it)->wait_state_ != SYNC_DISABLED) 487 if ((*it)->wait_state_ != SYNC_DISABLED)
487 return_value = return_value && 488 return_value = return_value &&
488 (*it)->AwaitGroupSyncCycleCompletion(clients); 489 (*it)->AwaitGroupSyncCycleCompletion(clients);
489 } 490 }
490 return return_value; 491 return return_value;
491 } 492 }
492 493
493 bool ProfileSyncServiceHarness::WaitUntilTimestampMatches( 494 bool ProfileSyncServiceHarness::WaitUntilTimestampMatches(
494 ProfileSyncServiceHarness* partner, const std::string& reason) { 495 ProfileSyncServiceHarness* partner, const std::string& reason) {
495 LogClientInfo("WaitUntilTimestampMatches", 1); 496 VLOG(1) << "WaitUntilTimestampMatches: " << GetClientInfo();
496 if (wait_state_ == SYNC_DISABLED) { 497 if (wait_state_ == SYNC_DISABLED) {
497 LOG(ERROR) << "Sync disabled for Client " << id_ << "."; 498 LOG(ERROR) << "Sync disabled for " << profile_debug_name_ << ".";
498 return false; 499 return false;
499 } 500 }
500 501
501 if (MatchesOtherClient(partner)) { 502 if (MatchesOtherClient(partner)) {
502 // Timestamps already match; don't wait. 503 // Timestamps already match; don't wait.
503 return true; 504 return true;
504 } 505 }
505 506
506 DCHECK(!timestamp_match_partner_); 507 DCHECK(!timestamp_match_partner_);
507 timestamp_match_partner_ = partner; 508 timestamp_match_partner_ = partner;
508 partner->service()->AddObserver(this); 509 partner->service()->AddObserver(this);
509 wait_state_ = WAITING_FOR_UPDATES; 510 wait_state_ = WAITING_FOR_UPDATES;
510 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason); 511 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason);
511 } 512 }
512 513
513 bool ProfileSyncServiceHarness::AwaitStatusChangeWithTimeout( 514 bool ProfileSyncServiceHarness::AwaitStatusChangeWithTimeout(
514 int timeout_milliseconds, 515 int timeout_milliseconds,
515 const std::string& reason) { 516 const std::string& reason) {
516 LogClientInfo("AwaitStatusChangeWithTimeout", 1); 517 VLOG(1) << "AwaitStatusChangeWithTimeout: " << GetClientInfo();
517 if (wait_state_ == SYNC_DISABLED) { 518 if (wait_state_ == SYNC_DISABLED) {
518 LOG(ERROR) << "Sync disabled for Client " << id_ << "."; 519 LOG(ERROR) << "Sync disabled for " << profile_debug_name_ << ".";
519 return false; 520 return false;
520 } 521 }
521 scoped_refptr<StateChangeTimeoutEvent> timeout_signal( 522 scoped_refptr<StateChangeTimeoutEvent> timeout_signal(
522 new StateChangeTimeoutEvent(this, reason)); 523 new StateChangeTimeoutEvent(this, reason));
523 MessageLoop* loop = MessageLoop::current(); 524 MessageLoop* loop = MessageLoop::current();
524 bool did_allow_nestable_tasks = loop->NestableTasksAllowed(); 525 bool did_allow_nestable_tasks = loop->NestableTasksAllowed();
525 loop->SetNestableTasksAllowed(true); 526 loop->SetNestableTasksAllowed(true);
526 loop->PostDelayedTask( 527 loop->PostDelayedTask(
527 FROM_HERE, 528 FROM_HERE,
528 NewRunnableMethod(timeout_signal.get(), 529 NewRunnableMethod(timeout_signal.get(),
529 &StateChangeTimeoutEvent::Callback), 530 &StateChangeTimeoutEvent::Callback),
530 timeout_milliseconds); 531 timeout_milliseconds);
531 loop->Run(); 532 loop->Run();
532 loop->SetNestableTasksAllowed(did_allow_nestable_tasks); 533 loop->SetNestableTasksAllowed(did_allow_nestable_tasks);
533 if (timeout_signal->Abort()) { 534 if (timeout_signal->Abort()) {
534 LogClientInfo("AwaitStatusChangeWithTimeout succeeded", 1); 535 VLOG(1) << "AwaitStatusChangeWithTimeout succeeded: " << GetClientInfo();
535 return true; 536 return true;
536 } else { 537 } else {
537 LogClientInfo("AwaitStatusChangeWithTimeout timed out", 0); 538 VLOG(0) << "AwaitStatusChangeWithTimeout timed out: " << GetClientInfo();
538 return false; 539 return false;
539 } 540 }
540 } 541 }
541 542
542 ProfileSyncService::Status ProfileSyncServiceHarness::GetStatus() { 543 ProfileSyncService::Status ProfileSyncServiceHarness::GetStatus() {
543 DCHECK(service() != NULL) << "GetStatus(): service() is NULL."; 544 DCHECK(service() != NULL) << "GetStatus(): service() is NULL.";
544 return service()->QueryDetailedSyncStatus(); 545 return service()->QueryDetailedSyncStatus();
545 } 546 }
546 547
547 bool ProfileSyncServiceHarness::IsSynced() { 548 bool ProfileSyncServiceHarness::IsSynced() {
548 LogClientInfo("IsSynced", 1); 549 VLOG(1) << "IsSynced: " << GetClientInfo();
549 if (service() == NULL) 550 if (service() == NULL) {
551 VLOG(1) << "NULL service; assuming not synced";
550 return false; 552 return false;
553 }
551 const SyncSessionSnapshot* snap = GetLastSessionSnapshot(); 554 const SyncSessionSnapshot* snap = GetLastSessionSnapshot();
552 // TODO(rsimha): Remove additional checks of snap->has_more_to_sync and 555 // TODO(rsimha): Remove additional checks of snap->has_more_to_sync and
553 // snap->unsynced_count once http://crbug.com/48989 is fixed. 556 // snap->unsynced_count once http://crbug.com/48989 is fixed.
554 return (snap && 557 bool is_synced = snap &&
555 snap->num_blocking_conflicting_updates == 0 && 558 snap->num_blocking_conflicting_updates == 0 &&
556 ServiceIsPushingChanges() && 559 ServiceIsPushingChanges() &&
557 GetStatus().notifications_enabled && 560 GetStatus().notifications_enabled &&
558 !service()->HasUnsyncedItems() && 561 !service()->HasUnsyncedItems() &&
559 !snap->has_more_to_sync && 562 !snap->has_more_to_sync &&
560 snap->unsynced_count == 0 && 563 snap->unsynced_count == 0 &&
561 !service()->HasPendingBackendMigration() && 564 !service()->HasPendingBackendMigration() &&
562 service()->passphrase_required_reason() != 565 service()->passphrase_required_reason() !=
563 sync_api::REASON_SET_PASSPHRASE_FAILED); 566 sync_api::REASON_SET_PASSPHRASE_FAILED;
567 VLOG(1) << "IsSynced: " << is_synced;
568 return is_synced;
564 } 569 }
565 570
566 bool ProfileSyncServiceHarness::MatchesOtherClient( 571 bool ProfileSyncServiceHarness::MatchesOtherClient(
567 ProfileSyncServiceHarness* partner) { 572 ProfileSyncServiceHarness* partner) {
568 if (!IsSynced()) 573 if (!IsSynced())
569 return false; 574 return false;
570 575
571 // Only look for a match if we have at least one enabled datatype in 576 // Only look for a match if we have at least one enabled datatype in
572 // common with the partner client. 577 // common with the partner client.
573 syncable::ModelTypeSet types, other_types, intersection_types; 578 syncable::ModelTypeSet types, other_types, intersection_types;
(...skipping 18 matching lines...) Expand all
592 ProfileSyncServiceHarness::GetLastSessionSnapshot() const { 597 ProfileSyncServiceHarness::GetLastSessionSnapshot() const {
593 DCHECK(service_ != NULL) << "Sync service has not yet been set up."; 598 DCHECK(service_ != NULL) << "Sync service has not yet been set up.";
594 if (service_->sync_initialized()) { 599 if (service_->sync_initialized()) {
595 return service_->GetLastSessionSnapshot(); 600 return service_->GetLastSessionSnapshot();
596 } 601 }
597 return NULL; 602 return NULL;
598 } 603 }
599 604
600 bool ProfileSyncServiceHarness::EnableSyncForDatatype( 605 bool ProfileSyncServiceHarness::EnableSyncForDatatype(
601 syncable::ModelType datatype) { 606 syncable::ModelType datatype) {
602 LogClientInfo("EnableSyncForDatatype", 1); 607 VLOG(1) << "EnableSyncForDatatype: " << GetClientInfo();
603 608
604 syncable::ModelTypeSet synced_datatypes; 609 syncable::ModelTypeSet synced_datatypes;
605 if (wait_state_ == SYNC_DISABLED) { 610 if (wait_state_ == SYNC_DISABLED) {
606 synced_datatypes.insert(datatype); 611 synced_datatypes.insert(datatype);
607 return SetupSync(synced_datatypes); 612 return SetupSync(synced_datatypes);
608 } 613 }
609 614
610 if (service() == NULL) { 615 if (service() == NULL) {
611 LOG(ERROR) << "EnableSyncForDatatype(): service() is null."; 616 LOG(ERROR) << "EnableSyncForDatatype(): service() is null.";
612 return false; 617 return false;
613 } 618 }
614 619
615 service()->GetPreferredDataTypes(&synced_datatypes); 620 service()->GetPreferredDataTypes(&synced_datatypes);
616 syncable::ModelTypeSet::iterator it = synced_datatypes.find(datatype); 621 syncable::ModelTypeSet::iterator it = synced_datatypes.find(datatype);
617 if (it != synced_datatypes.end()) { 622 if (it != synced_datatypes.end()) {
618 VLOG(1) << "EnableSyncForDatatype(): Sync already enabled for datatype " 623 VLOG(1) << "EnableSyncForDatatype(): Sync already enabled for datatype "
619 << syncable::ModelTypeToString(datatype) 624 << syncable::ModelTypeToString(datatype)
620 << " on Client " << id_ << "."; 625 << " on " << profile_debug_name_ << ".";
621 return true; 626 return true;
622 } 627 }
623 628
624 synced_datatypes.insert(syncable::ModelTypeFromInt(datatype)); 629 synced_datatypes.insert(syncable::ModelTypeFromInt(datatype));
625 service()->OnUserChoseDatatypes(false, synced_datatypes); 630 service()->OnUserChoseDatatypes(false, synced_datatypes);
626 if (AwaitSyncCycleCompletion("Datatype configuration.")) { 631 if (AwaitSyncCycleCompletion("Datatype configuration.")) {
627 VLOG(1) << "EnableSyncForDatatype(): Enabled sync for datatype " 632 VLOG(1) << "EnableSyncForDatatype(): Enabled sync for datatype "
628 << syncable::ModelTypeToString(datatype) 633 << syncable::ModelTypeToString(datatype)
629 << " on Client " << id_ << "."; 634 << " on " << profile_debug_name_ << ".";
630 return true; 635 return true;
631 } 636 }
632 637
633 LogClientInfo("EnableSyncForDatatype failed", 0); 638 VLOG(0) << "EnableSyncForDatatype failed: " << GetClientInfo();
634 return false; 639 return false;
635 } 640 }
636 641
637 bool ProfileSyncServiceHarness::DisableSyncForDatatype( 642 bool ProfileSyncServiceHarness::DisableSyncForDatatype(
638 syncable::ModelType datatype) { 643 syncable::ModelType datatype) {
639 LogClientInfo("DisableSyncForDatatype", 1); 644 VLOG(1) << "DisableSyncForDatatype: " << GetClientInfo();
640 645
641 syncable::ModelTypeSet synced_datatypes; 646 syncable::ModelTypeSet synced_datatypes;
642 if (service() == NULL) { 647 if (service() == NULL) {
643 LOG(ERROR) << "DisableSyncForDatatype(): service() is null."; 648 LOG(ERROR) << "DisableSyncForDatatype(): service() is null.";
644 return false; 649 return false;
645 } 650 }
646 651
647 service()->GetPreferredDataTypes(&synced_datatypes); 652 service()->GetPreferredDataTypes(&synced_datatypes);
648 syncable::ModelTypeSet::iterator it = synced_datatypes.find(datatype); 653 syncable::ModelTypeSet::iterator it = synced_datatypes.find(datatype);
649 if (it == synced_datatypes.end()) { 654 if (it == synced_datatypes.end()) {
650 VLOG(1) << "DisableSyncForDatatype(): Sync already disabled for datatype " 655 VLOG(1) << "DisableSyncForDatatype(): Sync already disabled for datatype "
651 << syncable::ModelTypeToString(datatype) 656 << syncable::ModelTypeToString(datatype)
652 << " on Client " << id_ << "."; 657 << " on " << profile_debug_name_ << ".";
653 return true; 658 return true;
654 } 659 }
655 660
656 synced_datatypes.erase(it); 661 synced_datatypes.erase(it);
657 service()->OnUserChoseDatatypes(false, synced_datatypes); 662 service()->OnUserChoseDatatypes(false, synced_datatypes);
658 if (AwaitSyncCycleCompletion("Datatype reconfiguration.")) { 663 if (AwaitSyncCycleCompletion("Datatype reconfiguration.")) {
659 VLOG(1) << "DisableSyncForDatatype(): Disabled sync for datatype " 664 VLOG(1) << "DisableSyncForDatatype(): Disabled sync for datatype "
660 << syncable::ModelTypeToString(datatype) 665 << syncable::ModelTypeToString(datatype)
661 << " on Client " << id_ << "."; 666 << " on " << profile_debug_name_ << ".";
662 return true; 667 return true;
663 } 668 }
664 669
665 LogClientInfo("DisableSyncForDatatype failed", 0); 670 VLOG(0) << "DisableSyncForDatatype failed: " << GetClientInfo();
666 return false; 671 return false;
667 } 672 }
668 673
669 bool ProfileSyncServiceHarness::EnableSyncForAllDatatypes() { 674 bool ProfileSyncServiceHarness::EnableSyncForAllDatatypes() {
670 LogClientInfo("EnableSyncForAllDatatypes", 1); 675 VLOG(1) << "EnableSyncForAllDatatypes: " << GetClientInfo();
671 676
672 if (wait_state_ == SYNC_DISABLED) { 677 if (wait_state_ == SYNC_DISABLED) {
673 return SetupSync(); 678 return SetupSync();
674 } 679 }
675 680
676 if (service() == NULL) { 681 if (service() == NULL) {
677 LOG(ERROR) << "EnableSyncForAllDatatypes(): service() is null."; 682 LOG(ERROR) << "EnableSyncForAllDatatypes(): service() is null.";
678 return false; 683 return false;
679 } 684 }
680 685
681 syncable::ModelTypeSet synced_datatypes; 686 syncable::ModelTypeSet synced_datatypes;
682 for (int i = syncable::FIRST_REAL_MODEL_TYPE; 687 for (int i = syncable::FIRST_REAL_MODEL_TYPE;
683 i < syncable::MODEL_TYPE_COUNT; 688 i < syncable::MODEL_TYPE_COUNT;
684 ++i) { 689 ++i) {
685 synced_datatypes.insert(syncable::ModelTypeFromInt(i)); 690 synced_datatypes.insert(syncable::ModelTypeFromInt(i));
686 } 691 }
687 service()->OnUserChoseDatatypes(true, synced_datatypes); 692 service()->OnUserChoseDatatypes(true, synced_datatypes);
688 if (AwaitSyncCycleCompletion("Datatype reconfiguration.")) { 693 if (AwaitSyncCycleCompletion("Datatype reconfiguration.")) {
689 VLOG(1) << "EnableSyncForAllDatatypes(): Enabled sync for all datatypes on " 694 VLOG(1) << "EnableSyncForAllDatatypes(): Enabled sync for all datatypes on "
690 "Client " << id_ << "."; 695 << profile_debug_name_ << ".";
691 return true; 696 return true;
692 } 697 }
693 698
694 LogClientInfo("EnableSyncForAllDatatypes failed", 0); 699 VLOG(0) << "EnableSyncForAllDatatypes failed: " << GetClientInfo();
695 return false; 700 return false;
696 } 701 }
697 702
698 bool ProfileSyncServiceHarness::DisableSyncForAllDatatypes() { 703 bool ProfileSyncServiceHarness::DisableSyncForAllDatatypes() {
699 LogClientInfo("DisableSyncForAllDatatypes", 1); 704 VLOG(1) << "DisableSyncForAllDatatypes: " << GetClientInfo();
700 705
701 if (service() == NULL) { 706 if (service() == NULL) {
702 LOG(ERROR) << "DisableSyncForAllDatatypes(): service() is null."; 707 LOG(ERROR) << "DisableSyncForAllDatatypes(): service() is null.";
703 return false; 708 return false;
704 } 709 }
705 710
706 service()->DisableForUser(); 711 service()->DisableForUser();
707 wait_state_ = SYNC_DISABLED; 712 wait_state_ = SYNC_DISABLED;
708 VLOG(1) << "DisableSyncForAllDatatypes(): Disabled sync for all datatypes on " 713 VLOG(1) << "DisableSyncForAllDatatypes(): Disabled sync for all datatypes on "
709 "Client " << id_; 714 << profile_debug_name_;
710 return true; 715 return true;
711 } 716 }
712 717
713 std::string ProfileSyncServiceHarness::GetUpdatedTimestamp( 718 std::string ProfileSyncServiceHarness::GetUpdatedTimestamp(
714 syncable::ModelType model_type) { 719 syncable::ModelType model_type) {
715 const SyncSessionSnapshot* snap = GetLastSessionSnapshot(); 720 const SyncSessionSnapshot* snap = GetLastSessionSnapshot();
716 DCHECK(snap != NULL) << "GetUpdatedTimestamp(): Sync snapshot is NULL."; 721 DCHECK(snap != NULL) << "GetUpdatedTimestamp(): Sync snapshot is NULL.";
717 return snap->download_progress_markers[model_type]; 722 return snap->download_progress_markers[model_type];
718 } 723 }
719 724
720 void ProfileSyncServiceHarness::LogClientInfo(const std::string& message, 725 std::string ProfileSyncServiceHarness::GetClientInfo() {
721 int log_level) { 726 std::stringstream os;
727 os << profile_debug_name_ << ": ";
722 if (service()) { 728 if (service()) {
723 const SyncSessionSnapshot* snap = GetLastSessionSnapshot(); 729 const SyncSessionSnapshot* snap = GetLastSessionSnapshot();
730 const ProfileSyncService::Status& status = GetStatus();
724 if (snap) { 731 if (snap) {
725 VLOG(log_level) << "Client " << id_ << ": " << message 732 os << "snapshot: " << snap->ToString()
726 << ": num_updates_downloaded : " 733 << ", has_unsynced_items: "
727 << snap->syncer_status.num_updates_downloaded_total 734 << service()->HasUnsyncedItems()
728 << ", has_more_to_sync: " << snap->has_more_to_sync 735 << ", passphrase_required_reason: "
729 << ", unsynced_count: " << snap->unsynced_count 736 << sync_api::PassphraseRequiredReasonToString(
730 << ", num_blocking_conflicting_updates: " 737 service()->passphrase_required_reason())
731 << snap->num_blocking_conflicting_updates 738 << ", notifications_enabled: "
732 << ", num_conflicting_updates: " 739 << status.notifications_enabled
733 << snap->num_conflicting_updates 740 << ", local_overwrites_total: "
734 << ", has_unsynced_items: " 741 << status.num_local_overwrites_total
735 << service()->HasUnsyncedItems() 742 << ", server_overwrites_total: "
736 << ", passphrase_required_reason: " 743 << status.num_server_overwrites_total
737 << sync_api::PassphraseRequiredReasonToString( 744 << ", service_is_pushing_changes: "
738 service()->passphrase_required_reason()) 745 << ServiceIsPushingChanges()
739 << ", notifications_enabled: " 746 << ", has_pending_backend_migration: "
740 << GetStatus().notifications_enabled 747 << service()->HasPendingBackendMigration();
741 << ", service_is_pushing_changes: "
742 << ServiceIsPushingChanges()
743 << ", has_pending_backend_migration: "
744 << service()->HasPendingBackendMigration();
745 } else { 748 } else {
746 VLOG(log_level) << "Client " << id_ << ": " << message 749 os << "Sync session snapshot not available";
747 << ": Sync session snapshot not available.";
748 } 750 }
749 } else { 751 } else {
750 VLOG(log_level) << "Client " << id_ << ": " << message 752 os << "Sync service not available";
751 << ": Sync service not available.";
752 } 753 }
754 return os.str();
753 } 755 }
754 756
755 bool ProfileSyncServiceHarness::EnableEncryptionForType( 757 bool ProfileSyncServiceHarness::EnableEncryptionForType(
756 syncable::ModelType type) { 758 syncable::ModelType type) {
757 syncable::ModelTypeSet encrypted_types; 759 syncable::ModelTypeSet encrypted_types;
758 service_->GetEncryptedDataTypes(&encrypted_types); 760 service_->GetEncryptedDataTypes(&encrypted_types);
759 if (encrypted_types.count(type) > 0) 761 if (encrypted_types.count(type) > 0)
760 return true; 762 return true;
761 encrypted_types.insert(type); 763 encrypted_types.insert(type);
762 service_->EncryptDataTypes(encrypted_types); 764 service_->EncryptDataTypes(encrypted_types);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 return true; 797 return true;
796 } 798 }
797 799
798 std::string ProfileSyncServiceHarness::GetServiceStatus() { 800 std::string ProfileSyncServiceHarness::GetServiceStatus() {
799 DictionaryValue value; 801 DictionaryValue value;
800 sync_ui_util::ConstructAboutInformation(service_, &value); 802 sync_ui_util::ConstructAboutInformation(service_, &value);
801 std::string service_status; 803 std::string service_status;
802 base::JSONWriter::Write(&value, true, &service_status); 804 base::JSONWriter::Write(&value, true, &service_status);
803 return service_status; 805 return service_status;
804 } 806 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698