| 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 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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->status.set_status(net::URLRequestStatus::FAILED); |
| 244 return; | 244 return; |
| 245 } | 245 } |
| 246 | 246 |
| 247 response->status = result.status; | 247 response->status = result.status; |
| 248 response->handled_externally = result.handled_externally; |
| 248 response->url = result.final_url; | 249 response->url = result.final_url; |
| 249 response->headers = result.headers; | 250 response->headers = result.headers; |
| 250 response->mime_type = result.mime_type; | 251 response->mime_type = result.mime_type; |
| 251 response->charset = result.charset; | 252 response->charset = result.charset; |
| 252 response->request_time = result.request_time; | 253 response->request_time = result.request_time; |
| 253 response->response_time = result.response_time; | 254 response->response_time = result.response_time; |
| 254 response->encoded_data_length = result.encoded_data_length; | 255 response->encoded_data_length = result.encoded_data_length; |
| 255 response->connection_id = result.connection_id; | 256 response->connection_id = result.connection_id; |
| 256 response->connection_reused = result.connection_reused; | 257 response->connection_reused = result.connection_reused; |
| 257 response->load_timing = result.load_timing; | 258 response->load_timing = result.load_timing; |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 int request_id, | 446 int request_id, |
| 446 PendingRequestInfo& request_info) { | 447 PendingRequestInfo& request_info) { |
| 447 IPC::Message* msg = request_info.pending_redirect_message.release(); | 448 IPC::Message* msg = request_info.pending_redirect_message.release(); |
| 448 if (msg) | 449 if (msg) |
| 449 message_sender()->Send(msg); | 450 message_sender()->Send(msg); |
| 450 } | 451 } |
| 451 | 452 |
| 452 void ResourceDispatcher::OnRequestComplete( | 453 void ResourceDispatcher::OnRequestComplete( |
| 453 int request_id, | 454 int request_id, |
| 454 const net::URLRequestStatus& status, | 455 const net::URLRequestStatus& status, |
| 456 bool handled_externally, |
| 455 const std::string& security_info, | 457 const std::string& security_info, |
| 456 const base::TimeTicks& browser_completion_time) { | 458 const base::TimeTicks& browser_completion_time) { |
| 457 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id); | 459 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id); |
| 458 if (!request_info) | 460 if (!request_info) |
| 459 return; | 461 return; |
| 460 request_info->completion_time = base::TimeTicks::Now(); | 462 request_info->completion_time = base::TimeTicks::Now(); |
| 461 | 463 |
| 462 webkit_glue::ResourceLoaderBridge::Peer* peer = request_info->peer; | 464 webkit_glue::ResourceLoaderBridge::Peer* peer = request_info->peer; |
| 463 | 465 |
| 464 if (delegate_) { | 466 if (delegate_) { |
| 465 webkit_glue::ResourceLoaderBridge::Peer* new_peer = | 467 webkit_glue::ResourceLoaderBridge::Peer* new_peer = |
| 466 delegate_->OnRequestComplete( | 468 delegate_->OnRequestComplete( |
| 467 request_info->peer, request_info->resource_type, status); | 469 request_info->peer, request_info->resource_type, status); |
| 468 if (new_peer) | 470 if (new_peer) |
| 469 request_info->peer = new_peer; | 471 request_info->peer = new_peer; |
| 470 } | 472 } |
| 471 | 473 |
| 472 base::TimeTicks renderer_completion_time = ToRendererCompletionTime( | 474 base::TimeTicks renderer_completion_time = ToRendererCompletionTime( |
| 473 *request_info, browser_completion_time); | 475 *request_info, browser_completion_time); |
| 474 // The request ID will be removed from our pending list in the destructor. | 476 // The request ID will be removed from our pending list in the destructor. |
| 475 // Normally, dispatching this message causes the reference-counted request to | 477 // Normally, dispatching this message causes the reference-counted request to |
| 476 // die immediately. | 478 // die immediately. |
| 477 peer->OnCompletedRequest(status, security_info, renderer_completion_time); | 479 peer->OnCompletedRequest( |
| 480 status, handled_externally, security_info, |
| 481 renderer_completion_time); |
| 478 } | 482 } |
| 479 | 483 |
| 480 int ResourceDispatcher::AddPendingRequest( | 484 int ResourceDispatcher::AddPendingRequest( |
| 481 webkit_glue::ResourceLoaderBridge::Peer* callback, | 485 webkit_glue::ResourceLoaderBridge::Peer* callback, |
| 482 ResourceType::Type resource_type, | 486 ResourceType::Type resource_type, |
| 483 const GURL& request_url) { | 487 const GURL& request_url) { |
| 484 // Compute a unique request_id for this renderer process. | 488 // Compute a unique request_id for this renderer process. |
| 485 int id = MakeRequestID(); | 489 int id = MakeRequestID(); |
| 486 pending_requests_[id] = | 490 pending_requests_[id] = |
| 487 PendingRequestInfo(callback, resource_type, request_url); | 491 PendingRequestInfo(callback, resource_type, request_url); |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 687 | 691 |
| 688 // static | 692 // static |
| 689 void ResourceDispatcher::ReleaseResourcesInMessageQueue(MessageQueue* queue) { | 693 void ResourceDispatcher::ReleaseResourcesInMessageQueue(MessageQueue* queue) { |
| 690 while (!queue->empty()) { | 694 while (!queue->empty()) { |
| 691 IPC::Message* message = queue->front(); | 695 IPC::Message* message = queue->front(); |
| 692 ReleaseResourcesInDataMessage(*message); | 696 ReleaseResourcesInDataMessage(*message); |
| 693 queue->pop_front(); | 697 queue->pop_front(); |
| 694 delete message; | 698 delete message; |
| 695 } | 699 } |
| 696 } | 700 } |
| OLD | NEW |