Index: chrome/browser/ui/webui/ntp/new_tab_sync_setup_handler.cc |
=================================================================== |
--- chrome/browser/ui/webui/ntp/new_tab_sync_setup_handler.cc (revision 93571) |
+++ chrome/browser/ui/webui/ntp/new_tab_sync_setup_handler.cc (working copy) |
@@ -5,22 +5,94 @@ |
#include "chrome/browser/ui/webui/ntp/new_tab_sync_setup_handler.h" |
#include "base/command_line.h" |
+#include "chrome/browser/prefs/pref_notifier.h" |
+#include "chrome/browser/prefs/pref_service.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/sync/profile_sync_service.h" |
+#include "chrome/common/chrome_notification_types.h" |
#include "chrome/common/chrome_switches.h" |
+#include "chrome/common/pref_names.h" |
+#include "content/common/notification_details.h" |
-void NewTabSyncSetupHandler::ShowSetupUI() { |
+bool NewTabSyncSetupHandler::ShouldShowSyncPromo() { |
+#if defined(OS_CHROMEOS) |
+ // There's no need to show the sync promo on cros since cros users are logged |
+ // into sync already. |
+ return false; |
+#endif |
+ |
// Temporarily hide this feature behind a command line flag. |
CommandLine* command_line = CommandLine::ForCurrentProcess(); |
- if (!command_line->HasSwitch(switches::kSyncShowPromo)) |
+ return command_line->HasSwitch(switches::kSyncShowPromo); |
+} |
+ |
+WebUIMessageHandler* NewTabSyncSetupHandler::Attach(WebUI* web_ui) { |
+ PrefService* pref_service = web_ui->GetProfile()->GetPrefs(); |
+ username_pref_.Init(prefs::kGoogleServicesUsername, pref_service, this); |
+ |
+ return SyncSetupHandler::Attach(web_ui); |
+} |
+ |
+void NewTabSyncSetupHandler::RegisterMessages() { |
+ web_ui_->RegisterMessageCallback("InitializeSyncPromo", |
+ NewCallback(this, &NewTabSyncSetupHandler::HandleInitializeSyncPromo)); |
+ web_ui_->RegisterMessageCallback("CollapseSyncPromo", |
+ NewCallback(this, &NewTabSyncSetupHandler::HandleCollapseSyncPromo)); |
+ web_ui_->RegisterMessageCallback("ExpandSyncPromo", |
+ NewCallback(this, &NewTabSyncSetupHandler::HandleExpandSyncPromo)); |
+ |
+ SyncSetupHandler::RegisterMessages(); |
+} |
+ |
+void NewTabSyncSetupHandler::Observe(int type, |
+ const NotificationSource& source, |
+ const NotificationDetails& details) { |
+ if (type == chrome::NOTIFICATION_PREF_CHANGED) { |
+ std::string* name = Details<std::string>(details).ptr(); |
+ if (prefs::kGoogleServicesUsername == *name) { |
+ UpdateLogin(); |
+ return; |
+ } |
+ } |
+ SyncSetupHandler::Observe(type, source, details); |
+} |
+ |
+void NewTabSyncSetupHandler::ShowSetupUI() { |
+ ProfileSyncService* service = web_ui_->GetProfile()->GetProfileSyncService(); |
+ service->get_wizard().Step(SyncSetupWizard::GAIA_LOGIN); |
+} |
+ |
+void NewTabSyncSetupHandler::HandleInitializeSyncPromo(const ListValue* args) { |
+ if (!ShouldShowSyncPromo()) |
return; |
+ // Make sure the sync promo is visible. |
+ web_ui_->CallJavascriptFunction("new_tab.NewTabSyncPromo.showSyncPromo"); |
+ |
+ UpdateLogin(); |
+ |
ProfileSyncService* service = web_ui_->GetProfile()->GetProfileSyncService(); |
DCHECK(service); |
- // If they user has already synced then don't show anything. |
- if (service->HasSyncSetupCompleted()) |
- return; |
+ // If the user has not signed into sync then expand the sync promo. |
+ // TODO(sail): Need to throttle this behind a server side flag. |
+ if (!service->HasSyncSetupCompleted()) |
+ OpenSyncSetup(); |
+} |
- service->get_wizard().Step(SyncSetupWizard::GAIA_LOGIN); |
+void NewTabSyncSetupHandler::HandleCollapseSyncPromo(const ListValue* args) { |
+ CloseSyncSetup(); |
} |
+ |
+ |
+void NewTabSyncSetupHandler::HandleExpandSyncPromo(const ListValue* args) { |
+ OpenSyncSetup(); |
+} |
+ |
+void NewTabSyncSetupHandler::UpdateLogin() { |
+ std::string username = web_ui_->GetProfile()->GetPrefs()->GetString( |
+ prefs::kGoogleServicesUsername); |
+ StringValue string_value(username); |
+ web_ui_->CallJavascriptFunction("new_tab.NewTabSyncPromo.updateLogin", |
+ string_value); |
+} |