root/chrome/browser/ui/gtk/one_click_signin_bubble_gtk.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


// 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_GTK_ONE_CLICK_SIGNIN_BUBBLE_GTK_H_
#define CHROME_BROWSER_UI_GTK_ONE_CLICK_SIGNIN_BUBBLE_GTK_H_

#include "base/basictypes.h"
#include "base/callback.h"
#include "base/compiler_specific.h"
#include "base/gtest_prod_util.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/gtk/bubble/bubble_gtk.h"

typedef struct _GtkWidget GtkWidget;
typedef struct _GtkWindow GtkWindow;

class BrowserWindowGtk;
class CustomDrawButton;

// Displays the one-click signin confirmation bubble (before syncing
// has started).
class OneClickSigninBubbleGtk : public BubbleDelegateGtk {
 public:
  // Deletes self on close.  The given callback will be called if the
  // user decides to start sync.
  OneClickSigninBubbleGtk(
      BrowserWindowGtk* browser_window_gtk,
      BrowserWindow::OneClickSigninBubbleType type,
      const base::string16& email,
      const base::string16& error_message,
      const BrowserWindow::StartSyncCallback& start_sync_callback);

  // BubbleDelegateGtk implementation.
  virtual void BubbleClosing(
      BubbleGtk* bubble, bool closed_by_escape) OVERRIDE;

 private:
  FRIEND_TEST_ALL_PREFIXES(OneClickSigninBubbleGtkTest, DialogShowAndOK);
  FRIEND_TEST_ALL_PREFIXES(OneClickSigninBubbleGtkTest, DialogShowAndUndo);
  FRIEND_TEST_ALL_PREFIXES(
    OneClickSigninBubbleGtkTest, DialogShowAndClickAdvanced);
  FRIEND_TEST_ALL_PREFIXES(OneClickSigninBubbleGtkTest, DialogShowAndClose);
  FRIEND_TEST_ALL_PREFIXES(OneClickSigninBubbleGtkTest, BubbleShowAndOK);
  FRIEND_TEST_ALL_PREFIXES(
    OneClickSigninBubbleGtkTest, BubbleShowAndClickAdvanced);
  FRIEND_TEST_ALL_PREFIXES(OneClickSigninBubbleGtkTest, BubbleShowAndClose);

  virtual ~OneClickSigninBubbleGtk();

  void InitializeWidgets(BrowserWindowGtk* window);
  GtkWidget* LayoutWidgets();
  void ShowWidget(BrowserWindowGtk* browser_window_gtk,
                  GtkWidget* content_widget);

  CHROMEGTK_CALLBACK_0(OneClickSigninBubbleGtk, void, OnClickAdvancedLink);
  CHROMEGTK_CALLBACK_0(OneClickSigninBubbleGtk, void, OnClickOK);
  CHROMEGTK_CALLBACK_0(OneClickSigninBubbleGtk, void, OnClickUndo);
  CHROMEGTK_CALLBACK_0(OneClickSigninBubbleGtk, void, OnClickLearnMoreLink);
  CHROMEGTK_CALLBACK_0(OneClickSigninBubbleGtk, void, OnClickCloseButton);

  BubbleGtk* bubble_;

  // The user's email address to be used for sync.
  const base::string16 email_;

  // Alternate error message to be displayed.
  const base::string16 error_message_;

  // This callback is nulled once its called, so that it is called only once.
  // It will be called when the bubble is closed if it has not been called
  // and nulled earlier.
  BrowserWindow::StartSyncCallback start_sync_callback_;

  bool is_sync_dialog_;

  GtkWidget* message_label_;
  GtkWidget* advanced_link_;
  GtkWidget* ok_button_;
  GtkWidget* undo_button_;

  // These widgets are only used in the modal dialog, and not in the bubble.
  GtkWidget* learn_more_;
  GtkWidget* header_label_;
  scoped_ptr<CustomDrawButton> close_button_;

  bool clicked_learn_more_;

  DISALLOW_COPY_AND_ASSIGN(OneClickSigninBubbleGtk);
};

#endif  // CHROME_BROWSER_UI_GTK_ONE_CLICK_SIGNIN_BUBBLE_GTK_H_

/* [<][>][^][v][top][bottom][index][help] */