one_click_signin_bubble_view.h revision a36e5920737c6adbddd3e43b760e5de8431db6e0
1bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Use of this source code is governed by a BSD-style license that can be 3bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// found in the LICENSE file. 4bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 5bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#ifndef CHROME_BROWSER_UI_VIEWS_SYNC_ONE_CLICK_SIGNIN_BUBBLE_VIEW_H_ 6bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define CHROME_BROWSER_UI_VIEWS_SYNC_ONE_CLICK_SIGNIN_BUBBLE_VIEW_H_ 7bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 8bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#include "base/basictypes.h" 9bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#include "base/callback.h" 10bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#include "base/compiler_specific.h" 11bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#include "base/gtest_prod_util.h" 12bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#include "base/memory/scoped_ptr.h" 13bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#include "base/strings/string16.h" 14bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#include "chrome/browser/ui/browser_window.h" 15bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#include "chrome/browser/ui/sync/one_click_signin_bubble_delegate.h" 16bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#include "ui/views/bubble/bubble_delegate.h" 17bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#include "ui/views/controls/button/button.h" 18bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#include "ui/views/controls/link_listener.h" 19bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 20bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonnamespace base { 21bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonclass MessageLoop; 22bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson} 23bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 24bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonnamespace views { 25bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonclass GridLayout; 26bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonclass ImageButton; 27bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonclass LabelButton; 28bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonclass View; 29bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson} 30bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 31bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// OneClickSigninBubbleView is a view intended to be used as the content of an 32bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Bubble. It provides simple and concise feedback to the user that sync'ing 33bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// has started after using the one-click singin infobar. 34bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonclass OneClickSigninBubbleView : public views::BubbleDelegateView, 35bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson public views::LinkListener, 36bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson public views::ButtonListener { 37bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson public: 38bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Show the one-click signin bubble if not already showing. The bubble 39bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // will be placed visually beneath |anchor_view|. |start_sync| is called 40bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // to start sync. 41bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson static void ShowBubble(BrowserWindow::OneClickSigninBubbleType type, 42bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const string16& email, 43bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const string16& error_message, 44bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson scoped_ptr<OneClickSigninBubbleDelegate> delegate, 45bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson views::View* anchor_view, 46bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const BrowserWindow::StartSyncCallback& start_sync); 47bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 48bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson static bool IsShowing(); 49bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 50bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson static void Hide(); 51bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 52bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Gets the global bubble view. If its not showing returns NULL. This 53bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // method is meant to be called only from tests. 54bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson static OneClickSigninBubbleView* view_for_testing() { return bubble_view_; } 55bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 56bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson protected: 57bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Creates a OneClickSigninBubbleView. 58bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson OneClickSigninBubbleView( 59bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const string16& error_message, 60bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const string16& email, 61bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson scoped_ptr<OneClickSigninBubbleDelegate> delegate, 62bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson views::View* anchor_view, 63bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const BrowserWindow::StartSyncCallback& start_sync_callback, 64bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson bool is_sync_dialog); 65bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 66bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson virtual ~OneClickSigninBubbleView(); 67bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 68bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson private: 69bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson friend class OneClickSigninBubbleViewTest; 70bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 71bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson FRIEND_TEST_ALL_PREFIXES(OneClickSigninBubbleViewTest, BubbleOkButton); 72bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson FRIEND_TEST_ALL_PREFIXES(OneClickSigninBubbleViewTest, DialogOkButton); 73bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson FRIEND_TEST_ALL_PREFIXES(OneClickSigninBubbleViewTest, DialogUndoButton); 74bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson FRIEND_TEST_ALL_PREFIXES(OneClickSigninBubbleViewTest, BubbleAdvancedLink); 75bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson FRIEND_TEST_ALL_PREFIXES(OneClickSigninBubbleViewTest, DialogAdvancedLink); 76bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson FRIEND_TEST_ALL_PREFIXES(OneClickSigninBubbleViewTest, BubbleLearnMoreLink); 77bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson FRIEND_TEST_ALL_PREFIXES(OneClickSigninBubbleViewTest, DialogLearnMoreLink); 78bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 79bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Overridden from views::BubbleDelegateView: 80bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson virtual void AnimationEnded(const ui::Animation* animation) OVERRIDE; 81bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson virtual void Init() OVERRIDE; 82bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 83bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Overridden from views::LinkListener: 84bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE; 85bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 86bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Overridden from views::ButtonListener: 87bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson virtual void ButtonPressed(views::Button* sender, 88bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const ui::Event& event) OVERRIDE; 89bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 90bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Overridden from views::View: 91bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE; 92bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 93bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Overridden from views::WidgetDelegate: 94bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson virtual void WindowClosing() OVERRIDE; 95bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson virtual ui::ModalType GetModalType() const OVERRIDE; 96bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 97bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Builds a popup bubble anchored under the wrench menu 98bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void InitBubbleContent(views::GridLayout* layout); 99bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 100bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Builds a modal dialog aligned center top 101bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void InitDialogContent(views::GridLayout* layout); 102bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 103bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Initializes the OK/Undo buttons to be used at the bottom of the bubble. 104bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void InitButtons(views::GridLayout* layout); 105bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void GetButtons(views::LabelButton** ok_button, 106bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson views::LabelButton** undo_button); 107bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 108bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Creates learn more link to be used at the bottom of the bubble. 109bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void InitLearnMoreLink(); 110bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 111bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Creates advanced link to be used at the bottom of the bubble. 112bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void InitAdvancedLink(); 113bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 114bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Delegate to handle clicking on links in the bubble. 115bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson scoped_ptr<OneClickSigninBubbleDelegate> delegate_; 116bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 117bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Alternate error message to be displayed. 118bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const string16 error_message_; 119bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 120bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // The user's email address to be used for sync. 121bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const string16 email_; 122bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 123bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // This callback is nulled once its called, so that it is called only once. 124bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // It will be called when the bubble is closed if it has not been called 125bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // and nulled earlier. 126bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson BrowserWindow::StartSyncCallback start_sync_callback_; 127bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 128bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const bool is_sync_dialog_; 129bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 130bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Link to sync setup advanced page. 131bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson views::Link* advanced_link_; 132bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 133bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Link to the Learn More details page 134bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson views::Link* learn_more_link_; 135bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 136bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Controls at bottom of bubble. 137bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson views::LabelButton* ok_button_; 138bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson views::LabelButton* undo_button_; 139bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 140bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // Close button for the modal dialog 141bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson views::ImageButton* close_button_; 142bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 143bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson bool clicked_learn_more_; 144bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 145bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // A message loop used only with unit tests. 146bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson base::MessageLoop* message_loop_for_testing_; 147bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 148bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson // The bubble, if we're showing one. 149bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson static OneClickSigninBubbleView* bubble_view_; 150bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 151bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson DISALLOW_COPY_AND_ASSIGN(OneClickSigninBubbleView); 152bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson}; 153bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 154bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#endif // CHROME_BROWSER_UI_VIEWS_SYNC_ONE_CLICK_SIGNIN_BUBBLE_VIEW_H_ 155bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson