1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- // 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.
- #include "services/network/network_service_memory_cache_writer.h"
- #include "base/trace_event/common/trace_event_common.h"
- #include "base/trace_event/trace_event.h"
- #include "base/trace_event/typed_macros.h"
- #include "net/url_request/url_request.h"
- #include "services/network/network_service_memory_cache.h"
- namespace network {
- NetworkServiceMemoryCacheWriter::NetworkServiceMemoryCacheWriter(
- base::WeakPtr<NetworkServiceMemoryCache> cache,
- uint64_t trace_id,
- size_t max_bytes,
- std::string cache_key,
- net::URLRequest* url_request,
- mojom::RequestDestination request_destination,
- const net::TransportInfo& transport_info,
- const mojom::URLResponseHeadPtr& response_head)
- : cache_(std::move(cache)),
- trace_id_(trace_id),
- max_bytes_(max_bytes),
- cache_key_(std::move(cache_key)),
- url_request_(url_request),
- request_destination_(request_destination),
- transport_info_(transport_info),
- response_head_(response_head.Clone()) {
- DCHECK(cache_);
- DCHECK(url_request_);
- TRACE_EVENT_NESTABLE_ASYNC_BEGIN1(
- "loading", "NetworkServiceMemoryCacheWriter", TRACE_ID_LOCAL(trace_id_),
- "key", cache_key_);
- }
- NetworkServiceMemoryCacheWriter::~NetworkServiceMemoryCacheWriter() {
- TRACE_EVENT_NESTABLE_ASYNC_END0("loading", "NetworkServiceMemoryCacheWriter",
- TRACE_ID_LOCAL(trace_id_));
- }
- bool NetworkServiceMemoryCacheWriter::OnDataRead(const char* buf, int result) {
- DCHECK_GT(result, 0);
- TRACE_EVENT_NESTABLE_ASYNC_INSTANT1(
- "loading", "NetworkServiceMemoryCacheWriter::OnDataRead",
- TRACE_ID_LOCAL(trace_id_), "result", result);
- DCHECK_GE(max_bytes_, received_data_.size());
- if (static_cast<size_t>(result) > max_bytes_ - received_data_.size())
- return false;
- received_data_.insert(received_data_.end(), buf, buf + result);
- return true;
- }
- void NetworkServiceMemoryCacheWriter::OnCompleted(
- const URLLoaderCompletionStatus& status) {
- TRACE_EVENT_NESTABLE_ASYNC_INSTANT2(
- "loading", "NetworkServiceMemoryCacheWriter::OnCompleted",
- TRACE_ID_LOCAL(trace_id_), "result", status.error_code, "total_size",
- received_data_.size());
- if (cache_) {
- cache_->StoreResponse(cache_key_, status, request_destination_,
- url_request_->response_info().vary_data,
- transport_info_, std::move(response_head_),
- std::move(received_data_));
- }
- // `this` will be deleted by the owner.
- }
- } // namespace network
|