| Index: chrome/browser/sync/sync_ui_util.cc
 | 
| diff --git a/chrome/browser/sync/sync_ui_util.cc b/chrome/browser/sync/sync_ui_util.cc
 | 
| index 75f30fcaefc7e0fb992b232377f338b638f06ed9..e6cd8508e427252b6abb3e7e59b2904cf8f96123 100644
 | 
| --- a/chrome/browser/sync/sync_ui_util.cc
 | 
| +++ b/chrome/browser/sync/sync_ui_util.cc
 | 
| @@ -11,6 +11,8 @@
 | 
|  #include "base/utf_string_conversions.h"
 | 
|  #include "chrome/browser/profiles/profile.h"
 | 
|  #include "chrome/browser/sync/profile_sync_service.h"
 | 
| +#include "chrome/browser/sync/protocol/proto_enum_conversions.h"
 | 
| +#include "chrome/browser/sync/sessions/session_state.h"
 | 
|  #include "chrome/browser/ui/browser.h"
 | 
|  #include "chrome/browser/ui/browser_window.h"
 | 
|  #include "chrome/common/chrome_switches.h"
 | 
| @@ -289,6 +291,14 @@ void AddBoolSyncDetail(ListValue* details,
 | 
|    details->Append(val);
 | 
|  }
 | 
|  
 | 
| +void AddStringSyncDetails(ListValue* details, const std::string& stat_name,
 | 
| +                          const std::string& stat_value) {
 | 
| +  DictionaryValue* val = new DictionaryValue;
 | 
| +  val->SetString("stat_name", stat_name);
 | 
| +  val->SetString("stat_value", stat_value);
 | 
| +  details->Append(val);
 | 
| +}
 | 
| +
 | 
|  void AddIntSyncDetail(ListValue* details, const std::string& stat_name,
 | 
|                        int64 stat_value) {
 | 
|    DictionaryValue* val = new DictionaryValue;
 | 
| @@ -403,6 +413,42 @@ void ConstructAboutInformation(ProfileSyncService* service,
 | 
|      sync_ui_util::AddIntSyncDetail(details,
 | 
|                                     "Max Consecutive Errors",
 | 
|                                     full_status.max_consecutive_errors);
 | 
| +    sync_ui_util::AddIntSyncDetail(details,
 | 
| +                                   "Empty GetUpdates",
 | 
| +                                   full_status.empty_get_updates);
 | 
| +    sync_ui_util::AddIntSyncDetail(details,
 | 
| +                                   "Nonempty GetUpdates",
 | 
| +                                   full_status.nonempty_get_updates);
 | 
| +    sync_ui_util::AddIntSyncDetail(details,
 | 
| +                                   "Useless Sync Cycles",
 | 
| +                                   full_status.useless_sync_cycles);
 | 
| +    sync_ui_util::AddIntSyncDetail(details,
 | 
| +                                   "Useful Sync Cycles",
 | 
| +                                   full_status.useful_sync_cycles);
 | 
| +
 | 
| +    const browser_sync::sessions::SyncSessionSnapshot* snapshot =
 | 
| +        service->GetLastSessionSnapshot();
 | 
| +
 | 
| +    // |snapshot| could be null if sync is not yet completed.
 | 
| +    if (snapshot) {
 | 
| +      sync_ui_util::AddIntSyncDetail(details, "Download Count (This Session)",
 | 
| +          snapshot->syncer_status.num_updates_downloaded_total);
 | 
| +      sync_ui_util::AddIntSyncDetail(details, "Commit Count (This Session)",
 | 
| +          snapshot->syncer_status.num_successful_commits);
 | 
| +      sync_ui_util::AddStringSyncDetails(details, "Last Sync Source",
 | 
| +          browser_sync::GetUpdatesSourceString(
 | 
| +          snapshot->source.updates_source));
 | 
| +
 | 
| +      // Print the count of entries from snapshot. Warning: This might be
 | 
| +      // slightly out of date if there are client side changes that are yet
 | 
| +      // unsynced  However if we query the latest count here we will
 | 
| +      // have to hold the transaction which means we cannot display this page
 | 
| +      // when syncing.
 | 
| +      sync_ui_util::AddIntSyncDetail(details, "Entries" ,
 | 
| +                                     snapshot->num_entries);
 | 
| +      sync_ui_util::AddBoolSyncDetail(details, "Throttled",
 | 
| +                                      snapshot->is_silenced);
 | 
| +    }
 | 
|  
 | 
|      if (service->unrecoverable_error_detected()) {
 | 
|        strings->Set("unrecoverable_error_detected", new FundamentalValue(true));
 | 
| 
 |