1 // Copyright 2017 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 <vector>
6 
7 #include "base/macros.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "base/test/metrics/histogram_tester.h"
10 #include "chrome/browser/ui/browser_commands.h"
11 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
12 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
13 #include "chrome/test/base/ui_test_utils.h"
14 #include "components/autofill/core/browser/autofill_test_utils.h"
15 #include "components/autofill/core/browser/data_model/autofill_profile.h"
16 #include "components/autofill/core/browser/data_model/credit_card.h"
17 #include "components/payments/core/journey_logger.h"
18 #include "content/public/test/browser_test.h"
19 #include "content/public/test/browser_test_utils.h"
20 #include "url/gurl.h"
21 
22 namespace payments {
23 
24 class PaymentRequestCanMakePaymentMetricsTest
25     : public PaymentRequestBrowserTestBase {
26  protected:
27   PaymentRequestCanMakePaymentMetricsTest() = default;
28 
SetupInitialAddressAndCreditCard()29   void SetupInitialAddressAndCreditCard() {
30     autofill::AutofillProfile billing_address =
31         autofill::test::GetFullProfile();
32     AddAutofillProfile(billing_address);
33     autofill::CreditCard card = autofill::test::GetCreditCard();
34     card.set_billing_address_id(billing_address.guid());
35     AddCreditCard(card);
36   }
37 
CheckPaymentSupportAndThenShow()38   void CheckPaymentSupportAndThenShow() {
39     // Start the Payment Request and expect CanMakePayment and
40     // HasEnrolledInstrument to be called before the Payment Request is shown.
41     ResetEventWaiterForSequence({DialogEvent::CAN_MAKE_PAYMENT_CALLED,
42                                  DialogEvent::CAN_MAKE_PAYMENT_RETURNED,
43                                  DialogEvent::HAS_ENROLLED_INSTRUMENT_CALLED,
44                                  DialogEvent::HAS_ENROLLED_INSTRUMENT_RETURNED,
45                                  DialogEvent::PROCESSING_SPINNER_SHOWN,
46                                  DialogEvent::PROCESSING_SPINNER_HIDDEN,
47                                  DialogEvent::DIALOG_OPENED});
48     ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "queryShow();"));
49     WaitForObservedEvent();
50     // Wait for all callbacks to run.
51     base::RunLoop().RunUntilIdle();
52   }
53 
54  private:
55   DISALLOW_COPY_AND_ASSIGN(PaymentRequestCanMakePaymentMetricsTest);
56 };
57 
IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,Called_True_Shown_Completed)58 IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,
59                        Called_True_Shown_Completed) {
60   NavigateTo("/payment_request_can_make_payment_metrics_test.html");
61   base::HistogramTester histogram_tester;
62 
63   // Setup a credit card with an associated billing address so
64   // HasEnrolledInstrument returns true.
65   SetupInitialAddressAndCreditCard();
66 
67   CheckPaymentSupportAndThenShow();
68 
69   // Complete the Payment Request.
70   PayWithCreditCardAndWait(base::ASCIIToUTF16("123"));
71 
72   // Make sure the correct events were logged.
73   std::vector<base::Bucket> buckets =
74       histogram_tester.GetAllSamples("PaymentRequest.Events");
75   ASSERT_EQ(1U, buckets.size());
76   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_SHOWN);
77   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED);
78   EXPECT_TRUE(buckets[0].min &
79               JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS);
80   EXPECT_TRUE(buckets[0].min &
81               JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT);
82   EXPECT_TRUE(buckets[0].min &
83               JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS);
84   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_COMPLETED);
85   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED);
86   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW);
87   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED);
88   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING);
89   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME);
90   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE);
91   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL);
92   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE);
93   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE);
94   EXPECT_TRUE(buckets[0].min &
95               JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_TRUE);
96   EXPECT_FALSE(buckets[0].min &
97                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_FALSE);
98 }
99 
IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,Called_True_Shown_OtherAborted)100 IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,
101                        Called_True_Shown_OtherAborted) {
102   NavigateTo("/payment_request_can_make_payment_metrics_test.html");
103   base::HistogramTester histogram_tester;
104 
105   // Setup a credit card with an associated billing address so
106   // HasEnrolledInstrument returns true.
107   SetupInitialAddressAndCreditCard();
108 
109   CheckPaymentSupportAndThenShow();
110 
111   // Simulate that an unexpected error occurs.
112   ResetEventWaiterForSequence(
113       {DialogEvent::ABORT_CALLED, DialogEvent::DIALOG_CLOSED});
114   const std::string click_buy_button_js =
115       "(function() { document.getElementById('abort').click(); })();";
116   ASSERT_TRUE(
117       content::ExecuteScript(GetActiveWebContents(), click_buy_button_js));
118   WaitForObservedEvent();
119 
120   // Make sure the correct events were logged.
121   std::vector<base::Bucket> buckets =
122       histogram_tester.GetAllSamples("PaymentRequest.Events");
123   ASSERT_EQ(1U, buckets.size());
124   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_SHOWN);
125   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED);
126   EXPECT_FALSE(buckets[0].min &
127                JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS);
128   EXPECT_TRUE(buckets[0].min &
129               JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT);
130   EXPECT_TRUE(buckets[0].min &
131               JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS);
132   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_COMPLETED);
133   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED);
134   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW);
135   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED);
136   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING);
137   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME);
138   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE);
139   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL);
140   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE);
141   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE);
142   EXPECT_TRUE(buckets[0].min &
143               JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_TRUE);
144   EXPECT_FALSE(buckets[0].min &
145                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_FALSE);
146 }
147 
IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,Called_True_Shown_UserAborted)148 IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,
149                        Called_True_Shown_UserAborted) {
150   NavigateTo("/payment_request_can_make_payment_metrics_test.html");
151   base::HistogramTester histogram_tester;
152 
153   // Setup a credit card with an associated billing address so
154   // HasEnrolledInstrument returns true.
155   SetupInitialAddressAndCreditCard();
156 
157   CheckPaymentSupportAndThenShow();
158 
159   // Simulate that the user cancels the Payment Request.
160   ClickOnCancel();
161 
162   // Make sure the correct events were logged.
163   std::vector<base::Bucket> buckets =
164       histogram_tester.GetAllSamples("PaymentRequest.Events");
165   ASSERT_EQ(1U, buckets.size());
166   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_SHOWN);
167   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED);
168   EXPECT_FALSE(buckets[0].min &
169                JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS);
170   EXPECT_TRUE(buckets[0].min &
171               JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT);
172   EXPECT_TRUE(buckets[0].min &
173               JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS);
174   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_COMPLETED);
175   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED);
176   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW);
177   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED);
178   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING);
179   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME);
180   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE);
181   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL);
182   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE);
183   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE);
184   EXPECT_TRUE(buckets[0].min &
185               JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_TRUE);
186   EXPECT_FALSE(buckets[0].min &
187                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_FALSE);
188 }
189 
IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,Called_False_Shown_Completed)190 IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,
191                        Called_False_Shown_Completed) {
192   NavigateTo("/payment_request_can_make_payment_metrics_test.html");
193   base::HistogramTester histogram_tester;
194 
195   // An address is needed so that the UI can choose it as a billing address.
196   autofill::AutofillProfile billing_address = autofill::test::GetFullProfile();
197   AddAutofillProfile(billing_address);
198 
199   // Don't add a card on file, so HasEnrolledInstrument returns false.
200   CheckPaymentSupportAndThenShow();
201 
202   // Add a test credit card.
203   OpenCreditCardEditorScreen();
204   SetEditorTextfieldValue(base::UTF8ToUTF16("Bob Simpson"),
205                           autofill::CREDIT_CARD_NAME_FULL);
206   SetEditorTextfieldValue(base::UTF8ToUTF16("4111111111111111"),
207                           autofill::CREDIT_CARD_NUMBER);
208   SetComboboxValue(base::UTF8ToUTF16("05"), autofill::CREDIT_CARD_EXP_MONTH);
209   SetComboboxValue(base::UTF8ToUTF16("2026"),
210                    autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR);
211   SelectBillingAddress(billing_address.guid());
212   ResetEventWaiter(DialogEvent::BACK_TO_PAYMENT_SHEET_NAVIGATION);
213   ClickOnDialogViewAndWait(DialogViewID::EDITOR_SAVE_BUTTON);
214 
215   // Complete the Payment Request.
216   PayWithCreditCardAndWait(base::ASCIIToUTF16("123"));
217 
218   // Make sure the correct events were logged.
219   std::vector<base::Bucket> buckets =
220       histogram_tester.GetAllSamples("PaymentRequest.Events");
221   ASSERT_EQ(1U, buckets.size());
222   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_SHOWN);
223   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED);
224   EXPECT_TRUE(buckets[0].min &
225               JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS);
226   EXPECT_FALSE(buckets[0].min &
227                JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT);
228   EXPECT_FALSE(buckets[0].min &
229                JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS);
230   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_COMPLETED);
231   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED);
232   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW);
233   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED);
234   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING);
235   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME);
236   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE);
237   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL);
238   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE);
239   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE);
240   EXPECT_FALSE(buckets[0].min &
241                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_TRUE);
242   EXPECT_TRUE(buckets[0].min &
243               JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_FALSE);
244 }
245 
IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,Called_False_Shown_OtherAborted)246 IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,
247                        Called_False_Shown_OtherAborted) {
248   NavigateTo("/payment_request_can_make_payment_metrics_test.html");
249   base::HistogramTester histogram_tester;
250 
251   // Don't add a card on file, so HasEnrolledInstrument returns false.
252   CheckPaymentSupportAndThenShow();
253 
254   // Simulate that an unexpected error occurs.
255   ResetEventWaiterForSequence(
256       {DialogEvent::ABORT_CALLED, DialogEvent::DIALOG_CLOSED});
257   const std::string click_buy_button_js =
258       "(function() { document.getElementById('abort').click(); })();";
259   ASSERT_TRUE(
260       content::ExecuteScript(GetActiveWebContents(), click_buy_button_js));
261   WaitForObservedEvent();
262 
263   // Make sure the correct events were logged.
264   std::vector<base::Bucket> buckets =
265       histogram_tester.GetAllSamples("PaymentRequest.Events");
266   ASSERT_EQ(1U, buckets.size());
267   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_SHOWN);
268   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED);
269   EXPECT_FALSE(buckets[0].min &
270                JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS);
271   EXPECT_FALSE(buckets[0].min &
272                JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT);
273   EXPECT_FALSE(buckets[0].min &
274                JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS);
275   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_COMPLETED);
276   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED);
277   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW);
278   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED);
279   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING);
280   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME);
281   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE);
282   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL);
283   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE);
284   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE);
285   EXPECT_FALSE(buckets[0].min &
286                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_TRUE);
287   EXPECT_TRUE(buckets[0].min &
288               JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_FALSE);
289 }
290 
IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,Called_False_Shown_UserAborted)291 IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,
292                        Called_False_Shown_UserAborted) {
293   NavigateTo("/payment_request_can_make_payment_metrics_test.html");
294   base::HistogramTester histogram_tester;
295 
296   // Don't add a card on file, so HasEnrolledInstrument returns false.
297   CheckPaymentSupportAndThenShow();
298 
299   // Simulate that the user cancels the Payment Request.
300   ClickOnCancel();
301 
302   // Make sure the correct events were logged.
303   std::vector<base::Bucket> buckets =
304       histogram_tester.GetAllSamples("PaymentRequest.Events");
305   ASSERT_EQ(1U, buckets.size());
306   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_SHOWN);
307   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED);
308   EXPECT_FALSE(buckets[0].min &
309                JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS);
310   EXPECT_FALSE(buckets[0].min &
311                JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT);
312   EXPECT_FALSE(buckets[0].min &
313                JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS);
314   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_COMPLETED);
315   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED);
316   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW);
317   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED);
318   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING);
319   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME);
320   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE);
321   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL);
322   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE);
323   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE);
324   EXPECT_FALSE(buckets[0].min &
325                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_TRUE);
326   EXPECT_TRUE(buckets[0].min &
327               JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_FALSE);
328 }
329 
IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,Called_True_NotShown)330 IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,
331                        Called_True_NotShown) {
332   NavigateTo("/payment_request_can_make_payment_metrics_test.html");
333   base::HistogramTester histogram_tester;
334 
335   // Setup a credit card with an associated billing address so
336   // HasEnrolledInstrument returns true.
337   SetupInitialAddressAndCreditCard();
338 
339   // Try to start the Payment Request, but only check payment support without
340   // calling show().
341   ResetEventWaiterForSequence({DialogEvent::CAN_MAKE_PAYMENT_CALLED,
342                                DialogEvent::CAN_MAKE_PAYMENT_RETURNED,
343                                DialogEvent::HAS_ENROLLED_INSTRUMENT_CALLED,
344                                DialogEvent::HAS_ENROLLED_INSTRUMENT_RETURNED});
345   ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "queryNoShow();"));
346   WaitForObservedEvent();
347 
348   // Navigate away to trigger the log.
349   NavigateTo("/payment_request_email_test.html");
350 
351   // Make sure the correct events were logged.
352   std::vector<base::Bucket> buckets =
353       histogram_tester.GetAllSamples("PaymentRequest.Events");
354   ASSERT_EQ(1U, buckets.size());
355   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_SHOWN);
356   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED);
357   EXPECT_FALSE(buckets[0].min &
358                JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS);
359   EXPECT_TRUE(buckets[0].min &
360               JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT);
361   EXPECT_TRUE(buckets[0].min &
362               JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS);
363   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_COMPLETED);
364   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED);
365   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW);
366   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED);
367   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING);
368   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME);
369   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE);
370   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL);
371   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE);
372   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE);
373   EXPECT_TRUE(buckets[0].min &
374               JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_TRUE);
375   EXPECT_FALSE(buckets[0].min &
376                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_FALSE);
377 }
378 
IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,Called_False_NotShown)379 IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,
380                        Called_False_NotShown) {
381   NavigateTo("/payment_request_can_make_payment_metrics_test.html");
382   base::HistogramTester histogram_tester;
383 
384   // Don't add a card on file, so HasEnrolledInstrument returns false.
385   // Try to start the Payment Request, but only check payment support without
386   // calling show().
387   ResetEventWaiterForSequence({DialogEvent::CAN_MAKE_PAYMENT_CALLED,
388                                DialogEvent::CAN_MAKE_PAYMENT_RETURNED,
389                                DialogEvent::HAS_ENROLLED_INSTRUMENT_CALLED,
390                                DialogEvent::HAS_ENROLLED_INSTRUMENT_RETURNED});
391   ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "queryNoShow();"));
392   WaitForObservedEvent();
393 
394   // Navigate away to trigger the log.
395   NavigateTo("/payment_request_email_test.html");
396 
397   // Make sure the correct events were logged.
398   std::vector<base::Bucket> buckets =
399       histogram_tester.GetAllSamples("PaymentRequest.Events");
400   ASSERT_EQ(1U, buckets.size());
401   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_SHOWN);
402   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED);
403   EXPECT_FALSE(buckets[0].min &
404                JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS);
405   EXPECT_FALSE(buckets[0].min &
406                JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT);
407   EXPECT_FALSE(buckets[0].min &
408                JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS);
409   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_COMPLETED);
410   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED);
411   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW);
412   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED);
413   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING);
414   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME);
415   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE);
416   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL);
417   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE);
418   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE);
419   EXPECT_FALSE(buckets[0].min &
420                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_TRUE);
421   EXPECT_TRUE(buckets[0].min &
422               JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_FALSE);
423 }
424 
IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,NotCalled_Shown_Completed)425 IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,
426                        NotCalled_Shown_Completed) {
427   NavigateTo("/payment_request_can_make_payment_metrics_test.html");
428   base::HistogramTester histogram_tester;
429 
430   // Setup a credit card with an associated billing address to make it simpler
431   // to complete the Payment Request.
432   SetupInitialAddressAndCreditCard();
433 
434   ResetEventWaiterForDialogOpened();
435   ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "noQueryShow();"));
436   WaitForObservedEvent();
437 
438   // Complete the Payment Request.
439   PayWithCreditCardAndWait(base::ASCIIToUTF16("123"));
440 
441   // Make sure that no canMakePayment events were logged.
442   std::vector<base::Bucket> buckets =
443       histogram_tester.GetAllSamples("PaymentRequest.Events");
444   ASSERT_EQ(1U, buckets.size());
445   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_SHOWN);
446   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED);
447   EXPECT_TRUE(buckets[0].min &
448               JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS);
449   EXPECT_TRUE(buckets[0].min &
450               JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT);
451   EXPECT_TRUE(buckets[0].min &
452               JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS);
453   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_COMPLETED);
454   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED);
455   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW);
456   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED);
457   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING);
458   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME);
459   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE);
460   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL);
461   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE);
462   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE);
463   EXPECT_FALSE(buckets[0].min &
464                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_TRUE);
465   EXPECT_FALSE(buckets[0].min &
466                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_FALSE);
467 }
468 
IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,NotCalled_Shown_OtherAborted)469 IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,
470                        NotCalled_Shown_OtherAborted) {
471   NavigateTo("/payment_request_can_make_payment_metrics_test.html");
472   base::HistogramTester histogram_tester;
473 
474   // Setup a credit card with an associated billing address to make it simpler
475   // to complete the Payment Request.
476   SetupInitialAddressAndCreditCard();
477 
478   ResetEventWaiterForDialogOpened();
479   ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "noQueryShow();"));
480   WaitForObservedEvent();
481 
482   // Simulate that an unexpected error occurs.
483   ResetEventWaiterForSequence(
484       {DialogEvent::ABORT_CALLED, DialogEvent::DIALOG_CLOSED});
485   const std::string click_buy_button_js =
486       "(function() { document.getElementById('abort').click(); })();";
487   ASSERT_TRUE(
488       content::ExecuteScript(GetActiveWebContents(), click_buy_button_js));
489   WaitForObservedEvent();
490 
491   // Make sure that no canMakePayment events were logged.
492   std::vector<base::Bucket> buckets =
493       histogram_tester.GetAllSamples("PaymentRequest.Events");
494   ASSERT_EQ(1U, buckets.size());
495   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_SHOWN);
496   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED);
497   EXPECT_FALSE(buckets[0].min &
498                JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS);
499   EXPECT_TRUE(buckets[0].min &
500               JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT);
501   EXPECT_TRUE(buckets[0].min &
502               JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS);
503   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_COMPLETED);
504   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED);
505   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW);
506   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED);
507   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING);
508   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME);
509   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE);
510   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL);
511   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE);
512   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE);
513   EXPECT_FALSE(buckets[0].min &
514                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_TRUE);
515   EXPECT_FALSE(buckets[0].min &
516                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_FALSE);
517 }
518 
IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,NotCalled_Shown_UserAborted)519 IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,
520                        NotCalled_Shown_UserAborted) {
521   NavigateTo("/payment_request_can_make_payment_metrics_test.html");
522   base::HistogramTester histogram_tester;
523 
524   // Setup a credit card with an associated billing address to make it simpler
525   // to complete the Payment Request.
526   SetupInitialAddressAndCreditCard();
527 
528   ResetEventWaiterForDialogOpened();
529   ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), "noQueryShow();"));
530   WaitForObservedEvent();
531 
532   // Simulate that the user cancels the Payment Request.
533   ClickOnCancel();
534 
535   // Make sure that no canMakePayment events were logged.
536   std::vector<base::Bucket> buckets =
537       histogram_tester.GetAllSamples("PaymentRequest.Events");
538   ASSERT_EQ(1U, buckets.size());
539   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_SHOWN);
540   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED);
541   EXPECT_FALSE(buckets[0].min &
542                JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS);
543   EXPECT_TRUE(buckets[0].min &
544               JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT);
545   EXPECT_TRUE(buckets[0].min &
546               JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS);
547   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_COMPLETED);
548   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED);
549   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW);
550   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED);
551   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING);
552   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME);
553   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE);
554   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL);
555   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE);
556   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE);
557   EXPECT_FALSE(buckets[0].min &
558                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_TRUE);
559   EXPECT_FALSE(buckets[0].min &
560                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_FALSE);
561 }
562 
IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,UserAborted_NavigationToSameOrigin)563 IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,
564                        UserAborted_NavigationToSameOrigin) {
565   NavigateTo("/payment_request_can_make_payment_metrics_test.html");
566   base::HistogramTester histogram_tester;
567 
568   CheckPaymentSupportAndThenShow();
569 
570   // Simulate that the user navigates away from the Payment Request by opening a
571   // different page on the same origin.
572   ResetEventWaiterForSequence({DialogEvent::DIALOG_CLOSED});
573   NavigateTo("/payment_request_email_test.html");
574   WaitForObservedEvent();
575 
576   // Make sure the correct events were logged.
577   std::vector<base::Bucket> buckets =
578       histogram_tester.GetAllSamples("PaymentRequest.Events");
579   ASSERT_EQ(1U, buckets.size());
580   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_SHOWN);
581   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED);
582   EXPECT_FALSE(buckets[0].min &
583                JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS);
584   EXPECT_FALSE(buckets[0].min &
585                JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT);
586   EXPECT_FALSE(buckets[0].min &
587                JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS);
588   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_COMPLETED);
589   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED);
590   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW);
591   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED);
592   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING);
593   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME);
594   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE);
595   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL);
596   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE);
597   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE);
598   EXPECT_FALSE(buckets[0].min &
599                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_TRUE);
600   EXPECT_TRUE(buckets[0].min &
601               JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_FALSE);
602 }
603 
IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,UserAborted_NavigationToDifferentOrigin)604 IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,
605                        UserAborted_NavigationToDifferentOrigin) {
606   NavigateTo("/payment_request_can_make_payment_metrics_test.html");
607   base::HistogramTester histogram_tester;
608 
609   CheckPaymentSupportAndThenShow();
610 
611   // Simulate that the user navigates away from the Payment Request by opening a
612   // different page on a different origin.
613   ResetEventWaiterForSequence({DialogEvent::DIALOG_CLOSED});
614   GURL other_origin_url =
615       https_server()->GetURL("b.com", "/payment_request_email_test.html");
616   ui_test_utils::NavigateToURL(browser(), other_origin_url);
617   WaitForObservedEvent();
618 
619   // Make sure the correct events were logged.
620   std::vector<base::Bucket> buckets =
621       histogram_tester.GetAllSamples("PaymentRequest.Events");
622   ASSERT_EQ(1U, buckets.size());
623   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_SHOWN);
624   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED);
625   EXPECT_FALSE(buckets[0].min &
626                JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS);
627   EXPECT_FALSE(buckets[0].min &
628                JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT);
629   EXPECT_FALSE(buckets[0].min &
630                JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS);
631   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_COMPLETED);
632   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED);
633   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW);
634   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED);
635   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING);
636   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME);
637   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE);
638   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL);
639   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE);
640   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE);
641   EXPECT_FALSE(buckets[0].min &
642                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_TRUE);
643   EXPECT_TRUE(buckets[0].min &
644               JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_FALSE);
645 }
646 
IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,UserAborted_TabClose)647 IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,
648                        UserAborted_TabClose) {
649   NavigateTo("/payment_request_can_make_payment_metrics_test.html");
650   base::HistogramTester histogram_tester;
651 
652   CheckPaymentSupportAndThenShow();
653 
654   // Simulate that the user closes the tab containing the Payment Request.
655   ResetEventWaiterForSequence({DialogEvent::DIALOG_CLOSED});
656   chrome::CloseTab(browser());
657   WaitForObservedEvent();
658 
659   // Make sure the correct events were logged.
660   std::vector<base::Bucket> buckets =
661       histogram_tester.GetAllSamples("PaymentRequest.Events");
662   ASSERT_EQ(1U, buckets.size());
663   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_SHOWN);
664   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED);
665   EXPECT_FALSE(buckets[0].min &
666                JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS);
667   EXPECT_FALSE(buckets[0].min &
668                JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT);
669   EXPECT_FALSE(buckets[0].min &
670                JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS);
671   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_COMPLETED);
672   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED);
673   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW);
674   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED);
675   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING);
676   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME);
677   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE);
678   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL);
679   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE);
680   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE);
681   EXPECT_FALSE(buckets[0].min &
682                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_TRUE);
683   EXPECT_TRUE(buckets[0].min &
684               JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_FALSE);
685 }
686 
IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,UserAborted_Reload)687 IN_PROC_BROWSER_TEST_F(PaymentRequestCanMakePaymentMetricsTest,
688                        UserAborted_Reload) {
689   NavigateTo("/payment_request_can_make_payment_metrics_test.html");
690   base::HistogramTester histogram_tester;
691 
692   CheckPaymentSupportAndThenShow();
693 
694   // Simulate that the user reloads the page containing the Payment Request.
695   ResetEventWaiterForSequence({DialogEvent::DIALOG_CLOSED});
696   chrome::Reload(browser(), WindowOpenDisposition::CURRENT_TAB);
697   WaitForObservedEvent();
698 
699   // Make sure the correct events were logged.
700   std::vector<base::Bucket> buckets =
701       histogram_tester.GetAllSamples("PaymentRequest.Events");
702   ASSERT_EQ(1U, buckets.size());
703   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_SHOWN);
704   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED);
705   EXPECT_FALSE(buckets[0].min &
706                JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS);
707   EXPECT_FALSE(buckets[0].min &
708                JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT);
709   EXPECT_FALSE(buckets[0].min &
710                JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS);
711   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_COMPLETED);
712   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED);
713   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW);
714   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED);
715   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING);
716   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME);
717   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE);
718   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL);
719   EXPECT_TRUE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE);
720   EXPECT_FALSE(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE);
721   EXPECT_FALSE(buckets[0].min &
722                JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_TRUE);
723   EXPECT_TRUE(buckets[0].min &
724               JourneyLogger::EVENT_HAS_ENROLLED_INSTRUMENT_FALSE);
725 }
726 
727 }  // namespace payments
728