// Copyright 2022 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. #ifndef SERVICES_NETWORK_NETWORK_SERVICE_MEMORY_CACHE_WRITER_H_ #define SERVICES_NETWORK_NETWORK_SERVICE_MEMORY_CACHE_WRITER_H_ #include #include #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "net/base/transport_info.h" #include "services/network/public/mojom/url_loader_completion_status.mojom.h" #include "services/network/public/mojom/url_response_head.mojom.h" namespace net { class URLRequest; } // namespace net namespace network { class NetworkServiceMemoryCache; // Duplicates an HTTP response that comes from the underlying layer, i.e., a // URLLoader. The URLLoader owns an instance of this class. // // When the URLLoader completed successfully, the duplicated response is stored // into the in-memory cache so that it can be served without disk access until // it gets evicted. class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkServiceMemoryCacheWriter { public: NetworkServiceMemoryCacheWriter( base::WeakPtr cache, uint64_t trace_id, size_t max_bytes, std::string cache_key, net::URLRequest* request, mojom::RequestDestination request_destination, const net::TransportInfo& transport_info, const mojom::URLResponseHeadPtr& response_head); ~NetworkServiceMemoryCacheWriter(); // Called when the owner received response content. Returns false when `this` // doesn't want to duplicate the response any longer (e.g. the content is too // large). bool OnDataRead(const char* buf, int result); // Called when the owner completed. void OnCompleted(const URLLoaderCompletionStatus& status); private: base::WeakPtr cache_; // Used for tracing. const uint64_t trace_id_; // The maximum size of `received_data_`. const size_t max_bytes_; std::string cache_key_; // `url_request_` must outlive `this`. The owner owns `url_request_`. const raw_ptr url_request_; mojom::RequestDestination request_destination_; const net::TransportInfo transport_info_; mojom::URLResponseHeadPtr response_head_; std::vector received_data_; }; } // namespace network #endif // SERVICES_NETWORK_NETWORK_SERVICE_MEMORY_CACHE_WRITER_H_