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 "content/public/browser/web_contents.h" 22#include "grit/chromium_strings.h" 23#include "grit/generated_resources.h" 24#include "grit/theme_resources.h" 25#include "ui/base/l10n/l10n_util.h" 26#include "ui/base/resource/resource_bundle.h" 27 28namespace autofill { 29 30CreditCardDescription::CreditCardDescription() {} 31CreditCardDescription::~CreditCardDescription() {} 32 33NewCreditCardBubbleController::~NewCreditCardBubbleController() { 34 Hide(); 35} 36 37// static 38void NewCreditCardBubbleController::Show( 39 content::WebContents* web_contents, 40 scoped_ptr<CreditCard> new_card, 41 scoped_ptr<AutofillProfile> billing_profile) { 42 (new NewCreditCardBubbleController(web_contents))->SetupAndShow( 43 new_card.Pass(), 44 billing_profile.Pass()); 45} 46 47const base::string16& NewCreditCardBubbleController::TitleText() const { 48 return title_text_; 49} 50 51const CreditCardDescription& NewCreditCardBubbleController::CardDescription() 52 const { 53 return card_desc_; 54} 55 56const base::string16& NewCreditCardBubbleController::LinkText() const { 57 return link_text_; 58} 59 60void NewCreditCardBubbleController::OnBubbleDestroyed() { 61 delete this; 62} 63 64void NewCreditCardBubbleController::OnLinkClicked() { 65 chrome::ShowSettingsSubPageForProfile(profile_, chrome::kAutofillSubPage); 66 Hide(); 67} 68 69NewCreditCardBubbleController::NewCreditCardBubbleController( 70 content::WebContents* web_contents) 71 : profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())), 72 web_contents_(web_contents), 73 title_text_(l10n_util::GetStringUTF16( 74 IDS_AUTOFILL_NEW_CREDIT_CARD_BUBBLE_TITLE)), 75 link_text_(l10n_util::GetStringUTF16( 76 IDS_AUTOFILL_NEW_CREDIT_CARD_BUBBLE_LINK)), 77 weak_ptr_factory_(this) {} 78 79base::WeakPtr<NewCreditCardBubbleView> NewCreditCardBubbleController:: 80 CreateBubble() { 81 return NewCreditCardBubbleView::Create(this); 82} 83 84base::WeakPtr<NewCreditCardBubbleView> NewCreditCardBubbleController:: 85 bubble() { 86 return bubble_; 87} 88 89void NewCreditCardBubbleController::SetupAndShow( 90 scoped_ptr<CreditCard> new_card, 91 scoped_ptr<AutofillProfile> billing_profile) { 92 DCHECK(new_card); 93 DCHECK(billing_profile); 94 95 new_card_ = new_card.Pass(); 96 billing_profile_ = billing_profile.Pass(); 97 98 const base::string16 card_number = 99 new_card_->GetRawInfo(CREDIT_CARD_NUMBER); 100 ui::ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 101 card_desc_.icon = rb.GetImageNamed( 102 CreditCard::IconResourceId(CreditCard::GetCreditCardType(card_number))); 103 card_desc_.name = new_card_->TypeAndLastFourDigits(); 104 105 AutofillProfileWrapper wrapper(billing_profile_.get()); 106 base::string16 unused; 107 wrapper.GetDisplayText(&card_desc_.description, &unused); 108 109 bubble_ = CreateBubble(); 110 if (!bubble_) { 111 // TODO(dbeam): Make a bubble on all applicable platforms. 112 delete this; 113 return; 114 } 115 116 bubble_->Show(); 117} 118 119void NewCreditCardBubbleController::Hide() { 120 if (bubble_) 121 bubble_->Hide(); 122} 123 124} // namespace autofill 125