| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/browser/loader/mojo_async_resource_handler.h" | 5 #include "content/browser/loader/mojo_async_resource_handler.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 void InitializeResourceBufferConstants() { | 55 void InitializeResourceBufferConstants() { |
| 56 static bool did_init = false; | 56 static bool did_init = false; |
| 57 if (did_init) | 57 if (did_init) |
| 58 return; | 58 return; |
| 59 did_init = true; | 59 did_init = true; |
| 60 | 60 |
| 61 GetNumericArg("resource-buffer-size", &g_allocation_size); | 61 GetNumericArg("resource-buffer-size", &g_allocation_size); |
| 62 } | 62 } |
| 63 | 63 |
| 64 void NotReached(mojom::URLLoaderAssociatedRequest mojo_request, | 64 void NotReached(mojom::URLLoaderAssociatedRequest mojo_request, |
| 65 mojom::URLLoaderClientAssociatedPtr url_loader_client) { | 65 mojom::URLLoaderClientPtr url_loader_client) { |
| 66 NOTREACHED(); | 66 NOTREACHED(); |
| 67 } | 67 } |
| 68 | 68 |
| 69 } // namespace | 69 } // namespace |
| 70 | 70 |
| 71 // This class is for sharing the ownership of a ScopedDataPipeProducerHandle | 71 // This class is for sharing the ownership of a ScopedDataPipeProducerHandle |
| 72 // between WriterIOBuffer and MojoAsyncResourceHandler. | 72 // between WriterIOBuffer and MojoAsyncResourceHandler. |
| 73 class MojoAsyncResourceHandler::SharedWriter final | 73 class MojoAsyncResourceHandler::SharedWriter final |
| 74 : public base::RefCountedThreadSafe<SharedWriter> { | 74 : public base::RefCountedThreadSafe<SharedWriter> { |
| 75 public: | 75 public: |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 // This member is for keeping the writer alive. | 110 // This member is for keeping the writer alive. |
| 111 scoped_refptr<SharedWriter> writer_; | 111 scoped_refptr<SharedWriter> writer_; |
| 112 | 112 |
| 113 DISALLOW_COPY_AND_ASSIGN(WriterIOBuffer); | 113 DISALLOW_COPY_AND_ASSIGN(WriterIOBuffer); |
| 114 }; | 114 }; |
| 115 | 115 |
| 116 MojoAsyncResourceHandler::MojoAsyncResourceHandler( | 116 MojoAsyncResourceHandler::MojoAsyncResourceHandler( |
| 117 net::URLRequest* request, | 117 net::URLRequest* request, |
| 118 ResourceDispatcherHostImpl* rdh, | 118 ResourceDispatcherHostImpl* rdh, |
| 119 mojom::URLLoaderAssociatedRequest mojo_request, | 119 mojom::URLLoaderAssociatedRequest mojo_request, |
| 120 mojom::URLLoaderClientAssociatedPtr url_loader_client, | 120 mojom::URLLoaderClientPtr url_loader_client, |
| 121 ResourceType resource_type) | 121 ResourceType resource_type) |
| 122 : ResourceHandler(request), | 122 : ResourceHandler(request), |
| 123 rdh_(rdh), | 123 rdh_(rdh), |
| 124 binding_(this, std::move(mojo_request)), | 124 binding_(this, std::move(mojo_request)), |
| 125 handle_watcher_(FROM_HERE), | 125 handle_watcher_(FROM_HERE), |
| 126 url_loader_client_(std::move(url_loader_client)), | 126 url_loader_client_(std::move(url_loader_client)), |
| 127 weak_factory_(this) { | 127 weak_factory_(this) { |
| 128 DCHECK(url_loader_client_); | 128 DCHECK(url_loader_client_); |
| 129 InitializeResourceBufferConstants(); | 129 InitializeResourceBufferConstants(); |
| 130 // This unretained pointer is safe, because |binding_| is owned by |this| and | 130 // This unretained pointer is safe, because |binding_| is owned by |this| and |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 } | 186 } |
| 187 | 187 |
| 188 NetLogObserver::PopulateResponseInfo(request(), response); | 188 NetLogObserver::PopulateResponseInfo(request(), response); |
| 189 response->head.encoded_data_length = request()->raw_header_size(); | 189 response->head.encoded_data_length = request()->raw_header_size(); |
| 190 reported_total_received_bytes_ = response->head.encoded_data_length; | 190 reported_total_received_bytes_ = response->head.encoded_data_length; |
| 191 | 191 |
| 192 response->head.request_start = request()->creation_time(); | 192 response->head.request_start = request()->creation_time(); |
| 193 response->head.response_start = base::TimeTicks::Now(); | 193 response->head.response_start = base::TimeTicks::Now(); |
| 194 sent_received_response_message_ = true; | 194 sent_received_response_message_ = true; |
| 195 | 195 |
| 196 mojom::DownloadedTempFileAssociatedPtrInfo downloaded_file_ptr; | 196 mojom::DownloadedTempFilePtr downloaded_file_ptr; |
| 197 if (!response->head.download_file_path.empty()) { | 197 if (!response->head.download_file_path.empty()) { |
| 198 downloaded_file_ptr = DownloadedTempFileImpl::Create(info->GetChildID(), | 198 downloaded_file_ptr = DownloadedTempFileImpl::Create(info->GetChildID(), |
| 199 info->GetRequestID()); | 199 info->GetRequestID()); |
| 200 rdh_->RegisterDownloadedTempFile(info->GetChildID(), info->GetRequestID(), | 200 rdh_->RegisterDownloadedTempFile(info->GetChildID(), info->GetRequestID(), |
| 201 response->head.download_file_path); | 201 response->head.download_file_path); |
| 202 } | 202 } |
| 203 | 203 |
| 204 url_loader_client_->OnReceiveResponse(response->head, | 204 url_loader_client_->OnReceiveResponse(response->head, |
| 205 std::move(downloaded_file_ptr)); | 205 std::move(downloaded_file_ptr)); |
| 206 | 206 |
| (...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 554 std::unique_ptr<UploadProgressTracker> | 554 std::unique_ptr<UploadProgressTracker> |
| 555 MojoAsyncResourceHandler::CreateUploadProgressTracker( | 555 MojoAsyncResourceHandler::CreateUploadProgressTracker( |
| 556 const tracked_objects::Location& from_here, | 556 const tracked_objects::Location& from_here, |
| 557 UploadProgressTracker::UploadProgressReportCallback callback) { | 557 UploadProgressTracker::UploadProgressReportCallback callback) { |
| 558 return base::MakeUnique<UploadProgressTracker>(from_here, std::move(callback), | 558 return base::MakeUnique<UploadProgressTracker>(from_here, std::move(callback), |
| 559 request()); | 559 request()); |
| 560 } | 560 } |
| 561 | 561 |
| 562 void MojoAsyncResourceHandler::OnTransfer( | 562 void MojoAsyncResourceHandler::OnTransfer( |
| 563 mojom::URLLoaderAssociatedRequest mojo_request, | 563 mojom::URLLoaderAssociatedRequest mojo_request, |
| 564 mojom::URLLoaderClientAssociatedPtr url_loader_client) { | 564 mojom::URLLoaderClientPtr url_loader_client) { |
| 565 binding_.Unbind(); | 565 binding_.Unbind(); |
| 566 binding_.Bind(std::move(mojo_request)); | 566 binding_.Bind(std::move(mojo_request)); |
| 567 binding_.set_connection_error_handler( | 567 binding_.set_connection_error_handler( |
| 568 base::Bind(&MojoAsyncResourceHandler::Cancel, base::Unretained(this))); | 568 base::Bind(&MojoAsyncResourceHandler::Cancel, base::Unretained(this))); |
| 569 url_loader_client_ = std::move(url_loader_client); | 569 url_loader_client_ = std::move(url_loader_client); |
| 570 } | 570 } |
| 571 | 571 |
| 572 void MojoAsyncResourceHandler::SendUploadProgress( | 572 void MojoAsyncResourceHandler::SendUploadProgress( |
| 573 const net::UploadProgress& progress) { | 573 const net::UploadProgress& progress) { |
| 574 url_loader_client_->OnUploadProgress( | 574 url_loader_client_->OnUploadProgress( |
| 575 progress.position(), progress.size(), | 575 progress.position(), progress.size(), |
| 576 base::Bind(&MojoAsyncResourceHandler::OnUploadProgressACK, | 576 base::Bind(&MojoAsyncResourceHandler::OnUploadProgressACK, |
| 577 weak_factory_.GetWeakPtr())); | 577 weak_factory_.GetWeakPtr())); |
| 578 } | 578 } |
| 579 | 579 |
| 580 void MojoAsyncResourceHandler::OnUploadProgressACK() { | 580 void MojoAsyncResourceHandler::OnUploadProgressACK() { |
| 581 if (upload_progress_tracker_) | 581 if (upload_progress_tracker_) |
| 582 upload_progress_tracker_->OnAckReceived(); | 582 upload_progress_tracker_->OnAckReceived(); |
| 583 } | 583 } |
| 584 | 584 |
| 585 } // namespace content | 585 } // namespace content |
| OLD | NEW |