network_service_memory_cache_writer.cc 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. // Copyright 2022 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "services/network/network_service_memory_cache_writer.h"
  5. #include "base/trace_event/common/trace_event_common.h"
  6. #include "base/trace_event/trace_event.h"
  7. #include "base/trace_event/typed_macros.h"
  8. #include "net/url_request/url_request.h"
  9. #include "services/network/network_service_memory_cache.h"
  10. namespace network {
  11. NetworkServiceMemoryCacheWriter::NetworkServiceMemoryCacheWriter(
  12. base::WeakPtr<NetworkServiceMemoryCache> cache,
  13. uint64_t trace_id,
  14. size_t max_bytes,
  15. std::string cache_key,
  16. net::URLRequest* url_request,
  17. mojom::RequestDestination request_destination,
  18. const net::TransportInfo& transport_info,
  19. const mojom::URLResponseHeadPtr& response_head)
  20. : cache_(std::move(cache)),
  21. trace_id_(trace_id),
  22. max_bytes_(max_bytes),
  23. cache_key_(std::move(cache_key)),
  24. url_request_(url_request),
  25. request_destination_(request_destination),
  26. transport_info_(transport_info),
  27. response_head_(response_head.Clone()) {
  28. DCHECK(cache_);
  29. DCHECK(url_request_);
  30. TRACE_EVENT_NESTABLE_ASYNC_BEGIN1(
  31. "loading", "NetworkServiceMemoryCacheWriter", TRACE_ID_LOCAL(trace_id_),
  32. "key", cache_key_);
  33. }
  34. NetworkServiceMemoryCacheWriter::~NetworkServiceMemoryCacheWriter() {
  35. TRACE_EVENT_NESTABLE_ASYNC_END0("loading", "NetworkServiceMemoryCacheWriter",
  36. TRACE_ID_LOCAL(trace_id_));
  37. }
  38. bool NetworkServiceMemoryCacheWriter::OnDataRead(const char* buf, int result) {
  39. DCHECK_GT(result, 0);
  40. TRACE_EVENT_NESTABLE_ASYNC_INSTANT1(
  41. "loading", "NetworkServiceMemoryCacheWriter::OnDataRead",
  42. TRACE_ID_LOCAL(trace_id_), "result", result);
  43. DCHECK_GE(max_bytes_, received_data_.size());
  44. if (static_cast<size_t>(result) > max_bytes_ - received_data_.size())
  45. return false;
  46. received_data_.insert(received_data_.end(), buf, buf + result);
  47. return true;
  48. }
  49. void NetworkServiceMemoryCacheWriter::OnCompleted(
  50. const URLLoaderCompletionStatus& status) {
  51. TRACE_EVENT_NESTABLE_ASYNC_INSTANT2(
  52. "loading", "NetworkServiceMemoryCacheWriter::OnCompleted",
  53. TRACE_ID_LOCAL(trace_id_), "result", status.error_code, "total_size",
  54. received_data_.size());
  55. if (cache_) {
  56. cache_->StoreResponse(cache_key_, status, request_destination_,
  57. url_request_->response_info().vary_data,
  58. transport_info_, std::move(response_head_),
  59. std::move(received_data_));
  60. }
  61. // `this` will be deleted by the owner.
  62. }
  63. } // namespace network