blob: d9c7b59bf81003a1554f8cbe1780c4ee8c14fa4c [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_WEBUI_SYNC_PROMO_SYNC_PROMO_HANDLER_H_
#define CHROME_BROWSER_UI_WEBUI_SYNC_PROMO_SYNC_PROMO_HANDLER_H_
#include "chrome/browser/ui/webui/sync_setup_handler.h"
class PrefService;
// The handler for JavaScript messages related to the "sync promo" page.
class SyncPromoHandler : public SyncSetupHandler {
public:
explicit SyncPromoHandler(ProfileManager* profile_manager);
virtual ~SyncPromoHandler();
// Called to register our preferences before we use them (so there will be a
// default if not present yet).
static void RegisterUserPrefs(PrefService* prefs);
// WebUIMessageHandler implementation.
virtual void RegisterMessages() OVERRIDE;
// Overridden to skip sync settings dialog if user wants to use default
// settings. |show_advanced| is ignored because we never want to display the
// "Sync Everything" dialog for the sync promo.
virtual void DisplayConfigureSync(bool show_advanced,
bool passphrase_failed) OVERRIDE;
// content::NotificationObserver implementation.
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
// LoginUIService::LoginUI implementation.
virtual void CloseUI() OVERRIDE;
protected:
virtual void ShowSetupUI() OVERRIDE;
virtual void RecordSignin() OVERRIDE;
private:
// JavaScript callback handler to close the sync promo.
void HandleCloseSyncPromo(const base::ListValue* args);
// JavaScript callback handler to initialize the sync promo.
void HandleInitializeSyncPromo(const base::ListValue* args);
// JavaScript handler to record the duration for which the throbber was
// visible during an attempted sign-in flow.
void HandleRecordThrobberTime(const base::ListValue* args);
// JavaScript handler to record the number of times a user attempted to sign
// in to chrome while they were on the sync promo page.
void HandleRecordSignInAttempts(const base::ListValue* args);
// JavaScript callback handler to switch the advanced sync settings. |args| is
// the list of arguments passed from JS and should be an empty list.
void HandleShowAdvancedSettings(const base::ListValue* args);
// JavaScript callback handler to record user actions on the sync promo.
void HandleUserFlowAction(const base::ListValue* args);
// JavaScript callback handler for when a user clicks skip.
void HandleUserSkipped(const base::ListValue* args);
// Return the number of times the user with the current profile has seen the
// sync promo.
int GetViewCount() const;
// Increment the local view count by the specified non-negative integer
// amount. Returns the new total view count.
int IncrementViewCountBy(size_t amount);
// Record a user's flow through the promo to our histogram in UMA.
void RecordUserFlowAction(int action);
// Use this to register for certain notifications (currently when tabs or
// windows close).
content::NotificationRegistrar registrar_;
// Weak reference that's initialized and checked in Attach() (after that
// guaranteed to be non-NULL).
PrefService* prefs_;
// If the user closes the whole window we'll get a close notification from the
// tab as well, so this bool acts as a small mutex to only report the close
// method once.
bool window_already_closed_;
DISALLOW_COPY_AND_ASSIGN(SyncPromoHandler);
};
#endif // CHROME_BROWSER_UI_WEBUI_SYNC_PROMO_SYNC_PROMO_HANDLER_H_