Index: chrome/browser/ui/autofill/autofill_credit_card_bubble_controller.h |
diff --git a/chrome/browser/ui/autofill/autofill_credit_card_bubble_controller.h b/chrome/browser/ui/autofill/autofill_credit_card_bubble_controller.h |
index e6d8885d1055c3df07e1ab20612adcdd1069906e..a654fa74b7e651a49c0c669308939838ff4bfb8a 100644 |
--- a/chrome/browser/ui/autofill/autofill_credit_card_bubble_controller.h |
+++ b/chrome/browser/ui/autofill/autofill_credit_card_bubble_controller.h |
@@ -13,6 +13,8 @@ |
#include "base/strings/string16.h" |
#include "content/public/browser/web_contents_observer.h" |
#include "content/public/browser/web_contents_user_data.h" |
+#include "ui/base/range/range.h" |
+#include "ui/gfx/image/image.h" |
class Profile; |
@@ -20,14 +22,6 @@ namespace content { |
class WebContents; |
} |
-namespace gfx { |
-class Image; |
-} |
- |
-namespace ui { |
-class Range; |
-} |
- |
namespace user_prefs { |
class PrefRegistrySyncable; |
} |
@@ -35,6 +29,31 @@ class PrefRegistrySyncable; |
namespace autofill { |
class AutofillCreditCardBubble; |
+class AutofillProfile; |
+class CreditCard; |
+ |
+// A simple wrapper that contains descriptive information about a credit card |
+// that should be shown in the content of the bubble. |
+struct CreditCardDescription { |
+ CreditCardDescription(); |
+ ~CreditCardDescription(); |
+ // The icon of the credit card issuer (i.e. Visa, Mastercard). |
+ gfx::Image icon; |
+ // The title text, quickly describing the card, shown next to the icon. |
+ base::string16 title; |
+ // A longer description of the card being shown in the bubble. |
+ base::string16 description; |
+}; |
+ |
+// A simple struct of text highlighting range information. If |is_link| is true |
+// this portion of the text should be clickable (and trigger |OnLinkClicked()|). |
+// If |is_link| is false, the text denoted by |range| should be bolded. |
+struct TextRange { |
+ // The range of text this TextRange applies to (start and end). |
+ ui::Range range; |
+ // Whether this text range should be styled like a link (e.g. clickable). |
+ bool is_link; |
+}; |
//////////////////////////////////////////////////////////////////////////////// |
// |
@@ -46,6 +65,25 @@ class AutofillCreditCardBubble; |
// bubble, but only has a weak reference to it (it is often owned by the native |
// platform's ui toolkit). |
// |
+// Here's a visual reference: |
+// |
+// /---------------------------------------\ |
+// | Title text | |
+// | | |
+// | Header text that will probably span | |
Evan Stade
2013/08/02 16:29:45
I object to this being called "header" text.
Dan Beam
2013/08/06 02:41:35
Done.
|
+// | multiple lines and have bolded text | |
+// | or links inline. | |
+// | | |
+// | [ Card icon ] Card title | |
+// | Card description that will probably | |
+// | also span multiple lines. | |
+// | | |
+// | Learn more link | |
+// \---------------------------------------/ |
+// |
+// NOTE: that basically any of these sections can be (and are) empty in some |
+// variation of this bubble. |
+// |
//////////////////////////////////////////////////////////////////////////////// |
class AutofillCreditCardBubbleController |
: public content::WebContentsObserver, |
@@ -56,20 +94,21 @@ class AutofillCreditCardBubbleController |
// Registers preferences this class cares about. |
static void RegisterUserPrefs(user_prefs::PrefRegistrySyncable* registry); |
- // Shows a clickable icon in the omnibox that informs the user about generated |
- // (fronting) cards and how they are used to bill their original (backing) |
- // card. Additionally, if |ShouldDisplayBubbleInitially()| is true, the bubble |
- // will be shown initially (doesn't require being clicked). |
- static void ShowGeneratedCardUI(content::WebContents* contents, |
- const base::string16& backing_card_name, |
- const base::string16& fronting_card_name); |
- |
- // Show a bubble and clickable omnibox icon notifying the user that new credit |
- // card data has been saved. This bubble always shows initially. |
- static void ShowNewCardSavedBubble(content::WebContents* contents, |
- const base::string16& new_card_name); |
- |
- // content::WebContentsObserver implementation. |
+ // Show a bubble to educate the user about generated (fronting) cards and how |
+ // they are used to bill their original (backing) card. |
+ static void ShowGeneratedCardBubble(content::WebContents* contents, |
+ const base::string16& backing_card_name, |
+ const base::string16& fronting_card_name); |
+ |
+ // Show a bubble informing the user that new credit card data has been saved. |
+ // This bubble points to the settings menu. Ownership of |new_card| |
+ // and |billing_profile| are transferred by this call. |
+ static void ShowNewCardSavedBubble( |
+ content::WebContents* contents, |
+ scoped_ptr<CreditCard> new_card, |
+ scoped_ptr<AutofillProfile> billing_profile); |
+ |
+ // content::WebContentsObserver: |
virtual void DidNavigateMainFrame( |
const content::LoadCommittedDetails& details, |
const content::FrameNavigateParams& params) OVERRIDE; |
@@ -77,25 +116,34 @@ class AutofillCreditCardBubbleController |
// Whether |bubble_| is currently in the process of hiding. |
bool IsHiding() const; |
+ // Returns whether the bubble should be anchored to the setting menu or not. |
+ bool AnchorToSettingsMenu() const; |
+ |
// An image that should be shown as an icon in the omnibox and pointed to by |
// the bubble. |
gfx::Image AnchorIcon() const; |
// The title of the bubble. May be empty. |
- base::string16 BubbleTitle() const; |
+ const base::string16& TitleText() const; |
- // The main text of the bubble. |
- base::string16 BubbleText() const; |
+ // Text in the contents of the bubble; above any card descriptions. |
+ const base::string16& HeaderText() const; |
- // Ranges of text styles in the bubble's main content. |
- const std::vector<ui::Range>& BubbleTextRanges() const; |
+ // Ranges of text styles in the bubble's main content. May be empty. |
+ const std::vector<TextRange>& HeaderTextRanges() const; |
- // The text of the link shown at the bubble of the bubble. |
- base::string16 LinkText() const; |
+ // A card description to show in the bubble. May be NULL. |
+ const CreditCardDescription* Description() const; |
+ |
+ // The text of the link shown at the bubble of the bubble. May be empty. |
+ const base::string16& LinkText() const; |
// Called when the anchor for this bubble is clicked. |
void OnAnchorClicked(); |
+ // Called when |bubble_| is destroyed. |
+ void OnBubbleDestroyed(); |
+ |
// Called when the link at the bottom of the bubble is clicked. |
void OnLinkClicked(); |
@@ -134,7 +182,9 @@ class AutofillCreditCardBubbleController |
// Show a bubble notifying the user that new credit card data has been saved. |
// Exposed for testing. |
- virtual void ShowAsNewCardSavedBubble(const base::string16& new_card_name); |
+ virtual void ShowAsNewCardSavedBubble( |
+ scoped_ptr<CreditCard> new_card, |
+ scoped_ptr<AutofillProfile> billing_profile); |
private: |
friend class content::WebContentsUserData<AutofillCreditCardBubbleController>; |
@@ -165,16 +215,20 @@ class AutofillCreditCardBubbleController |
// The web contents associated with this bubble. |
content::WebContents* const web_contents_; |
- // The newly saved credit card. |
- base::string16 new_card_name_; |
+ // The newly saved credit card and assocated billing information. |
+ scoped_ptr<CreditCard> new_card_; |
+ scoped_ptr<AutofillProfile> billing_profile_; |
// The generated credit card number and associated backing card. |
base::string16 fronting_card_name_; |
base::string16 backing_card_name_; |
- // Bubble contents text and text ranges generated in |SetUp()|. |
- base::string16 bubble_text_; |
- std::vector<ui::Range> bubble_text_ranges_; |
+ // String, ranges, and descriptions generated in |SetUp()|. |
+ base::string16 title_text_; |
+ base::string16 header_text_; |
+ std::vector<TextRange> header_text_ranges_; |
+ scoped_ptr<CreditCardDescription> card_desc_; |
+ base::string16 link_text_; |
// A bubble view that's created by calling either |Show*()| method; owned by |
// the native widget/hierarchy, not this class (though this class must outlive |