OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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/network/url_loader_impl.h" | 5 #include "content/network/url_loader_impl.h" |
6 | 6 |
7 #include "base/task_scheduler/post_task.h" | 7 #include "base/task_scheduler/post_task.h" |
8 #include "base/threading/thread_task_runner_handle.h" | 8 #include "base/threading/thread_task_runner_handle.h" |
| 9 #include "content/common/url_loader_factory.mojom.h" |
9 #include "content/network/net_adapters.h" | 10 #include "content/network/net_adapters.h" |
10 #include "content/network/network_context.h" | 11 #include "content/network/network_context.h" |
11 #include "content/public/common/referrer.h" | 12 #include "content/public/common/referrer.h" |
12 #include "content/public/common/resource_response.h" | 13 #include "content/public/common/resource_response.h" |
13 #include "net/base/elements_upload_data_stream.h" | 14 #include "net/base/elements_upload_data_stream.h" |
14 #include "net/base/load_flags.h" | 15 #include "net/base/load_flags.h" |
15 #include "net/base/upload_bytes_element_reader.h" | 16 #include "net/base/upload_bytes_element_reader.h" |
16 #include "net/base/upload_file_element_reader.h" | 17 #include "net/base/upload_file_element_reader.h" |
17 #include "net/url_request/url_request_context.h" | 18 #include "net/url_request/url_request_context.h" |
18 | 19 |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 | 143 |
143 return base::MakeUnique<net::ElementsUploadDataStream>( | 144 return base::MakeUnique<net::ElementsUploadDataStream>( |
144 std::move(element_readers), body->identifier()); | 145 std::move(element_readers), body->identifier()); |
145 } | 146 } |
146 | 147 |
147 } // namespace | 148 } // namespace |
148 | 149 |
149 URLLoaderImpl::URLLoaderImpl( | 150 URLLoaderImpl::URLLoaderImpl( |
150 NetworkContext* context, | 151 NetworkContext* context, |
151 mojom::URLLoaderAssociatedRequest url_loader_request, | 152 mojom::URLLoaderAssociatedRequest url_loader_request, |
| 153 int32_t options, |
152 const ResourceRequest& request, | 154 const ResourceRequest& request, |
153 mojom::URLLoaderClientPtr url_loader_client) | 155 mojom::URLLoaderClientPtr url_loader_client) |
154 : context_(context), | 156 : context_(context), |
| 157 options_(options), |
155 connected_(true), | 158 connected_(true), |
156 binding_(this, std::move(url_loader_request)), | 159 binding_(this, std::move(url_loader_request)), |
157 url_loader_client_(std::move(url_loader_client)), | 160 url_loader_client_(std::move(url_loader_client)), |
158 writable_handle_watcher_(FROM_HERE, | 161 writable_handle_watcher_(FROM_HERE, |
159 mojo::SimpleWatcher::ArmingPolicy::MANUAL), | 162 mojo::SimpleWatcher::ArmingPolicy::MANUAL), |
160 peer_closed_handle_watcher_(FROM_HERE, | 163 peer_closed_handle_watcher_(FROM_HERE, |
161 mojo::SimpleWatcher::ArmingPolicy::MANUAL), | 164 mojo::SimpleWatcher::ArmingPolicy::MANUAL), |
162 weak_ptr_factory_(this) { | 165 weak_ptr_factory_(this) { |
163 binding_.set_connection_error_handler( | 166 binding_.set_connection_error_handler( |
164 base::Bind(&URLLoaderImpl::OnConnectionError, base::Unretained(this))); | 167 base::Bind(&URLLoaderImpl::OnConnectionError, base::Unretained(this))); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 } | 234 } |
232 | 235 |
233 void URLLoaderImpl::OnResponseStarted(net::URLRequest* url_request) { | 236 void URLLoaderImpl::OnResponseStarted(net::URLRequest* url_request) { |
234 DCHECK(url_request == url_request_.get()); | 237 DCHECK(url_request == url_request_.get()); |
235 | 238 |
236 // TODO: Add support for optional MIME sniffing. | 239 // TODO: Add support for optional MIME sniffing. |
237 | 240 |
238 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 241 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
239 PopulateResourceResponse(url_request_.get(), response.get()); | 242 PopulateResourceResponse(url_request_.get(), response.get()); |
240 | 243 |
| 244 base::Optional<net::SSLInfo> ssl_info; |
| 245 if (options_ & mojom::kURLLoadOptionSendSSLInfo) |
| 246 ssl_info = url_request_->ssl_info(); |
241 mojom::DownloadedTempFilePtr downloaded_file_ptr; | 247 mojom::DownloadedTempFilePtr downloaded_file_ptr; |
242 url_loader_client_->OnReceiveResponse(response->head, | 248 url_loader_client_->OnReceiveResponse(response->head, ssl_info, |
243 std::move(downloaded_file_ptr)); | 249 std::move(downloaded_file_ptr)); |
244 | 250 |
245 net::IOBufferWithSize* metadata = url_request->response_info().metadata.get(); | 251 net::IOBufferWithSize* metadata = url_request->response_info().metadata.get(); |
246 if (metadata) { | 252 if (metadata) { |
247 const uint8_t* data = reinterpret_cast<const uint8_t*>(metadata->data()); | 253 const uint8_t* data = reinterpret_cast<const uint8_t*>(metadata->data()); |
248 | 254 |
249 url_loader_client_->OnReceiveCachedMetadata( | 255 url_loader_client_->OnReceiveCachedMetadata( |
250 std::vector<uint8_t>(data, data + metadata->size())); | 256 std::vector<uint8_t>(data, data + metadata->size())); |
251 } | 257 } |
252 | 258 |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
385 ReadMore(); | 391 ReadMore(); |
386 } | 392 } |
387 | 393 |
388 void URLLoaderImpl::DeleteIfNeeded() { | 394 void URLLoaderImpl::DeleteIfNeeded() { |
389 bool has_data_pipe = pending_write_.get() || response_body_stream_.is_valid(); | 395 bool has_data_pipe = pending_write_.get() || response_body_stream_.is_valid(); |
390 if (!connected_ && !has_data_pipe) | 396 if (!connected_ && !has_data_pipe) |
391 delete this; | 397 delete this; |
392 } | 398 } |
393 | 399 |
394 } // namespace content | 400 } // namespace content |
OLD | NEW |