new_credit_card_bubble_controller.cc revision d0247b1b59f9c528cb6df88b4f2b9afaf80d181e
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#include "chrome/browser/ui/autofill/new_credit_card_bubble_controller.h" 6 7#include <string> 8 9#include "base/logging.h" 10#include "base/strings/utf_string_conversions.h" 11#include "chrome/browser/browser_process.h" 12#include "chrome/browser/profiles/profile.h" 13#include "chrome/browser/ui/autofill/data_model_wrapper.h" 14#include "chrome/browser/ui/autofill/new_credit_card_bubble_view.h" 15#include "chrome/browser/ui/browser_finder.h" 16#include "chrome/browser/ui/chrome_pages.h" 17#include "chrome/browser/ui/host_desktop.h" 18#include "chrome/common/url_constants.h" 19#include "components/autofill/core/browser/autofill_profile.h" 20#include "components/autofill/core/browser/credit_card.h" 21#include "grit/chromium_strings.h" 22#include "grit/generated_resources.h" 23#include "grit/theme_resources.h" 24#include "ui/base/l10n/l10n_util.h" 25#include "ui/base/resource/resource_bundle.h" 26 27namespace autofill { 28 29namespace { 30 31static const int kMaxGeneratedCardTimesToShow = 5; 32static const char kWalletGeneratedCardLearnMoreLink[] = 33 "http://support.google.com/wallet/bin/answer.py?hl=en&answer=2740044"; 34 35} // namespace 36 37CreditCardDescription::CreditCardDescription() {} 38CreditCardDescription::~CreditCardDescription() {} 39 40NewCreditCardBubbleController::~NewCreditCardBubbleController() { 41 Hide(); 42} 43 44// static 45void NewCreditCardBubbleController::Show( 46 Profile* profile, 47 scoped_ptr<CreditCard> new_card, 48 scoped_ptr<AutofillProfile> billing_profile) { 49 (new NewCreditCardBubbleController(profile))->SetupAndShow( 50 new_card.Pass(), 51 billing_profile.Pass()); 52} 53 54const base::string16& NewCreditCardBubbleController::TitleText() const { 55 return title_text_; 56} 57 58const CreditCardDescription& NewCreditCardBubbleController::CardDescription() 59 const { 60 return card_desc_; 61} 62 63const base::string16& NewCreditCardBubbleController::LinkText() const { 64 return link_text_; 65} 66 67void NewCreditCardBubbleController::OnBubbleDestroyed() { 68 delete this; 69} 70 71void NewCreditCardBubbleController::OnLinkClicked() { 72 Browser* browser = chrome::FindTabbedBrowser(profile_, false, 73 chrome::GetActiveDesktop()); 74 if (browser) 75 chrome::ShowSettingsSubPage(browser, chrome::kAutofillSubPage); 76 77 Hide(); 78} 79 80NewCreditCardBubbleController::NewCreditCardBubbleController(Profile* profile) 81 : profile_(profile), 82 title_text_(l10n_util::GetStringUTF16( 83 IDS_AUTOFILL_NEW_CREDIT_CARD_BUBBLE_TITLE)), 84 link_text_(l10n_util::GetStringUTF16( 85 IDS_AUTOFILL_NEW_CREDIT_CARD_BUBBLE_LINK)), 86 weak_ptr_factory_(this) {} 87 88base::WeakPtr<NewCreditCardBubbleView> NewCreditCardBubbleController:: 89 CreateBubble() { 90 return NewCreditCardBubbleView::Create(this); 91} 92 93base::WeakPtr<NewCreditCardBubbleView> NewCreditCardBubbleController:: 94 bubble() { 95 return bubble_; 96} 97 98void NewCreditCardBubbleController::SetupAndShow( 99 scoped_ptr<CreditCard> new_card, 100 scoped_ptr<AutofillProfile> billing_profile) { 101 DCHECK(new_card); 102 DCHECK(billing_profile); 103 104 new_card_ = new_card.Pass(); 105 billing_profile_ = billing_profile.Pass(); 106 107 const base::string16 card_number = 108 new_card_->GetRawInfo(CREDIT_CARD_NUMBER); 109 ui::ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 110 card_desc_.icon = rb.GetImageNamed( 111 CreditCard::IconResourceId(CreditCard::GetCreditCardType(card_number))); 112 card_desc_.name = new_card_->TypeAndLastFourDigits(); 113 114 AutofillProfileWrapper wrapper(billing_profile_.get()); 115 base::string16 unused; 116 wrapper.GetDisplayText(&card_desc_.description, &unused); 117 118 bubble_ = CreateBubble(); 119 if (!bubble_) { 120 // TODO(dbeam): Make a bubble on all applicable platforms. 121 delete this; 122 return; 123 } 124 125 bubble_->Show(); 126} 127 128void NewCreditCardBubbleController::Hide() { 129 if (bubble_) 130 bubble_->Hide(); 131} 132 133} // namespace autofill 134