Home | History | Annotate | Download | only in autofill
      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