| Index: chrome/browser/ui/webui/ntp/new_tab_sync_setup_handler.cc
 | 
| diff --git a/chrome/browser/ui/webui/ntp/new_tab_sync_setup_handler.cc b/chrome/browser/ui/webui/ntp/new_tab_sync_setup_handler.cc
 | 
| index 954f3f2dac809fc567d1ea95a546c7dd01561a84..90f985d4341314b2b4c6a23a0b4d8942f30fc85f 100644
 | 
| --- a/chrome/browser/ui/webui/ntp/new_tab_sync_setup_handler.cc
 | 
| +++ b/chrome/browser/ui/webui/ntp/new_tab_sync_setup_handler.cc
 | 
| @@ -5,16 +5,27 @@
 | 
|  #include "chrome/browser/ui/webui/ntp/new_tab_sync_setup_handler.h"
 | 
|  
 | 
|  #include "base/command_line.h"
 | 
| +#include "base/values.h"
 | 
| +#include "base/utf_string_conversions.h"
 | 
| +#include "chrome/browser/browser_process.h"
 | 
|  #include "chrome/browser/prefs/pref_notifier.h"
 | 
|  #include "chrome/browser/prefs/pref_service.h"
 | 
|  #include "chrome/browser/profiles/profile.h"
 | 
| +#include "chrome/browser/profiles/profile_info_cache.h"
 | 
| +#include "chrome/browser/profiles/profile_manager.h"
 | 
|  #include "chrome/browser/sync/profile_sync_service.h"
 | 
|  #include "chrome/common/chrome_notification_types.h"
 | 
| +#include "content/common/notification_service.h"
 | 
|  #include "chrome/common/chrome_switches.h"
 | 
|  #include "chrome/common/pref_names.h"
 | 
|  #include "content/common/notification_details.h"
 | 
| +#include "grit/chromium_strings.h"
 | 
| +#include "grit/generated_resources.h"
 | 
| +#include "ui/base/l10n/l10n_util.h"
 | 
|  
 | 
|  NewTabSyncSetupHandler::NewTabSyncSetupHandler() : SyncSetupHandler() {
 | 
| +  registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED,
 | 
| +                 NotificationService::AllSources());
 | 
|  }
 | 
|  
 | 
|  NewTabSyncSetupHandler::~NewTabSyncSetupHandler() {
 | 
| @@ -46,6 +57,8 @@ void NewTabSyncSetupHandler::RegisterMessages() {
 | 
|        NewCallback(this, &NewTabSyncSetupHandler::HandleCollapseSyncPromo));
 | 
|    web_ui_->RegisterMessageCallback("ExpandSyncPromo",
 | 
|        NewCallback(this, &NewTabSyncSetupHandler::HandleExpandSyncPromo));
 | 
| +  web_ui_->RegisterMessageCallback("ShowProfilesMenu",
 | 
| +      NewCallback(this, &NewTabSyncSetupHandler::HandleShowProfilesMenu));
 | 
|  
 | 
|    SyncSetupHandler::RegisterMessages();
 | 
|  }
 | 
| @@ -53,6 +66,11 @@ void NewTabSyncSetupHandler::RegisterMessages() {
 | 
|  void NewTabSyncSetupHandler::Observe(int type,
 | 
|                                       const NotificationSource& source,
 | 
|                                       const NotificationDetails& details) {
 | 
| +  if (type == chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED) {
 | 
| +    UpdateLogin();
 | 
| +    return;
 | 
| +  }
 | 
| +
 | 
|    if (type == chrome::NOTIFICATION_PREF_CHANGED) {
 | 
|      std::string* name = Details<std::string>(details).ptr();
 | 
|      if (prefs::kGoogleServicesUsername == *name) {
 | 
| @@ -102,12 +120,49 @@ void NewTabSyncSetupHandler::HandleExpandSyncPromo(const ListValue* args) {
 | 
|    SaveExpandedPreference(true);
 | 
|  }
 | 
|  
 | 
| +void NewTabSyncSetupHandler::HandleShowProfilesMenu(const ListValue* args) {
 | 
| +  // TODO(sail): Show the profiles menu.
 | 
| +}
 | 
| +
 | 
|  void NewTabSyncSetupHandler::UpdateLogin() {
 | 
|    std::string username = Profile::FromWebUI(web_ui_)->GetPrefs()->GetString(
 | 
|        prefs::kGoogleServicesUsername);
 | 
| -  StringValue string_value(username);
 | 
| +
 | 
| +  string16 status_msg;
 | 
| +  if (username.empty()) {
 | 
| +    status_msg = l10n_util::GetStringUTF16(IDS_SYNC_STATUS_NOT_CONNECTED);
 | 
| +  } else {
 | 
| +    string16 short_product_name =
 | 
| +        l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME);
 | 
| +    status_msg = l10n_util::GetStringFUTF16(IDS_SYNC_STATUS_CONNECTED,
 | 
| +                                            short_product_name,
 | 
| +                                            UTF8ToUTF16(username));
 | 
| +  }
 | 
| +  StringValue status_msg_value(status_msg);
 | 
| +
 | 
| +  std::string icon_url;
 | 
| +  ProfileInfoCache& cache =
 | 
| +      g_browser_process->profile_manager()->GetProfileInfoCache();
 | 
| +  if (cache.GetNumberOfProfiles() > 1) {
 | 
| +    size_t index = cache.GetIndexOfProfileWithPath(
 | 
| +        Profile::FromWebUI(web_ui_)->GetPath());
 | 
| +    if (index != std::string::npos) {
 | 
| +      size_t icon_index = cache.GetAvatarIconIndexOfProfileAtIndex(index);
 | 
| +      icon_url = ProfileInfoCache::GetDefaultAvatarIconUrl(icon_index);
 | 
| +    }
 | 
| +  }
 | 
| +  StringValue icon_url_value(icon_url);
 | 
| +
 | 
| +  // If the user isn't signed in then make the login text clickable so that
 | 
| +  // users can click on it to expand the sync promo. Otherwise, if the user
 | 
| +  // has multiple profiles then clicking on it should show the profiles menu.
 | 
| +  base::FundamentalValue is_clickable_value(
 | 
| +      username.empty() || cache.GetNumberOfProfiles() > 1);
 | 
| +
 | 
| +  base::FundamentalValue is_signed_in_value(!username.empty());
 | 
|    web_ui_->CallJavascriptFunction("new_tab.NewTabSyncPromo.updateLogin",
 | 
| -                                  string_value);
 | 
| +                                  status_msg_value, icon_url_value,
 | 
| +                                  is_signed_in_value, is_clickable_value);
 | 
|  }
 | 
|  
 | 
|  void NewTabSyncSetupHandler::SaveExpandedPreference(bool is_expanded) {
 | 
| 
 |