| 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 <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 11 #include "base/command_line.h" |
| 11 #include "base/containers/hash_tables.h" | 12 #include "base/containers/hash_tables.h" |
| 12 #include "base/logging.h" | 13 #include "base/logging.h" |
| 13 #include "base/macros.h" | 14 #include "base/macros.h" |
| 14 #include "base/strings/string_number_conversions.h" | 15 #include "base/strings/string_number_conversions.h" |
| 15 #include "base/time/time.h" | 16 #include "base/time/time.h" |
| 16 #include "content/browser/loader/downloaded_temp_file_impl.h" | 17 #include "content/browser/loader/downloaded_temp_file_impl.h" |
| 17 #include "content/browser/loader/netlog_observer.h" | 18 #include "content/browser/loader/netlog_observer.h" |
| 18 #include "content/browser/loader/resource_controller.h" | 19 #include "content/browser/loader/resource_controller.h" |
| 19 #include "content/browser/loader/resource_dispatcher_host_impl.h" | 20 #include "content/browser/loader/resource_dispatcher_host_impl.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 50 | 51 |
| 51 void InitializeResourceBufferConstants() { | 52 void InitializeResourceBufferConstants() { |
| 52 static bool did_init = false; | 53 static bool did_init = false; |
| 53 if (did_init) | 54 if (did_init) |
| 54 return; | 55 return; |
| 55 did_init = true; | 56 did_init = true; |
| 56 | 57 |
| 57 GetNumericArg("resource-buffer-size", &g_allocation_size); | 58 GetNumericArg("resource-buffer-size", &g_allocation_size); |
| 58 } | 59 } |
| 59 | 60 |
| 61 void NotReached(mojom::URLLoaderAssociatedRequest mojo_request, |
| 62 mojom::URLLoaderClientAssociatedPtr url_loader_client) { |
| 63 NOTREACHED(); |
| 64 } |
| 65 |
| 60 } // namespace | 66 } // namespace |
| 61 | 67 |
| 62 // This class is for sharing the ownership of a ScopedDataPipeProducerHandle | 68 // This class is for sharing the ownership of a ScopedDataPipeProducerHandle |
| 63 // between WriterIOBuffer and MojoAsyncResourceHandler. | 69 // between WriterIOBuffer and MojoAsyncResourceHandler. |
| 64 class MojoAsyncResourceHandler::SharedWriter final | 70 class MojoAsyncResourceHandler::SharedWriter final |
| 65 : public base::RefCountedThreadSafe<SharedWriter> { | 71 : public base::RefCountedThreadSafe<SharedWriter> { |
| 66 public: | 72 public: |
| 67 explicit SharedWriter(mojo::ScopedDataPipeProducerHandle writer) | 73 explicit SharedWriter(mojo::ScopedDataPipeProducerHandle writer) |
| 68 : writer_(std::move(writer)) {} | 74 : writer_(std::move(writer)) {} |
| 69 mojo::DataPipeProducerHandle writer() { return writer_.get(); } | 75 mojo::DataPipeProducerHandle writer() { return writer_.get(); } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 // This member is for keeping the writer alive. | 107 // This member is for keeping the writer alive. |
| 102 scoped_refptr<SharedWriter> writer_; | 108 scoped_refptr<SharedWriter> writer_; |
| 103 | 109 |
| 104 DISALLOW_COPY_AND_ASSIGN(WriterIOBuffer); | 110 DISALLOW_COPY_AND_ASSIGN(WriterIOBuffer); |
| 105 }; | 111 }; |
| 106 | 112 |
| 107 MojoAsyncResourceHandler::MojoAsyncResourceHandler( | 113 MojoAsyncResourceHandler::MojoAsyncResourceHandler( |
| 108 net::URLRequest* request, | 114 net::URLRequest* request, |
| 109 ResourceDispatcherHostImpl* rdh, | 115 ResourceDispatcherHostImpl* rdh, |
| 110 mojom::URLLoaderAssociatedRequest mojo_request, | 116 mojom::URLLoaderAssociatedRequest mojo_request, |
| 111 mojom::URLLoaderClientAssociatedPtr url_loader_client) | 117 mojom::URLLoaderClientAssociatedPtr url_loader_client, |
| 118 ResourceType resource_type) |
| 112 : ResourceHandler(request), | 119 : ResourceHandler(request), |
| 113 rdh_(rdh), | 120 rdh_(rdh), |
| 114 binding_(this, std::move(mojo_request)), | 121 binding_(this, std::move(mojo_request)), |
| 115 url_loader_client_(std::move(url_loader_client)), | 122 url_loader_client_(std::move(url_loader_client)), |
| 116 weak_factory_(this) { | 123 weak_factory_(this) { |
| 117 DCHECK(url_loader_client_); | 124 DCHECK(url_loader_client_); |
| 118 InitializeResourceBufferConstants(); | 125 InitializeResourceBufferConstants(); |
| 119 // This unretained pointer is safe, because |binding_| is owned by |this| and | 126 // This unretained pointer is safe, because |binding_| is owned by |this| and |
| 120 // the callback will never be called after |this| is destroyed. | 127 // the callback will never be called after |this| is destroyed. |
| 121 binding_.set_connection_error_handler( | 128 binding_.set_connection_error_handler( |
| 122 base::Bind(&MojoAsyncResourceHandler::Cancel, base::Unretained(this))); | 129 base::Bind(&MojoAsyncResourceHandler::Cancel, base::Unretained(this))); |
| 123 | 130 |
| 124 GetRequestInfo()->set_on_transfer(base::Bind( | 131 if (IsResourceTypeFrame(resource_type)) { |
| 125 &MojoAsyncResourceHandler::OnTransfer, weak_factory_.GetWeakPtr())); | 132 GetRequestInfo()->set_on_transfer(base::Bind( |
| 133 &MojoAsyncResourceHandler::OnTransfer, weak_factory_.GetWeakPtr())); |
| 134 } else { |
| 135 GetRequestInfo()->set_on_transfer(base::Bind(&NotReached)); |
| 136 } |
| 126 } | 137 } |
| 127 | 138 |
| 128 MojoAsyncResourceHandler::~MojoAsyncResourceHandler() { | 139 MojoAsyncResourceHandler::~MojoAsyncResourceHandler() { |
| 129 if (has_checked_for_sufficient_resources_) | 140 if (has_checked_for_sufficient_resources_) |
| 130 rdh_->FinishedWithResourcesForRequest(request()); | 141 rdh_->FinishedWithResourcesForRequest(request()); |
| 131 } | 142 } |
| 132 | 143 |
| 133 bool MojoAsyncResourceHandler::OnRequestRedirected( | 144 bool MojoAsyncResourceHandler::OnRequestRedirected( |
| 134 const net::RedirectInfo& redirect_info, | 145 const net::RedirectInfo& redirect_info, |
| 135 ResourceResponse* response, | 146 ResourceResponse* response, |
| (...skipping 28 matching lines...) Expand all Loading... |
| 164 } | 175 } |
| 165 | 176 |
| 166 NetLogObserver::PopulateResponseInfo(request(), response); | 177 NetLogObserver::PopulateResponseInfo(request(), response); |
| 167 response->head.encoded_data_length = request()->raw_header_size(); | 178 response->head.encoded_data_length = request()->raw_header_size(); |
| 168 reported_total_received_bytes_ = response->head.encoded_data_length; | 179 reported_total_received_bytes_ = response->head.encoded_data_length; |
| 169 | 180 |
| 170 response->head.request_start = request()->creation_time(); | 181 response->head.request_start = request()->creation_time(); |
| 171 response->head.response_start = base::TimeTicks::Now(); | 182 response->head.response_start = base::TimeTicks::Now(); |
| 172 sent_received_response_message_ = true; | 183 sent_received_response_message_ = true; |
| 173 | 184 |
| 174 mojom::DownloadedTempFilePtr downloaded_file_ptr; | 185 mojom::DownloadedTempFileAssociatedPtrInfo downloaded_file_ptr; |
| 175 if (!response->head.download_file_path.empty()) { | 186 if (!response->head.download_file_path.empty()) { |
| 176 downloaded_file_ptr = DownloadedTempFileImpl::Create(info->GetChildID(), | 187 downloaded_file_ptr = DownloadedTempFileImpl::Create( |
| 177 info->GetRequestID()); | 188 binding_.associated_group(), info->GetChildID(), info->GetRequestID()); |
| 178 rdh_->RegisterDownloadedTempFile(info->GetChildID(), info->GetRequestID(), | 189 rdh_->RegisterDownloadedTempFile(info->GetChildID(), info->GetRequestID(), |
| 179 response->head.download_file_path); | 190 response->head.download_file_path); |
| 180 } | 191 } |
| 181 | 192 |
| 182 url_loader_client_->OnReceiveResponse(response->head, | 193 url_loader_client_->OnReceiveResponse(response->head, |
| 183 std::move(downloaded_file_ptr)); | 194 std::move(downloaded_file_ptr)); |
| 184 | 195 |
| 185 net::IOBufferWithSize* metadata = GetResponseMetadata(request()); | 196 net::IOBufferWithSize* metadata = GetResponseMetadata(request()); |
| 186 if (metadata) { | 197 if (metadata) { |
| 187 const uint8_t* data = reinterpret_cast<const uint8_t*>(metadata->data()); | 198 const uint8_t* data = reinterpret_cast<const uint8_t*>(metadata->data()); |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 490 mojom::URLLoaderAssociatedRequest mojo_request, | 501 mojom::URLLoaderAssociatedRequest mojo_request, |
| 491 mojom::URLLoaderClientAssociatedPtr url_loader_client) { | 502 mojom::URLLoaderClientAssociatedPtr url_loader_client) { |
| 492 binding_.Unbind(); | 503 binding_.Unbind(); |
| 493 binding_.Bind(std::move(mojo_request)); | 504 binding_.Bind(std::move(mojo_request)); |
| 494 binding_.set_connection_error_handler( | 505 binding_.set_connection_error_handler( |
| 495 base::Bind(&MojoAsyncResourceHandler::Cancel, base::Unretained(this))); | 506 base::Bind(&MojoAsyncResourceHandler::Cancel, base::Unretained(this))); |
| 496 url_loader_client_ = std::move(url_loader_client); | 507 url_loader_client_ = std::move(url_loader_client); |
| 497 } | 508 } |
| 498 | 509 |
| 499 } // namespace content | 510 } // namespace content |
| OLD | NEW |