Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(610)

Unified Diff: chrome/browser/ui/autofill/autofill_credit_card_bubble_controller.cc

Issue 21668003: Implement newly saved card bubble for realz and update generated card bubble to (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/autofill/autofill_credit_card_bubble_controller.cc
diff --git a/chrome/browser/ui/autofill/autofill_credit_card_bubble_controller.cc b/chrome/browser/ui/autofill/autofill_credit_card_bubble_controller.cc
index 1bbbffc14a0e5d02d390ca4b9cc5204f7b105d7b..491be9eb455a8fce1713e59bda8588042431ae0c 100644
--- a/chrome/browser/ui/autofill/autofill_credit_card_bubble_controller.cc
+++ b/chrome/browser/ui/autofill/autofill_credit_card_bubble_controller.cc
@@ -8,6 +8,7 @@
#include "base/bind.h"
#include "base/location.h"
+#include "base/logging.h"
#include "base/message_loop/message_loop.h"
#include "base/prefs/pref_service.h"
#include "base/strings/string_split.h"
@@ -22,17 +23,17 @@
#include "chrome/browser/ui/omnibox/location_bar.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/pref_names.h"
+#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/credit_card.h"
#include "components/user_prefs/pref_registry_syncable.h"
#include "content/public/browser/navigation_details.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/web_contents.h"
+#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
-#include "grit/webkit_resources.h"
#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/range/range.h"
#include "ui/base/resource/resource_bundle.h"
-#include "ui/gfx/image/image.h"
DEFINE_WEB_CONTENTS_USER_DATA_KEY(autofill::AutofillCreditCardBubbleController);
@@ -51,6 +52,9 @@ AutofillCreditCardBubbleController* GetOrCreate(content::WebContents* wc) {
} // namespace
+CreditCardDescription::CreditCardDescription() {}
+CreditCardDescription::~CreditCardDescription() {}
+
AutofillCreditCardBubbleController::AutofillCreditCardBubbleController(
content::WebContents* web_contents)
: WebContentsObserver(web_contents),
@@ -72,7 +76,7 @@ void AutofillCreditCardBubbleController::RegisterUserPrefs(
}
// static
-void AutofillCreditCardBubbleController::ShowGeneratedCardUI(
+void AutofillCreditCardBubbleController::ShowGeneratedCardBubble(
content::WebContents* contents,
const base::string16& fronting_card_name,
const base::string16& backing_card_name) {
@@ -83,8 +87,10 @@ void AutofillCreditCardBubbleController::ShowGeneratedCardUI(
// static
void AutofillCreditCardBubbleController::ShowNewCardSavedBubble(
content::WebContents* contents,
- const base::string16& new_card_name) {
- GetOrCreate(contents)->ShowAsNewCardSavedBubble(new_card_name);
+ scoped_ptr<CreditCard> new_card,
+ scoped_ptr<AutofillProfile> billing_profile) {
+ GetOrCreate(contents)->ShowAsNewCardSavedBubble(new_card.Pass(),
+ billing_profile.Pass());
}
void AutofillCreditCardBubbleController::DidNavigateMainFrame(
@@ -103,40 +109,48 @@ bool AutofillCreditCardBubbleController::IsHiding() const {
return bubble_ && bubble_->IsHiding();
}
+bool AutofillCreditCardBubbleController::AnchorToSettingsMenu() const {
+ return !IsGeneratedCardBubble();
+}
+
gfx::Image AutofillCreditCardBubbleController::AnchorIcon() const {
- if (!should_show_anchor_)
+ if (!should_show_anchor_ || !IsGeneratedCardBubble())
return gfx::Image();
+ return ui::ResourceBundle::GetSharedInstance().GetImageNamed(IDR_WALLET_ICON);
+}
- return ui::ResourceBundle::GetSharedInstance().GetImageNamed(
- IsGeneratedCardBubble() ? IDR_WALLET_ICON : IDR_AUTOFILL_CC_GENERIC);
+const base::string16& AutofillCreditCardBubbleController::TitleText() const {
+ return title_text_;
}
-base::string16 AutofillCreditCardBubbleController::BubbleTitle() const {
- return !IsGeneratedCardBubble() ? ASCIIToUTF16("Lorem ipsum, savum cardum") :
- l10n_util::GetStringUTF16(
- IDS_AUTOFILL_CREDIT_CARD_BUBBLE_GENERATED_TITLE);
+const base::string16& AutofillCreditCardBubbleController::HeaderText() const {
+ return header_text_;
}
-base::string16 AutofillCreditCardBubbleController::BubbleText() const {
- DCHECK(IsSetup());
- return bubble_text_;
+const std::vector<TextRange>& AutofillCreditCardBubbleController::
+ HeaderTextRanges() const {
+ return header_text_ranges_;
}
-const std::vector<ui::Range>& AutofillCreditCardBubbleController::
- BubbleTextRanges() const {
- DCHECK(IsSetup());
- return bubble_text_ranges_;
+const CreditCardDescription* AutofillCreditCardBubbleController::Description()
+ const {
+ return card_desc_.get();
}
-base::string16 AutofillCreditCardBubbleController::LinkText() const {
- return l10n_util::GetStringUTF16(IsGeneratedCardBubble() ?
- IDS_LEARN_MORE : IDS_AUTOFILL_CREDIT_CARD_BUBBLE_MANAGE_CARDS);
+const base::string16& AutofillCreditCardBubbleController::LinkText() const {
+ return link_text_;
}
void AutofillCreditCardBubbleController::OnAnchorClicked() {
Show(true);
}
+void AutofillCreditCardBubbleController::OnBubbleDestroyed() {
+ if (AnchorToSettingsMenu())
+ web_contents()->RemoveUserData(UserDataKey());
+ // |this| may now be deleted.
+}
+
void AutofillCreditCardBubbleController::OnLinkClicked() {
if (IsGeneratedCardBubble()) {
#if !defined(OS_ANDROID)
@@ -205,11 +219,14 @@ void AutofillCreditCardBubbleController::ShowAsGeneratedCardBubble(
}
void AutofillCreditCardBubbleController::ShowAsNewCardSavedBubble(
- const base::string16& new_card_name) {
+ scoped_ptr<CreditCard> new_card,
+ scoped_ptr<AutofillProfile> billing_profile) {
Reset();
- DCHECK(!new_card_name.empty());
- new_card_name_ = new_card_name;
+ DCHECK(new_card);
+ DCHECK(billing_profile);
+ new_card_ = new_card.Pass();
+ billing_profile_ = billing_profile.Pass();
SetUp();
Show(false);
@@ -220,53 +237,101 @@ void AutofillCreditCardBubbleController::Reset() {
fronting_card_name_.clear();
backing_card_name_.clear();
- new_card_name_.clear();
- bubble_text_.clear();
- bubble_text_ranges_.clear();
+ new_card_.reset();
+ billing_profile_.reset();
+
+ title_text_.clear();
+ header_text_.clear();
+ header_text_ranges_.clear();
+ card_desc_.reset();
+ link_text_.clear();
DCHECK(!IsSetup());
}
void AutofillCreditCardBubbleController::SetUp() {
- base::string16 full_text;
+ // Set the title if it's a generated card bubble.
if (IsGeneratedCardBubble()) {
- full_text = l10n_util::GetStringFUTF16(
+ title_text_ = l10n_util::GetStringUTF16(
+ IDS_AUTOFILL_CREDIT_CARD_BUBBLE_GENERATED_TITLE);
+ }
+
+ base::string16 to_split;
+ if (IsGeneratedCardBubble()) {
+ to_split = l10n_util::GetStringFUTF16(
IDS_AUTOFILL_CREDIT_CARD_BUBBLE_GENERATED_TEXT,
fronting_card_name_,
backing_card_name_);
} else {
- full_text = ReplaceStringPlaceholders(
- ASCIIToUTF16("Lorem ipsum, savum cardem |$1|. Replacem before launch."),
- new_card_name_,
- NULL);
+ to_split = l10n_util::GetStringUTF16(
+ IDS_AUTOFILL_CREDIT_CARD_BUBBLE_NEW_CARD_TEXT);
}
base::char16 separator('|');
std::vector<base::string16> pieces;
- base::SplitStringDontTrim(full_text, separator, &pieces);
+ base::SplitStringDontTrim(to_split, separator, &pieces);
while (!pieces.empty()) {
base::string16 piece = pieces.front();
if (!piece.empty() && pieces.size() % 2 == 0) {
- const size_t start = bubble_text_.size();
- bubble_text_ranges_.push_back(ui::Range(start, start + piece.size()));
+ const size_t start = header_text_.size();
+ TextRange bold_text;
+ bold_text.range = ui::Range(start, start + piece.size());
+ bold_text.is_link = false;
+ header_text_ranges_.push_back(bold_text);
}
- bubble_text_.append(piece);
+ header_text_.append(piece);
pieces.erase(pieces.begin(), pieces.begin() + 1);
}
+ // Add a "Learn more" link at the end of the header text if it's a generated
+ // card bubble.
+ if (IsGeneratedCardBubble()) {
+ base::string16 learn_more = l10n_util::GetStringUTF16(IDS_LEARN_MORE);
+ header_text_.append(ASCIIToUTF16(" ") + learn_more);
+ const size_t header_size = header_text_.size();
+ TextRange end_link;
+ end_link.range = ui::Range(header_size - learn_more.size(), header_size);
+ end_link.is_link = true;
+ header_text_ranges_.push_back(end_link);
+ }
+
+ // Create a description if it's a newly saved card bubble.
+ if (!IsGeneratedCardBubble()) {
Evan Stade 2013/08/02 16:29:45 use else?
Dan Beam 2013/08/06 02:41:35 doesn't exist any more
+ card_desc_.reset(new CreditCardDescription);
+
+ const base::string16 card_number =
+ new_card_->GetRawInfo(CREDIT_CARD_NUMBER);
+ ui::ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ card_desc_->icon = rb.GetImageNamed(
+ CreditCard::IconResourceId(CreditCard::GetCreditCardType(card_number)));
+
+ card_desc_->title = card_number.substr(0, 4) + ASCIIToUTF16(" - ") +
Evan Stade 2013/08/02 16:29:45 I think this belongs alongside the other "ForDispl
Dan Beam 2013/08/06 02:41:35 changed to TypeAndLastFourDigits() and started thr
+ card_number.substr(4, 4) + ASCIIToUTF16(" - ") +
+ card_number.substr(8, 4) + ASCIIToUTF16(" - ") +
+ card_number.substr(12);
+ const base::string16 kNewLine = ASCIIToUTF16("\n");
+ const std::string& locale = g_browser_process->GetApplicationLocale();
+ card_desc_->description = billing_profile_->Label() + kNewLine +
+ billing_profile_->GetInfo(EMAIL_ADDRESS, locale) + kNewLine +
+ billing_profile_->GetRawInfo(PHONE_BILLING_WHOLE_NUMBER);
+ }
+
+ // Add a link by setting the link text if it's a newly saved card bubble.
+ if (!IsGeneratedCardBubble()) {
Evan Stade 2013/08/02 16:29:45 nit: put this in the above block that's guarded by
Dan Beam 2013/08/06 02:41:35 doesn't exist any more
+ link_text_ = l10n_util::GetStringUTF16(
+ IDS_AUTOFILL_CREDIT_CARD_BUBBLE_MANAGE_CARDS);
+ }
+
UpdateAnchor();
DCHECK(IsSetup());
}
bool AutofillCreditCardBubbleController::IsSetup() const {
- DCHECK_EQ(bubble_text_.empty(), bubble_text_ranges_.empty());
- return !bubble_text_.empty();
+ return !header_text_.empty();
}
bool AutofillCreditCardBubbleController::IsGeneratedCardBubble() const {
- DCHECK_EQ(fronting_card_name_.empty(), backing_card_name_.empty());
- DCHECK_NE(backing_card_name_.empty(), new_card_name_.empty());
return !fronting_card_name_.empty();
}

Powered by Google App Engine
This is Rietveld 408576698