| 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/child/resource_dispatcher.h" | 7 #include "content/child/resource_dispatcher.h" |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 #include "build/build_config.h" | 24 #include "build/build_config.h" |
| 25 #include "content/child/request_extra_data.h" | 25 #include "content/child/request_extra_data.h" |
| 26 #include "content/child/request_info.h" | 26 #include "content/child/request_info.h" |
| 27 #include "content/child/resource_scheduling_filter.h" | 27 #include "content/child/resource_scheduling_filter.h" |
| 28 #include "content/child/shared_memory_received_data_factory.h" | 28 #include "content/child/shared_memory_received_data_factory.h" |
| 29 #include "content/child/site_isolation_stats_gatherer.h" | 29 #include "content/child/site_isolation_stats_gatherer.h" |
| 30 #include "content/child/sync_load_response.h" | 30 #include "content/child/sync_load_response.h" |
| 31 #include "content/common/inter_process_time_ticks_converter.h" | 31 #include "content/common/inter_process_time_ticks_converter.h" |
| 32 #include "content/common/navigation_params.h" | 32 #include "content/common/navigation_params.h" |
| 33 #include "content/common/resource_messages.h" | 33 #include "content/common/resource_messages.h" |
| 34 #include "content/common/resource_request.h" |
| 35 #include "content/common/resource_request_completion_status.h" |
| 34 #include "content/public/child/fixed_received_data.h" | 36 #include "content/public/child/fixed_received_data.h" |
| 35 #include "content/public/child/request_peer.h" | 37 #include "content/public/child/request_peer.h" |
| 36 #include "content/public/child/resource_dispatcher_delegate.h" | 38 #include "content/public/child/resource_dispatcher_delegate.h" |
| 37 #include "content/public/common/content_features.h" | 39 #include "content/public/common/content_features.h" |
| 38 #include "content/public/common/resource_response.h" | 40 #include "content/public/common/resource_response.h" |
| 39 #include "content/public/common/resource_type.h" | 41 #include "content/public/common/resource_type.h" |
| 40 #include "net/base/net_errors.h" | 42 #include "net/base/net_errors.h" |
| 41 #include "net/base/request_priority.h" | 43 #include "net/base/request_priority.h" |
| 42 #include "net/http/http_response_headers.h" | 44 #include "net/http/http_response_headers.h" |
| 43 | 45 |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 334 void ResourceDispatcher::FollowPendingRedirect( | 336 void ResourceDispatcher::FollowPendingRedirect( |
| 335 int request_id, | 337 int request_id, |
| 336 PendingRequestInfo* request_info) { | 338 PendingRequestInfo* request_info) { |
| 337 IPC::Message* msg = request_info->pending_redirect_message.release(); | 339 IPC::Message* msg = request_info->pending_redirect_message.release(); |
| 338 if (msg) | 340 if (msg) |
| 339 message_sender_->Send(msg); | 341 message_sender_->Send(msg); |
| 340 } | 342 } |
| 341 | 343 |
| 342 void ResourceDispatcher::OnRequestComplete( | 344 void ResourceDispatcher::OnRequestComplete( |
| 343 int request_id, | 345 int request_id, |
| 344 const ResourceMsg_RequestCompleteData& request_complete_data) { | 346 const ResourceRequestCompletionStatus& request_complete_data) { |
| 345 TRACE_EVENT0("loader", "ResourceDispatcher::OnRequestComplete"); | 347 TRACE_EVENT0("loader", "ResourceDispatcher::OnRequestComplete"); |
| 346 | 348 |
| 347 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id); | 349 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id); |
| 348 if (!request_info) | 350 if (!request_info) |
| 349 return; | 351 return; |
| 350 request_info->completion_time = ConsumeIOTimestamp(); | 352 request_info->completion_time = ConsumeIOTimestamp(); |
| 351 request_info->buffer.reset(); | 353 request_info->buffer.reset(); |
| 352 if (request_info->received_data_factory) | 354 if (request_info->received_data_factory) |
| 353 request_info->received_data_factory->Stop(); | 355 request_info->received_data_factory->Stop(); |
| 354 request_info->received_data_factory = nullptr; | 356 request_info->received_data_factory = nullptr; |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 pending_request->deferred_message_queue.swap(q); | 537 pending_request->deferred_message_queue.swap(q); |
| 536 return; | 538 return; |
| 537 } | 539 } |
| 538 } | 540 } |
| 539 } | 541 } |
| 540 } | 542 } |
| 541 | 543 |
| 542 void ResourceDispatcher::StartSync(const RequestInfo& request_info, | 544 void ResourceDispatcher::StartSync(const RequestInfo& request_info, |
| 543 ResourceRequestBody* request_body, | 545 ResourceRequestBody* request_body, |
| 544 SyncLoadResponse* response) { | 546 SyncLoadResponse* response) { |
| 545 std::unique_ptr<ResourceHostMsg_Request> request = | 547 std::unique_ptr<ResourceRequest> request = |
| 546 CreateRequest(request_info, request_body, NULL); | 548 CreateRequest(request_info, request_body, NULL); |
| 547 | 549 |
| 548 SyncLoadResult result; | 550 SyncLoadResult result; |
| 549 IPC::SyncMessage* msg = new ResourceHostMsg_SyncLoad( | 551 IPC::SyncMessage* msg = new ResourceHostMsg_SyncLoad( |
| 550 request_info.routing_id, MakeRequestID(), *request, &result); | 552 request_info.routing_id, MakeRequestID(), *request, &result); |
| 551 | 553 |
| 552 // NOTE: This may pump events (see RenderThread::Send). | 554 // NOTE: This may pump events (see RenderThread::Send). |
| 553 if (!message_sender_->Send(msg)) { | 555 if (!message_sender_->Send(msg)) { |
| 554 response->error_code = net::ERR_FAILED; | 556 response->error_code = net::ERR_FAILED; |
| 555 return; | 557 return; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 567 response->devtools_info = result.devtools_info; | 569 response->devtools_info = result.devtools_info; |
| 568 response->data.swap(result.data); | 570 response->data.swap(result.data); |
| 569 response->download_file_path = result.download_file_path; | 571 response->download_file_path = result.download_file_path; |
| 570 response->socket_address = result.socket_address; | 572 response->socket_address = result.socket_address; |
| 571 } | 573 } |
| 572 | 574 |
| 573 int ResourceDispatcher::StartAsync(const RequestInfo& request_info, | 575 int ResourceDispatcher::StartAsync(const RequestInfo& request_info, |
| 574 ResourceRequestBody* request_body, | 576 ResourceRequestBody* request_body, |
| 575 std::unique_ptr<RequestPeer> peer) { | 577 std::unique_ptr<RequestPeer> peer) { |
| 576 GURL frame_origin; | 578 GURL frame_origin; |
| 577 std::unique_ptr<ResourceHostMsg_Request> request = | 579 std::unique_ptr<ResourceRequest> request = |
| 578 CreateRequest(request_info, request_body, &frame_origin); | 580 CreateRequest(request_info, request_body, &frame_origin); |
| 579 | 581 |
| 580 // Compute a unique request_id for this renderer process. | 582 // Compute a unique request_id for this renderer process. |
| 581 int request_id = MakeRequestID(); | 583 int request_id = MakeRequestID(); |
| 582 pending_requests_[request_id] = base::WrapUnique(new PendingRequestInfo( | 584 pending_requests_[request_id] = base::WrapUnique(new PendingRequestInfo( |
| 583 std::move(peer), request->resource_type, request->origin_pid, | 585 std::move(peer), request->resource_type, request->origin_pid, |
| 584 frame_origin, request->url, request_info.download_to_file)); | 586 frame_origin, request->url, request_info.download_to_file)); |
| 585 | 587 |
| 586 if (resource_scheduling_filter_.get() && | 588 if (resource_scheduling_filter_.get() && |
| 587 request_info.loading_web_task_runner) { | 589 request_info.loading_web_task_runner) { |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 723 // static | 725 // static |
| 724 void ResourceDispatcher::ReleaseResourcesInMessageQueue(MessageQueue* queue) { | 726 void ResourceDispatcher::ReleaseResourcesInMessageQueue(MessageQueue* queue) { |
| 725 while (!queue->empty()) { | 727 while (!queue->empty()) { |
| 726 IPC::Message* message = queue->front(); | 728 IPC::Message* message = queue->front(); |
| 727 ReleaseResourcesInDataMessage(*message); | 729 ReleaseResourcesInDataMessage(*message); |
| 728 queue->pop_front(); | 730 queue->pop_front(); |
| 729 delete message; | 731 delete message; |
| 730 } | 732 } |
| 731 } | 733 } |
| 732 | 734 |
| 733 std::unique_ptr<ResourceHostMsg_Request> ResourceDispatcher::CreateRequest( | 735 std::unique_ptr<ResourceRequest> ResourceDispatcher::CreateRequest( |
| 734 const RequestInfo& request_info, | 736 const RequestInfo& request_info, |
| 735 ResourceRequestBody* request_body, | 737 ResourceRequestBody* request_body, |
| 736 GURL* frame_origin) { | 738 GURL* frame_origin) { |
| 737 std::unique_ptr<ResourceHostMsg_Request> request(new ResourceHostMsg_Request); | 739 std::unique_ptr<ResourceRequest> request(new ResourceRequest); |
| 738 request->method = request_info.method; | 740 request->method = request_info.method; |
| 739 request->url = request_info.url; | 741 request->url = request_info.url; |
| 740 request->first_party_for_cookies = request_info.first_party_for_cookies; | 742 request->first_party_for_cookies = request_info.first_party_for_cookies; |
| 741 request->request_initiator = request_info.request_initiator; | 743 request->request_initiator = request_info.request_initiator; |
| 742 request->referrer = request_info.referrer.url; | 744 request->referrer = request_info.referrer.url; |
| 743 request->referrer_policy = request_info.referrer.policy; | 745 request->referrer_policy = request_info.referrer.policy; |
| 744 request->headers = request_info.headers; | 746 request->headers = request_info.headers; |
| 745 request->load_flags = request_info.load_flags; | 747 request->load_flags = request_info.load_flags; |
| 746 request->origin_pid = request_info.requestor_pid; | 748 request->origin_pid = request_info.requestor_pid; |
| 747 request->resource_type = request_info.request_type; | 749 request->resource_type = request_info.request_type; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 803 *frame_origin = extra_data->frame_origin(); | 805 *frame_origin = extra_data->frame_origin(); |
| 804 return request; | 806 return request; |
| 805 } | 807 } |
| 806 | 808 |
| 807 void ResourceDispatcher::SetResourceSchedulingFilter( | 809 void ResourceDispatcher::SetResourceSchedulingFilter( |
| 808 scoped_refptr<ResourceSchedulingFilter> resource_scheduling_filter) { | 810 scoped_refptr<ResourceSchedulingFilter> resource_scheduling_filter) { |
| 809 resource_scheduling_filter_ = resource_scheduling_filter; | 811 resource_scheduling_filter_ = resource_scheduling_filter; |
| 810 } | 812 } |
| 811 | 813 |
| 812 } // namespace content | 814 } // namespace content |
| OLD | NEW |