blob: be14a658e63044bc04e1274ce38897c2e4ad6e4d [file]
// Copyright 2020 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 "base/macros.h"
#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 =
https_server()->GetURL("a.com", "/method_manifest.json").spec();
NavigateTo("a.com", "/enforce_full_delegation.com/index.html");
EXPECT_EQ(expected,
content::EvalJs(GetActiveWebContents(),
content::JsReplace("install($1)", method_name1)));
EXPECT_EQ(expected, content::EvalJs(GetActiveWebContents(),
"enableDelegations(['payerName'])"));
std::string method_name2 =
https_server()->GetURL("b.com", "/method_manifest.json").spec();
NavigateTo("b.com", "/enforce_full_delegation.com/index.html");
EXPECT_EQ(expected,
content::EvalJs(GetActiveWebContents(),
content::JsReplace("install($1)", 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());
}
}
IN_PROC_BROWSER_TEST_P(PaymentHandlerEnforceFullDelegationTest,
WhenEnabled_ShowPaymentSheet_WhenDisabled_Reject) {
NavigateTo("/enforce_full_delegation.com/index.html");
std::string expected = "success";
EXPECT_EQ(expected, content::EvalJs(GetActiveWebContents(), "install()"));
EXPECT_EQ(expected, content::EvalJs(GetActiveWebContents(),
"addDefaultSupportedMethod()"));
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 \"MaxPay\" 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