| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/renderer_host/resource_loader.h" | 5 #include "content/browser/renderer_host/resource_loader.h" |
| 6 | 6 |
| 7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
| 8 #include "base/time.h" | 8 #include "base/time.h" |
| 9 #include "content/browser/child_process_security_policy_impl.h" | 9 #include "content/browser/child_process_security_policy_impl.h" |
| 10 #include "content/browser/renderer_host/doomed_resource_handler.h" | 10 #include "content/browser/renderer_host/doomed_resource_handler.h" |
| 11 #include "content/browser/renderer_host/resource_loader_delegate.h" | 11 #include "content/browser/renderer_host/resource_loader_delegate.h" |
| 12 #include "content/browser/renderer_host/resource_request_info_impl.h" | 12 #include "content/browser/renderer_host/resource_request_info_impl.h" |
| 13 #include "content/browser/ssl/ssl_client_auth_handler.h" | 13 #include "content/browser/ssl/ssl_client_auth_handler.h" |
| 14 #include "content/browser/ssl/ssl_manager.h" | 14 #include "content/browser/ssl/ssl_manager.h" |
| 15 #include "content/common/ssl_status_serialization.h" | 15 #include "content/common/ssl_status_serialization.h" |
| 16 #include "content/public/browser/cert_store.h" | 16 #include "content/public/browser/cert_store.h" |
| 17 #include "content/public/browser/resource_dispatcher_host_login_delegate.h" | 17 #include "content/public/browser/resource_dispatcher_host_login_delegate.h" |
| 18 #include "content/public/common/resource_response.h" | 18 #include "content/public/common/resource_response.h" |
| 19 #include "net/base/load_flags.h" | 19 #include "net/base/load_flags.h" |
| 20 #include "net/base/upload_data_stream.h" |
| 20 #include "net/http/http_response_headers.h" | 21 #include "net/http/http_response_headers.h" |
| 21 #include "webkit/appcache/appcache_interceptor.h" | 22 #include "webkit/appcache/appcache_interceptor.h" |
| 22 | 23 |
| 23 using base::TimeDelta; | 24 using base::TimeDelta; |
| 24 using base::TimeTicks; | 25 using base::TimeTicks; |
| 25 | 26 |
| 26 namespace content { | 27 namespace content { |
| 27 namespace { | 28 namespace { |
| 28 | 29 |
| 29 void PopulateResourceResponse(net::URLRequest* request, | 30 void PopulateResourceResponse(net::URLRequest* request, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 50 | 51 |
| 51 } // namespace | 52 } // namespace |
| 52 | 53 |
| 53 ResourceLoader::ResourceLoader(scoped_ptr<net::URLRequest> request, | 54 ResourceLoader::ResourceLoader(scoped_ptr<net::URLRequest> request, |
| 54 scoped_ptr<ResourceHandler> handler, | 55 scoped_ptr<ResourceHandler> handler, |
| 55 ResourceLoaderDelegate* delegate) | 56 ResourceLoaderDelegate* delegate) |
| 56 : deferred_stage_(DEFERRED_NONE), | 57 : deferred_stage_(DEFERRED_NONE), |
| 57 request_(request.Pass()), | 58 request_(request.Pass()), |
| 58 handler_(handler.Pass()), | 59 handler_(handler.Pass()), |
| 59 delegate_(delegate), | 60 delegate_(delegate), |
| 61 upload_size_(0), |
| 60 last_upload_position_(0), | 62 last_upload_position_(0), |
| 61 waiting_for_upload_progress_ack_(false), | 63 waiting_for_upload_progress_ack_(false), |
| 62 is_transferring_(false), | 64 is_transferring_(false), |
| 63 weak_ptr_factory_(this) { | 65 weak_ptr_factory_(this) { |
| 64 request_->set_delegate(this); | 66 request_->set_delegate(this); |
| 65 handler_->SetController(this); | 67 handler_->SetController(this); |
| 66 } | 68 } |
| 67 | 69 |
| 68 ResourceLoader::~ResourceLoader() { | 70 ResourceLoader::~ResourceLoader() { |
| 69 if (login_delegate_) | 71 if (login_delegate_) |
| (...skipping 30 matching lines...) Expand all Loading... |
| 100 void ResourceLoader::CancelRequest(bool from_renderer) { | 102 void ResourceLoader::CancelRequest(bool from_renderer) { |
| 101 CancelRequestInternal(net::ERR_ABORTED, from_renderer); | 103 CancelRequestInternal(net::ERR_ABORTED, from_renderer); |
| 102 } | 104 } |
| 103 | 105 |
| 104 void ResourceLoader::ReportUploadProgress() { | 106 void ResourceLoader::ReportUploadProgress() { |
| 105 ResourceRequestInfoImpl* info = GetRequestInfo(); | 107 ResourceRequestInfoImpl* info = GetRequestInfo(); |
| 106 | 108 |
| 107 if (waiting_for_upload_progress_ack_) | 109 if (waiting_for_upload_progress_ack_) |
| 108 return; // Send one progress event at a time. | 110 return; // Send one progress event at a time. |
| 109 | 111 |
| 110 uint64 size = info->GetUploadSize(); | 112 if (!upload_size_) |
| 111 if (!size) | |
| 112 return; // Nothing to upload. | 113 return; // Nothing to upload. |
| 113 | 114 |
| 114 uint64 position = request_->GetUploadProgress(); | 115 uint64 position = request_->GetUploadProgress(); |
| 115 if (position == last_upload_position_) | 116 if (position == last_upload_position_) |
| 116 return; // No progress made since last time. | 117 return; // No progress made since last time. |
| 117 | 118 |
| 118 const uint64 kHalfPercentIncrements = 200; | 119 const uint64 kHalfPercentIncrements = 200; |
| 119 const TimeDelta kOneSecond = TimeDelta::FromMilliseconds(1000); | 120 const TimeDelta kOneSecond = TimeDelta::FromMilliseconds(1000); |
| 120 | 121 |
| 121 uint64 amt_since_last = position - last_upload_position_; | 122 uint64 amt_since_last = position - last_upload_position_; |
| 122 TimeDelta time_since_last = TimeTicks::Now() - last_upload_ticks_; | 123 TimeDelta time_since_last = TimeTicks::Now() - last_upload_ticks_; |
| 123 | 124 |
| 124 bool is_finished = (size == position); | 125 bool is_finished = (upload_size_ == position); |
| 125 bool enough_new_progress = (amt_since_last > (size / kHalfPercentIncrements)); | 126 bool enough_new_progress = |
| 127 (amt_since_last > (upload_size_ / kHalfPercentIncrements)); |
| 126 bool too_much_time_passed = time_since_last > kOneSecond; | 128 bool too_much_time_passed = time_since_last > kOneSecond; |
| 127 | 129 |
| 128 if (is_finished || enough_new_progress || too_much_time_passed) { | 130 if (is_finished || enough_new_progress || too_much_time_passed) { |
| 129 if (request_->load_flags() & net::LOAD_ENABLE_UPLOAD_PROGRESS) { | 131 if (request_->load_flags() & net::LOAD_ENABLE_UPLOAD_PROGRESS) { |
| 130 handler_->OnUploadProgress(info->GetRequestID(), position, size); | 132 handler_->OnUploadProgress(info->GetRequestID(), position, upload_size_); |
| 131 waiting_for_upload_progress_ack_ = true; | 133 waiting_for_upload_progress_ack_ = true; |
| 132 } | 134 } |
| 133 last_upload_ticks_ = TimeTicks::Now(); | 135 last_upload_ticks_ = TimeTicks::Now(); |
| 134 last_upload_position_ = position; | 136 last_upload_position_ = position; |
| 135 } | 137 } |
| 136 } | 138 } |
| 137 | 139 |
| 138 void ResourceLoader::MarkAsTransferring() { | 140 void ResourceLoader::MarkAsTransferring() { |
| 139 is_transferring_ = true; | 141 is_transferring_ = true; |
| 140 | 142 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 } | 174 } |
| 173 | 175 |
| 174 void ResourceLoader::ClearSSLClientAuthHandler() { | 176 void ResourceLoader::ClearSSLClientAuthHandler() { |
| 175 ssl_client_auth_handler_ = NULL; | 177 ssl_client_auth_handler_ = NULL; |
| 176 } | 178 } |
| 177 | 179 |
| 178 void ResourceLoader::OnUploadProgressACK() { | 180 void ResourceLoader::OnUploadProgressACK() { |
| 179 waiting_for_upload_progress_ack_ = false; | 181 waiting_for_upload_progress_ack_ = false; |
| 180 } | 182 } |
| 181 | 183 |
| 184 void ResourceLoader::OnRequestBodyInitialized(net::URLRequest* request, |
| 185 uint64 size) { |
| 186 upload_size_ = size; |
| 187 } |
| 188 |
| 182 void ResourceLoader::OnReceivedRedirect(net::URLRequest* unused, | 189 void ResourceLoader::OnReceivedRedirect(net::URLRequest* unused, |
| 183 const GURL& new_url, | 190 const GURL& new_url, |
| 184 bool* defer) { | 191 bool* defer) { |
| 185 DCHECK_EQ(request_.get(), unused); | 192 DCHECK_EQ(request_.get(), unused); |
| 186 | 193 |
| 187 VLOG(1) << "OnReceivedRedirect: " << request_->url().spec(); | 194 VLOG(1) << "OnReceivedRedirect: " << request_->url().spec(); |
| 188 DCHECK(request_->status().is_success()); | 195 DCHECK(request_->status().is_success()); |
| 189 | 196 |
| 190 ResourceRequestInfoImpl* info = GetRequestInfo(); | 197 ResourceRequestInfoImpl* info = GetRequestInfo(); |
| 191 | 198 |
| (...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 562 // we resume. | 569 // we resume. |
| 563 deferred_stage_ = DEFERRED_FINISH; | 570 deferred_stage_ = DEFERRED_FINISH; |
| 564 } | 571 } |
| 565 } | 572 } |
| 566 | 573 |
| 567 void ResourceLoader::CallDidFinishLoading() { | 574 void ResourceLoader::CallDidFinishLoading() { |
| 568 delegate_->DidFinishLoading(this); | 575 delegate_->DidFinishLoading(this); |
| 569 } | 576 } |
| 570 | 577 |
| 571 } // namespace content | 578 } // namespace content |
| OLD | NEW |