Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(451)

Side by Side Diff: content/browser/loader/mojo_async_resource_handler.cc

Issue 2561743003: Use associated interface on DownloadedTempFile (Closed)
Patch Set: +NOTREACHED on non frame trasfer Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/loader/mojo_async_resource_handler.h" 5 #include "content/browser/loader/mojo_async_resource_handler.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h"
10 #include "base/command_line.h" 11 #include "base/command_line.h"
11 #include "base/containers/hash_tables.h" 12 #include "base/containers/hash_tables.h"
12 #include "base/logging.h" 13 #include "base/logging.h"
13 #include "base/macros.h" 14 #include "base/macros.h"
14 #include "base/strings/string_number_conversions.h" 15 #include "base/strings/string_number_conversions.h"
15 #include "base/time/time.h" 16 #include "base/time/time.h"
16 #include "content/browser/loader/downloaded_temp_file_impl.h" 17 #include "content/browser/loader/downloaded_temp_file_impl.h"
17 #include "content/browser/loader/netlog_observer.h" 18 #include "content/browser/loader/netlog_observer.h"
18 #include "content/browser/loader/resource_controller.h" 19 #include "content/browser/loader/resource_controller.h"
19 #include "content/browser/loader/resource_dispatcher_host_impl.h" 20 #include "content/browser/loader/resource_dispatcher_host_impl.h"
(...skipping 30 matching lines...) Expand all
50 51
51 void InitializeResourceBufferConstants() { 52 void InitializeResourceBufferConstants() {
52 static bool did_init = false; 53 static bool did_init = false;
53 if (did_init) 54 if (did_init)
54 return; 55 return;
55 did_init = true; 56 did_init = true;
56 57
57 GetNumericArg("resource-buffer-size", &g_allocation_size); 58 GetNumericArg("resource-buffer-size", &g_allocation_size);
58 } 59 }
59 60
61 void NotReached(mojom::URLLoaderAssociatedRequest mojo_request,
62 mojom::URLLoaderClientAssociatedPtr url_loader_client) {
63 NOTREACHED();
64 }
65
60 } // namespace 66 } // namespace
61 67
62 // This class is for sharing the ownership of a ScopedDataPipeProducerHandle 68 // This class is for sharing the ownership of a ScopedDataPipeProducerHandle
63 // between WriterIOBuffer and MojoAsyncResourceHandler. 69 // between WriterIOBuffer and MojoAsyncResourceHandler.
64 class MojoAsyncResourceHandler::SharedWriter final 70 class MojoAsyncResourceHandler::SharedWriter final
65 : public base::RefCountedThreadSafe<SharedWriter> { 71 : public base::RefCountedThreadSafe<SharedWriter> {
66 public: 72 public:
67 explicit SharedWriter(mojo::ScopedDataPipeProducerHandle writer) 73 explicit SharedWriter(mojo::ScopedDataPipeProducerHandle writer)
68 : writer_(std::move(writer)) {} 74 : writer_(std::move(writer)) {}
69 mojo::DataPipeProducerHandle writer() { return writer_.get(); } 75 mojo::DataPipeProducerHandle writer() { return writer_.get(); }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 // This member is for keeping the writer alive. 107 // This member is for keeping the writer alive.
102 scoped_refptr<SharedWriter> writer_; 108 scoped_refptr<SharedWriter> writer_;
103 109
104 DISALLOW_COPY_AND_ASSIGN(WriterIOBuffer); 110 DISALLOW_COPY_AND_ASSIGN(WriterIOBuffer);
105 }; 111 };
106 112
107 MojoAsyncResourceHandler::MojoAsyncResourceHandler( 113 MojoAsyncResourceHandler::MojoAsyncResourceHandler(
108 net::URLRequest* request, 114 net::URLRequest* request,
109 ResourceDispatcherHostImpl* rdh, 115 ResourceDispatcherHostImpl* rdh,
110 mojom::URLLoaderAssociatedRequest mojo_request, 116 mojom::URLLoaderAssociatedRequest mojo_request,
111 mojom::URLLoaderClientAssociatedPtr url_loader_client) 117 mojom::URLLoaderClientAssociatedPtr url_loader_client,
118 ResourceType resource_type)
112 : ResourceHandler(request), 119 : ResourceHandler(request),
113 rdh_(rdh), 120 rdh_(rdh),
114 binding_(this, std::move(mojo_request)), 121 binding_(this, std::move(mojo_request)),
115 url_loader_client_(std::move(url_loader_client)), 122 url_loader_client_(std::move(url_loader_client)),
116 weak_factory_(this) { 123 weak_factory_(this) {
117 DCHECK(url_loader_client_); 124 DCHECK(url_loader_client_);
118 InitializeResourceBufferConstants(); 125 InitializeResourceBufferConstants();
119 // This unretained pointer is safe, because |binding_| is owned by |this| and 126 // This unretained pointer is safe, because |binding_| is owned by |this| and
120 // the callback will never be called after |this| is destroyed. 127 // the callback will never be called after |this| is destroyed.
121 binding_.set_connection_error_handler( 128 binding_.set_connection_error_handler(
122 base::Bind(&MojoAsyncResourceHandler::Cancel, base::Unretained(this))); 129 base::Bind(&MojoAsyncResourceHandler::Cancel, base::Unretained(this)));
123 130
124 GetRequestInfo()->set_on_transfer(base::Bind( 131 if (IsResourceTypeFrame(resource_type)) {
125 &MojoAsyncResourceHandler::OnTransfer, weak_factory_.GetWeakPtr())); 132 GetRequestInfo()->set_on_transfer(base::Bind(
133 &MojoAsyncResourceHandler::OnTransfer, weak_factory_.GetWeakPtr()));
134 } else {
135 GetRequestInfo()->set_on_transfer(base::Bind(&NotReached));
136 }
126 } 137 }
127 138
128 MojoAsyncResourceHandler::~MojoAsyncResourceHandler() { 139 MojoAsyncResourceHandler::~MojoAsyncResourceHandler() {
129 if (has_checked_for_sufficient_resources_) 140 if (has_checked_for_sufficient_resources_)
130 rdh_->FinishedWithResourcesForRequest(request()); 141 rdh_->FinishedWithResourcesForRequest(request());
131 } 142 }
132 143
133 bool MojoAsyncResourceHandler::OnRequestRedirected( 144 bool MojoAsyncResourceHandler::OnRequestRedirected(
134 const net::RedirectInfo& redirect_info, 145 const net::RedirectInfo& redirect_info,
135 ResourceResponse* response, 146 ResourceResponse* response,
(...skipping 28 matching lines...) Expand all
164 } 175 }
165 176
166 NetLogObserver::PopulateResponseInfo(request(), response); 177 NetLogObserver::PopulateResponseInfo(request(), response);
167 response->head.encoded_data_length = request()->raw_header_size(); 178 response->head.encoded_data_length = request()->raw_header_size();
168 reported_total_received_bytes_ = response->head.encoded_data_length; 179 reported_total_received_bytes_ = response->head.encoded_data_length;
169 180
170 response->head.request_start = request()->creation_time(); 181 response->head.request_start = request()->creation_time();
171 response->head.response_start = base::TimeTicks::Now(); 182 response->head.response_start = base::TimeTicks::Now();
172 sent_received_response_message_ = true; 183 sent_received_response_message_ = true;
173 184
174 mojom::DownloadedTempFilePtr downloaded_file_ptr; 185 mojom::DownloadedTempFileAssociatedPtrInfo downloaded_file_ptr;
175 if (!response->head.download_file_path.empty()) { 186 if (!response->head.download_file_path.empty()) {
176 downloaded_file_ptr = DownloadedTempFileImpl::Create(info->GetChildID(), 187 downloaded_file_ptr = DownloadedTempFileImpl::Create(
177 info->GetRequestID()); 188 binding_.associated_group(), info->GetChildID(), info->GetRequestID());
178 rdh_->RegisterDownloadedTempFile(info->GetChildID(), info->GetRequestID(), 189 rdh_->RegisterDownloadedTempFile(info->GetChildID(), info->GetRequestID(),
179 response->head.download_file_path); 190 response->head.download_file_path);
180 } 191 }
181 192
182 url_loader_client_->OnReceiveResponse(response->head, 193 url_loader_client_->OnReceiveResponse(response->head,
183 std::move(downloaded_file_ptr)); 194 std::move(downloaded_file_ptr));
184 195
185 net::IOBufferWithSize* metadata = GetResponseMetadata(request()); 196 net::IOBufferWithSize* metadata = GetResponseMetadata(request());
186 if (metadata) { 197 if (metadata) {
187 const uint8_t* data = reinterpret_cast<const uint8_t*>(metadata->data()); 198 const uint8_t* data = reinterpret_cast<const uint8_t*>(metadata->data());
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 mojom::URLLoaderAssociatedRequest mojo_request, 501 mojom::URLLoaderAssociatedRequest mojo_request,
491 mojom::URLLoaderClientAssociatedPtr url_loader_client) { 502 mojom::URLLoaderClientAssociatedPtr url_loader_client) {
492 binding_.Unbind(); 503 binding_.Unbind();
493 binding_.Bind(std::move(mojo_request)); 504 binding_.Bind(std::move(mojo_request));
494 binding_.set_connection_error_handler( 505 binding_.set_connection_error_handler(
495 base::Bind(&MojoAsyncResourceHandler::Cancel, base::Unretained(this))); 506 base::Bind(&MojoAsyncResourceHandler::Cancel, base::Unretained(this)));
496 url_loader_client_ = std::move(url_loader_client); 507 url_loader_client_ = std::move(url_loader_client);
497 } 508 }
498 509
499 } // namespace content 510 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/loader/mojo_async_resource_handler.h ('k') | content/browser/loader/mojo_async_resource_handler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698