OLD | NEW |
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 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc
e-loading | 5 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc
e-loading |
6 | 6 |
7 #include "content/common/resource_dispatcher.h" | 7 #include "content/common/resource_dispatcher.h" |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 NOTREACHED() << "Trying to (un)defer an unstarted request"; | 221 NOTREACHED() << "Trying to (un)defer an unstarted request"; |
222 return; | 222 return; |
223 } | 223 } |
224 | 224 |
225 dispatcher_->SetDefersLoading(request_id_, value); | 225 dispatcher_->SetDefersLoading(request_id_, value); |
226 } | 226 } |
227 | 227 |
228 void IPCResourceLoaderBridge::SyncLoad(SyncLoadResponse* response) { | 228 void IPCResourceLoaderBridge::SyncLoad(SyncLoadResponse* response) { |
229 if (request_id_ != -1) { | 229 if (request_id_ != -1) { |
230 NOTREACHED() << "Starting a request twice"; | 230 NOTREACHED() << "Starting a request twice"; |
231 response->status.set_status(net::URLRequestStatus::FAILED); | 231 response->error_code = net::ERR_FAILED; |
232 return; | 232 return; |
233 } | 233 } |
234 | 234 |
235 request_id_ = MakeRequestID(); | 235 request_id_ = MakeRequestID(); |
236 is_synchronous_request_ = true; | 236 is_synchronous_request_ = true; |
237 | 237 |
238 content::SyncLoadResult result; | 238 content::SyncLoadResult result; |
239 IPC::SyncMessage* msg = new ResourceHostMsg_SyncLoad(routing_id_, request_id_, | 239 IPC::SyncMessage* msg = new ResourceHostMsg_SyncLoad(routing_id_, request_id_, |
240 request_, &result); | 240 request_, &result); |
241 // NOTE: This may pump events (see RenderThread::Send). | 241 // NOTE: This may pump events (see RenderThread::Send). |
242 if (!dispatcher_->message_sender()->Send(msg)) { | 242 if (!dispatcher_->message_sender()->Send(msg)) { |
243 response->status.set_status(net::URLRequestStatus::FAILED); | 243 response->error_code = net::ERR_FAILED; |
244 return; | 244 return; |
245 } | 245 } |
246 | 246 |
247 response->status = result.status; | 247 response->error_code = result.error_code; |
248 response->url = result.final_url; | 248 response->url = result.final_url; |
249 response->headers = result.headers; | 249 response->headers = result.headers; |
250 response->mime_type = result.mime_type; | 250 response->mime_type = result.mime_type; |
251 response->charset = result.charset; | 251 response->charset = result.charset; |
252 response->request_time = result.request_time; | 252 response->request_time = result.request_time; |
253 response->response_time = result.response_time; | 253 response->response_time = result.response_time; |
254 response->encoded_data_length = result.encoded_data_length; | 254 response->encoded_data_length = result.encoded_data_length; |
255 response->connection_id = result.connection_id; | 255 response->connection_id = result.connection_id; |
256 response->connection_reused = result.connection_reused; | 256 response->connection_reused = result.connection_reused; |
257 response->load_timing = result.load_timing; | 257 response->load_timing = result.load_timing; |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
444 void ResourceDispatcher::FollowPendingRedirect( | 444 void ResourceDispatcher::FollowPendingRedirect( |
445 int request_id, | 445 int request_id, |
446 PendingRequestInfo& request_info) { | 446 PendingRequestInfo& request_info) { |
447 IPC::Message* msg = request_info.pending_redirect_message.release(); | 447 IPC::Message* msg = request_info.pending_redirect_message.release(); |
448 if (msg) | 448 if (msg) |
449 message_sender()->Send(msg); | 449 message_sender()->Send(msg); |
450 } | 450 } |
451 | 451 |
452 void ResourceDispatcher::OnRequestComplete( | 452 void ResourceDispatcher::OnRequestComplete( |
453 int request_id, | 453 int request_id, |
454 const net::URLRequestStatus& status, | 454 int error_code, |
455 const std::string& security_info, | 455 const std::string& security_info, |
456 const base::TimeTicks& browser_completion_time) { | 456 const base::TimeTicks& browser_completion_time) { |
457 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id); | 457 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id); |
458 if (!request_info) | 458 if (!request_info) |
459 return; | 459 return; |
460 request_info->completion_time = base::TimeTicks::Now(); | 460 request_info->completion_time = base::TimeTicks::Now(); |
461 | 461 |
462 webkit_glue::ResourceLoaderBridge::Peer* peer = request_info->peer; | 462 webkit_glue::ResourceLoaderBridge::Peer* peer = request_info->peer; |
463 | 463 |
464 if (delegate_) { | 464 if (delegate_) { |
465 webkit_glue::ResourceLoaderBridge::Peer* new_peer = | 465 webkit_glue::ResourceLoaderBridge::Peer* new_peer = |
466 delegate_->OnRequestComplete( | 466 delegate_->OnRequestComplete( |
467 request_info->peer, request_info->resource_type, status); | 467 request_info->peer, request_info->resource_type, error_code); |
468 if (new_peer) | 468 if (new_peer) |
469 request_info->peer = new_peer; | 469 request_info->peer = new_peer; |
470 } | 470 } |
471 | 471 |
472 base::TimeTicks renderer_completion_time = ToRendererCompletionTime( | 472 base::TimeTicks renderer_completion_time = ToRendererCompletionTime( |
473 *request_info, browser_completion_time); | 473 *request_info, browser_completion_time); |
474 // The request ID will be removed from our pending list in the destructor. | 474 // The request ID will be removed from our pending list in the destructor. |
475 // Normally, dispatching this message causes the reference-counted request to | 475 // Normally, dispatching this message causes the reference-counted request to |
476 // die immediately. | 476 // die immediately. |
477 peer->OnCompletedRequest(status, security_info, renderer_completion_time); | 477 peer->OnCompletedRequest(error_code, security_info, |
| 478 renderer_completion_time); |
478 } | 479 } |
479 | 480 |
480 int ResourceDispatcher::AddPendingRequest( | 481 int ResourceDispatcher::AddPendingRequest( |
481 webkit_glue::ResourceLoaderBridge::Peer* callback, | 482 webkit_glue::ResourceLoaderBridge::Peer* callback, |
482 ResourceType::Type resource_type, | 483 ResourceType::Type resource_type, |
483 const GURL& request_url) { | 484 const GURL& request_url) { |
484 // Compute a unique request_id for this renderer process. | 485 // Compute a unique request_id for this renderer process. |
485 int id = MakeRequestID(); | 486 int id = MakeRequestID(); |
486 pending_requests_[id] = | 487 pending_requests_[id] = |
487 PendingRequestInfo(callback, resource_type, request_url); | 488 PendingRequestInfo(callback, resource_type, request_url); |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
687 | 688 |
688 // static | 689 // static |
689 void ResourceDispatcher::ReleaseResourcesInMessageQueue(MessageQueue* queue) { | 690 void ResourceDispatcher::ReleaseResourcesInMessageQueue(MessageQueue* queue) { |
690 while (!queue->empty()) { | 691 while (!queue->empty()) { |
691 IPC::Message* message = queue->front(); | 692 IPC::Message* message = queue->front(); |
692 ReleaseResourcesInDataMessage(*message); | 693 ReleaseResourcesInDataMessage(*message); |
693 queue->pop_front(); | 694 queue->pop_front(); |
694 delete message; | 695 delete message; |
695 } | 696 } |
696 } | 697 } |
OLD | NEW |