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