| 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 |