Skip to content

Commit

Permalink
[M2] VCN enrollment UI bubble shown and closure metrics
Browse files Browse the repository at this point in the history
go/vcn-m2-chrome-metrics

(cherry picked from commit 3608550)

Bug: 1306290
Change-Id: I26d1f51b3c564df0103dbac727979ae73c417044
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3457493
Reviewed-by: Jared Saul <jsaul@google.com>
Reviewed-by: Siyu An <siyua@chromium.org>
Reviewed-by: Mohamed Amir Yosef <mamir@chromium.org>
Commit-Queue: Alexander Tekle <alexandertekle@google.com>
Cr-Original-Commit-Position: refs/heads/main@{#979942}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3530693
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Cr-Commit-Position: refs/branch-heads/4896@{#622}
Cr-Branched-From: 1f63ff4-refs/heads/main@{#972766}
  • Loading branch information
Alexander Tekle authored and Chromium LUCI CQ committed Mar 17, 2022
1 parent 43f2ead commit 26bc026
Show file tree
Hide file tree
Showing 17 changed files with 641 additions and 47 deletions.
2 changes: 1 addition & 1 deletion chrome/browser/ui/autofill/chrome_autofill_client.cc
Expand Up @@ -379,7 +379,7 @@ ChromeAutofillClient::GetVirtualCardEnrollmentManager() {
}

void ChromeAutofillClient::ShowVirtualCardEnrollDialog(
const raw_ptr<VirtualCardEnrollmentFields> virtual_card_enrollment_fields,
const VirtualCardEnrollmentFields& virtual_card_enrollment_fields,
base::OnceClosure accept_virtual_card_callback,
base::OnceClosure decline_virtual_card_callback) {
VirtualCardEnrollBubbleControllerImpl::CreateForWebContents(web_contents());
Expand Down
2 changes: 1 addition & 1 deletion chrome/browser/ui/autofill/chrome_autofill_client.h
Expand Up @@ -101,7 +101,7 @@ class ChromeAutofillClient
raw_ptr<VirtualCardEnrollmentManager> GetVirtualCardEnrollmentManager()
override;
void ShowVirtualCardEnrollDialog(
const raw_ptr<VirtualCardEnrollmentFields> virtual_card_enrollment_fields,
const VirtualCardEnrollmentFields& virtual_card_enrollment_fields,
base::OnceClosure accept_virtual_card_callback,
base::OnceClosure decline_virtual_card_callback) override;
#if !BUILDFLAG(IS_ANDROID)
Expand Down
Expand Up @@ -33,13 +33,25 @@ VirtualCardEnrollBubbleControllerImpl::VirtualCardEnrollBubbleControllerImpl(
VirtualCardEnrollBubbleControllerImpl::
~VirtualCardEnrollBubbleControllerImpl() = default;

// static
VirtualCardEnrollBubbleController*
VirtualCardEnrollBubbleController::GetOrCreate(
content::WebContents* web_contents) {
if (!web_contents)
return nullptr;

VirtualCardEnrollBubbleControllerImpl::CreateForWebContents(web_contents);
return VirtualCardEnrollBubbleControllerImpl::FromWebContents(web_contents);
}

void VirtualCardEnrollBubbleControllerImpl::ShowBubble(
const VirtualCardEnrollmentFields* virtual_card_enrollment_fields,
const VirtualCardEnrollmentFields& virtual_card_enrollment_fields,
base::OnceClosure accept_virtual_card_callback,
base::OnceClosure decline_virtual_card_callback) {
virtual_card_enrollment_fields_ = virtual_card_enrollment_fields;
accept_virtual_card_callback_ = std::move(accept_virtual_card_callback);
decline_virtual_card_callback_ = std::move(decline_virtual_card_callback);

is_user_gesture_ = false;
Show();
}
Expand Down Expand Up @@ -75,7 +87,7 @@ std::u16string VirtualCardEnrollBubbleControllerImpl::GetAcceptButtonText()
std::u16string VirtualCardEnrollBubbleControllerImpl::GetDeclineButtonText()
const {
return l10n_util::GetStringUTF16(
virtual_card_enrollment_fields_->virtual_card_enrollment_source ==
virtual_card_enrollment_fields_.virtual_card_enrollment_source ==
VirtualCardEnrollmentSource::kSettingsPage
? IDS_CANCEL
: IDS_AUTOFILL_VIRTUAL_CARD_ENROLLMENT_DECLINE_BUTTON_LABEL);
Expand All @@ -87,9 +99,9 @@ std::u16string VirtualCardEnrollBubbleControllerImpl::GetLearnMoreLinkText()
IDS_AUTOFILL_VIRTUAL_CARD_ENROLLMENT_LEARN_MORE_LINK_LABEL);
}

const VirtualCardEnrollmentFields*
const VirtualCardEnrollmentFields
VirtualCardEnrollBubbleControllerImpl::GetVirtualCardEnrollmentFields() const {
return virtual_card_enrollment_fields_.get();
return virtual_card_enrollment_fields_;
}

AutofillBubbleBase*
Expand Down Expand Up @@ -125,6 +137,33 @@ void VirtualCardEnrollBubbleControllerImpl::OnBubbleClosed(
PaymentsBubbleClosedReason closed_reason) {
set_bubble_view(nullptr);
UpdatePageActionIcon();

VirtualCardEnrollmentBubbleResult result;
switch (closed_reason) {
case PaymentsBubbleClosedReason::kAccepted:
result = VirtualCardEnrollmentBubbleResult::
VIRTUAL_CARD_ENROLLMENT_BUBBLE_ACCEPTED;
break;
case PaymentsBubbleClosedReason::kClosed:
result = VirtualCardEnrollmentBubbleResult::
VIRTUAL_CARD_ENROLLMENT_BUBBLE_CLOSED;
break;
case PaymentsBubbleClosedReason::kNotInteracted:
result = VirtualCardEnrollmentBubbleResult::
VIRTUAL_CARD_ENROLLMENT_BUBBLE_NOT_INTERACTED;
break;
case PaymentsBubbleClosedReason::kLostFocus:
result = VirtualCardEnrollmentBubbleResult::
VIRTUAL_CARD_ENROLLMENT_BUBBLE_LOST_FOCUS;
break;
default:
NOTREACHED();
result = VirtualCardEnrollmentBubbleResult::
VIRTUAL_CARD_ENROLLMENT_BUBBLE_RESULT_UNKNOWN;
}

LogVirtualCardEnrollmentBubbleResultMetric(
result, GetVirtualCardEnrollmentBubbleSource(), is_user_gesture_);
}

bool VirtualCardEnrollBubbleControllerImpl::IsIconVisible() const {
Expand Down Expand Up @@ -188,6 +227,31 @@ void VirtualCardEnrollBubbleControllerImpl::DoShowBubble() {
bubble_state_ = BubbleState::kShowingIcon;

#endif // BUILDFLAG(IS_ANDROID)

LogVirtualCardEnrollmentBubbleShownMetric(
GetVirtualCardEnrollmentBubbleSource(), is_user_gesture_);

if (bubble_shown_closure_for_testing_)
bubble_shown_closure_for_testing_.Run();
}

VirtualCardEnrollmentBubbleSource
VirtualCardEnrollBubbleControllerImpl::GetVirtualCardEnrollmentBubbleSource() {
switch (virtual_card_enrollment_fields_.virtual_card_enrollment_source) {
case VirtualCardEnrollmentSource::kUpstream:
return VirtualCardEnrollmentBubbleSource::
VIRTUAL_CARD_ENROLLMENT_UPSTREAM_SOURCE;
case VirtualCardEnrollmentSource::kDownstream:
return VirtualCardEnrollmentBubbleSource::
VIRTUAL_CARD_ENROLLMENT_DOWNSTREAM_SOURCE;
case VirtualCardEnrollmentSource::kSettingsPage:
return VirtualCardEnrollmentBubbleSource::
VIRTUAL_CARD_ENROLLMENT_SETTINGS_PAGE_SOURCE;
default:
NOTREACHED();
return VirtualCardEnrollmentBubbleSource::
VIRTUAL_CARD_ENROLLMENT_UNKNOWN_SOURCE;
}
}

#if !BUILDFLAG(IS_ANDROID)
Expand Down
Expand Up @@ -3,6 +3,7 @@
// found in the LICENSE file.

#include "chrome/browser/ui/autofill/autofill_bubble_controller_base.h"
#include "components/autofill/core/browser/metrics/payments/virtual_card_enrollment_metrics.h"
#include "components/autofill/core/browser/payments/legal_message_line.h"
#include "components/autofill/core/browser/payments/virtual_card_enrollment_manager.h"
#include "components/autofill/core/browser/ui/payments/virtual_card_enroll_bubble_controller.h"
Expand Down Expand Up @@ -30,7 +31,7 @@ class VirtualCardEnrollBubbleControllerImpl
// icon. Sets virtual card enrollment fields as well as the closure for the
// accept and decline bubble events.
void ShowBubble(
const VirtualCardEnrollmentFields* virtual_card_enrollment_fields,
const VirtualCardEnrollmentFields& virtual_card_enrollment_fields,
base::OnceClosure accept_virtual_card_callback,
base::OnceClosure decline_virtual_card_callback);

Expand All @@ -43,7 +44,7 @@ class VirtualCardEnrollBubbleControllerImpl
std::u16string GetAcceptButtonText() const override;
std::u16string GetDeclineButtonText() const override;
std::u16string GetLearnMoreLinkText() const override;
const VirtualCardEnrollmentFields* GetVirtualCardEnrollmentFields()
const VirtualCardEnrollmentFields GetVirtualCardEnrollmentFields()
const override;
AutofillBubbleBase* GetVirtualCardEnrollBubbleView() const override;

Expand All @@ -53,6 +54,13 @@ class VirtualCardEnrollBubbleControllerImpl
void OnBubbleClosed(PaymentsBubbleClosedReason closed_reason) override;
bool IsIconVisible() const override;

#if defined(UNIT_TEST)
void SetBubbleShownClosureForTesting(
base::RepeatingClosure bubble_shown_closure_for_testing) {
bubble_shown_closure_for_testing_ = bubble_shown_closure_for_testing;
}
#endif

protected:
explicit VirtualCardEnrollBubbleControllerImpl(
content::WebContents* web_contents);
Expand All @@ -63,9 +71,15 @@ class VirtualCardEnrollBubbleControllerImpl
void DoShowBubble() override;

private:
// Gets the correct virtual card enrollment source metric to log.
VirtualCardEnrollmentBubbleSource GetVirtualCardEnrollmentBubbleSource();

friend class content::WebContentsUserData<
VirtualCardEnrollBubbleControllerImpl>;

// Contains more details regarding the sort of bubble to show the users.
VirtualCardEnrollmentFields virtual_card_enrollment_fields_;

#if !BUILDFLAG(IS_ANDROID)
// Returns whether the web content associated with this controller is active.
virtual bool IsWebContentsActive();
Expand All @@ -74,9 +88,6 @@ class VirtualCardEnrollBubbleControllerImpl
BubbleState bubble_state_ = BubbleState::kHidden;
#endif // !BUILDFLAG(IS_ANDROID)

// Contains more details regarding the sort of bubble to show the users.
raw_ptr<const VirtualCardEnrollmentFields> virtual_card_enrollment_fields_;

// Denotes whether the bubble is shown due to user gesture. If this is true,
// it means the bubble is a reshown bubble.
bool is_user_gesture_ = false;
Expand All @@ -87,6 +98,10 @@ class VirtualCardEnrollBubbleControllerImpl
// Closure invoked when the user rejects enrolling in a virtual card.
base::OnceClosure decline_virtual_card_callback_;

// Closure used for testing purposes that notifies that the enrollment bubble
// has been shown.
base::RepeatingClosure bubble_shown_closure_for_testing_;

WEB_CONTENTS_USER_DATA_KEY_DECL();
};

Expand Down
Expand Up @@ -53,6 +53,8 @@ VirtualCardEnrollBubbleViews::VirtualCardEnrollBubbleViews(
legal_message_view->SetID(DialogViewId::FOOTNOTE_VIEW);
}

VirtualCardEnrollBubbleViews::~VirtualCardEnrollBubbleViews() = default;

void VirtualCardEnrollBubbleViews::Show(DisplayReason reason) {
ShowForReason(reason);
}
Expand Down Expand Up @@ -113,8 +115,6 @@ void VirtualCardEnrollBubbleViews::OnWidgetClosing(views::Widget* widget) {
widget->closed_reason());
}

VirtualCardEnrollBubbleViews::~VirtualCardEnrollBubbleViews() = default;

void VirtualCardEnrollBubbleViews::Init() {
ChromeLayoutProvider* const provider = ChromeLayoutProvider::Get();
SetLayoutManager(std::make_unique<views::BoxLayout>(
Expand Down Expand Up @@ -153,10 +153,10 @@ void VirtualCardEnrollBubbleViews::Init() {
description_view->SetMainAxisAlignment(
views::BoxLayout::MainAxisAlignment::kStart);

const VirtualCardEnrollmentFields* virtual_card_enrollment_fields =
const VirtualCardEnrollmentFields virtual_card_enrollment_fields =
controller_->GetVirtualCardEnrollmentFields();
const CreditCard& card = virtual_card_enrollment_fields->credit_card;
gfx::Image* card_image = virtual_card_enrollment_fields->card_art_image.get();
CreditCard card = virtual_card_enrollment_fields.credit_card;
gfx::Image* card_image = virtual_card_enrollment_fields.card_art_image.get();

auto* const card_network_icon =
description_view->AddChildView(std::make_unique<views::ImageView>());
Expand Down Expand Up @@ -201,9 +201,9 @@ VirtualCardEnrollBubbleViews::CreateLegalMessageView() {
DISTANCE_RELATED_CONTROL_VERTICAL_SMALL));

const LegalMessageLines google_legal_message =
controller_->GetVirtualCardEnrollmentFields()->google_legal_message;
controller_->GetVirtualCardEnrollmentFields().google_legal_message;
const LegalMessageLines issuser_legal_message =
controller_->GetVirtualCardEnrollmentFields()->issuer_legal_message;
controller_->GetVirtualCardEnrollmentFields().issuer_legal_message;

DCHECK(!google_legal_message.empty());
legal_message_view->AddChildView(std::make_unique<LegalMessageView>(
Expand Down
Expand Up @@ -30,7 +30,7 @@ class VirtualCardEnrollBubbleViews : public AutofillBubbleBase,
VirtualCardEnrollBubbleViews(views::View* anchor_view,
content::WebContents* web_contents,
VirtualCardEnrollBubbleController* controller);

~VirtualCardEnrollBubbleViews() override;
VirtualCardEnrollBubbleViews(const VirtualCardEnrollBubbleViews&) = delete;
VirtualCardEnrollBubbleViews& operator=(const VirtualCardEnrollBubbleViews&) =
delete;
Expand All @@ -55,8 +55,6 @@ class VirtualCardEnrollBubbleViews : public AutofillBubbleBase,
void OnDialogAccepted();
void OnDialogDeclined();

~VirtualCardEnrollBubbleViews() override;

private:
std::unique_ptr<views::View> CreateLegalMessageView();

Expand Down

0 comments on commit 26bc026

Please sign in to comment.