new_credit_card_bubble_controller.h revision ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_UI_AUTOFILL_NEW_CREDIT_CARD_BUBBLE_CONTROLLER_H_ 6#define CHROME_BROWSER_UI_AUTOFILL_NEW_CREDIT_CARD_BUBBLE_CONTROLLER_H_ 7 8#include "base/basictypes.h" 9#include "base/compiler_specific.h" 10#include "base/memory/scoped_ptr.h" 11#include "base/memory/weak_ptr.h" 12#include "base/strings/string16.h" 13#include "ui/gfx/image/image.h" 14 15class Profile; 16 17namespace autofill { 18 19class NewCreditCardBubbleView; 20class AutofillProfile; 21class CreditCard; 22 23// A simple wrapper that contains descriptive information about a credit card 24// that should be shown in the content of the bubble. 25struct CreditCardDescription { 26 CreditCardDescription(); 27 ~CreditCardDescription(); 28 // The icon of the credit card issuer (i.e. Visa, Mastercard). 29 gfx::Image icon; 30 // The display name of the card. Shown next to the icon. 31 base::string16 name; 32 // A longer description of the card being shown in the bubble. 33 base::string16 description; 34}; 35 36//////////////////////////////////////////////////////////////////////////////// 37// 38// NewCreditCardBubbleController 39// 40// A class to control showing/hiding a bubble after saved a new card in Chrome. 41// Here's a visual reference to what this bubble looks like: 42// 43// @----------------------------------------@ 44// | Bubble title text | 45// | | 46// | [ Card icon ] Card name | 47// | Card description that will probably | 48// | also span multiple lines. | 49// | | 50// | Learn more link | 51// @----------------------------------------@ 52// 53//////////////////////////////////////////////////////////////////////////////// 54class NewCreditCardBubbleController { 55 public: 56 virtual ~NewCreditCardBubbleController(); 57 58 // Show a bubble informing the user that new credit card data has been saved. 59 // This bubble points to the settings menu. Ownership of |new_card| 60 // and |billing_profile| are transferred by this call. 61 static void Show(Profile* profile, 62 scoped_ptr<CreditCard> new_card, 63 scoped_ptr<AutofillProfile> billing_profile); 64 65 // The bubble's title text. 66 const base::string16& TitleText() const; 67 68 // A card description to show in the bubble. 69 const CreditCardDescription& CardDescription() const; 70 71 // The text of the link shown at the bubble of the bubble. 72 const base::string16& LinkText() const; 73 74 // Called when |bubble_| is destroyed. 75 void OnBubbleDestroyed(); 76 77 // Called when the link at the bottom of the bubble is clicked. 78 void OnLinkClicked(); 79 80 // Returns the profile this bubble is associated with. 81 Profile* profile() { return profile_; } 82 83 protected: 84 // Create a bubble attached to |profile|. 85 explicit NewCreditCardBubbleController(Profile* profile); 86 87 // Creates and returns an Autofill credit card bubble. Exposed for testing. 88 virtual base::WeakPtr<NewCreditCardBubbleView> CreateBubble(); 89 90 // Returns a weak reference to |bubble_|. May be invalid/NULL. 91 virtual base::WeakPtr<NewCreditCardBubbleView> bubble(); 92 93 // Show a bubble notifying the user that new credit card data has been saved. 94 // Exposed for testing. 95 virtual void SetupAndShow(scoped_ptr<CreditCard> new_card, 96 scoped_ptr<AutofillProfile> billing_profile); 97 98 private: 99 // Hides |bubble_| if it exists. 100 void Hide(); 101 102 // The profile this bubble is associated with. 103 Profile* const profile_; 104 105 // The newly saved credit card and assocated billing information. 106 scoped_ptr<CreditCard> new_card_; 107 scoped_ptr<AutofillProfile> billing_profile_; 108 109 // The title text of the bubble. 110 const base::string16 title_text_; 111 112 // The bubble's link text. 113 const base::string16 link_text_; 114 115 // Strings and descriptions that are generated based on |new_card_| and 116 // |billing_profile_|. 117 struct CreditCardDescription card_desc_; 118 119 // A bubble view that's created by calling either |Show*()| method; owned by 120 // the native widget/hierarchy, not this class (though this class must outlive 121 // |bubble_|). NULL in many cases. 122 base::WeakPtr<NewCreditCardBubbleView> bubble_; 123 124 // A weak pointer factory for |Create()|. 125 base::WeakPtrFactory<NewCreditCardBubbleController> weak_ptr_factory_; 126 127 DISALLOW_COPY_AND_ASSIGN(NewCreditCardBubbleController); 128}; 129 130} // namespace autofill 131 132#endif // CHROME_BROWSER_UI_AUTOFILL_NEW_CREDIT_CARD_BUBBLE_CONTROLLER_H_ 133