12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- // 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 <string>
- #include <vector>
- #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<NetworkServiceMemoryCache> 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<NetworkServiceMemoryCache> 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<net::URLRequest> url_request_;
- mojom::RequestDestination request_destination_;
- const net::TransportInfo transport_info_;
- mojom::URLResponseHeadPtr response_head_;
- std::vector<unsigned char> received_data_;
- };
- } // namespace network
- #endif // SERVICES_NETWORK_NETWORK_SERVICE_MEMORY_CACHE_WRITER_H_
|