|  | // 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 <string> | 
|  |  | 
|  | #include "chrome/test/payments/payment_request_platform_browsertest_base.h" | 
|  | #include "components/payments/content/service_worker_payment_app_finder.h" | 
|  | #include "content/public/test/browser_test.h" | 
|  | #include "content/public/test/browser_test_utils.h" | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  |  | 
|  | namespace payments { | 
|  | namespace { | 
|  |  | 
|  | class IgnorePaymentMethodTest : public PaymentRequestPlatformBrowserTestBase { | 
|  | protected: | 
|  | void SetUpOnMainThread() override { | 
|  | PaymentRequestPlatformBrowserTestBase::SetUpOnMainThread(); | 
|  |  | 
|  | method_name_ = https_server()->GetURL("a.com", "/nickpay.com/pay").spec(); | 
|  | ASSERT_NE('/', method_name_[method_name_.length() - 1]); | 
|  | } | 
|  |  | 
|  | void InstallTestPaymentHandler(const std::string& file_name) { | 
|  | NavigateTo("a.com", "/payment_handler_installer.html"); | 
|  | ASSERT_EQ("success", | 
|  | content::EvalJs(GetActiveWebContents(), | 
|  | content::JsReplace("install($1, [$2], false)", | 
|  | file_name, method_name_))); | 
|  | } | 
|  |  | 
|  | void VerifyFunctionOutput(const std::string& expected_return_value, | 
|  | const std::string& function_name) { | 
|  | EXPECT_EQ(expected_return_value, | 
|  | content::EvalJs(GetActiveWebContents(), | 
|  | content::JsReplace(function_name, method_name_))); | 
|  | } | 
|  |  | 
|  | ServiceWorkerPaymentAppFinder* GetFinder() { | 
|  | return ServiceWorkerPaymentAppFinder::GetOrCreateForCurrentDocument( | 
|  | GetActiveWebContents()->GetMainFrame()); | 
|  | } | 
|  |  | 
|  | std::string method_name_; | 
|  | }; | 
|  |  | 
|  | IN_PROC_BROWSER_TEST_F(IgnorePaymentMethodTest, InstalledPHCannotMakePayments) { | 
|  | InstallTestPaymentHandler("can_make_payment_true_responder.js"); | 
|  | NavigateTo("b.com", "/can_make_payment_checker.html"); | 
|  | VerifyFunctionOutput("true", "canMakePayment($1)"); | 
|  |  | 
|  | GetFinder()->IgnorePaymentMethodForTest(method_name_); | 
|  |  | 
|  | VerifyFunctionOutput("false", "canMakePayment($1)"); | 
|  | } | 
|  |  | 
|  | IN_PROC_BROWSER_TEST_F(IgnorePaymentMethodTest, | 
|  | InstalledPHHasNoEnrolledInstruments) { | 
|  | InstallTestPaymentHandler("can_make_payment_true_responder.js"); | 
|  | NavigateTo("b.com", "/has_enrolled_instrument_checker.html"); | 
|  | VerifyFunctionOutput("true", "hasEnrolledInstrument($1)"); | 
|  |  | 
|  | GetFinder()->IgnorePaymentMethodForTest(method_name_); | 
|  |  | 
|  | VerifyFunctionOutput("false", "hasEnrolledInstrument($1)"); | 
|  | } | 
|  |  | 
|  | IN_PROC_BROWSER_TEST_F(IgnorePaymentMethodTest, InstalledPHCannotBeLaunched) { | 
|  | InstallTestPaymentHandler("payment_request_success_responder.js"); | 
|  | NavigateTo("b.com", "/payment_handler_status.html"); | 
|  | VerifyFunctionOutput("success", "getStatus($1)"); | 
|  |  | 
|  | GetFinder()->IgnorePaymentMethodForTest(method_name_); | 
|  |  | 
|  | VerifyFunctionOutput( | 
|  | "The payment method \"" + method_name_ + "\" is not supported.", | 
|  | "getStatus($1)"); | 
|  | } | 
|  |  | 
|  | IN_PROC_BROWSER_TEST_F(IgnorePaymentMethodTest, | 
|  | JITInstallablePHCannotMakePayments) { | 
|  | NavigateTo("b.com", "/can_make_payment_checker.html"); | 
|  | VerifyFunctionOutput("true", "canMakePayment($1)"); | 
|  |  | 
|  | GetFinder()->IgnorePaymentMethodForTest(method_name_); | 
|  |  | 
|  | VerifyFunctionOutput("false", "canMakePayment($1)"); | 
|  | } | 
|  |  | 
|  | IN_PROC_BROWSER_TEST_F(IgnorePaymentMethodTest, | 
|  | JITInstallablePHHasNoEnrolledInstruments) { | 
|  | NavigateTo("b.com", "/has_enrolled_instrument_checker.html"); | 
|  | VerifyFunctionOutput("false", "hasEnrolledInstrument($1)"); | 
|  |  | 
|  | GetFinder()->IgnorePaymentMethodForTest(method_name_); | 
|  |  | 
|  | VerifyFunctionOutput("false", "hasEnrolledInstrument($1)"); | 
|  | } | 
|  |  | 
|  | IN_PROC_BROWSER_TEST_F(IgnorePaymentMethodTest, | 
|  | JITInstallablePHCanBeInstalledAndLaunchedByDefault) { | 
|  | NavigateTo("b.com", "/payment_handler_status.html"); | 
|  | VerifyFunctionOutput("success", "getStatus($1)"); | 
|  | } | 
|  |  | 
|  | IN_PROC_BROWSER_TEST_F( | 
|  | IgnorePaymentMethodTest, | 
|  | JITInstallablePHCannotBeInstalledAndLaunchedWhenIgnored) { | 
|  | NavigateTo("b.com", "/payment_handler_status.html"); | 
|  |  | 
|  | GetFinder()->IgnorePaymentMethodForTest(method_name_); | 
|  |  | 
|  | VerifyFunctionOutput( | 
|  | "The payment method \"" + method_name_ + "\" is not supported.", | 
|  | "getStatus($1)"); | 
|  | } | 
|  |  | 
|  | }  // namespace | 
|  | }  // namespace payments |