1 // Copyright (c) 2012 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/autofill/autofill_cc_infobar_delegate.h" 6 7 #include "base/logging.h" 8 #include "chrome/browser/infobars/infobar_service.h" 9 #include "components/autofill/core/browser/credit_card.h" 10 #include "components/autofill/core/browser/personal_data_manager.h" 11 #include "components/autofill/core/common/autofill_constants.h" 12 #include "components/infobars/core/infobar.h" 13 #include "content/public/browser/page_navigator.h" 14 #include "content/public/browser/web_contents.h" 15 #include "content/public/browser/web_contents_delegate.h" 16 #include "grit/generated_resources.h" 17 #include "grit/google_chrome_strings.h" 18 #include "grit/theme_resources.h" 19 #include "ui/base/l10n/l10n_util.h" 20 21 namespace autofill { 22 23 // static 24 void AutofillCCInfoBarDelegate::Create( 25 InfoBarService* infobar_service, 26 const AutofillMetrics* metric_logger, 27 const base::Closure& save_card_callback) { 28 infobar_service->AddInfoBar(ConfirmInfoBarDelegate::CreateInfoBar( 29 scoped_ptr<ConfirmInfoBarDelegate>(new AutofillCCInfoBarDelegate( 30 metric_logger, save_card_callback)))); 31 } 32 33 AutofillCCInfoBarDelegate::AutofillCCInfoBarDelegate( 34 const AutofillMetrics* metric_logger, 35 const base::Closure& save_card_callback) 36 : ConfirmInfoBarDelegate(), 37 metric_logger_(metric_logger), 38 save_card_callback_(save_card_callback), 39 had_user_interaction_(false) { 40 metric_logger->LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_SHOWN); 41 } 42 43 AutofillCCInfoBarDelegate::~AutofillCCInfoBarDelegate() { 44 if (!had_user_interaction_) 45 LogUserAction(AutofillMetrics::INFOBAR_IGNORED); 46 } 47 48 void AutofillCCInfoBarDelegate::LogUserAction( 49 AutofillMetrics::InfoBarMetric user_action) { 50 DCHECK(!had_user_interaction_); 51 52 metric_logger_->LogCreditCardInfoBarMetric(user_action); 53 had_user_interaction_ = true; 54 } 55 56 void AutofillCCInfoBarDelegate::InfoBarDismissed() { 57 LogUserAction(AutofillMetrics::INFOBAR_DENIED); 58 } 59 60 int AutofillCCInfoBarDelegate::GetIconID() const { 61 return IDR_INFOBAR_AUTOFILL_CC; 62 } 63 64 infobars::InfoBarDelegate::Type AutofillCCInfoBarDelegate::GetInfoBarType() 65 const { 66 return PAGE_ACTION_TYPE; 67 } 68 69 bool AutofillCCInfoBarDelegate::ShouldExpireInternal( 70 const NavigationDetails& details) const { 71 // The user has submitted a form, causing the page to navigate elsewhere. We 72 // don't want the infobar to be expired at this point, because the user won't 73 // get a chance to answer the question. 74 return false; 75 } 76 77 base::string16 AutofillCCInfoBarDelegate::GetMessageText() const { 78 return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_INFOBAR_TEXT); 79 } 80 81 base::string16 AutofillCCInfoBarDelegate::GetButtonLabel( 82 InfoBarButton button) const { 83 return l10n_util::GetStringUTF16((button == BUTTON_OK) ? 84 IDS_AUTOFILL_CC_INFOBAR_ACCEPT : IDS_AUTOFILL_CC_INFOBAR_DENY); 85 } 86 87 bool AutofillCCInfoBarDelegate::Accept() { 88 save_card_callback_.Run(); 89 save_card_callback_.Reset(); 90 LogUserAction(AutofillMetrics::INFOBAR_ACCEPTED); 91 return true; 92 } 93 94 bool AutofillCCInfoBarDelegate::Cancel() { 95 LogUserAction(AutofillMetrics::INFOBAR_DENIED); 96 return true; 97 } 98 99 base::string16 AutofillCCInfoBarDelegate::GetLinkText() const { 100 return l10n_util::GetStringUTF16(IDS_LEARN_MORE); 101 } 102 103 bool AutofillCCInfoBarDelegate::LinkClicked(WindowOpenDisposition disposition) { 104 InfoBarService::WebContentsFromInfoBar(infobar())->OpenURL( 105 content::OpenURLParams( 106 GURL(autofill::kHelpURL), content::Referrer(), 107 (disposition == CURRENT_TAB) ? NEW_FOREGROUND_TAB : disposition, 108 content::PAGE_TRANSITION_LINK, false)); 109 return false; 110 } 111 112 } // namespace autofill 113