new_credit_card_bubble_controller.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// found in the LICENSE file. 4ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 5ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/ui/autofill/new_credit_card_bubble_controller.h" 6ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 7ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include <string> 8ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 9ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/logging.h" 10ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/strings/utf_string_conversions.h" 11ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/browser_process.h" 12ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/profiles/profile.h" 13ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/ui/autofill/data_model_wrapper.h" 14ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/ui/autofill/new_credit_card_bubble_view.h" 15ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/ui/browser_finder.h" 16ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/ui/chrome_pages.h" 17ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/ui/host_desktop.h" 18ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/common/url_constants.h" 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/chromium_strings.h" 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h" 21ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "components/autofill/core/browser/autofill_profile.h" 22ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "components/autofill/core/browser/credit_card.h" 230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "content/public/browser/web_contents.h" 24ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ui/base/l10n/l10n_util.h" 25ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ui/base/resource/resource_bundle.h" 26ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 27ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochnamespace autofill { 28ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 29ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochCreditCardDescription::CreditCardDescription() {} 30ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochCreditCardDescription::~CreditCardDescription() {} 31ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 32ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochNewCreditCardBubbleController::~NewCreditCardBubbleController() { 33ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch Hide(); 34ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 35ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 36ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// static 37ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid NewCreditCardBubbleController::Show( 380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::WebContents* web_contents, 39ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch scoped_ptr<CreditCard> new_card, 40ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch scoped_ptr<AutofillProfile> billing_profile) { 410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) (new NewCreditCardBubbleController(web_contents))->SetupAndShow( 42ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch new_card.Pass(), 43ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch billing_profile.Pass()); 44ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 45ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 46ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochconst base::string16& NewCreditCardBubbleController::TitleText() const { 47ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return title_text_; 48ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 49ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 50ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochconst CreditCardDescription& NewCreditCardBubbleController::CardDescription() 51ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const { 52ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return card_desc_; 53ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 54ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 55ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochconst base::string16& NewCreditCardBubbleController::LinkText() const { 56ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return link_text_; 57ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 58ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 59ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid NewCreditCardBubbleController::OnBubbleDestroyed() { 60ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch delete this; 61ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 62ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 63ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid NewCreditCardBubbleController::OnLinkClicked() { 64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch chrome::ShowSettingsSubPageForProfile(profile_, chrome::kAutofillSubPage); 65ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch Hide(); 66ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 67ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)NewCreditCardBubbleController::NewCreditCardBubbleController( 690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::WebContents* web_contents) 700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) : profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())), 710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) web_contents_(web_contents), 72ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch title_text_(l10n_util::GetStringUTF16( 73ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch IDS_AUTOFILL_NEW_CREDIT_CARD_BUBBLE_TITLE)), 74ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch link_text_(l10n_util::GetStringUTF16( 75ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch IDS_AUTOFILL_NEW_CREDIT_CARD_BUBBLE_LINK)), 76ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch weak_ptr_factory_(this) {} 77ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 78ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbase::WeakPtr<NewCreditCardBubbleView> NewCreditCardBubbleController:: 79ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateBubble() { 80ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return NewCreditCardBubbleView::Create(this); 81ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 82ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 83ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbase::WeakPtr<NewCreditCardBubbleView> NewCreditCardBubbleController:: 84ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bubble() { 85ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return bubble_; 86ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 87ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 88ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid NewCreditCardBubbleController::SetupAndShow( 89ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch scoped_ptr<CreditCard> new_card, 90ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch scoped_ptr<AutofillProfile> billing_profile) { 91ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DCHECK(new_card); 92ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DCHECK(billing_profile); 93ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 94ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch new_card_ = new_card.Pass(); 95ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch billing_profile_ = billing_profile.Pass(); 96ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 97ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const base::string16 card_number = 98ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch new_card_->GetRawInfo(CREDIT_CARD_NUMBER); 99ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui::ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch card_desc_.icon = rb.GetImageNamed( 101ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreditCard::IconResourceId(CreditCard::GetCreditCardType(card_number))); 102ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch card_desc_.name = new_card_->TypeAndLastFourDigits(); 103ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 104d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) AutofillProfileWrapper wrapper(billing_profile_.get()); 105c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch base::string16 unused; 106c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch wrapper.GetDisplayText(&card_desc_.description, &unused); 107ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 108ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bubble_ = CreateBubble(); 109ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (!bubble_) { 110ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // TODO(dbeam): Make a bubble on all applicable platforms. 111ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch delete this; 112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return; 113ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 114ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 115ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bubble_->Show(); 116ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 117ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 118ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid NewCreditCardBubbleController::Hide() { 119ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (bubble_) 120ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bubble_->Hide(); 121ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 122ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 123ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} // namespace autofill 124