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