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/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
12 #include "base/strings/string16.h" | 12 #include "base/strings/string16.h" |
13 #include "base/strings/stringprintf.h" | 13 #include "base/strings/stringprintf.h" |
14 #include "base/values.h" | 14 #include "base/values.h" |
15 #include "components/signin/core/browser/signin_manager_base.h" | 15 #include "components/signin/core/browser/signin_manager_base.h" |
16 #include "components/sync/api/time.h" | 16 #include "components/sync/api/time.h" |
17 #include "components/sync/driver/sync_service.h" | 17 #include "components/sync/driver/sync_service.h" |
18 #include "components/sync/engine/cycle/sync_cycle_snapshot.h" | 18 #include "components/sync/engine/cycle/sync_cycle_snapshot.h" |
19 #include "components/sync/engine/sync_status.h" | 19 #include "components/sync/engine/sync_status.h" |
20 #include "components/sync/engine/sync_string_conversions.h" | 20 #include "components/sync/engine/sync_string_conversions.h" |
21 #include "components/sync/protocol/proto_enum_conversions.h" | 21 #include "components/sync/protocol/proto_enum_conversions.h" |
22 | 22 |
23 using base::DictionaryValue; | 23 using base::DictionaryValue; |
24 using base::ListValue; | 24 using base::ListValue; |
25 | 25 |
26 namespace syncer { | 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"; |
31 const char kDetailsKey[] = "details"; | 31 const char kDetailsKey[] = "details"; |
32 | 32 |
33 // Resource paths. | 33 // Resource paths. |
34 const char kAboutJS[] = "about.js"; | 34 const char kAboutJS[] = "about.js"; |
35 const char kChromeSyncJS[] = "chrome_sync.js"; | 35 const char kChromeSyncJS[] = "chrome_sync.js"; |
36 const char kDataJS[] = "data.js"; | 36 const char kDataJS[] = "data.js"; |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 return version_info::GetProductName() + " " + version_info::GetOSType() + | 198 return version_info::GetProductName() + " " + version_info::GetOSType() + |
199 " " + version_info::GetVersionNumber() + " (" + | 199 " " + version_info::GetVersionNumber() + " (" + |
200 version_info::GetLastChange() + ")" + version_modifier; | 200 version_info::GetLastChange() + ")" + version_modifier; |
201 } | 201 } |
202 | 202 |
203 std::string GetTimeStr(base::Time time, const std::string& default_msg) { | 203 std::string GetTimeStr(base::Time time, const std::string& default_msg) { |
204 std::string time_str; | 204 std::string time_str; |
205 if (time.is_null()) | 205 if (time.is_null()) |
206 time_str = default_msg; | 206 time_str = default_msg; |
207 else | 207 else |
208 time_str = GetTimeDebugString(time); | 208 time_str = syncer::GetTimeDebugString(time); |
209 return time_str; | 209 return time_str; |
210 } | 210 } |
211 | 211 |
212 std::string GetConnectionStatus(const SyncService::SyncTokenStatus& status) { | 212 std::string GetConnectionStatus( |
| 213 const sync_driver::SyncService::SyncTokenStatus& status) { |
213 std::string message; | 214 std::string message; |
214 switch (status.connection_status) { | 215 switch (status.connection_status) { |
215 case CONNECTION_NOT_ATTEMPTED: | 216 case syncer::CONNECTION_NOT_ATTEMPTED: |
216 base::StringAppendF(&message, "not attempted"); | 217 base::StringAppendF(&message, "not attempted"); |
217 break; | 218 break; |
218 case CONNECTION_OK: | 219 case syncer::CONNECTION_OK: |
219 base::StringAppendF( | 220 base::StringAppendF( |
220 &message, "OK since %s", | 221 &message, "OK since %s", |
221 GetTimeStr(status.connection_status_update_time, "n/a").c_str()); | 222 GetTimeStr(status.connection_status_update_time, "n/a").c_str()); |
222 break; | 223 break; |
223 case CONNECTION_AUTH_ERROR: | 224 case syncer::CONNECTION_AUTH_ERROR: |
224 base::StringAppendF( | 225 base::StringAppendF( |
225 &message, "auth error since %s", | 226 &message, "auth error since %s", |
226 GetTimeStr(status.connection_status_update_time, "n/a").c_str()); | 227 GetTimeStr(status.connection_status_update_time, "n/a").c_str()); |
227 break; | 228 break; |
228 case CONNECTION_SERVER_ERROR: | 229 case syncer::CONNECTION_SERVER_ERROR: |
229 base::StringAppendF( | 230 base::StringAppendF( |
230 &message, "server error since %s", | 231 &message, "server error since %s", |
231 GetTimeStr(status.connection_status_update_time, "n/a").c_str()); | 232 GetTimeStr(status.connection_status_update_time, "n/a").c_str()); |
232 break; | 233 break; |
233 default: | 234 default: |
234 NOTREACHED(); | 235 NOTREACHED(); |
235 } | 236 } |
236 return message; | 237 return message; |
237 } | 238 } |
238 | 239 |
239 } // namespace | 240 } // namespace |
240 | 241 |
241 // This function both defines the structure of the message to be returned and | 242 // This function both defines the structure of the message to be returned and |
242 // its contents. Most of the message consists of simple fields in about:sync | 243 // its contents. Most of the message consists of simple fields in about:sync |
243 // which are grouped into sections and populated with the help of the SyncStat | 244 // which are grouped into sections and populated with the help of the SyncStat |
244 // classes defined above. | 245 // classes defined above. |
245 std::unique_ptr<base::DictionaryValue> ConstructAboutInformation( | 246 std::unique_ptr<base::DictionaryValue> ConstructAboutInformation( |
246 SyncService* service, | 247 sync_driver::SyncService* service, |
247 SigninManagerBase* signin, | 248 SigninManagerBase* signin, |
248 version_info::Channel channel) { | 249 version_info::Channel channel) { |
249 std::unique_ptr<base::DictionaryValue> about_info( | 250 std::unique_ptr<base::DictionaryValue> about_info( |
250 new base::DictionaryValue()); | 251 new base::DictionaryValue()); |
251 | 252 |
252 // 'details': A list of sections. | 253 // 'details': A list of sections. |
253 base::ListValue* stats_list = new base::ListValue(); | 254 base::ListValue* stats_list = new base::ListValue(); |
254 | 255 |
255 // The following lines define the sections and their fields. For each field, | 256 // The following lines define the sections and their fields. For each field, |
256 // a class is instantiated, which allows us to reference the fields in | 257 // a class is instantiated, which allows us to reference the fields in |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 about_info->Set(kDetailsKey, stats_list); | 351 about_info->Set(kDetailsKey, stats_list); |
351 | 352 |
352 // Populate all the fields we declared above. | 353 // Populate all the fields we declared above. |
353 client_version.SetValue(GetVersionString(channel)); | 354 client_version.SetValue(GetVersionString(channel)); |
354 | 355 |
355 if (!service) { | 356 if (!service) { |
356 summary_string.SetValue("Sync service does not exist"); | 357 summary_string.SetValue("Sync service does not exist"); |
357 return about_info; | 358 return about_info; |
358 } | 359 } |
359 | 360 |
360 SyncStatus full_status; | 361 syncer::SyncStatus full_status; |
361 bool is_status_valid = service->QueryDetailedSyncStatus(&full_status); | 362 bool is_status_valid = service->QueryDetailedSyncStatus(&full_status); |
362 bool sync_active = service->IsSyncActive(); | 363 bool sync_active = service->IsSyncActive(); |
363 const SyncCycleSnapshot& snapshot = service->GetLastCycleSnapshot(); | 364 const syncer::SyncCycleSnapshot& snapshot = service->GetLastCycleSnapshot(); |
364 | 365 |
365 if (is_status_valid) | 366 if (is_status_valid) |
366 summary_string.SetValue(service->QuerySyncStatusSummaryString()); | 367 summary_string.SetValue(service->QuerySyncStatusSummaryString()); |
367 | 368 |
368 server_url.SetValue(service->sync_service_url().spec()); | 369 server_url.SetValue(service->sync_service_url().spec()); |
369 | 370 |
370 if (is_status_valid && !full_status.sync_id.empty()) | 371 if (is_status_valid && !full_status.sync_id.empty()) |
371 sync_id.SetValue(full_status.sync_id); | 372 sync_id.SetValue(full_status.sync_id); |
372 if (is_status_valid && !full_status.invalidator_client_id.empty()) | 373 if (is_status_valid && !full_status.invalidator_client_id.empty()) |
373 invalidator_id.SetValue(full_status.invalidator_client_id); | 374 invalidator_id.SetValue(full_status.invalidator_client_id); |
374 if (signin) | 375 if (signin) |
375 username.SetValue(signin->GetAuthenticatedAccountInfo().email); | 376 username.SetValue(signin->GetAuthenticatedAccountInfo().email); |
376 | 377 |
377 const SyncService::SyncTokenStatus& token_status = | 378 const sync_driver::SyncService::SyncTokenStatus& token_status = |
378 service->GetSyncTokenStatus(); | 379 service->GetSyncTokenStatus(); |
379 server_connection.SetValue(GetConnectionStatus(token_status)); | 380 server_connection.SetValue(GetConnectionStatus(token_status)); |
380 request_token_time.SetValue( | 381 request_token_time.SetValue( |
381 GetTimeStr(token_status.token_request_time, "n/a")); | 382 GetTimeStr(token_status.token_request_time, "n/a")); |
382 receive_token_time.SetValue( | 383 receive_token_time.SetValue( |
383 GetTimeStr(token_status.token_receive_time, "n/a")); | 384 GetTimeStr(token_status.token_receive_time, "n/a")); |
384 std::string err = token_status.last_get_token_error.error_message(); | 385 std::string err = token_status.last_get_token_error.error_message(); |
385 token_request_status.SetValue(err.empty() ? "OK" : err); | 386 token_request_status.SetValue(err.empty() ? "OK" : err); |
386 next_token_request.SetValue( | 387 next_token_request.SetValue( |
387 GetTimeStr(token_status.next_token_request_time, "not scheduled")); | 388 GetTimeStr(token_status.next_token_request_time, "not scheduled")); |
(...skipping 29 matching lines...) Expand all Loading... |
417 keystore_migration_time.SetValue( | 418 keystore_migration_time.SetValue( |
418 GetTimeStr(full_status.keystore_migration_time, "Not Migrated")); | 419 GetTimeStr(full_status.keystore_migration_time, "Not Migrated")); |
419 passphrase_type.SetValue( | 420 passphrase_type.SetValue( |
420 PassphraseTypeToString(full_status.passphrase_type)); | 421 PassphraseTypeToString(full_status.passphrase_type)); |
421 } | 422 } |
422 | 423 |
423 if (snapshot.is_initialized()) { | 424 if (snapshot.is_initialized()) { |
424 if (snapshot.legacy_updates_source() != | 425 if (snapshot.legacy_updates_source() != |
425 sync_pb::GetUpdatesCallerInfo::UNKNOWN) { | 426 sync_pb::GetUpdatesCallerInfo::UNKNOWN) { |
426 session_source.SetValue( | 427 session_source.SetValue( |
427 GetUpdatesSourceString(snapshot.legacy_updates_source())); | 428 syncer::GetUpdatesSourceString(snapshot.legacy_updates_source())); |
428 } | 429 } |
429 get_key_result.SetValue(GetSyncerErrorString( | 430 get_key_result.SetValue(GetSyncerErrorString( |
430 snapshot.model_neutral_state().last_get_key_result)); | 431 snapshot.model_neutral_state().last_get_key_result)); |
431 download_result.SetValue(GetSyncerErrorString( | 432 download_result.SetValue(GetSyncerErrorString( |
432 snapshot.model_neutral_state().last_download_updates_result)); | 433 snapshot.model_neutral_state().last_download_updates_result)); |
433 commit_result.SetValue( | 434 commit_result.SetValue( |
434 GetSyncerErrorString(snapshot.model_neutral_state().commit_result)); | 435 GetSyncerErrorString(snapshot.model_neutral_state().commit_result)); |
435 } | 436 } |
436 | 437 |
437 if (is_status_valid) { | 438 if (is_status_valid) { |
(...skipping 29 matching lines...) Expand all Loading... |
467 entries.SetValue(snapshot.num_entries()); | 468 entries.SetValue(snapshot.num_entries()); |
468 } | 469 } |
469 | 470 |
470 // The values set from this point onwards do not belong in the | 471 // The values set from this point onwards do not belong in the |
471 // details list. | 472 // details list. |
472 | 473 |
473 // We don't need to check is_status_valid here. | 474 // We don't need to check is_status_valid here. |
474 // full_status.sync_protocol_error is exported directly from the | 475 // full_status.sync_protocol_error is exported directly from the |
475 // ProfileSyncService, even if the backend doesn't exist. | 476 // ProfileSyncService, even if the backend doesn't exist. |
476 const bool actionable_error_detected = | 477 const bool actionable_error_detected = |
477 full_status.sync_protocol_error.error_type != UNKNOWN_ERROR && | 478 full_status.sync_protocol_error.error_type != syncer::UNKNOWN_ERROR && |
478 full_status.sync_protocol_error.error_type != SYNC_SUCCESS; | 479 full_status.sync_protocol_error.error_type != syncer::SYNC_SUCCESS; |
479 | 480 |
480 about_info->SetBoolean("actionable_error_detected", | 481 about_info->SetBoolean("actionable_error_detected", |
481 actionable_error_detected); | 482 actionable_error_detected); |
482 | 483 |
483 // NOTE: We won't bother showing any of the following values unless | 484 // NOTE: We won't bother showing any of the following values unless |
484 // actionable_error_detected is set. | 485 // actionable_error_detected is set. |
485 | 486 |
486 base::ListValue* actionable_error = new base::ListValue(); | 487 base::ListValue* actionable_error = new base::ListValue(); |
487 about_info->Set("actionable_error", actionable_error); | 488 about_info->Set("actionable_error", actionable_error); |
488 | 489 |
489 StringSyncStat error_type(actionable_error, "Error Type"); | 490 StringSyncStat error_type(actionable_error, "Error Type"); |
490 StringSyncStat action(actionable_error, "Action"); | 491 StringSyncStat action(actionable_error, "Action"); |
491 StringSyncStat url(actionable_error, "URL"); | 492 StringSyncStat url(actionable_error, "URL"); |
492 StringSyncStat description(actionable_error, "Error Description"); | 493 StringSyncStat description(actionable_error, "Error Description"); |
493 | 494 |
494 if (actionable_error_detected) { | 495 if (actionable_error_detected) { |
495 error_type.SetValue( | 496 error_type.SetValue(syncer::GetSyncErrorTypeString( |
496 GetSyncErrorTypeString(full_status.sync_protocol_error.error_type)); | 497 full_status.sync_protocol_error.error_type)); |
497 action.SetValue( | 498 action.SetValue( |
498 GetClientActionString(full_status.sync_protocol_error.action)); | 499 syncer::GetClientActionString(full_status.sync_protocol_error.action)); |
499 url.SetValue(full_status.sync_protocol_error.url); | 500 url.SetValue(full_status.sync_protocol_error.url); |
500 description.SetValue(full_status.sync_protocol_error.error_description); | 501 description.SetValue(full_status.sync_protocol_error.error_description); |
501 } | 502 } |
502 | 503 |
503 about_info->SetBoolean("unrecoverable_error_detected", | 504 about_info->SetBoolean("unrecoverable_error_detected", |
504 service->HasUnrecoverableError()); | 505 service->HasUnrecoverableError()); |
505 | 506 |
506 if (service->HasUnrecoverableError()) { | 507 if (service->HasUnrecoverableError()) { |
507 tracked_objects::Location loc(service->unrecoverable_error_location()); | 508 tracked_objects::Location loc(service->unrecoverable_error_location()); |
508 std::string location_str; | 509 std::string location_str; |
509 loc.Write(true, true, &location_str); | 510 loc.Write(true, true, &location_str); |
510 std::string unrecoverable_error_message = | 511 std::string unrecoverable_error_message = |
511 "Unrecoverable error detected at " + location_str + ": " + | 512 "Unrecoverable error detected at " + location_str + ": " + |
512 service->unrecoverable_error_message(); | 513 service->unrecoverable_error_message(); |
513 about_info->SetString("unrecoverable_error_message", | 514 about_info->SetString("unrecoverable_error_message", |
514 unrecoverable_error_message); | 515 unrecoverable_error_message); |
515 } | 516 } |
516 | 517 |
517 about_info->Set("type_status", service->GetTypeStatusMap()); | 518 about_info->Set("type_status", service->GetTypeStatusMap()); |
518 | 519 |
519 return about_info; | 520 return about_info; |
520 } | 521 } |
521 | 522 |
522 } // namespace sync_ui_util | 523 } // namespace sync_ui_util |
523 | 524 |
524 } // namespace syncer | 525 } // namespace sync_driver |
OLD | NEW |