Index: chrome/browser/ui/views/payments/payment_request_can_make_payment_metrics_browsertest.cc |
diff --git a/chrome/browser/ui/views/payments/payment_request_can_make_payment_metrics_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_can_make_payment_metrics_browsertest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5af3728e3ab641760d1b9343c7636c16dc5eeb02 |
--- /dev/null |
+++ b/chrome/browser/ui/views/payments/payment_request_can_make_payment_metrics_browsertest.cc |
@@ -0,0 +1,362 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include <vector> |
+ |
+#include "base/macros.h" |
+#include "base/strings/utf_string_conversions.h" |
+#include "base/test/histogram_tester.h" |
+#include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h" |
+#include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h" |
+#include "components/autofill/core/browser/autofill_profile.h" |
+#include "components/autofill/core/browser/autofill_test_utils.h" |
+#include "components/autofill/core/browser/credit_card.h" |
+#include "components/payments/core/journey_logger.h" |
+#include "content/public/test/browser_test_utils.h" |
+ |
+namespace payments { |
+ |
+class PaymentRequestCanMakePaymentMetricsTest |
+ : public PaymentRequestBrowserTestBase { |
+ protected: |
+ PaymentRequestCanMakePaymentMetricsTest() |
+ : PaymentRequestBrowserTestBase( |
+ "/payment_request_can_make_payment_metrics_test.html") {} |
+ |
+ void SetupInitialAddressAndCreditCard() { |
+ autofill::AutofillProfile billing_address = |
+ autofill::test::GetFullProfile(); |
+ AddAutofillProfile(billing_address); |
+ autofill::CreditCard card = autofill::test::GetCreditCard(); |
+ card.set_billing_address_id(billing_address.guid()); |
+ AddCreditCard(card); |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(PaymentRequestCanMakePaymentMetricsTest); |
+}; |
+ |
+IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest, |
+ Called_True_Shown_Completed) { |
+ base::HistogramTester histogram_tester; |
+ |
+ // Setup a credit card with an associated billing address so CanMakePayment |
+ // returns true. |
+ SetupInitialAddressAndCreditCard(); |
+ |
+ // Start the Payment Request and expect CanMakePayment to be called before the |
+ // Payment Request is shown. |
+ ResetEventObserverForSequence( |
+ {DialogEvent::CAN_MAKE_PAYMENT_CALLED, DialogEvent::DIALOG_OPENED}); |
+ ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "queryShow();")); |
+ WaitForObservedEvent(); |
+ |
+ // Complete the Payment Request. |
+ PayWithCreditCardAndWait(base::ASCIIToUTF16("123")); |
+ |
+ // Make sure the metrics are logged correctly. |
+ histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage", |
+ JourneyLogger::CAN_MAKE_PAYMENT_USED, 1); |
+ histogram_tester.ExpectBucketCount( |
+ "PaymentRequest.CanMakePayment.Used.EffectOnShow", |
+ JourneyLogger::CMP_SHOW_DID_SHOW | |
+ JourneyLogger::CMP_SHOW_COULD_MAKE_PAYMENT, |
+ 1); |
+ histogram_tester.ExpectBucketCount( |
+ "PaymentRequest.CanMakePayment.Used.TrueWithShowEffectOnCompletion", |
+ JourneyLogger::COMPLETION_STATUS_COMPLETED, 1); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest, |
+ Called_True_Shown_OtherAborted) { |
+ base::HistogramTester histogram_tester; |
+ |
+ // Setup a credit card with an associated billing address so CanMakePayment |
+ // returns true. |
+ SetupInitialAddressAndCreditCard(); |
+ |
+ // Start the Payment Request and expect CanMakePayment to be called before the |
+ // Payment Request is shown. |
+ ResetEventObserverForSequence( |
+ {DialogEvent::CAN_MAKE_PAYMENT_CALLED, DialogEvent::DIALOG_OPENED}); |
+ ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "queryShow();")); |
+ WaitForObservedEvent(); |
+ |
+ // Simulate that an unexpected error occurs. |
+ ResetEventObserver(DialogEvent::DIALOG_CLOSED); |
+ content::WebContents* web_contents = GetActiveWebContents(); |
+ const std::string click_buy_button_js = |
+ "(function() { document.getElementById('abort').click(); })();"; |
+ ASSERT_TRUE(content::ExecuteScript(web_contents, click_buy_button_js)); |
Mathieu
2017/05/02 20:56:47
can inline GetActiveWebContents()
sebsg
2017/05/02 22:15:08
Done.
|
+ WaitForObservedEvent(); |
+ |
+ // Make sure the metrics are logged correctly. |
+ histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage", |
+ JourneyLogger::CAN_MAKE_PAYMENT_USED, 1); |
+ histogram_tester.ExpectBucketCount( |
+ "PaymentRequest.CanMakePayment.Used.EffectOnShow", |
+ JourneyLogger::CMP_SHOW_DID_SHOW | |
+ JourneyLogger::CMP_SHOW_COULD_MAKE_PAYMENT, |
+ 1); |
+ histogram_tester.ExpectBucketCount( |
+ "PaymentRequest.CanMakePayment.Used.TrueWithShowEffectOnCompletion", |
+ JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED, 1); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest, |
+ Called_True_Shown_UserAborted) { |
+ base::HistogramTester histogram_tester; |
+ |
+ // Setup a credit card with an associated billing address so CanMakePayment |
+ // returns true. |
+ SetupInitialAddressAndCreditCard(); |
+ |
+ // Start the Payment Request and expect CanMakePayment to be called before the |
+ // Payment Request is shown. |
+ ResetEventObserverForSequence( |
+ {DialogEvent::CAN_MAKE_PAYMENT_CALLED, DialogEvent::DIALOG_OPENED}); |
+ ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "queryShow();")); |
+ WaitForObservedEvent(); |
+ |
+ // Simulate that the user cancels the Payment Request. |
+ ClickOnCancel(); |
+ |
+ // Make sure the metrics are logged correctly. |
+ histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage", |
+ JourneyLogger::CAN_MAKE_PAYMENT_USED, 1); |
+ histogram_tester.ExpectBucketCount( |
+ "PaymentRequest.CanMakePayment.Used.EffectOnShow", |
+ JourneyLogger::CMP_SHOW_DID_SHOW | |
+ JourneyLogger::CMP_SHOW_COULD_MAKE_PAYMENT, |
+ 1); |
+ histogram_tester.ExpectBucketCount( |
+ "PaymentRequest.CanMakePayment.Used.TrueWithShowEffectOnCompletion", |
+ JourneyLogger::COMPLETION_STATUS_USER_ABORTED, 1); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest, |
+ Called_False_Shown_Completed) { |
+ base::HistogramTester histogram_tester; |
+ |
+ // Don't add a card on file, so CanMakePayment returns false. |
+ // Start the Payment Request and expect CanMakePayment to be called before the |
+ // Payment Request is shown. |
+ ResetEventObserverForSequence( |
+ {DialogEvent::CAN_MAKE_PAYMENT_CALLED, DialogEvent::DIALOG_OPENED}); |
+ ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "queryShow();")); |
+ WaitForObservedEvent(); |
+ |
+ // Add a test credit card. |
+ OpenPaymentMethodScreen(); |
Mathieu
2017/05/02 20:56:47
this is removed in a change currently in review fr
sebsg
2017/05/02 22:15:08
Thanks for the heads up!
|
+ OpenCreditCardEditorScreen(); |
+ SetEditorTextfieldValue(base::UTF8ToUTF16("Bob Simpson"), |
+ autofill::CREDIT_CARD_NAME_FULL); |
+ SetEditorTextfieldValue(base::UTF8ToUTF16("4111111111111111"), |
+ autofill::CREDIT_CARD_NUMBER); |
+ SetComboboxValue(base::UTF8ToUTF16("05"), autofill::CREDIT_CARD_EXP_MONTH); |
+ SetComboboxValue(base::UTF8ToUTF16("2026"), |
+ autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR); |
+ ResetEventObserver(DialogEvent::BACK_TO_PAYMENT_SHEET_NAVIGATION); |
+ ClickOnDialogViewAndWait(DialogViewID::EDITOR_SAVE_BUTTON); |
+ |
+ // Complete the Payment Request. |
+ PayWithCreditCardAndWait(base::ASCIIToUTF16("123")); |
+ |
+ // Make sure the metrics are logged correctly. |
+ histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage", |
+ JourneyLogger::CAN_MAKE_PAYMENT_USED, 1); |
+ histogram_tester.ExpectBucketCount( |
+ "PaymentRequest.CanMakePayment.Used.EffectOnShow", |
+ JourneyLogger::CMP_SHOW_DID_SHOW, 1); |
+ histogram_tester.ExpectBucketCount( |
+ "PaymentRequest.CanMakePayment.Used.FalseWithShowEffectOnCompletion", |
+ JourneyLogger::COMPLETION_STATUS_COMPLETED, 1); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest, |
+ Called_False_Shown_OtherAborted) { |
+ base::HistogramTester histogram_tester; |
+ |
+ // Don't add a card on file, so CanMakePayment returns false. |
+ // Start the Payment Request and expect CanMakePayment to be called before the |
+ // Payment Request is shown. |
+ ResetEventObserverForSequence( |
+ {DialogEvent::CAN_MAKE_PAYMENT_CALLED, DialogEvent::DIALOG_OPENED}); |
+ ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "queryShow();")); |
+ WaitForObservedEvent(); |
+ |
+ // Simulate that an unexpected error occurs. |
+ ResetEventObserver(DialogEvent::DIALOG_CLOSED); |
+ content::WebContents* web_contents = GetActiveWebContents(); |
+ const std::string click_buy_button_js = |
+ "(function() { document.getElementById('abort').click(); })();"; |
+ ASSERT_TRUE(content::ExecuteScript(web_contents, click_buy_button_js)); |
Mathieu
2017/05/02 20:56:47
GetActiveWebContents()
sebsg
2017/05/02 22:15:08
Done.
|
+ WaitForObservedEvent(); |
+ |
+ // Make sure the metrics are logged correctly. |
+ histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage", |
+ JourneyLogger::CAN_MAKE_PAYMENT_USED, 1); |
+ histogram_tester.ExpectBucketCount( |
+ "PaymentRequest.CanMakePayment.Used.EffectOnShow", |
+ JourneyLogger::CMP_SHOW_DID_SHOW, 1); |
+ histogram_tester.ExpectBucketCount( |
+ "PaymentRequest.CanMakePayment.Used.FalseWithShowEffectOnCompletion", |
+ JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED, 1); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest, |
+ Called_False_Shown_UserAborted) { |
Mathieu
2017/05/02 20:56:47
can you have a case where the user navigates away
sebsg
2017/05/02 22:15:08
Done. I gives and OtherAbort which is probably not
Mathieu
2017/05/03 02:22:49
This is because the renderer closed the connection
sebsg
2017/05/03 17:10:11
Done.
|
+ base::HistogramTester histogram_tester; |
+ |
+ // Don't add a card on file, so CanMakePayment returns false. |
+ // Start the Payment Request and expect CanMakePayment to be called before the |
+ // Payment Request is shown. |
+ ResetEventObserverForSequence( |
+ {DialogEvent::CAN_MAKE_PAYMENT_CALLED, DialogEvent::DIALOG_OPENED}); |
+ ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "queryShow();")); |
+ WaitForObservedEvent(); |
+ |
+ // Simulate that the user cancels the Payment Request. |
+ ClickOnCancel(); |
+ |
+ // Make sure the metrics are logged correctly. |
+ histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage", |
+ JourneyLogger::CAN_MAKE_PAYMENT_USED, 1); |
+ histogram_tester.ExpectBucketCount( |
+ "PaymentRequest.CanMakePayment.Used.EffectOnShow", |
+ JourneyLogger::CMP_SHOW_DID_SHOW, 1); |
+ histogram_tester.ExpectBucketCount( |
+ "PaymentRequest.CanMakePayment.Used.FalseWithShowEffectOnCompletion", |
+ JourneyLogger::COMPLETION_STATUS_USER_ABORTED, 1); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest, |
+ Called_True_NotShown) { |
+ base::HistogramTester histogram_tester; |
+ |
+ // Setup a credit card with an associated billing address so CanMakePayment |
+ // returns true. |
+ SetupInitialAddressAndCreditCard(); |
+ |
+ // Try to start the Payment Request, but only CanMakePayment should be called. |
+ ResetEventObserver(DialogEvent::CAN_MAKE_PAYMENT_CALLED); |
+ ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "queryNoShow();")); |
+ WaitForObservedEvent(); |
+ |
+ // Navigate away to trigger the log. |
+ NavigateTo("payment_request_email_test.html"); |
+ |
+ // Make sure the metrics are logged correctly. |
+ histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage", |
+ JourneyLogger::CAN_MAKE_PAYMENT_USED, 1); |
+ histogram_tester.ExpectBucketCount( |
+ "PaymentRequest.CanMakePayment.Used.EffectOnShow", |
+ JourneyLogger::CMP_SHOW_COULD_MAKE_PAYMENT, 1); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest, |
+ Called_False_NotShown) { |
+ base::HistogramTester histogram_tester; |
+ |
+ // Don't add a card on file, so CanMakePayment returns false. |
+ // Try to start the Payment Request, but only CanMakePayment should be called. |
+ ResetEventObserver(DialogEvent::CAN_MAKE_PAYMENT_CALLED); |
+ ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "queryNoShow();")); |
+ WaitForObservedEvent(); |
+ |
+ // Navigate away to trigger the log. |
+ NavigateTo("payment_request_email_test.html"); |
+ |
+ // Make sure the metrics are logged correctly. |
+ histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage", |
+ JourneyLogger::CAN_MAKE_PAYMENT_USED, 1); |
+ histogram_tester.ExpectBucketCount( |
+ "PaymentRequest.CanMakePayment.Used.EffectOnShow", |
+ JourneyLogger::CMP_SHOW_COULD_NOT_MAKE_PAYMENT_AND_DID_NOT_SHOW, 1); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest, |
+ NotCalled_Shown_Completed) { |
+ base::HistogramTester histogram_tester; |
+ |
+ // Setup a credit card with an associated billing address to make it simpler |
+ // to complete the Payment Request. |
+ SetupInitialAddressAndCreditCard(); |
+ |
+ // Start the Payment Request, CanMakePayment should not be called in this |
+ // test. |
+ ResetEventObserver(DialogEvent::DIALOG_OPENED); |
+ ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "noQueryShow();")); |
+ WaitForObservedEvent(); |
+ |
+ // Complete the Payment Request. |
+ PayWithCreditCardAndWait(base::ASCIIToUTF16("123")); |
+ |
+ // Make sure the metrics are logged correctly. |
+ histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage", |
+ JourneyLogger::CAN_MAKE_PAYMENT_NOT_USED, |
+ 1); |
+ histogram_tester.ExpectBucketCount( |
+ "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion", |
+ JourneyLogger::COMPLETION_STATUS_COMPLETED, 1); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest, |
+ NotCalled_Shown_OtherAborted) { |
+ base::HistogramTester histogram_tester; |
+ |
+ // Setup a credit card with an associated billing address to make it simpler |
+ // to complete the Payment Request. |
+ SetupInitialAddressAndCreditCard(); |
+ |
+ // Start the Payment Request, CanMakePayment should not be called in this |
+ // test. |
+ ResetEventObserver(DialogEvent::DIALOG_OPENED); |
+ ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "noQueryShow();")); |
+ WaitForObservedEvent(); |
+ |
+ // Simulate that an unexpected error occurs. |
+ ResetEventObserver(DialogEvent::DIALOG_CLOSED); |
+ content::WebContents* web_contents = GetActiveWebContents(); |
+ const std::string click_buy_button_js = |
+ "(function() { document.getElementById('abort').click(); })();"; |
+ ASSERT_TRUE(content::ExecuteScript(web_contents, click_buy_button_js)); |
+ WaitForObservedEvent(); |
+ |
+ // Make sure the metrics are logged correctly. |
+ histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage", |
+ JourneyLogger::CAN_MAKE_PAYMENT_NOT_USED, |
+ 1); |
+ histogram_tester.ExpectBucketCount( |
+ "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion", |
+ JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED, 1); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest, |
+ NotCalled_Shown_UserAborted) { |
+ base::HistogramTester histogram_tester; |
+ |
+ // Setup a credit card with an associated billing address to make it simpler |
+ // to complete the Payment Request. |
+ SetupInitialAddressAndCreditCard(); |
+ |
+ // Start the Payment Request, CanMakePayment should not be called in this |
+ // test. |
+ ResetEventObserver(DialogEvent::DIALOG_OPENED); |
+ ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "noQueryShow();")); |
+ WaitForObservedEvent(); |
+ |
+ // Simulate that the user cancels the Payment Request. |
+ ClickOnCancel(); |
+ |
+ // Make sure the metrics are logged correctly. |
+ histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage", |
+ JourneyLogger::CAN_MAKE_PAYMENT_NOT_USED, |
+ 1); |
+ histogram_tester.ExpectBucketCount( |
+ "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion", |
+ JourneyLogger::COMPLETION_STATUS_USER_ABORTED, 1); |
+} |
+ |
+} // namespace payments |