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 "content/public/browser/page_navigator.h" 13 #include "content/public/browser/web_contents.h" 14 #include "content/public/browser/web_contents_delegate.h" 15 #include "grit/generated_resources.h" 16 #include "grit/theme_resources.h" 17 #include "ui/base/l10n/l10n_util.h" 18 19 20 namespace autofill { 21 22 // static 23 void AutofillCCInfoBarDelegate::Create( 24 InfoBarService* infobar_service, 25 const AutofillMetrics* metric_logger, 26 const base::Closure& save_card_callback) { 27 infobar_service->AddInfoBar(scoped_ptr<InfoBarDelegate>( 28 new AutofillCCInfoBarDelegate( 29 infobar_service, metric_logger, save_card_callback))); 30 } 31 32 AutofillCCInfoBarDelegate::AutofillCCInfoBarDelegate( 33 InfoBarService* infobar_service, 34 const AutofillMetrics* metric_logger, 35 const base::Closure& save_card_callback) 36 : ConfirmInfoBarDelegate(infobar_service), 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; 62 } 63 64 InfoBarDelegate::Type AutofillCCInfoBarDelegate::GetInfoBarType() const { 65 return PAGE_ACTION_TYPE; 66 } 67 68 bool AutofillCCInfoBarDelegate::ShouldExpireInternal( 69 const content::LoadCommittedDetails& details) const { 70 // The user has submitted a form, causing the page to navigate elsewhere. We 71 // don't want the infobar to be expired at this point, because the user won't 72 // get a chance to answer the question. 73 return false; 74 } 75 76 string16 AutofillCCInfoBarDelegate::GetMessageText() const { 77 return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_INFOBAR_TEXT); 78 } 79 80 string16 AutofillCCInfoBarDelegate::GetButtonLabel(InfoBarButton button) const { 81 return l10n_util::GetStringUTF16((button == BUTTON_OK) ? 82 IDS_AUTOFILL_CC_INFOBAR_ACCEPT : IDS_AUTOFILL_CC_INFOBAR_DENY); 83 } 84 85 bool AutofillCCInfoBarDelegate::Accept() { 86 save_card_callback_.Run(); 87 save_card_callback_.Reset(); 88 LogUserAction(AutofillMetrics::INFOBAR_ACCEPTED); 89 return true; 90 } 91 92 bool AutofillCCInfoBarDelegate::Cancel() { 93 LogUserAction(AutofillMetrics::INFOBAR_DENIED); 94 return true; 95 } 96 97 string16 AutofillCCInfoBarDelegate::GetLinkText() const { 98 return l10n_util::GetStringUTF16(IDS_LEARN_MORE); 99 } 100 101 bool AutofillCCInfoBarDelegate::LinkClicked(WindowOpenDisposition disposition) { 102 web_contents()->OpenURL(content::OpenURLParams( 103 GURL(autofill::kHelpURL), content::Referrer(), 104 (disposition == CURRENT_TAB) ? NEW_FOREGROUND_TAB : disposition, 105 content::PAGE_TRANSITION_LINK, false)); 106 return false; 107 } 108 109 } // namespace autofill 110