blob: 9ce0f9610e1f31a14dad9dbfdef3b22462bb74c9 [file] [log] [blame]
// 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 <memory>
#include "chrome/test/payments/payment_request_platform_browsertest_base.h"
#include "content/public/test/browser_test.h"
#include "net/test/embedded_test_server/controllable_http_response.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace payments {
namespace {
static constexpr char kPaymentMethod[] = "/";
class SecFetchSiteTest : public PaymentRequestPlatformBrowserTestBase {
public:
SecFetchSiteTest() = default;
void SetUpOnMainThread() override {
response_ = std::make_unique<net::test_server::ControllableHttpResponse>(
https_server(), kPaymentMethod);
PaymentRequestPlatformBrowserTestBase::SetUpOnMainThread();
}
GURL GetTestServerUrl(const std::string& hostname, const std::string& path) {
return https_server()->GetURL(hostname, path);
}
std::string GetSecFetchSiteHeader() {
response_->WaitForRequest();
return response_->http_request()->headers.at("Sec-Fetch-Site");
}
private:
std::unique_ptr<net::test_server::ControllableHttpResponse> response_;
};
// When merchant https://a.com uses the payment method from https://b.com, the
// HTTP HEAD request has a "Sec-Fetch-Site: cross-site" header.
IN_PROC_BROWSER_TEST_F(SecFetchSiteTest,
CrossSitePaymentMethodManifestRequest) {
NavigateTo("a.com", "/payment_request_creator.html");
EXPECT_TRUE(content::ExecJs(
GetActiveWebContents(),
content::JsReplace("createPaymentRequest($1)",
GetTestServerUrl("b.com", kPaymentMethod).spec())));
EXPECT_EQ("cross-site", GetSecFetchSiteHeader());
}
// When merchant https://a.com uses the payment method from https://a.com, the
// HTTP HEAD request has a "Sec-Fetch-Site: same-origin" header.
IN_PROC_BROWSER_TEST_F(SecFetchSiteTest,
SameOriginPaymentMethodManifestRequest) {
NavigateTo("a.com", "/payment_request_creator.html");
EXPECT_TRUE(content::ExecJs(
GetActiveWebContents(),
content::JsReplace("createPaymentRequest($1)",
GetTestServerUrl("a.com", kPaymentMethod).spec())));
EXPECT_EQ("same-origin", GetSecFetchSiteHeader());
}
// When merchant https://x.a.com uses the payment method from https://y.a.com,
// the HTTP HEAD request has a "Sec-Fetch-Site: same-site" header.
IN_PROC_BROWSER_TEST_F(SecFetchSiteTest, SameSitePaymentMethodManifestRequest) {
NavigateTo("x.a.com", "/payment_request_creator.html");
EXPECT_TRUE(content::ExecJs(
GetActiveWebContents(),
content::JsReplace("createPaymentRequest($1)",
GetTestServerUrl("y.a.com", kPaymentMethod).spec())));
EXPECT_EQ("same-site", GetSecFetchSiteHeader());
}
} // namespace
} // namespace payments