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 "base/time/time.h" | 9 #include "base/time/time.h" |
| 10 #include "content/common/url_loader_factory.mojom.h" |
10 #include "content/network/net_adapters.h" | 11 #include "content/network/net_adapters.h" |
11 #include "content/network/network_context.h" | 12 #include "content/network/network_context.h" |
12 #include "content/public/common/referrer.h" | 13 #include "content/public/common/referrer.h" |
13 #include "content/public/common/resource_response.h" | 14 #include "content/public/common/resource_response.h" |
14 #include "net/base/elements_upload_data_stream.h" | 15 #include "net/base/elements_upload_data_stream.h" |
15 #include "net/base/load_flags.h" | 16 #include "net/base/load_flags.h" |
16 #include "net/base/upload_bytes_element_reader.h" | 17 #include "net/base/upload_bytes_element_reader.h" |
17 #include "net/base/upload_file_element_reader.h" | 18 #include "net/base/upload_file_element_reader.h" |
18 #include "net/url_request/url_request_context.h" | 19 #include "net/url_request/url_request_context.h" |
19 | 20 |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 | 149 |
149 return base::MakeUnique<net::ElementsUploadDataStream>( | 150 return base::MakeUnique<net::ElementsUploadDataStream>( |
150 std::move(element_readers), body->identifier()); | 151 std::move(element_readers), body->identifier()); |
151 } | 152 } |
152 | 153 |
153 } // namespace | 154 } // namespace |
154 | 155 |
155 URLLoaderImpl::URLLoaderImpl( | 156 URLLoaderImpl::URLLoaderImpl( |
156 NetworkContext* context, | 157 NetworkContext* context, |
157 mojom::URLLoaderAssociatedRequest url_loader_request, | 158 mojom::URLLoaderAssociatedRequest url_loader_request, |
| 159 int32_t options, |
158 const ResourceRequest& request, | 160 const ResourceRequest& request, |
159 mojom::URLLoaderClientPtr url_loader_client) | 161 mojom::URLLoaderClientPtr url_loader_client) |
160 : context_(context), | 162 : context_(context), |
| 163 options_(options), |
161 connected_(true), | 164 connected_(true), |
162 binding_(this, std::move(url_loader_request)), | 165 binding_(this, std::move(url_loader_request)), |
163 url_loader_client_(std::move(url_loader_client)), | 166 url_loader_client_(std::move(url_loader_client)), |
164 writable_handle_watcher_(FROM_HERE, | 167 writable_handle_watcher_(FROM_HERE, |
165 mojo::SimpleWatcher::ArmingPolicy::MANUAL), | 168 mojo::SimpleWatcher::ArmingPolicy::MANUAL), |
166 peer_closed_handle_watcher_(FROM_HERE, | 169 peer_closed_handle_watcher_(FROM_HERE, |
167 mojo::SimpleWatcher::ArmingPolicy::MANUAL), | 170 mojo::SimpleWatcher::ArmingPolicy::MANUAL), |
168 weak_ptr_factory_(this) { | 171 weak_ptr_factory_(this) { |
169 binding_.set_connection_error_handler( | 172 binding_.set_connection_error_handler( |
170 base::Bind(&URLLoaderImpl::OnConnectionError, base::Unretained(this))); | 173 base::Bind(&URLLoaderImpl::OnConnectionError, base::Unretained(this))); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 | 242 |
240 void URLLoaderImpl::OnResponseStarted(net::URLRequest* url_request) { | 243 void URLLoaderImpl::OnResponseStarted(net::URLRequest* url_request) { |
241 DCHECK(url_request == url_request_.get()); | 244 DCHECK(url_request == url_request_.get()); |
242 | 245 |
243 // TODO: Add support for optional MIME sniffing. | 246 // TODO: Add support for optional MIME sniffing. |
244 | 247 |
245 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 248 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
246 PopulateResourceResponse(url_request_.get(), response.get()); | 249 PopulateResourceResponse(url_request_.get(), response.get()); |
247 response->head.encoded_data_length = url_request_->raw_header_size(); | 250 response->head.encoded_data_length = url_request_->raw_header_size(); |
248 | 251 |
| 252 base::Optional<net::SSLInfo> ssl_info; |
| 253 if (options_ & mojom::kURLLoadOptionSendSSLInfo) |
| 254 ssl_info = url_request_->ssl_info(); |
249 mojom::DownloadedTempFilePtr downloaded_file_ptr; | 255 mojom::DownloadedTempFilePtr downloaded_file_ptr; |
250 url_loader_client_->OnReceiveResponse(response->head, | 256 url_loader_client_->OnReceiveResponse(response->head, ssl_info, |
251 std::move(downloaded_file_ptr)); | 257 std::move(downloaded_file_ptr)); |
252 | 258 |
253 net::IOBufferWithSize* metadata = url_request->response_info().metadata.get(); | 259 net::IOBufferWithSize* metadata = url_request->response_info().metadata.get(); |
254 if (metadata) { | 260 if (metadata) { |
255 const uint8_t* data = reinterpret_cast<const uint8_t*>(metadata->data()); | 261 const uint8_t* data = reinterpret_cast<const uint8_t*>(metadata->data()); |
256 | 262 |
257 url_loader_client_->OnReceiveCachedMetadata( | 263 url_loader_client_->OnReceiveCachedMetadata( |
258 std::vector<uint8_t>(data, data + metadata->size())); | 264 std::vector<uint8_t>(data, data + metadata->size())); |
259 } | 265 } |
260 | 266 |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 ReadMore(); | 399 ReadMore(); |
394 } | 400 } |
395 | 401 |
396 void URLLoaderImpl::DeleteIfNeeded() { | 402 void URLLoaderImpl::DeleteIfNeeded() { |
397 bool has_data_pipe = pending_write_.get() || response_body_stream_.is_valid(); | 403 bool has_data_pipe = pending_write_.get() || response_body_stream_.is_valid(); |
398 if (!connected_ && !has_data_pipe) | 404 if (!connected_ && !has_data_pipe) |
399 delete this; | 405 delete this; |
400 } | 406 } |
401 | 407 |
402 } // namespace content | 408 } // namespace content |
OLD | NEW |