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

Side by Side Diff: content/child/npapi/plugin_url_fetcher.cc

Issue 226273005: Remove webkit's ResourceLoaderBridge interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: StartSync -> StartAsync -> Cancel - change StartAsync to request request_id Created 6 years, 8 months 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 #include "content/child/npapi/plugin_url_fetcher.h" 5 #include "content/child/npapi/plugin_url_fetcher.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "content/child/child_thread.h" 8 #include "content/child/child_thread.h"
9 #include "content/child/npapi/plugin_host.h" 9 #include "content/child/npapi/plugin_host.h"
10 #include "content/child/npapi/plugin_instance.h" 10 #include "content/child/npapi/plugin_instance.h"
11 #include "content/child/npapi/plugin_stream_url.h" 11 #include "content/child/npapi/plugin_stream_url.h"
12 #include "content/child/npapi/webplugin.h" 12 #include "content/child/npapi/webplugin.h"
13 #include "content/child/npapi/webplugin_resource_client.h" 13 #include "content/child/npapi/webplugin_resource_client.h"
14 #include "content/child/plugin_messages.h" 14 #include "content/child/plugin_messages.h"
15 #include "content/child/request_extra_data.h" 15 #include "content/child/request_extra_data.h"
16 #include "content/child/request_info.h" 16 #include "content/child/request_info.h"
17 #include "content/child/resource_dispatcher.h" 17 #include "content/child/resource_dispatcher.h"
18 #include "content/child/web_url_loader_impl.h" 18 #include "content/child/web_url_loader_impl.h"
19 #include "content/common/resource_request_body.h" 19 #include "content/common/resource_request_body.h"
20 #include "content/common/service_worker/service_worker_types.h" 20 #include "content/common/service_worker/service_worker_types.h"
21 #include "net/base/load_flags.h" 21 #include "net/base/load_flags.h"
22 #include "net/base/net_errors.h" 22 #include "net/base/net_errors.h"
23 #include "net/http/http_response_headers.h" 23 #include "net/http/http_response_headers.h"
24 #include "third_party/WebKit/public/platform/WebURLLoaderClient.h" 24 #include "third_party/WebKit/public/platform/WebURLLoaderClient.h"
25 #include "third_party/WebKit/public/platform/WebURLResponse.h" 25 #include "third_party/WebKit/public/platform/WebURLResponse.h"
26 #include "webkit/child/multipart_response_delegate.h" 26 #include "webkit/child/multipart_response_delegate.h"
27 #include "webkit/child/resource_loader_bridge.h"
28 #include "webkit/common/resource_response_info.h" 27 #include "webkit/common/resource_response_info.h"
29 28
30 namespace content { 29 namespace content {
31 namespace { 30 namespace {
32 31
33 // This class handles individual multipart responses. It is instantiated when 32 // This class handles individual multipart responses. It is instantiated when
34 // we receive HTTP status code 206 in the HTTP response. This indicates 33 // we receive HTTP status code 206 in the HTTP response. This indicates
35 // that the response could have multiple parts each separated by a boundary 34 // that the response could have multiple parts each separated by a boundary
36 // specified in the response header. 35 // specified in the response header.
37 // TODO(jam): this is similar to MultiPartResponseClient in webplugin_impl.cc, 36 // TODO(jam): this is similar to MultiPartResponseClient in webplugin_impl.cc,
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 method_(method), 95 method_(method),
97 referrer_(referrer), 96 referrer_(referrer),
98 notify_redirects_(notify_redirects), 97 notify_redirects_(notify_redirects),
99 is_plugin_src_load_(is_plugin_src_load), 98 is_plugin_src_load_(is_plugin_src_load),
100 origin_pid_(origin_pid), 99 origin_pid_(origin_pid),
101 render_frame_id_(render_frame_id), 100 render_frame_id_(render_frame_id),
102 render_view_id_(render_view_id), 101 render_view_id_(render_view_id),
103 resource_id_(resource_id), 102 resource_id_(resource_id),
104 copy_stream_data_(copy_stream_data), 103 copy_stream_data_(copy_stream_data),
105 data_offset_(0), 104 data_offset_(0),
106 pending_failure_notification_(false) { 105 pending_failure_notification_(false),
106 request_id_(-1) {
107 RequestInfo request_info; 107 RequestInfo request_info;
108 request_info.method = method; 108 request_info.method = method;
109 request_info.url = url; 109 request_info.url = url;
110 request_info.first_party_for_cookies = first_party_for_cookies; 110 request_info.first_party_for_cookies = first_party_for_cookies;
111 request_info.referrer = referrer; 111 request_info.referrer = referrer;
112 request_info.load_flags = net::LOAD_NORMAL; 112 request_info.load_flags = net::LOAD_NORMAL;
113 request_info.requestor_pid = origin_pid; 113 request_info.requestor_pid = origin_pid;
114 request_info.request_type = ResourceType::OBJECT; 114 request_info.request_type = ResourceType::OBJECT;
115 request_info.routing_id = render_view_id; 115 request_info.routing_id = render_view_id;
116 116
(...skipping 19 matching lines...) Expand all
136 if (!content_type_found) { 136 if (!content_type_found) {
137 if (!request_info.headers.empty()) 137 if (!request_info.headers.empty())
138 request_info.headers += "\r\n"; 138 request_info.headers += "\r\n";
139 request_info.headers += "Content-Type: application/x-www-form-urlencoded"; 139 request_info.headers += "Content-Type: application/x-www-form-urlencoded";
140 } 140 }
141 } else { 141 } else {
142 if (!range.empty()) 142 if (!range.empty())
143 request_info.headers = std::string("Range: ") + range; 143 request_info.headers = std::string("Range: ") + range;
144 } 144 }
145 145
146 bridge_.reset(ChildThread::current()->resource_dispatcher()->CreateBridge( 146 ResourceDispatcher* dispatcher =
147 request_info)); 147 ChildThread::current()->resource_dispatcher();
148
148 if (!body.empty()) { 149 if (!body.empty()) {
149 scoped_refptr<ResourceRequestBody> request_body = 150 scoped_refptr<ResourceRequestBody> request_body = new ResourceRequestBody;
150 new ResourceRequestBody;
151 request_body->AppendBytes(&body[0], body.size()); 151 request_body->AppendBytes(&body[0], body.size());
152 bridge_->SetRequestBody(request_body.get()); 152 request_id_ = dispatcher->StartAsync(request_info, request_body, this);
jam 2014/04/16 16:24:04 the StartAsync needs to move out of this ifdef, ot
tfarina 2014/04/16 22:33:13 Done.
153 } 153 }
154 154
155 bridge_->Start(this);
156
157 // TODO(jam): range requests 155 // TODO(jam): range requests
158 } 156 }
159 157
160 PluginURLFetcher::~PluginURLFetcher() { 158 PluginURLFetcher::~PluginURLFetcher() {
161 } 159 }
162 160
163 void PluginURLFetcher::Cancel() { 161 void PluginURLFetcher::Cancel() {
164 bridge_->Cancel(); 162 ChildThread::current()->resource_dispatcher()->Cancel(request_id_);
165 163
166 // Due to races and nested event loops, PluginURLFetcher may still receive 164 // Due to races and nested event loops, PluginURLFetcher may still receive
167 // events from the bridge before being destroyed. Do not forward additional 165 // events from the bridge before being destroyed. Do not forward additional
168 // events back to the plugin, via either |plugin_stream_| or 166 // events back to the plugin, via either |plugin_stream_| or
169 // |multipart_delegate_| which has its own pointer via 167 // |multipart_delegate_| which has its own pointer via
170 // MultiPartResponseClient. 168 // MultiPartResponseClient.
171 if (multipart_delegate_) 169 if (multipart_delegate_)
172 multipart_delegate_->Cancel(); 170 multipart_delegate_->Cancel();
173 plugin_stream_ = NULL; 171 plugin_stream_ = NULL;
174 } 172 }
175 173
176 void PluginURLFetcher::URLRedirectResponse(bool allow) { 174 void PluginURLFetcher::URLRedirectResponse(bool allow) {
177 if (!plugin_stream_) 175 if (!plugin_stream_)
178 return; 176 return;
179 177
178 ResourceDispatcher* dispatcher =
179 ChildThread::current()->resource_dispatcher();
180
180 if (allow) { 181 if (allow) {
181 bridge_->SetDefersLoading(false); 182 dispatcher->SetDefersLoading(request_id_, false);
182 } else { 183 } else {
183 bridge_->Cancel(); 184 dispatcher->Cancel(request_id_);
184 plugin_stream_->DidFail(resource_id_); // That will delete |this|. 185 plugin_stream_->DidFail(resource_id_); // That will delete |this|.
185 } 186 }
186 } 187 }
187 188
188 void PluginURLFetcher::OnUploadProgress(uint64 position, uint64 size) { 189 void PluginURLFetcher::OnUploadProgress(uint64 position, uint64 size) {
189 } 190 }
190 191
191 bool PluginURLFetcher::OnReceivedRedirect( 192 bool PluginURLFetcher::OnReceivedRedirect(
192 const GURL& new_url, 193 const GURL& new_url,
193 const webkit_glue::ResourceResponseInfo& info, 194 const webkit_glue::ResourceResponseInfo& info,
(...skipping 30 matching lines...) Expand all
224 // If the plugin does not participate in url redirect notifications then just 225 // If the plugin does not participate in url redirect notifications then just
225 // block cross origin 307 POST redirects. 226 // block cross origin 307 POST redirects.
226 if (!notify_redirects_) { 227 if (!notify_redirects_) {
227 if (response_code == 307 && method_ == "POST" && 228 if (response_code == 307 && method_ == "POST" &&
228 old_url.GetOrigin() != new_url.GetOrigin()) { 229 old_url.GetOrigin() != new_url.GetOrigin()) {
229 plugin_stream_->DidFail(resource_id_); // That will delete |this|. 230 plugin_stream_->DidFail(resource_id_); // That will delete |this|.
230 return false; 231 return false;
231 } 232 }
232 } else { 233 } else {
233 // Pause the request while we ask the plugin what to do about the redirect. 234 // Pause the request while we ask the plugin what to do about the redirect.
234 bridge_->SetDefersLoading(true); 235 ResourceDispatcher* dispatcher =
236 ChildThread::current()->resource_dispatcher();
237 dispatcher->SetDefersLoading(request_id_, true);
235 plugin_stream_->WillSendRequest(url_, response_code); 238 plugin_stream_->WillSendRequest(url_, response_code);
236 } 239 }
237 240
238 return true; 241 return true;
239 } 242 }
240 243
241 void PluginURLFetcher::OnReceivedResponse( 244 void PluginURLFetcher::OnReceivedResponse(
242 const webkit_glue::ResourceResponseInfo& info) { 245 const webkit_glue::ResourceResponseInfo& info) {
243 if (!plugin_stream_) 246 if (!plugin_stream_)
244 return; 247 return;
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 } 377 }
375 378
376 if (error_code == net::OK) { 379 if (error_code == net::OK) {
377 plugin_stream_->DidFinishLoading(resource_id_); 380 plugin_stream_->DidFinishLoading(resource_id_);
378 } else { 381 } else {
379 plugin_stream_->DidFail(resource_id_); 382 plugin_stream_->DidFail(resource_id_);
380 } 383 }
381 } 384 }
382 385
383 } // namespace content 386 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698