#include "components/payments/core/payment_manifest_downloader.h"
#include <optional>
#include <string_view>
#include <unordered_map>
#include <utility>
#include "base/check_op.h"
#include "base/containers/contains.h"
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/not_fatal_until.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "components/link_header_util/link_header_util.h"
#include "components/payments/core/csp_checker.h"
#include "components/payments/core/error_logger.h"
#include "components/payments/core/features.h"
#include "components/payments/core/native_error_strings.h"
#include "components/payments/core/url_util.h"
#include "net/base/load_flags.h"
#include "net/base/net_errors.h"
#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
#include "net/base/url_util.h"
#include "net/http/http_request_headers.h"
#include "net/http/http_response_headers.h"
#include "net/http/http_status_code.h"
#include "net/http/http_util.h"
#include "net/traffic_annotation/network_traffic_annotation.h"
#include "services/network/public/cpp/resource_request.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
#include "services/network/public/cpp/simple_url_loader.h"
#include "services/network/public/mojom/url_response_head.mojom.h"
#include "url/url_constants.h"
namespace payments {
namespace {
static constexpr size_t kMaxManifestSize = …;
static_assert …;
void RespondWithHttpStatusCodeError(const GURL& final_url,
net::HttpStatusCode http_status_code,
const ErrorLogger& log,
PaymentManifestDownloadCallback callback) { … }
void RespondWithError(std::string_view error_format,
const GURL& final_url,
const ErrorLogger& log,
PaymentManifestDownloadCallback callback) { … }
void RespondWithContent(const std::string& response_body,
std::string_view empty_error_format,
const GURL& final_url,
const ErrorLogger& log,
PaymentManifestDownloadCallback callback) { … }
bool IsValidManifestUrl(const GURL& url,
const ErrorLogger& log,
std::string* out_error_message) { … }
GURL ParseRedirectUrl(const net::RedirectInfo& redirect_info,
const GURL& original_url,
const ErrorLogger& log,
std::string* out_error_message) { … }
}
PaymentManifestDownloader::PaymentManifestDownloader(
std::unique_ptr<ErrorLogger> log,
base::WeakPtr<CSPChecker> csp_checker,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory)
: … { … }
PaymentManifestDownloader::~PaymentManifestDownloader() { … }
void PaymentManifestDownloader::DownloadPaymentMethodManifest(
const url::Origin& merchant_origin,
const GURL& url,
PaymentManifestDownloadCallback callback) { … }
void PaymentManifestDownloader::DownloadWebAppManifest(
const url::Origin& payment_method_manifest_origin,
const GURL& url,
PaymentManifestDownloadCallback callback) { … }
GURL PaymentManifestDownloader::FindTestServerURL(const GURL& url) const { … }
void PaymentManifestDownloader::SetCSPCheckerForTesting(
base::WeakPtr<CSPChecker> csp_checker) { … }
PaymentManifestDownloader::Download::Download() = default;
PaymentManifestDownloader::Download::~Download() = default;
bool PaymentManifestDownloader::Download::IsLinkHeaderDownload() const { … }
bool PaymentManifestDownloader::Download::IsResponseBodyDownload() const { … }
void PaymentManifestDownloader::OnURLLoaderRedirect(
network::SimpleURLLoader* url_loader,
const GURL& url_before_redirect,
const net::RedirectInfo& redirect_info,
const network::mojom::URLResponseHead& response_head,
std::vector<std::string>* to_be_removed_headers) { … }
void PaymentManifestDownloader::OnURLLoaderComplete(
network::SimpleURLLoader* url_loader,
std::unique_ptr<std::string> response_body) { … }
void PaymentManifestDownloader::OnURLLoaderCompleteInternal(
network::SimpleURLLoader* url_loader,
const GURL& final_url,
const std::string& response_body,
scoped_refptr<net::HttpResponseHeaders> headers,
int net_error) { … }
void PaymentManifestDownloader::TryFallbackToDownloadingResponseBody(
const GURL& url_to_download,
std::unique_ptr<Download> download_info) { … }
network::SimpleURLLoader* PaymentManifestDownloader::GetLoaderForTesting() { … }
GURL PaymentManifestDownloader::GetLoaderOriginalURLForTesting() { … }
void PaymentManifestDownloader::InitiateDownload(
const url::Origin& request_initiator,
const GURL& url,
const GURL& url_before_redirects,
bool did_follow_redirect,
Download::Type download_type,
int allowed_number_of_redirects,
PaymentManifestDownloadCallback callback) { … }
void PaymentManifestDownloader::OnCSPCheck(std::unique_ptr<Download> download,
bool csp_allowed) { … }
}