OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/about_sync_util.h" | 5 #include "components/sync/driver/about_sync_util.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/location.h" | 10 #include "base/location.h" |
11 #include "base/strings/string16.h" | 11 #include "base/strings/string16.h" |
12 #include "base/strings/stringprintf.h" | 12 #include "base/strings/stringprintf.h" |
13 #include "base/values.h" | 13 #include "base/values.h" |
14 #include "components/signin/core/browser/signin_manager_base.h" | 14 #include "components/signin/core/browser/signin_manager_base.h" |
15 #include "components/sync/api/time.h" | 15 #include "components/sync/api/time.h" |
16 #include "components/sync/base/sync_string_conversions.h" | 16 #include "components/sync/base/sync_string_conversions.h" |
| 17 #include "components/sync/driver/sync_service.h" |
17 #include "components/sync/engine/sync_status.h" | 18 #include "components/sync/engine/sync_status.h" |
18 #include "components/sync/protocol/proto_enum_conversions.h" | 19 #include "components/sync/protocol/proto_enum_conversions.h" |
19 #include "components/sync/sessions/sync_session_snapshot.h" | 20 #include "components/sync/sessions/sync_session_snapshot.h" |
20 #include "components/sync_driver/sync_service.h" | |
21 #include "components/version_info/version_info.h" | 21 #include "components/version_info/version_info.h" |
22 | 22 |
23 using base::DictionaryValue; | 23 using base::DictionaryValue; |
24 using base::ListValue; | 24 using base::ListValue; |
25 | 25 |
26 namespace sync_driver { | 26 namespace sync_driver { |
27 | 27 |
28 namespace sync_ui_util { | 28 namespace sync_ui_util { |
29 | 29 |
30 const char kIdentityTitle[] = "Identity"; | 30 const char kIdentityTitle[] = "Identity"; |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 AddSensitiveSection(stats_list, kIdentityTitle); | 267 AddSensitiveSection(stats_list, kIdentityTitle); |
268 StringSyncStat sync_id(section_identity, "Sync Client ID"); | 268 StringSyncStat sync_id(section_identity, "Sync Client ID"); |
269 StringSyncStat invalidator_id(section_identity, "Invalidator Client ID"); | 269 StringSyncStat invalidator_id(section_identity, "Invalidator Client ID"); |
270 StringSyncStat username(section_identity, "Username"); | 270 StringSyncStat username(section_identity, "Username"); |
271 | 271 |
272 base::ListValue* section_credentials = AddSection(stats_list, "Credentials"); | 272 base::ListValue* section_credentials = AddSection(stats_list, "Credentials"); |
273 StringSyncStat request_token_time(section_credentials, "Requested Token"); | 273 StringSyncStat request_token_time(section_credentials, "Requested Token"); |
274 StringSyncStat receive_token_time(section_credentials, "Received Token"); | 274 StringSyncStat receive_token_time(section_credentials, "Received Token"); |
275 StringSyncStat token_request_status(section_credentials, | 275 StringSyncStat token_request_status(section_credentials, |
276 "Token Request Status"); | 276 "Token Request Status"); |
277 StringSyncStat next_token_request(section_credentials, | 277 StringSyncStat next_token_request(section_credentials, "Next Token Request"); |
278 "Next Token Request"); | |
279 | 278 |
280 base::ListValue* section_local = AddSection(stats_list, "Local State"); | 279 base::ListValue* section_local = AddSection(stats_list, "Local State"); |
281 StringSyncStat server_connection(section_local, | 280 StringSyncStat server_connection(section_local, "Server Connection"); |
282 "Server Connection"); | |
283 StringSyncStat last_synced(section_local, "Last Synced"); | 281 StringSyncStat last_synced(section_local, "Last Synced"); |
284 BoolSyncStat is_setup_complete(section_local, | 282 BoolSyncStat is_setup_complete(section_local, |
285 "Sync First-Time Setup Complete"); | 283 "Sync First-Time Setup Complete"); |
286 StringSyncStat backend_initialization(section_local, | 284 StringSyncStat backend_initialization(section_local, |
287 "Sync Backend Initialization"); | 285 "Sync Backend Initialization"); |
288 BoolSyncStat is_syncing(section_local, "Syncing"); | 286 BoolSyncStat is_syncing(section_local, "Syncing"); |
289 | 287 |
290 base::ListValue* section_network = AddSection(stats_list, "Network"); | 288 base::ListValue* section_network = AddSection(stats_list, "Network"); |
291 BoolSyncStat is_throttled(section_network, "Throttled"); | 289 BoolSyncStat is_throttled(section_network, "Throttled"); |
292 StringSyncStat retry_time(section_network, "Retry time (maybe stale)"); | 290 StringSyncStat retry_time(section_network, "Retry time (maybe stale)"); |
293 BoolSyncStat are_notifications_enabled(section_network, | 291 BoolSyncStat are_notifications_enabled(section_network, |
294 "Notifications Enabled"); | 292 "Notifications Enabled"); |
295 | 293 |
296 base::ListValue* section_encryption = AddSection(stats_list, "Encryption"); | 294 base::ListValue* section_encryption = AddSection(stats_list, "Encryption"); |
297 BoolSyncStat is_using_explicit_passphrase(section_encryption, | 295 BoolSyncStat is_using_explicit_passphrase(section_encryption, |
298 "Explicit Passphrase"); | 296 "Explicit Passphrase"); |
299 BoolSyncStat is_passphrase_required(section_encryption, | 297 BoolSyncStat is_passphrase_required(section_encryption, |
300 "Passphrase Required"); | 298 "Passphrase Required"); |
301 BoolSyncStat is_cryptographer_ready(section_encryption, | 299 BoolSyncStat is_cryptographer_ready(section_encryption, |
302 "Cryptographer Ready"); | 300 "Cryptographer Ready"); |
303 BoolSyncStat has_pending_keys(section_encryption, | 301 BoolSyncStat has_pending_keys(section_encryption, |
304 "Cryptographer Has Pending Keys"); | 302 "Cryptographer Has Pending Keys"); |
305 StringSyncStat encrypted_types(section_encryption, "Encrypted Types"); | 303 StringSyncStat encrypted_types(section_encryption, "Encrypted Types"); |
306 BoolSyncStat has_keystore_key(section_encryption, "Has Keystore Key"); | 304 BoolSyncStat has_keystore_key(section_encryption, "Has Keystore Key"); |
307 StringSyncStat keystore_migration_time(section_encryption, | 305 StringSyncStat keystore_migration_time(section_encryption, |
308 "Keystore Migration Time"); | 306 "Keystore Migration Time"); |
309 StringSyncStat passphrase_type(section_encryption, | 307 StringSyncStat passphrase_type(section_encryption, "Passphrase Type"); |
310 "Passphrase Type"); | 308 StringSyncStat passphrase_time(section_encryption, "Passphrase Time"); |
311 StringSyncStat passphrase_time(section_encryption, | |
312 "Passphrase Time"); | |
313 | 309 |
314 base::ListValue* section_last_session = AddSection( | 310 base::ListValue* section_last_session = |
315 stats_list, "Status from Last Completed Session"); | 311 AddSection(stats_list, "Status from Last Completed Session"); |
316 StringSyncStat session_source(section_last_session, "Sync Source"); | 312 StringSyncStat session_source(section_last_session, "Sync Source"); |
317 StringSyncStat get_key_result(section_last_session, "GetKey Step Result"); | 313 StringSyncStat get_key_result(section_last_session, "GetKey Step Result"); |
318 StringSyncStat download_result(section_last_session, "Download Step Result"); | 314 StringSyncStat download_result(section_last_session, "Download Step Result"); |
319 StringSyncStat commit_result(section_last_session, "Commit Step Result"); | 315 StringSyncStat commit_result(section_last_session, "Commit Step Result"); |
320 | 316 |
321 base::ListValue* section_counters = AddSection(stats_list, "Running Totals"); | 317 base::ListValue* section_counters = AddSection(stats_list, "Running Totals"); |
322 IntSyncStat notifications_received(section_counters, | 318 IntSyncStat notifications_received(section_counters, |
323 "Notifications Received"); | 319 "Notifications Received"); |
324 IntSyncStat updates_received(section_counters, "Updates Downloaded"); | 320 IntSyncStat updates_received(section_counters, "Updates Downloaded"); |
325 IntSyncStat tombstone_updates(section_counters, "Tombstone Updates"); | 321 IntSyncStat tombstone_updates(section_counters, "Tombstone Updates"); |
326 IntSyncStat reflected_updates(section_counters, "Reflected Updates"); | 322 IntSyncStat reflected_updates(section_counters, "Reflected Updates"); |
327 IntSyncStat successful_commits(section_counters, "Successful Commits"); | 323 IntSyncStat successful_commits(section_counters, "Successful Commits"); |
328 IntSyncStat conflicts_resolved_local_wins(section_counters, | 324 IntSyncStat conflicts_resolved_local_wins(section_counters, |
329 "Conflicts Resolved: Client Wins"); | 325 "Conflicts Resolved: Client Wins"); |
330 IntSyncStat conflicts_resolved_server_wins(section_counters, | 326 IntSyncStat conflicts_resolved_server_wins(section_counters, |
331 "Conflicts Resolved: Server Wins"); | 327 "Conflicts Resolved: Server Wins"); |
332 | 328 |
333 base::ListValue *section_this_cycle = AddSection(stats_list, | 329 base::ListValue* section_this_cycle = |
334 "Transient Counters (this cycle)"); | 330 AddSection(stats_list, "Transient Counters (this cycle)"); |
335 IntSyncStat encryption_conflicts(section_this_cycle, "Encryption Conflicts"); | 331 IntSyncStat encryption_conflicts(section_this_cycle, "Encryption Conflicts"); |
336 IntSyncStat hierarchy_conflicts(section_this_cycle, "Hierarchy Conflicts"); | 332 IntSyncStat hierarchy_conflicts(section_this_cycle, "Hierarchy Conflicts"); |
337 IntSyncStat server_conflicts(section_this_cycle, "Server Conflicts"); | 333 IntSyncStat server_conflicts(section_this_cycle, "Server Conflicts"); |
338 IntSyncStat committed_items(section_this_cycle, "Committed Items"); | 334 IntSyncStat committed_items(section_this_cycle, "Committed Items"); |
339 | 335 |
340 base::ListValue* section_that_cycle = AddSection( | 336 base::ListValue* section_that_cycle = AddSection( |
341 stats_list, "Transient Counters (last cycle of last completed session)"); | 337 stats_list, "Transient Counters (last cycle of last completed session)"); |
342 IntSyncStat updates_downloaded(section_that_cycle, "Updates Downloaded"); | 338 IntSyncStat updates_downloaded(section_that_cycle, "Updates Downloaded"); |
343 IntSyncStat committed_count(section_that_cycle, "Committed Count"); | 339 IntSyncStat committed_count(section_that_cycle, "Committed Count"); |
344 IntSyncStat entries(section_that_cycle, "Entries"); | 340 IntSyncStat entries(section_that_cycle, "Entries"); |
345 | 341 |
346 base::ListValue* section_nudge_info = AddSection( | 342 base::ListValue* section_nudge_info = |
347 stats_list, "Nudge Source Counters"); | 343 AddSection(stats_list, "Nudge Source Counters"); |
348 IntSyncStat nudge_source_notification( | 344 IntSyncStat nudge_source_notification(section_nudge_info, |
349 section_nudge_info, "Server Invalidations"); | 345 "Server Invalidations"); |
350 IntSyncStat nudge_source_local(section_nudge_info, "Local Changes"); | 346 IntSyncStat nudge_source_local(section_nudge_info, "Local Changes"); |
351 IntSyncStat nudge_source_local_refresh(section_nudge_info, "Local Refreshes"); | 347 IntSyncStat nudge_source_local_refresh(section_nudge_info, "Local Refreshes"); |
352 | 348 |
353 // This list of sections belongs in the 'details' field of the returned | 349 // This list of sections belongs in the 'details' field of the returned |
354 // message. | 350 // message. |
355 about_info->Set(kDetailsKey, stats_list); | 351 about_info->Set(kDetailsKey, stats_list); |
356 | 352 |
357 // Populate all the fields we declared above. | 353 // Populate all the fields we declared above. |
358 client_version.SetValue(GetVersionString(channel)); | 354 client_version.SetValue(GetVersionString(channel)); |
359 | 355 |
(...skipping 16 matching lines...) Expand all Loading... |
376 if (is_status_valid && !full_status.sync_id.empty()) | 372 if (is_status_valid && !full_status.sync_id.empty()) |
377 sync_id.SetValue(full_status.sync_id); | 373 sync_id.SetValue(full_status.sync_id); |
378 if (is_status_valid && !full_status.invalidator_client_id.empty()) | 374 if (is_status_valid && !full_status.invalidator_client_id.empty()) |
379 invalidator_id.SetValue(full_status.invalidator_client_id); | 375 invalidator_id.SetValue(full_status.invalidator_client_id); |
380 if (signin) | 376 if (signin) |
381 username.SetValue(signin->GetAuthenticatedAccountInfo().email); | 377 username.SetValue(signin->GetAuthenticatedAccountInfo().email); |
382 | 378 |
383 const sync_driver::SyncService::SyncTokenStatus& token_status = | 379 const sync_driver::SyncService::SyncTokenStatus& token_status = |
384 service->GetSyncTokenStatus(); | 380 service->GetSyncTokenStatus(); |
385 server_connection.SetValue(GetConnectionStatus(token_status)); | 381 server_connection.SetValue(GetConnectionStatus(token_status)); |
386 request_token_time.SetValue(GetTimeStr(token_status.token_request_time, | 382 request_token_time.SetValue( |
387 "n/a")); | 383 GetTimeStr(token_status.token_request_time, "n/a")); |
388 receive_token_time.SetValue(GetTimeStr(token_status.token_receive_time, | 384 receive_token_time.SetValue( |
389 "n/a")); | 385 GetTimeStr(token_status.token_receive_time, "n/a")); |
390 std::string err = token_status.last_get_token_error.error_message(); | 386 std::string err = token_status.last_get_token_error.error_message(); |
391 token_request_status.SetValue(err.empty() ? "OK" : err); | 387 token_request_status.SetValue(err.empty() ? "OK" : err); |
392 next_token_request.SetValue( | 388 next_token_request.SetValue( |
393 GetTimeStr(token_status.next_token_request_time, "not scheduled")); | 389 GetTimeStr(token_status.next_token_request_time, "not scheduled")); |
394 | 390 |
395 last_synced.SetValue(service->GetLastSyncedTimeString()); | 391 last_synced.SetValue(service->GetLastSyncedTimeString()); |
396 is_setup_complete.SetValue(service->IsFirstSetupComplete()); | 392 is_setup_complete.SetValue(service->IsFirstSetupComplete()); |
397 backend_initialization.SetValue( | 393 backend_initialization.SetValue( |
398 service->GetBackendInitializationStateString()); | 394 service->GetBackendInitializationStateString()); |
399 if (is_status_valid) { | 395 if (is_status_valid) { |
400 is_syncing.SetValue(full_status.syncing); | 396 is_syncing.SetValue(full_status.syncing); |
401 retry_time.SetValue(GetTimeStr(full_status.retry_time, | 397 retry_time.SetValue(GetTimeStr(full_status.retry_time, |
402 "Scheduler is not in backoff or throttled")); | 398 "Scheduler is not in backoff or throttled")); |
403 } | 399 } |
404 | 400 |
405 if (snapshot.is_initialized()) | 401 if (snapshot.is_initialized()) |
406 is_throttled.SetValue(snapshot.is_silenced()); | 402 is_throttled.SetValue(snapshot.is_silenced()); |
407 if (is_status_valid) { | 403 if (is_status_valid) { |
408 are_notifications_enabled.SetValue( | 404 are_notifications_enabled.SetValue(full_status.notifications_enabled); |
409 full_status.notifications_enabled); | |
410 } | 405 } |
411 | 406 |
412 if (sync_active) { | 407 if (sync_active) { |
413 is_using_explicit_passphrase.SetValue( | 408 is_using_explicit_passphrase.SetValue( |
414 service->IsUsingSecondaryPassphrase()); | 409 service->IsUsingSecondaryPassphrase()); |
415 is_passphrase_required.SetValue(service->IsPassphraseRequired()); | 410 is_passphrase_required.SetValue(service->IsPassphraseRequired()); |
416 passphrase_time.SetValue( | 411 passphrase_time.SetValue( |
417 GetTimeStr(service->GetExplicitPassphraseTime(), "No Passphrase Time")); | 412 GetTimeStr(service->GetExplicitPassphraseTime(), "No Passphrase Time")); |
418 } | 413 } |
419 if (is_status_valid) { | 414 if (is_status_valid) { |
420 is_cryptographer_ready.SetValue(full_status.cryptographer_ready); | 415 is_cryptographer_ready.SetValue(full_status.cryptographer_ready); |
421 has_pending_keys.SetValue(full_status.crypto_has_pending_keys); | 416 has_pending_keys.SetValue(full_status.crypto_has_pending_keys); |
422 encrypted_types.SetValue( | 417 encrypted_types.SetValue(ModelTypeSetToString(full_status.encrypted_types)); |
423 ModelTypeSetToString(full_status.encrypted_types)); | |
424 has_keystore_key.SetValue(full_status.has_keystore_key); | 418 has_keystore_key.SetValue(full_status.has_keystore_key); |
425 keystore_migration_time.SetValue( | 419 keystore_migration_time.SetValue( |
426 GetTimeStr(full_status.keystore_migration_time, "Not Migrated")); | 420 GetTimeStr(full_status.keystore_migration_time, "Not Migrated")); |
427 passphrase_type.SetValue( | 421 passphrase_type.SetValue( |
428 PassphraseTypeToString(full_status.passphrase_type)); | 422 PassphraseTypeToString(full_status.passphrase_type)); |
429 } | 423 } |
430 | 424 |
431 if (snapshot.is_initialized()) { | 425 if (snapshot.is_initialized()) { |
432 if (snapshot.legacy_updates_source() != | 426 if (snapshot.legacy_updates_source() != |
433 sync_pb::GetUpdatesCallerInfo::UNKNOWN) { | 427 sync_pb::GetUpdatesCallerInfo::UNKNOWN) { |
434 session_source.SetValue( | 428 session_source.SetValue( |
435 syncer::GetUpdatesSourceString(snapshot.legacy_updates_source())); | 429 syncer::GetUpdatesSourceString(snapshot.legacy_updates_source())); |
436 } | 430 } |
437 get_key_result.SetValue( | 431 get_key_result.SetValue(GetSyncerErrorString( |
438 GetSyncerErrorString( | 432 snapshot.model_neutral_state().last_get_key_result)); |
439 snapshot.model_neutral_state().last_get_key_result)); | 433 download_result.SetValue(GetSyncerErrorString( |
440 download_result.SetValue( | 434 snapshot.model_neutral_state().last_download_updates_result)); |
441 GetSyncerErrorString( | |
442 snapshot.model_neutral_state().last_download_updates_result)); | |
443 commit_result.SetValue( | 435 commit_result.SetValue( |
444 GetSyncerErrorString( | 436 GetSyncerErrorString(snapshot.model_neutral_state().commit_result)); |
445 snapshot.model_neutral_state().commit_result)); | |
446 } | 437 } |
447 | 438 |
448 if (is_status_valid) { | 439 if (is_status_valid) { |
449 notifications_received.SetValue(full_status.notifications_received); | 440 notifications_received.SetValue(full_status.notifications_received); |
450 updates_received.SetValue(full_status.updates_received); | 441 updates_received.SetValue(full_status.updates_received); |
451 tombstone_updates.SetValue(full_status.tombstone_updates_received); | 442 tombstone_updates.SetValue(full_status.tombstone_updates_received); |
452 reflected_updates.SetValue(full_status.reflected_updates_received); | 443 reflected_updates.SetValue(full_status.reflected_updates_received); |
453 successful_commits.SetValue(full_status.num_commits_total); | 444 successful_commits.SetValue(full_status.num_commits_total); |
454 conflicts_resolved_local_wins.SetValue( | 445 conflicts_resolved_local_wins.SetValue( |
455 full_status.num_local_overwrites_total); | 446 full_status.num_local_overwrites_total); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
497 base::ListValue* actionable_error = new base::ListValue(); | 488 base::ListValue* actionable_error = new base::ListValue(); |
498 about_info->Set("actionable_error", actionable_error); | 489 about_info->Set("actionable_error", actionable_error); |
499 | 490 |
500 StringSyncStat error_type(actionable_error, "Error Type"); | 491 StringSyncStat error_type(actionable_error, "Error Type"); |
501 StringSyncStat action(actionable_error, "Action"); | 492 StringSyncStat action(actionable_error, "Action"); |
502 StringSyncStat url(actionable_error, "URL"); | 493 StringSyncStat url(actionable_error, "URL"); |
503 StringSyncStat description(actionable_error, "Error Description"); | 494 StringSyncStat description(actionable_error, "Error Description"); |
504 | 495 |
505 if (actionable_error_detected) { | 496 if (actionable_error_detected) { |
506 error_type.SetValue(syncer::GetSyncErrorTypeString( | 497 error_type.SetValue(syncer::GetSyncErrorTypeString( |
507 full_status.sync_protocol_error.error_type)); | 498 full_status.sync_protocol_error.error_type)); |
508 action.SetValue(syncer::GetClientActionString( | 499 action.SetValue( |
509 full_status.sync_protocol_error.action)); | 500 syncer::GetClientActionString(full_status.sync_protocol_error.action)); |
510 url.SetValue(full_status.sync_protocol_error.url); | 501 url.SetValue(full_status.sync_protocol_error.url); |
511 description.SetValue(full_status.sync_protocol_error.error_description); | 502 description.SetValue(full_status.sync_protocol_error.error_description); |
512 } | 503 } |
513 | 504 |
514 about_info->SetBoolean("unrecoverable_error_detected", | 505 about_info->SetBoolean("unrecoverable_error_detected", |
515 service->HasUnrecoverableError()); | 506 service->HasUnrecoverableError()); |
516 | 507 |
517 if (service->HasUnrecoverableError()) { | 508 if (service->HasUnrecoverableError()) { |
518 tracked_objects::Location loc(service->unrecoverable_error_location()); | 509 tracked_objects::Location loc(service->unrecoverable_error_location()); |
519 std::string location_str; | 510 std::string location_str; |
520 loc.Write(true, true, &location_str); | 511 loc.Write(true, true, &location_str); |
521 std::string unrecoverable_error_message = | 512 std::string unrecoverable_error_message = |
522 "Unrecoverable error detected at " + location_str + | 513 "Unrecoverable error detected at " + location_str + ": " + |
523 ": " + service->unrecoverable_error_message(); | 514 service->unrecoverable_error_message(); |
524 about_info->SetString("unrecoverable_error_message", | 515 about_info->SetString("unrecoverable_error_message", |
525 unrecoverable_error_message); | 516 unrecoverable_error_message); |
526 } | 517 } |
527 | 518 |
528 about_info->Set("type_status", service->GetTypeStatusMap()); | 519 about_info->Set("type_status", service->GetTypeStatusMap()); |
529 | 520 |
530 return about_info; | 521 return about_info; |
531 } | 522 } |
532 | 523 |
533 } // namespace sync_ui_util | 524 } // namespace sync_ui_util |
534 | 525 |
535 } // namespace sync_driver | 526 } // namespace sync_driver |
OLD | NEW |