#include "content/browser/service_worker/service_worker_new_script_loader.h"
#include <memory>
#include <vector>
#include "base/containers/span.h"
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/memory/ptr_util.h"
#include "base/numerics/safe_conversions.h"
#include "base/task/sequenced_task_runner.h"
#include "base/task/single_thread_task_runner.h"
#include "content/browser/devtools/devtools_instrumentation.h"
#include "content/browser/renderer_host/policy_container_host.h"
#include "content/browser/service_worker/service_worker_cache_writer.h"
#include "content/browser/service_worker/service_worker_consts.h"
#include "content/browser/service_worker/service_worker_context_core.h"
#include "content/browser/service_worker/service_worker_context_wrapper.h"
#include "content/browser/service_worker/service_worker_loader_helpers.h"
#include "content/browser/service_worker/service_worker_version.h"
#include "content/public/browser/url_loader_throttles.h"
#include "content/public/common/content_client.h"
#include "net/base/ip_endpoint.h"
#include "net/base/load_flags.h"
#include "net/base/net_errors.h"
#include "net/cert/cert_status_flags.h"
#include "net/http/http_response_info.h"
#include "services/network/public/mojom/early_hints.mojom.h"
#include "services/network/public/mojom/url_response_head.mojom.h"
#include "third_party/blink/public/common/loader/throttling_url_loader.h"
namespace content {
namespace {
constexpr char kServiceWorkerNewScriptLoaderScope[] = …;
}
const uint32_t ServiceWorkerNewScriptLoader::kReadBufferSize = …;
class ServiceWorkerNewScriptLoader::WrappedIOBuffer
: public net::WrappedIOBuffer { … };
std::unique_ptr<ServiceWorkerNewScriptLoader>
ServiceWorkerNewScriptLoader::CreateAndStart(
int32_t request_id,
uint32_t options,
const network::ResourceRequest& original_request,
mojo::PendingRemote<network::mojom::URLLoaderClient> client,
scoped_refptr<ServiceWorkerVersion> version,
scoped_refptr<network::SharedURLLoaderFactory> loader_factory,
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
int64_t cache_resource_id,
bool is_throttle_needed,
const GlobalRenderFrameHostId& requesting_frame_id) { … }
ServiceWorkerNewScriptLoader::ServiceWorkerNewScriptLoader(
int32_t request_id,
uint32_t options,
const network::ResourceRequest& original_request,
mojo::PendingRemote<network::mojom::URLLoaderClient> client,
scoped_refptr<ServiceWorkerVersion> version,
scoped_refptr<network::SharedURLLoaderFactory> loader_factory,
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
int64_t cache_resource_id,
bool is_throttle_needed,
const GlobalRenderFrameHostId& requesting_frame_id)
: … { … }
ServiceWorkerNewScriptLoader::~ServiceWorkerNewScriptLoader() { … }
void ServiceWorkerNewScriptLoader::FollowRedirect(
const std::vector<std::string>& removed_headers,
const net::HttpRequestHeaders& modified_headers,
const net::HttpRequestHeaders& modified_cors_exempt_headers,
const std::optional<GURL>& new_url) { … }
void ServiceWorkerNewScriptLoader::SetPriority(net::RequestPriority priority,
int32_t intra_priority_value) { … }
void ServiceWorkerNewScriptLoader::PauseReadingBodyFromNet() { … }
void ServiceWorkerNewScriptLoader::ResumeReadingBodyFromNet() { … }
void ServiceWorkerNewScriptLoader::OnReceiveEarlyHints(
network::mojom::EarlyHintsPtr early_hints) { … }
void ServiceWorkerNewScriptLoader::OnReceiveResponse(
network::mojom::URLResponseHeadPtr response_head,
mojo::ScopedDataPipeConsumerHandle body,
std::optional<mojo_base::BigBuffer> cached_metadata) { … }
void ServiceWorkerNewScriptLoader::OnReceiveRedirect(
const net::RedirectInfo& redirect_info,
network::mojom::URLResponseHeadPtr response_head) { … }
void ServiceWorkerNewScriptLoader::OnUploadProgress(
int64_t current_position,
int64_t total_size,
OnUploadProgressCallback ack_callback) { … }
void ServiceWorkerNewScriptLoader::OnTransferSizeUpdated(
int32_t transfer_size_diff) { … }
void ServiceWorkerNewScriptLoader::OnComplete(
const network::URLLoaderCompletionStatus& status) { … }
void ServiceWorkerNewScriptLoader::WriteHeaders(
network::mojom::URLResponseHeadPtr response_head) { … }
void ServiceWorkerNewScriptLoader::OnWriteHeadersComplete(net::Error error) { … }
void ServiceWorkerNewScriptLoader::MaybeStartNetworkConsumerHandleWatcher() { … }
void ServiceWorkerNewScriptLoader::OnNetworkDataAvailable(MojoResult) { … }
void ServiceWorkerNewScriptLoader::WriteData(
scoped_refptr<network::MojoToNetPendingBuffer> pending_buffer,
uint32_t bytes_available) { … }
void ServiceWorkerNewScriptLoader::OnWriteDataComplete(
scoped_refptr<network::MojoToNetPendingBuffer> pending_buffer,
size_t bytes_written,
net::Error error) { … }
void ServiceWorkerNewScriptLoader::CommitCompleted(
const network::URLLoaderCompletionStatus& status,
const std::string& status_message,
const network::mojom::URLResponseHeadPtr response_head) { … }
void ServiceWorkerNewScriptLoader::OnClientWritable(MojoResult result) { … }
}