File: payment_handler_enforce_full_delegation_browsertest.cc

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

#include "base/test/scoped_feature_list.h"
#include "chrome/test/payments/payment_request_platform_browsertest_base.h"
#include "components/payments/core/features.h"
#include "content/public/test/browser_test.h"

namespace payments {
namespace {

enum EnforceFullDelegationFlag {
  DISABLED = 0,
  ENABLED,
};

class PaymentHandlerEnforceFullDelegationTest
    : public PaymentRequestPlatformBrowserTestBase,
      public testing::WithParamInterface<EnforceFullDelegationFlag> {
 public:
  PaymentHandlerEnforceFullDelegationTest() {
    if (GetParam() == ENABLED) {
      scoped_feature_list_.InitAndEnableFeature(
          payments::features::kEnforceFullDelegation);
    } else {
      scoped_feature_list_.InitAndDisableFeature(
          payments::features::kEnforceFullDelegation);
    }
  }
  ~PaymentHandlerEnforceFullDelegationTest() override = default;

  void SetUpOnMainThread() override {
    PaymentRequestPlatformBrowserTestBase::SetUpOnMainThread();
  }

 private:
  base::test::ScopedFeatureList scoped_feature_list_;
};

IN_PROC_BROWSER_TEST_P(PaymentHandlerEnforceFullDelegationTest,
                       ShowPaymentSheetWhenOnlySomeAppsAreSkipped) {
  std::string expected = "success";

  std::string method_name1;
  NavigateTo("a.com", "/enforce_full_delegation.test/index.html");
  InstallPaymentApp("a.com", "/enforce_full_delegation.test/app.js",
                    &method_name1);
  EXPECT_EQ(expected, content::EvalJs(GetActiveWebContents(),
                                      "enableDelegations(['payerName'])"));

  std::string method_name2;
  NavigateTo("b.com", "/enforce_full_delegation.test/index.html");
  InstallPaymentApp("b.com", "/enforce_full_delegation.test/app.js",
                    &method_name2);
  EXPECT_EQ(expected,
            content::EvalJs(GetActiveWebContents(), "enableDelegations([])"));

  EXPECT_EQ(expected,
            content::EvalJs(GetActiveWebContents(),
                            content::JsReplace("addSupportedMethods([$1, $2])",
                                               method_name1, method_name2)));
  EXPECT_EQ(expected,
            content::EvalJs(
                GetActiveWebContents(),
                "createPaymentRequestWithOptions({requestPayerName: true})"));

  // When enforcing full delegation: although b.com app is skipped for partial
  // delegation, a.com app is still expected to appear in the payment sheet.
  // When not enforcing: both apps are expected to appear in the sheet. So the
  // sheet appears in both enabled and disabled cases.
  ResetEventWaiterForSingleEvent(TestEvent::kAppListReady);

  EXPECT_EQ(expected, content::EvalJs(GetActiveWebContents(), "show()"));
  WaitForObservedEvent();

  if (GetParam() == ENABLED) {
    EXPECT_EQ(1u, test_controller()->app_descriptions().size());
  } else {
    EXPECT_EQ(2u, test_controller()->app_descriptions().size());
  }
}

// crbug.com/1468262: Flaky test on Android.
// crbug.com/1473404: Flaky test on ChromeOS and Windows.
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN)
#define MAYBE_WhenEnabled_ShowPaymentSheet_WhenDisabled_Reject \
  DISABLED_WhenEnabled_ShowPaymentSheet_WhenDisabled_Reject
#else
#define MAYBE_WhenEnabled_ShowPaymentSheet_WhenDisabled_Reject \
  WhenEnabled_ShowPaymentSheet_WhenDisabled_Reject
#endif
IN_PROC_BROWSER_TEST_P(PaymentHandlerEnforceFullDelegationTest,
                       MAYBE_WhenEnabled_ShowPaymentSheet_WhenDisabled_Reject) {
  NavigateTo("a.com", "/enforce_full_delegation.test/index.html");

  std::string method_name;
  InstallPaymentApp("a.com", "/enforce_full_delegation.test/app.js",
                    &method_name);

  std::string expected = "success";
  EXPECT_EQ(expected,
            content::EvalJs(
                GetActiveWebContents(),
                content::JsReplace("addSupportedMethods([$1])", method_name)));
  EXPECT_EQ(expected,
            content::EvalJs(GetActiveWebContents(), "enableDelegations([])"));
  EXPECT_EQ(expected,
            content::EvalJs(
                GetActiveWebContents(),
                "createPaymentRequestWithOptions({requestPayerName: true})"));

  if (GetParam() == ENABLED) {
    ResetEventWaiterForSingleEvent(TestEvent::kNotSupportedError);
  } else {
    ResetEventWaiterForSingleEvent(TestEvent::kAppListReady);
  }

  EXPECT_EQ(expected, content::EvalJs(GetActiveWebContents(), "show()"));
  WaitForObservedEvent();

  if (GetParam() == ENABLED) {
    EXPECT_EQ(0u, test_controller()->app_descriptions().size());
    ExpectBodyContains(
        "Skipping \"Test App Name\" for not providing all of the requested "
        "PaymentOptions.");
  } else {
    EXPECT_EQ(1u, test_controller()->app_descriptions().size());
  }
}

// Run all tests with both values for
// features::kEnforceFullDelegation.
INSTANTIATE_TEST_SUITE_P(All,
                         PaymentHandlerEnforceFullDelegationTest,
                         ::testing::Values(DISABLED, ENABLED));
}  // namespace
}  // namespace payments