| 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 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 : binding_(this), | 82 : binding_(this), |
| 83 request_id_(request_id), | 83 request_id_(request_id), |
| 84 resource_dispatcher_(resource_dispatcher), | 84 resource_dispatcher_(resource_dispatcher), |
| 85 task_runner_(std::move(task_runner)) {} | 85 task_runner_(std::move(task_runner)) {} |
| 86 ~URLLoaderClientImpl() override { | 86 ~URLLoaderClientImpl() override { |
| 87 if (body_consumer_) | 87 if (body_consumer_) |
| 88 body_consumer_->Cancel(); | 88 body_consumer_->Cancel(); |
| 89 } | 89 } |
| 90 | 90 |
| 91 void OnReceiveResponse(const ResourceResponseHead& response_head) override { | 91 void OnReceiveResponse(const ResourceResponseHead& response_head) override { |
| 92 has_received_response_ = true; |
| 93 if (body_consumer_) |
| 94 body_consumer_->Start(task_runner_.get()); |
| 92 resource_dispatcher_->OnMessageReceived( | 95 resource_dispatcher_->OnMessageReceived( |
| 93 ResourceMsg_ReceivedResponse(request_id_, response_head)); | 96 ResourceMsg_ReceivedResponse(request_id_, response_head)); |
| 94 } | 97 } |
| 95 | 98 |
| 96 void OnStartLoadingResponseBody( | 99 void OnStartLoadingResponseBody( |
| 97 mojo::ScopedDataPipeConsumerHandle body) override { | 100 mojo::ScopedDataPipeConsumerHandle body) override { |
| 98 DCHECK(!body_consumer_); | 101 DCHECK(!body_consumer_); |
| 99 body_consumer_ = new URLResponseBodyConsumer( | 102 body_consumer_ = new URLResponseBodyConsumer( |
| 100 request_id_, resource_dispatcher_, std::move(body), task_runner_); | 103 request_id_, resource_dispatcher_, std::move(body), task_runner_); |
| 104 if (has_received_response_) |
| 105 body_consumer_->Start(task_runner_.get()); |
| 101 } | 106 } |
| 102 | 107 |
| 103 void OnComplete(const ResourceRequestCompletionStatus& status) override { | 108 void OnComplete(const ResourceRequestCompletionStatus& status) override { |
| 104 if (!body_consumer_) { | 109 if (!body_consumer_) { |
| 105 resource_dispatcher_->OnMessageReceived( | 110 resource_dispatcher_->OnMessageReceived( |
| 106 ResourceMsg_RequestComplete(request_id_, status)); | 111 ResourceMsg_RequestComplete(request_id_, status)); |
| 107 return; | 112 return; |
| 108 } | 113 } |
| 109 body_consumer_->OnComplete(status); | 114 body_consumer_->OnComplete(status); |
| 110 } | 115 } |
| 111 | 116 |
| 112 mojom::URLLoaderClientPtr CreateInterfacePtrAndBind() { | 117 mojom::URLLoaderClientPtr CreateInterfacePtrAndBind() { |
| 113 return binding_.CreateInterfacePtrAndBind(); | 118 return binding_.CreateInterfacePtrAndBind(); |
| 114 } | 119 } |
| 115 | 120 |
| 116 private: | 121 private: |
| 117 mojo::Binding<mojom::URLLoaderClient> binding_; | 122 mojo::Binding<mojom::URLLoaderClient> binding_; |
| 118 scoped_refptr<URLResponseBodyConsumer> body_consumer_; | 123 scoped_refptr<URLResponseBodyConsumer> body_consumer_; |
| 119 const int request_id_; | 124 const int request_id_; |
| 125 bool has_received_response_ = false; |
| 120 ResourceDispatcher* const resource_dispatcher_; | 126 ResourceDispatcher* const resource_dispatcher_; |
| 121 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; | 127 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| 122 }; | 128 }; |
| 123 | 129 |
| 124 void CheckSchemeForReferrerPolicy(const ResourceRequest& request) { | 130 void CheckSchemeForReferrerPolicy(const ResourceRequest& request) { |
| 125 if ((request.referrer_policy == blink::WebReferrerPolicyDefault || | 131 if ((request.referrer_policy == blink::WebReferrerPolicyDefault || |
| 126 request.referrer_policy == | 132 request.referrer_policy == |
| 127 blink::WebReferrerPolicyNoReferrerWhenDowngrade) && | 133 blink::WebReferrerPolicyNoReferrerWhenDowngrade) && |
| 128 request.referrer.SchemeIsCryptographic() && | 134 request.referrer.SchemeIsCryptographic() && |
| 129 !request.url.SchemeIsCryptographic()) { | 135 !request.url.SchemeIsCryptographic()) { |
| (...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 823 delete message; | 829 delete message; |
| 824 } | 830 } |
| 825 } | 831 } |
| 826 | 832 |
| 827 void ResourceDispatcher::SetResourceSchedulingFilter( | 833 void ResourceDispatcher::SetResourceSchedulingFilter( |
| 828 scoped_refptr<ResourceSchedulingFilter> resource_scheduling_filter) { | 834 scoped_refptr<ResourceSchedulingFilter> resource_scheduling_filter) { |
| 829 resource_scheduling_filter_ = resource_scheduling_filter; | 835 resource_scheduling_filter_ = resource_scheduling_filter; |
| 830 } | 836 } |
| 831 | 837 |
| 832 } // namespace content | 838 } // namespace content |
| OLD | NEW |