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

Side by Side Diff: content/child/resource_dispatcher.cc

Issue 2459483002: [Mojo-Loading] Dispatch body data after response is received (Closed)
Patch Set: fix Created 4 years, 1 month 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
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 // 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
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
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
OLDNEW
« no previous file with comments | « no previous file | content/child/url_response_body_consumer.h » ('j') | content/child/url_response_body_consumer.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698