File: save_payment_icon_view.cc

package info (click to toggle)
chromium 138.0.7204.183-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 6,080,960 kB
  • sloc: cpp: 34,937,079; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,954; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,811; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (144 lines) | stat: -rw-r--r-- 5,380 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/ui/views/autofill/payments/save_payment_icon_view.h"

#include "base/notreached.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/app/vector_icons/vector_icons.h"
#include "chrome/browser/promos/promos_types.h"
#include "chrome/browser/ui/actions/chrome_action_id.h"
#include "chrome/browser/ui/autofill/payments/save_payment_icon_controller.h"
#include "chrome/browser/ui/browser_command_controller.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/view_ids.h"
#include "chrome/browser/ui/views/autofill/autofill_location_bar_bubble.h"
#include "chrome/browser/ui/views/autofill/payments/manage_saved_iban_bubble_view.h"
#include "chrome/browser/ui/views/autofill/payments/save_card_bubble_views.h"
#include "chrome/browser/ui/views/autofill/payments/save_iban_bubble_view.h"
#include "chrome/browser/ui/views/autofill/payments/save_payment_method_and_virtual_card_enroll_confirmation_bubble_views.h"
#include "chrome/browser/ui/views/promos/ios_promo_bubble.h"
#include "chrome/grit/generated_resources.h"
#include "components/autofill/core/common/autofill_payments_features.h"
#include "components/strings/grit/components_strings.h"
#include "components/vector_icons/vector_icons.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/metadata/metadata_impl_macros.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/views/accessibility/view_accessibility.h"

namespace autofill {

SavePaymentIconView::SavePaymentIconView(
    CommandUpdater* command_updater,
    IconLabelBubbleView::Delegate* icon_label_bubble_delegate,
    PageActionIconView::Delegate* page_action_icon_delegate,
    int command_id)
    : PageActionIconView(
          command_updater,
          command_id,
          icon_label_bubble_delegate,
          page_action_icon_delegate,
          command_id == IDC_SAVE_CREDIT_CARD_FOR_PAGE ? "SaveCard" : "SaveIban",
          kActionShowPaymentsBubbleOrPage) {
  if (command_id == IDC_SAVE_CREDIT_CARD_FOR_PAGE) {
    SetID(VIEW_ID_SAVE_CREDIT_CARD_BUTTON);
  } else {
    DCHECK(command_id == IDC_SAVE_IBAN_FOR_PAGE);
    SetID(VIEW_ID_SAVE_IBAN_BUTTON);
  }
  command_id_ = command_id;
  SetUpForInOutAnimation();
  GetViewAccessibility().SetName(GetTextForTooltipAndAccessibleName());
  UpdateTooltipText();
}

SavePaymentIconView::~SavePaymentIconView() = default;

views::BubbleDialogDelegate* SavePaymentIconView::GetBubble() const {
  return GetController() ? static_cast<AutofillLocationBarBubble*>(
                               GetController()->GetPaymentBubbleView())
                         : nullptr;
}

void SavePaymentIconView::UpdateImpl() {
  if (!GetWebContents()) {
    return;
  }

  // |controller| may be nullptr due to lazy initialization.
  SavePaymentIconController* controller = GetController();

  bool command_enabled =
      SetCommandEnabled(controller && controller->IsIconVisible());
  bool should_show =
      command_enabled && !delegate()->ShouldHidePageActionIcon(this);

  // Show the icon if the Desktop to iOS payment promo is currently being shown,
  // and check the command_id_ to only show for one of the instances of
  // SavePaymentIconView.
  should_show = should_show ||
                (command_id_ == IDC_SAVE_CREDIT_CARD_FOR_PAGE &&
                 IOSPromoBubble::IsPromoTypeVisible(IOSPromoType::kPayment));

  SetVisible(should_show);

  GetViewAccessibility().SetName(GetTextForTooltipAndAccessibleName());
  UpdateTooltipText();

  if (command_enabled && controller->ShouldShowSavingPaymentAnimation()) {
    SetEnabled(false);
    SetIsLoading(/*is_loading=*/true);
  } else {
    SetIsLoading(/*is_loading=*/false);
    UpdateIconImage();
    SetEnabled(true);
  }

  if (command_enabled && controller->ShouldShowPaymentSavedLabelAnimation()) {
    AnimateIn(controller->GetSaveSuccessAnimationStringId());
  }
}

void SavePaymentIconView::OnExecuting(
    PageActionIconView::ExecuteSource execute_source) {}

const gfx::VectorIcon& SavePaymentIconView::GetVectorIcon() const {
  return kCreditCardChromeRefreshIcon;
}

std::u16string SavePaymentIconView::GetTextForTooltipAndAccessibleName() const {
  std::u16string text;

  SavePaymentIconController* const controller = GetController();
  if (controller) {
    text = controller->GetSavePaymentIconTooltipText();
  }

  // Because the payment icon is in an animated container, it is still briefly
  // visible as it's disappearing. Since our test infrastructure does not allow
  // views to have empty tooltip text when they are visible, we instead return
  // the default text.
  return text.empty() ? l10n_util::GetStringUTF16(IDS_TOOLTIP_SAVE_CREDIT_CARD)
                      : text;
}

SavePaymentIconController* SavePaymentIconView::GetController() const {
  return SavePaymentIconController::Get(GetWebContents(), command_id_);
}

void SavePaymentIconView::AnimationEnded(const gfx::Animation* animation) {
  IconLabelBubbleView::AnimationEnded(animation);

  // |controller| may be nullptr due to lazy initialization.
  SavePaymentIconController* controller = GetController();
  if (controller) {
    controller->OnAnimationEnded();
  }
}

BEGIN_METADATA(SavePaymentIconView)
END_METADATA

}  // namespace autofill