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

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

Issue 23583039: Convert a bunch of resource IPCs to be control messages. They didn't need to be routed. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: remove dcheck from RenderProcessHost instead Created 7 years, 3 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/async_resource_handler.h" 5 #include "content/browser/loader/async_resource_handler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 : net::WrappedIOBuffer(memory), 71 : net::WrappedIOBuffer(memory),
72 backing_(backing) { 72 backing_(backing) {
73 } 73 }
74 private: 74 private:
75 virtual ~DependentIOBuffer() {} 75 virtual ~DependentIOBuffer() {}
76 scoped_refptr<ResourceBuffer> backing_; 76 scoped_refptr<ResourceBuffer> backing_;
77 }; 77 };
78 78
79 AsyncResourceHandler::AsyncResourceHandler( 79 AsyncResourceHandler::AsyncResourceHandler(
80 ResourceMessageFilter* filter, 80 ResourceMessageFilter* filter,
81 int routing_id,
82 net::URLRequest* request, 81 net::URLRequest* request,
83 ResourceDispatcherHostImpl* rdh) 82 ResourceDispatcherHostImpl* rdh)
84 : ResourceMessageDelegate(request), 83 : ResourceMessageDelegate(request),
85 filter_(filter), 84 filter_(filter),
86 routing_id_(routing_id),
87 request_(request), 85 request_(request),
88 rdh_(rdh), 86 rdh_(rdh),
89 pending_data_count_(0), 87 pending_data_count_(0),
90 allocation_size_(0), 88 allocation_size_(0),
91 did_defer_(false), 89 did_defer_(false),
92 has_checked_for_sufficient_resources_(false), 90 has_checked_for_sufficient_resources_(false),
93 sent_received_response_msg_(false), 91 sent_received_response_msg_(false),
94 sent_first_data_msg_(false) { 92 sent_first_data_msg_(false) {
95 InitializeResourceBufferConstants(); 93 InitializeResourceBufferConstants();
96 } 94 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 130
133 buffer_->RecycleLeastRecentlyAllocated(); 131 buffer_->RecycleLeastRecentlyAllocated();
134 if (buffer_->CanAllocate()) 132 if (buffer_->CanAllocate())
135 ResumeIfDeferred(); 133 ResumeIfDeferred();
136 } 134 }
137 } 135 }
138 136
139 bool AsyncResourceHandler::OnUploadProgress(int request_id, 137 bool AsyncResourceHandler::OnUploadProgress(int request_id,
140 uint64 position, 138 uint64 position,
141 uint64 size) { 139 uint64 size) {
142 return filter_->Send(new ResourceMsg_UploadProgress(routing_id_, request_id, 140 return filter_->Send(new ResourceMsg_UploadProgress(request_id, position,
143 position, size)); 141 size));
144 } 142 }
145 143
146 bool AsyncResourceHandler::OnRequestRedirected(int request_id, 144 bool AsyncResourceHandler::OnRequestRedirected(int request_id,
147 const GURL& new_url, 145 const GURL& new_url,
148 ResourceResponse* response, 146 ResourceResponse* response,
149 bool* defer) { 147 bool* defer) {
150 *defer = did_defer_ = true; 148 *defer = did_defer_ = true;
151 149
152 if (rdh_->delegate()) { 150 if (rdh_->delegate()) {
153 rdh_->delegate()->OnRequestRedirected(new_url, request_, 151 rdh_->delegate()->OnRequestRedirected(new_url, request_,
154 filter_->resource_context(), 152 filter_->resource_context(),
155 response); 153 response);
156 } 154 }
157 155
158 DevToolsNetLogObserver::PopulateResponseInfo(request_, response); 156 DevToolsNetLogObserver::PopulateResponseInfo(request_, response);
159 response->head.request_start = request_->creation_time(); 157 response->head.request_start = request_->creation_time();
160 response->head.response_start = TimeTicks::Now(); 158 response->head.response_start = TimeTicks::Now();
161 return filter_->Send(new ResourceMsg_ReceivedRedirect( 159 return filter_->Send(new ResourceMsg_ReceivedRedirect(
162 routing_id_, request_id, new_url, response->head)); 160 request_id, new_url, response->head));
163 } 161 }
164 162
165 bool AsyncResourceHandler::OnResponseStarted(int request_id, 163 bool AsyncResourceHandler::OnResponseStarted(int request_id,
166 ResourceResponse* response, 164 ResourceResponse* response,
167 bool* defer) { 165 bool* defer) {
168 // For changes to the main frame, inform the renderer of the new URL's 166 // For changes to the main frame, inform the renderer of the new URL's
169 // per-host settings before the request actually commits. This way the 167 // per-host settings before the request actually commits. This way the
170 // renderer will be able to set these precisely at the time the 168 // renderer will be able to set these precisely at the time the
171 // request commits, avoiding the possibility of e.g. zooming the old content 169 // request commits, avoiding the possibility of e.g. zooming the old content
172 // or of having to layout the new content twice. 170 // or of having to layout the new content twice.
(...skipping 14 matching lines...) Expand all
187 const GURL& request_url = request_->url(); 185 const GURL& request_url = request_->url();
188 filter_->Send(new ViewMsg_SetZoomLevelForLoadingURL( 186 filter_->Send(new ViewMsg_SetZoomLevelForLoadingURL(
189 info->GetRouteID(), 187 info->GetRouteID(),
190 request_url, host_zoom_map->GetZoomLevelForHostAndScheme( 188 request_url, host_zoom_map->GetZoomLevelForHostAndScheme(
191 request_url.scheme(), 189 request_url.scheme(),
192 net::GetHostOrSpecFromURL(request_url)))); 190 net::GetHostOrSpecFromURL(request_url))));
193 } 191 }
194 192
195 response->head.request_start = request_->creation_time(); 193 response->head.request_start = request_->creation_time();
196 response->head.response_start = TimeTicks::Now(); 194 response->head.response_start = TimeTicks::Now();
197 filter_->Send(new ResourceMsg_ReceivedResponse( 195 filter_->Send(new ResourceMsg_ReceivedResponse(request_id, response->head));
198 routing_id_, request_id, response->head));
199 sent_received_response_msg_ = true; 196 sent_received_response_msg_ = true;
200 197
201 if (request_->response_info().metadata.get()) { 198 if (request_->response_info().metadata.get()) {
202 std::vector<char> copy(request_->response_info().metadata->data(), 199 std::vector<char> copy(request_->response_info().metadata->data(),
203 request_->response_info().metadata->data() + 200 request_->response_info().metadata->data() +
204 request_->response_info().metadata->size()); 201 request_->response_info().metadata->size());
205 filter_->Send(new ResourceMsg_ReceivedCachedMetadata( 202 filter_->Send(new ResourceMsg_ReceivedCachedMetadata(request_id, copy));
206 routing_id_, request_id, copy));
207 } 203 }
208 204
209 return true; 205 return true;
210 } 206 }
211 207
212 bool AsyncResourceHandler::OnWillStart(int request_id, 208 bool AsyncResourceHandler::OnWillStart(int request_id,
213 const GURL& url, 209 const GURL& url,
214 bool* defer) { 210 bool* defer) {
215 return true; 211 return true;
216 } 212 }
(...skipping 30 matching lines...) Expand all
247 bytes_read, 0, kMaxAllocationSize, 100); 243 bytes_read, 0, kMaxAllocationSize, 100);
248 UMA_HISTOGRAM_PERCENTAGE( 244 UMA_HISTOGRAM_PERCENTAGE(
249 "Net.AsyncResourceHandler_SharedIOBuffer_UsedPercentage", 245 "Net.AsyncResourceHandler_SharedIOBuffer_UsedPercentage",
250 CalcUsedPercentage(bytes_read, allocation_size_)); 246 CalcUsedPercentage(bytes_read, allocation_size_));
251 247
252 if (!sent_first_data_msg_) { 248 if (!sent_first_data_msg_) {
253 base::SharedMemoryHandle handle; 249 base::SharedMemoryHandle handle;
254 int size; 250 int size;
255 if (!buffer_->ShareToProcess(filter_->PeerHandle(), &handle, &size)) 251 if (!buffer_->ShareToProcess(filter_->PeerHandle(), &handle, &size))
256 return false; 252 return false;
257 filter_->Send( 253 filter_->Send(new ResourceMsg_SetDataBuffer(
258 new ResourceMsg_SetDataBuffer(routing_id_, request_id, handle, size, 254 request_id, handle, size, filter_->peer_pid()));
259 filter_->peer_pid()));
260 sent_first_data_msg_ = true; 255 sent_first_data_msg_ = true;
261 } 256 }
262 257
263 int data_offset = buffer_->GetLastAllocationOffset(); 258 int data_offset = buffer_->GetLastAllocationOffset();
264 int encoded_data_length = 259 int encoded_data_length =
265 DevToolsNetLogObserver::GetAndResetEncodedDataLength(request_); 260 DevToolsNetLogObserver::GetAndResetEncodedDataLength(request_);
266 261
267 filter_->Send( 262 filter_->Send(new ResourceMsg_DataReceived(
268 new ResourceMsg_DataReceived(routing_id_, request_id, data_offset, 263 request_id, data_offset, bytes_read, encoded_data_length));
269 bytes_read, encoded_data_length));
270 ++pending_data_count_; 264 ++pending_data_count_;
271 UMA_HISTOGRAM_CUSTOM_COUNTS( 265 UMA_HISTOGRAM_CUSTOM_COUNTS(
272 "Net.AsyncResourceHandler_PendingDataCount", 266 "Net.AsyncResourceHandler_PendingDataCount",
273 pending_data_count_, 0, 100, 100); 267 pending_data_count_, 0, 100, 100);
274 268
275 if (!buffer_->CanAllocate()) { 269 if (!buffer_->CanAllocate()) {
276 UMA_HISTOGRAM_CUSTOM_COUNTS( 270 UMA_HISTOGRAM_CUSTOM_COUNTS(
277 "Net.AsyncResourceHandler_PendingDataCount_WhenFull", 271 "Net.AsyncResourceHandler_PendingDataCount_WhenFull",
278 pending_data_count_, 0, 100, 100); 272 pending_data_count_, 0, 100, 100);
279 *defer = did_defer_ = true; 273 *defer = did_defer_ = true;
280 } 274 }
281 275
282 return true; 276 return true;
283 } 277 }
284 278
285 void AsyncResourceHandler::OnDataDownloaded( 279 void AsyncResourceHandler::OnDataDownloaded(
286 int request_id, int bytes_downloaded) { 280 int request_id, int bytes_downloaded) {
287 int encoded_data_length = 281 int encoded_data_length =
288 DevToolsNetLogObserver::GetAndResetEncodedDataLength(request_); 282 DevToolsNetLogObserver::GetAndResetEncodedDataLength(request_);
289 283
290 filter_->Send(new ResourceMsg_DataDownloaded( 284 filter_->Send(new ResourceMsg_DataDownloaded(
291 routing_id_, request_id, bytes_downloaded, encoded_data_length)); 285 request_id, bytes_downloaded, encoded_data_length));
292 } 286 }
293 287
294 bool AsyncResourceHandler::OnResponseCompleted( 288 bool AsyncResourceHandler::OnResponseCompleted(
295 int request_id, 289 int request_id,
296 const net::URLRequestStatus& status, 290 const net::URLRequestStatus& status,
297 const std::string& security_info) { 291 const std::string& security_info) {
298 // If we crash here, figure out what URL the renderer was requesting. 292 // If we crash here, figure out what URL the renderer was requesting.
299 // http://crbug.com/107692 293 // http://crbug.com/107692
300 char url_buf[128]; 294 char url_buf[128];
301 base::strlcpy(url_buf, request_->url().spec().c_str(), arraysize(url_buf)); 295 base::strlcpy(url_buf, request_->url().spec().c_str(), arraysize(url_buf));
(...skipping 22 matching lines...) Expand all
324 // TODO(mkosiba): Fix up cases where we create a URLRequestStatus 318 // TODO(mkosiba): Fix up cases where we create a URLRequestStatus
325 // with a status() != SUCCESS and an error_code() == net::OK. 319 // with a status() != SUCCESS and an error_code() == net::OK.
326 if (status.status() == net::URLRequestStatus::CANCELED && 320 if (status.status() == net::URLRequestStatus::CANCELED &&
327 error_code == net::OK) { 321 error_code == net::OK) {
328 error_code = net::ERR_ABORTED; 322 error_code = net::ERR_ABORTED;
329 } else if (status.status() == net::URLRequestStatus::FAILED && 323 } else if (status.status() == net::URLRequestStatus::FAILED &&
330 error_code == net::OK) { 324 error_code == net::OK) {
331 error_code = net::ERR_FAILED; 325 error_code = net::ERR_FAILED;
332 } 326 }
333 327
334 filter_->Send(new ResourceMsg_RequestComplete(routing_id_, 328 filter_->Send(new ResourceMsg_RequestComplete(request_id,
335 request_id,
336 error_code, 329 error_code,
337 was_ignored_by_handler, 330 was_ignored_by_handler,
338 security_info, 331 security_info,
339 completion_time)); 332 completion_time));
340 return true; 333 return true;
341 } 334 }
342 335
343 bool AsyncResourceHandler::EnsureResourceBufferIsInitialized() { 336 bool AsyncResourceHandler::EnsureResourceBufferIsInitialized() {
344 if (buffer_.get() && buffer_->IsInitialized()) 337 if (buffer_.get() && buffer_->IsInitialized())
345 return true; 338 return true;
(...skipping 13 matching lines...) Expand all
359 } 352 }
360 353
361 void AsyncResourceHandler::ResumeIfDeferred() { 354 void AsyncResourceHandler::ResumeIfDeferred() {
362 if (did_defer_) { 355 if (did_defer_) {
363 did_defer_ = false; 356 did_defer_ = false;
364 controller()->Resume(); 357 controller()->Resume();
365 } 358 }
366 } 359 }
367 360
368 } // namespace content 361 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/loader/async_resource_handler.h ('k') | content/browser/loader/resource_dispatcher_host_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698