diff options
author | eustas@chromium.org <eustas@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-10 12:54:57 +0000 |
---|---|---|
committer | eustas@chromium.org <eustas@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-10 12:54:57 +0000 |
commit | c8c56758c394793fd106f6607b50f0966976e135 (patch) | |
tree | f75a94538866b7b68dfa5a7217e61a2fdae859d5 | |
parent | fd00e49adcf05f05a5cff215abed207e738c606c (diff) | |
download | chromium_src-c8c56758c394793fd106f6607b50f0966976e135.zip chromium_src-c8c56758c394793fd106f6607b50f0966976e135.tar.gz chromium_src-c8c56758c394793fd106f6607b50f0966976e135.tar.bz2 |
Add transfer size paramater to didFinishLoading [2/3]
Mini DD:
https://docs.google.com/a/chromium.org/document/d/1kAKnBKofLc3Tex_JPveubwJcQLT3BhIL3xNQyjvRIps/edit?usp=sharing
Most of files contain only signature changes.
There are 3 non-trivial changes:
1) ResourceMsg_RequestComplete IPC message receives struct instead of distinct parameters.
2) Use URLRequest::GetTotalReceivedBytes instead of DevToolsNetLogObserver::GetAndResetEncodedDataLength
3) Remove unused code in DevToolsNetLogObserver.
BUG=111052
Review URL: https://codereview.chromium.org/143263002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@250069 0039d316-1c4b-4281-b951-d872f2087c98
38 files changed, 131 insertions, 208 deletions
diff --git a/chrome/renderer/extensions/extension_localization_peer.cc b/chrome/renderer/extensions/extension_localization_peer.cc index e3e2c91..789b0e6 100644 --- a/chrome/renderer/extensions/extension_localization_peer.cc +++ b/chrome/renderer/extensions/extension_localization_peer.cc @@ -70,7 +70,8 @@ void ExtensionLocalizationPeer::OnCompletedRequest( bool was_ignored_by_handler, bool stale_copy_in_cache, const std::string& security_info, - const base::TimeTicks& completion_time) { + const base::TimeTicks& completion_time, + int64 total_transfer_size) { // Make sure we delete ourselves at the end of this call. scoped_ptr<ExtensionLocalizationPeer> this_deleter(this); @@ -80,7 +81,8 @@ void ExtensionLocalizationPeer::OnCompletedRequest( original_peer_->OnReceivedResponse(response_info_); original_peer_->OnCompletedRequest(net::ERR_ABORTED, false, stale_copy_in_cache, security_info, - completion_time); + completion_time, + total_transfer_size); return; } @@ -93,7 +95,8 @@ void ExtensionLocalizationPeer::OnCompletedRequest( -1); original_peer_->OnCompletedRequest(error_code, was_ignored_by_handler, stale_copy_in_cache, - security_info, completion_time); + security_info, completion_time, + total_transfer_size); } void ExtensionLocalizationPeer::ReplaceMessages() { diff --git a/chrome/renderer/extensions/extension_localization_peer.h b/chrome/renderer/extensions/extension_localization_peer.h index 8c8b748..78aab0c 100644 --- a/chrome/renderer/extensions/extension_localization_peer.h +++ b/chrome/renderer/extensions/extension_localization_peer.h @@ -46,7 +46,8 @@ class ExtensionLocalizationPeer bool was_ignored_by_handler, bool stale_copy_in_cache, const std::string& security_info, - const base::TimeTicks& completion_time) OVERRIDE; + const base::TimeTicks& completion_time, + int64 total_transfer_size) OVERRIDE; private: friend class ExtensionLocalizationPeerTest; diff --git a/chrome/renderer/extensions/extension_localization_peer_unittest.cc b/chrome/renderer/extensions/extension_localization_peer_unittest.cc index e110030..0eba97c 100644 --- a/chrome/renderer/extensions/extension_localization_peer_unittest.cc +++ b/chrome/renderer/extensions/extension_localization_peer_unittest.cc @@ -68,12 +68,13 @@ class MockResourceLoaderBridgePeer MOCK_METHOD3(OnReceivedData, void(const char* data, int data_length, int encoded_data_length)); - MOCK_METHOD5(OnCompletedRequest, void( + MOCK_METHOD6(OnCompletedRequest, void( int error_code, bool was_ignored_by_handler, bool stale_copy_in_cache, const std::string& security_info, - const base::TimeTicks& completion_time)); + const base::TimeTicks& completion_time, + int64_t total_transfer_size)); private: DISALLOW_COPY_AND_ASSIGN(MockResourceLoaderBridgePeer); @@ -143,10 +144,10 @@ TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestBadURLRequestStatus) { EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); EXPECT_CALL(*original_peer_, OnCompletedRequest( - net::ERR_ABORTED, false, false, "", base::TimeTicks())); + net::ERR_ABORTED, false, false, "", base::TimeTicks(), -1)); filter_peer->OnCompletedRequest( - net::ERR_FAILED, false, false, std::string(), base::TimeTicks()); + net::ERR_FAILED, false, false, std::string(), base::TimeTicks(), -1); } TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestEmptyData) { @@ -158,10 +159,10 @@ TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestEmptyData) { EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); EXPECT_CALL(*original_peer_, OnCompletedRequest( - net::OK, false, false, "", base::TimeTicks())); + net::OK, false, false, "", base::TimeTicks(), -1)); filter_peer->OnCompletedRequest( - net::OK, false, false, std::string(), base::TimeTicks()); + net::OK, false, false, std::string(), base::TimeTicks(), -1); } TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestNoCatalogs) { @@ -178,10 +179,10 @@ TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestNoCatalogs) { EXPECT_CALL(*original_peer_, OnReceivedResponse(_)).Times(2); EXPECT_CALL(*original_peer_, OnCompletedRequest( - net::OK, false, false, "", base::TimeTicks())).Times(2); + net::OK, false, false, "", base::TimeTicks(), -1)).Times(2); filter_peer->OnCompletedRequest( - net::OK, false, false, std::string(), base::TimeTicks()); + net::OK, false, false, std::string(), base::TimeTicks(), -1); // Test if Send gets called again (it shouldn't be) when first call returned // an empty dictionary. @@ -189,7 +190,7 @@ TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestNoCatalogs) { CreateExtensionLocalizationPeer("text/css", GURL(kExtensionUrl_1)); SetData(filter_peer, "some text"); filter_peer->OnCompletedRequest( - net::OK, false, false, std::string(), base::TimeTicks()); + net::OK, false, false, std::string(), base::TimeTicks(), -1); } TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestWithCatalogs) { @@ -215,10 +216,10 @@ TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestWithCatalogs) { EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); EXPECT_CALL(*original_peer_, OnCompletedRequest( - net::OK, false, false, "", base::TimeTicks())); + net::OK, false, false, "", base::TimeTicks(), -1)); filter_peer->OnCompletedRequest( - net::OK, false, false, std::string(), base::TimeTicks()); + net::OK, false, false, std::string(), base::TimeTicks(), -1); } TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestReplaceMessagesFails) { @@ -244,8 +245,8 @@ TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestReplaceMessagesFails) { EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); EXPECT_CALL(*original_peer_, OnCompletedRequest( - net::OK, false, false, "", base::TimeTicks())); + net::OK, false, false, "", base::TimeTicks(), -1)); filter_peer->OnCompletedRequest( - net::OK, false, false, std::string(), base::TimeTicks()); + net::OK, false, false, std::string(), base::TimeTicks(), -1); } diff --git a/chrome/renderer/security_filter_peer.cc b/chrome/renderer/security_filter_peer.cc index c0e5fd2..370fb66 100644 --- a/chrome/renderer/security_filter_peer.cc +++ b/chrome/renderer/security_filter_peer.cc @@ -95,7 +95,8 @@ void SecurityFilterPeer::OnCompletedRequest( bool was_ignored_by_handler, bool stale_copy_in_cache, const std::string& security_info, - const base::TimeTicks& completion_time) { + const base::TimeTicks& completion_time, + int64 total_transfer_size) { NOTREACHED(); } @@ -157,7 +158,8 @@ void BufferedPeer::OnCompletedRequest(int error_code, bool was_ignored_by_handler, bool stale_copy_in_cache, const std::string& security_info, - const base::TimeTicks& completion_time) { + const base::TimeTicks& completion_time, + int64 total_transfer_size) { // Make sure we delete ourselves at the end of this call. scoped_ptr<BufferedPeer> this_deleter(this); @@ -167,7 +169,8 @@ void BufferedPeer::OnCompletedRequest(int error_code, original_peer_->OnReceivedResponse(response_info_); original_peer_->OnCompletedRequest(net::ERR_ABORTED, false, stale_copy_in_cache, - security_info, completion_time); + security_info, completion_time, + total_transfer_size); return; } @@ -178,7 +181,7 @@ void BufferedPeer::OnCompletedRequest(int error_code, -1); original_peer_->OnCompletedRequest(error_code, was_ignored_by_handler, stale_copy_in_cache, security_info, - completion_time); + completion_time, total_transfer_size); } //////////////////////////////////////////////////////////////////////////////// @@ -213,7 +216,8 @@ void ReplaceContentPeer::OnCompletedRequest( bool was_ignored_by_handler, bool stale_copy_in_cache, const std::string& security_info, - const base::TimeTicks& completion_time) { + const base::TimeTicks& completion_time, + int64 total_transfer_size) { webkit_glue::ResourceResponseInfo info; ProcessResponseInfo(info, &info, mime_type_); info.security_info = security_info; @@ -227,7 +231,8 @@ void ReplaceContentPeer::OnCompletedRequest( false, stale_copy_in_cache, security_info, - completion_time); + completion_time, + total_transfer_size); // The request processing is complete, we must delete ourselves. delete this; diff --git a/chrome/renderer/security_filter_peer.h b/chrome/renderer/security_filter_peer.h index e6c1b8f..f67de71 100644 --- a/chrome/renderer/security_filter_peer.h +++ b/chrome/renderer/security_filter_peer.h @@ -45,7 +45,8 @@ class SecurityFilterPeer : public webkit_glue::ResourceLoaderBridge::Peer { bool was_ignored_by_handler, bool stale_copy_in_cache, const std::string& security_info, - const base::TimeTicks& completion_time) OVERRIDE; + const base::TimeTicks& completion_time, + int64 total_transfer_size) OVERRIDE; protected: SecurityFilterPeer(webkit_glue::ResourceLoaderBridge* resource_loader_bridge, @@ -78,7 +79,8 @@ class BufferedPeer : public SecurityFilterPeer { bool was_ignored_by_handler, bool stale_copy_in_cache, const std::string& security_info, - const base::TimeTicks& completion_time) OVERRIDE; + const base::TimeTicks& completion_time, + int64 total_transfer_size) OVERRIDE; protected: // Invoked when the entire request has been processed before the data is sent @@ -123,7 +125,8 @@ class ReplaceContentPeer : public SecurityFilterPeer { bool was_ignored_by_handler, bool stale_copy_in_cache, const std::string& security_info, - const base::TimeTicks& completion_time) OVERRIDE; + const base::TimeTicks& completion_time, + int64 total_transfer_size) OVERRIDE; private: webkit_glue::ResourceResponseInfo response_info_; diff --git a/content/browser/devtools/devtools_netlog_observer.cc b/content/browser/devtools/devtools_netlog_observer.cc index 21a835b..6b77c0b 100644 --- a/content/browser/devtools/devtools_netlog_observer.cc +++ b/content/browser/devtools/devtools_netlog_observer.cc @@ -42,10 +42,6 @@ void DevToolsNetLogObserver::OnAddEntry(const net::NetLog::Entry& entry) { if (entry.source().type == net::NetLog::SOURCE_URL_REQUEST) OnAddURLRequestEntry(entry); - else if (entry.source().type == net::NetLog::SOURCE_HTTP_STREAM_JOB) - OnAddHTTPStreamJobEntry(entry); - else if (entry.source().type == net::NetLog::SOURCE_SOCKET) - OnAddSocketEntry(entry); } void DevToolsNetLogObserver::OnAddURLRequestEntry( @@ -74,22 +70,12 @@ void DevToolsNetLogObserver::OnAddURLRequestEntry( } request_to_info_[entry.source().id] = new ResourceInfo(); - - if (request_to_encoded_data_length_.size() > kMaxNumEntries) { - LOG(WARNING) << "The encoded data length observer url request count " - "has grown larger than expected, resetting"; - request_to_encoded_data_length_.clear(); - } - - request_to_encoded_data_length_[entry.source().id] = 0; } return; } else if (entry.type() == net::NetLog::TYPE_REQUEST_ALIVE) { // Cleanup records based on the TYPE_REQUEST_ALIVE entry. - if (is_end) { + if (is_end) request_to_info_.erase(entry.source().id); - request_to_encoded_data_length_.erase(entry.source().id); - } return; } @@ -167,99 +153,11 @@ void DevToolsNetLogObserver::OnAddURLRequestEntry( response_headers->raw_headers()); break; } - case net::NetLog::TYPE_HTTP_STREAM_REQUEST_BOUND_TO_JOB: { - scoped_ptr<base::Value> event_params(entry.ParametersToValue()); - net::NetLog::Source http_stream_job_source; - if (!net::NetLog::Source::FromEventParameters(event_params.get(), - &http_stream_job_source)) { - NOTREACHED(); - break; - } - - uint32 http_stream_job_id = http_stream_job_source.id; - HTTPStreamJobToSocketMap::iterator it = - http_stream_job_to_socket_.find(http_stream_job_id); - if (it == http_stream_job_to_socket_.end()) - return; - uint32 socket_id = it->second; - - if (socket_to_request_.size() > kMaxNumEntries) { - LOG(WARNING) << "The url request observer socket count has grown " - "larger than expected, resetting"; - socket_to_request_.clear(); - } - - socket_to_request_[socket_id] = entry.source().id; - http_stream_job_to_socket_.erase(http_stream_job_id); - break; - } default: break; } } -void DevToolsNetLogObserver::OnAddHTTPStreamJobEntry( - const net::NetLog::Entry& entry) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); - - if (entry.type() == net::NetLog::TYPE_SOCKET_POOL_BOUND_TO_SOCKET) { - scoped_ptr<base::Value> event_params(entry.ParametersToValue()); - net::NetLog::Source socket_source; - if (!net::NetLog::Source::FromEventParameters(event_params.get(), - &socket_source)) { - NOTREACHED(); - return; - } - - // Prevents us from passively growing the memory unbounded in - // case something went wrong. Should not happen. - if (http_stream_job_to_socket_.size() > kMaxNumEntries) { - LOG(WARNING) << "The load timing observer http stream job count " - "has grown larger than expected, resetting"; - http_stream_job_to_socket_.clear(); - } - http_stream_job_to_socket_[entry.source().id] = socket_source.id; - } -} - -void DevToolsNetLogObserver::OnAddSocketEntry( - const net::NetLog::Entry& entry) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); - - bool is_end = entry.phase() == net::NetLog::PHASE_END; - - SocketToRequestMap::iterator it = - socket_to_request_.find(entry.source().id); - if (it == socket_to_request_.end()) - return; - uint32 request_id = it->second; - - if (entry.type() == net::NetLog::TYPE_SOCKET_IN_USE) { - if (is_end) - socket_to_request_.erase(entry.source().id); - return; - } - - RequestToEncodedDataLengthMap::iterator encoded_data_length_it = - request_to_encoded_data_length_.find(request_id); - if (encoded_data_length_it == request_to_encoded_data_length_.end()) - return; - - if (net::NetLog::TYPE_SOCKET_BYTES_RECEIVED == entry.type()) { - int byte_count = 0; - scoped_ptr<base::Value> value(entry.ParametersToValue()); - if (!value->IsType(base::Value::TYPE_DICTIONARY)) - return; - - base::DictionaryValue* dValue = - static_cast<base::DictionaryValue*>(value.get()); - if (!dValue->GetInteger("byte_count", &byte_count)) - return; - - encoded_data_length_it->second += byte_count; - } -} - void DevToolsNetLogObserver::Attach() { DCHECK(!instance_); net::NetLog* net_log = GetContentClient()->browser()->GetNetLog(); @@ -303,26 +201,4 @@ void DevToolsNetLogObserver::PopulateResponseInfo( dev_tools_net_log_observer->GetResourceInfo(source_id); } -// static -int DevToolsNetLogObserver::GetAndResetEncodedDataLength( - net::URLRequest* request) { - if (!(request->load_flags() & net::LOAD_REPORT_RAW_HEADERS)) - return -1; - - uint32 source_id = request->net_log().source().id; - DevToolsNetLogObserver* dev_tools_net_log_observer = - DevToolsNetLogObserver::GetInstance(); - if (dev_tools_net_log_observer == NULL) - return -1; - - RequestToEncodedDataLengthMap::iterator it = - dev_tools_net_log_observer->request_to_encoded_data_length_.find( - source_id); - if (it == dev_tools_net_log_observer->request_to_encoded_data_length_.end()) - return -1; - int encoded_data_length = it->second; - it->second = 0; - return encoded_data_length; -} - } // namespace content diff --git a/content/browser/devtools/devtools_netlog_observer.h b/content/browser/devtools/devtools_netlog_observer.h index d1d478c..f5ef088 100644 --- a/content/browser/devtools/devtools_netlog_observer.h +++ b/content/browser/devtools/devtools_netlog_observer.h @@ -32,8 +32,6 @@ class DevToolsNetLogObserver : public net::NetLog::ThreadSafeObserver { virtual void OnAddEntry(const net::NetLog::Entry& entry) OVERRIDE; void OnAddURLRequestEntry(const net::NetLog::Entry& entry); - void OnAddHTTPStreamJobEntry(const net::NetLog::Entry& entry); - void OnAddSocketEntry(const net::NetLog::Entry& entry); static void Attach(); static void Detach(); @@ -43,7 +41,6 @@ class DevToolsNetLogObserver : public net::NetLog::ThreadSafeObserver { static DevToolsNetLogObserver* GetInstance(); static void PopulateResponseInfo(net::URLRequest*, ResourceResponse*); - static int GetAndResetEncodedDataLength(net::URLRequest* request); private: static DevToolsNetLogObserver* instance_; @@ -54,13 +51,7 @@ class DevToolsNetLogObserver : public net::NetLog::ThreadSafeObserver { ResourceInfo* GetResourceInfo(uint32 id); typedef base::hash_map<uint32, scoped_refptr<ResourceInfo> > RequestToInfoMap; - typedef base::hash_map<uint32, int> RequestToEncodedDataLengthMap; - typedef base::hash_map<uint32, uint32> HTTPStreamJobToSocketMap; - typedef base::hash_map<uint32, uint32> SocketToRequestMap; RequestToInfoMap request_to_info_; - RequestToEncodedDataLengthMap request_to_encoded_data_length_; - HTTPStreamJobToSocketMap http_stream_job_to_socket_; - SocketToRequestMap socket_to_request_; DISALLOW_COPY_AND_ASSIGN(DevToolsNetLogObserver); }; diff --git a/content/browser/loader/async_resource_handler.cc b/content/browser/loader/async_resource_handler.cc index 2a35c4d..5326b66 100644 --- a/content/browser/loader/async_resource_handler.cc +++ b/content/browser/loader/async_resource_handler.cc @@ -87,7 +87,8 @@ AsyncResourceHandler::AsyncResourceHandler( did_defer_(false), has_checked_for_sufficient_resources_(false), sent_received_response_msg_(false), - sent_first_data_msg_(false) { + sent_first_data_msg_(false), + reported_transfer_size_(0) { InitializeResourceBufferConstants(); } @@ -159,6 +160,8 @@ bool AsyncResourceHandler::OnRequestRedirected(int request_id, } DevToolsNetLogObserver::PopulateResponseInfo(request(), response); + response->head.encoded_data_length = request()->GetTotalReceivedBytes(); + reported_transfer_size_ = 0; response->head.request_start = request()->creation_time(); response->head.response_start = TimeTicks::Now(); return info->filter()->Send(new ResourceMsg_ReceivedRedirect( @@ -279,8 +282,10 @@ bool AsyncResourceHandler::OnReadCompleted(int request_id, int bytes_read, } int data_offset = buffer_->GetLastAllocationOffset(); - int encoded_data_length = - DevToolsNetLogObserver::GetAndResetEncodedDataLength(request()); + + int64_t current_transfer_size = request()->GetTotalReceivedBytes(); + int encoded_data_length = current_transfer_size - reported_transfer_size_; + reported_transfer_size_ = current_transfer_size; filter->Send(new ResourceMsg_DataReceived( request_id, data_offset, bytes_read, encoded_data_length)); @@ -302,8 +307,9 @@ bool AsyncResourceHandler::OnReadCompleted(int request_id, int bytes_read, void AsyncResourceHandler::OnDataDownloaded( int request_id, int bytes_downloaded) { - int encoded_data_length = - DevToolsNetLogObserver::GetAndResetEncodedDataLength(request()); + int64_t current_transfer_size = request()->GetTotalReceivedBytes(); + int encoded_data_length = current_transfer_size - reported_transfer_size_; + reported_transfer_size_ = current_transfer_size; ResourceMessageFilter* filter = GetFilter(); if (filter) { @@ -360,6 +366,8 @@ void AsyncResourceHandler::OnResponseCompleted( request_complete_data.exists_in_cache = request()->response_info().was_cached; request_complete_data.security_info = security_info; request_complete_data.completion_time = TimeTicks::Now(); + request_complete_data.encoded_data_length = + request()->GetTotalReceivedBytes(); info->filter()->Send( new ResourceMsg_RequestComplete(request_id, request_complete_data)); } diff --git a/content/browser/loader/async_resource_handler.h b/content/browser/loader/async_resource_handler.h index 2de156c..7a51b77 100644 --- a/content/browser/loader/async_resource_handler.h +++ b/content/browser/loader/async_resource_handler.h @@ -92,6 +92,8 @@ class AsyncResourceHandler : public ResourceHandler, bool sent_received_response_msg_; bool sent_first_data_msg_; + int64_t reported_transfer_size_; + DISALLOW_COPY_AND_ASSIGN(AsyncResourceHandler); }; diff --git a/content/browser/loader/resource_dispatcher_host_impl.cc b/content/browser/loader/resource_dispatcher_host_impl.cc index 173202e..ab93adb 100644 --- a/content/browser/loader/resource_dispatcher_host_impl.cc +++ b/content/browser/loader/resource_dispatcher_host_impl.cc @@ -164,7 +164,7 @@ void AbortRequestBeforeItStarts(ResourceMessageFilter* filter, request_complete_data.exists_in_cache = false; // No security info needed, connection not established. request_complete_data.completion_time = base::TimeTicks(); - + request_complete_data.encoded_data_length = 0; filter->Send(new ResourceMsg_RequestComplete( request_id, request_complete_data)); } diff --git a/content/browser/loader/sync_resource_handler.cc b/content/browser/loader/sync_resource_handler.cc index 23e44f7..865b29e 100644 --- a/content/browser/loader/sync_resource_handler.cc +++ b/content/browser/loader/sync_resource_handler.cc @@ -25,7 +25,8 @@ SyncResourceHandler::SyncResourceHandler( : ResourceHandler(request), read_buffer_(new net::IOBuffer(kReadBufSize)), result_message_(result_message), - rdh_(resource_dispatcher_host) { + rdh_(resource_dispatcher_host), + total_transfer_size_(0) { result_.final_url = request->url(); } @@ -65,6 +66,8 @@ bool SyncResourceHandler::OnRequestRedirected( return false; } result_.final_url = new_url; + + total_transfer_size_ += request()->GetTotalReceivedBytes(); return true; } @@ -136,8 +139,8 @@ void SyncResourceHandler::OnResponseCompleted( result_.error_code = status.error(); - result_.encoded_data_length = - DevToolsNetLogObserver::GetAndResetEncodedDataLength(request()); + int total_transfer_size = request()->GetTotalReceivedBytes(); + result_.encoded_data_length = total_transfer_size_ + total_transfer_size; ResourceHostMsg_SyncLoad::WriteReplyParams(result_message_, result_); filter->Send(result_message_); diff --git a/content/browser/loader/sync_resource_handler.h b/content/browser/loader/sync_resource_handler.h index bc5d646..3a71483 100644 --- a/content/browser/loader/sync_resource_handler.h +++ b/content/browser/loader/sync_resource_handler.h @@ -70,6 +70,7 @@ class SyncResourceHandler : public ResourceHandler { SyncLoadResult result_; IPC::Message* result_message_; ResourceDispatcherHostImpl* rdh_; + int64 total_transfer_size_; }; } // namespace content diff --git a/content/child/npapi/plugin_url_fetcher.cc b/content/child/npapi/plugin_url_fetcher.cc index fa85dd6..7359041 100644 --- a/content/child/npapi/plugin_url_fetcher.cc +++ b/content/child/npapi/plugin_url_fetcher.cc @@ -343,7 +343,8 @@ void PluginURLFetcher::OnCompletedRequest( bool was_ignored_by_handler, bool stale_copy_in_cache, const std::string& security_info, - const base::TimeTicks& completion_time) { + const base::TimeTicks& completion_time, + int64 total_transfer_size) { if (multipart_delegate_) { multipart_delegate_->OnCompletedRequest(); multipart_delegate_.reset(); diff --git a/content/child/npapi/plugin_url_fetcher.h b/content/child/npapi/plugin_url_fetcher.h index cf58813..4e5e2ff 100644 --- a/content/child/npapi/plugin_url_fetcher.h +++ b/content/child/npapi/plugin_url_fetcher.h @@ -64,7 +64,8 @@ class PluginURLFetcher : public webkit_glue::ResourceLoaderBridge::Peer { bool was_ignored_by_handler, bool stale_copy_in_cache, const std::string& security_info, - const base::TimeTicks& completion_time) OVERRIDE; + const base::TimeTicks& completion_time, + int64 total_transfer_size) OVERRIDE; PluginStreamUrl* plugin_stream_; GURL url_; diff --git a/content/child/resource_dispatcher.cc b/content/child/resource_dispatcher.cc index d6affbb..c8f0021 100644 --- a/content/child/resource_dispatcher.cc +++ b/content/child/resource_dispatcher.cc @@ -552,7 +552,8 @@ void ResourceDispatcher::OnRequestComplete( request_complete_data.was_ignored_by_handler, request_complete_data.exists_in_cache, request_complete_data.security_info, - renderer_completion_time); + renderer_completion_time, + request_complete_data.encoded_data_length); } int ResourceDispatcher::AddPendingRequest( diff --git a/content/child/resource_dispatcher_unittest.cc b/content/child/resource_dispatcher_unittest.cc index 7ff9ac3..6452575 100644 --- a/content/child/resource_dispatcher_unittest.cc +++ b/content/child/resource_dispatcher_unittest.cc @@ -72,7 +72,8 @@ class TestRequestCallback : public ResourceLoaderBridge::Peer { bool was_ignored_by_handler, bool stale_copy_in_cache, const std::string& security_info, - const base::TimeTicks& completion_time) OVERRIDE { + const base::TimeTicks& completion_time, + int64 total_transfer_size) OVERRIDE { EXPECT_FALSE(complete_); complete_ = true; } @@ -298,7 +299,8 @@ class DeferredResourceLoadingTest : public ResourceDispatcherTest, bool was_ignored_by_handler, bool stale_copy_in_cache, const std::string& security_info, - const base::TimeTicks& completion_time) OVERRIDE { + const base::TimeTicks& completion_time, + int64 total_transfer_size) OVERRIDE { } protected: @@ -386,7 +388,8 @@ class TimeConversionTest : public ResourceDispatcherTest, bool was_ignored_by_handler, bool stale_copy_in_cache, const std::string& security_info, - const base::TimeTicks& completion_time) OVERRIDE { + const base::TimeTicks& completion_time, + int64 total_transfer_size) OVERRIDE { } const ResourceResponseInfo& response_info() const { return response_info_; } diff --git a/content/common/resource_messages.h b/content/common/resource_messages.h index 100f75c..063bfd6 100644 --- a/content/common/resource_messages.h +++ b/content/common/resource_messages.h @@ -229,6 +229,9 @@ IPC_STRUCT_BEGIN(ResourceMsg_RequestCompleteData) // Time the request completed. IPC_STRUCT_MEMBER(base::TimeTicks, completion_time) + + // Total amount of data received from the network. + IPC_STRUCT_MEMBER(int64, encoded_data_length) IPC_STRUCT_END() // Resource messages sent from the browser to the renderer. diff --git a/content/renderer/fetchers/resource_fetcher_impl.cc b/content/renderer/fetchers/resource_fetcher_impl.cc index e5678a8..6462e76 100644 --- a/content/renderer/fetchers/resource_fetcher_impl.cc +++ b/content/renderer/fetchers/resource_fetcher_impl.cc @@ -164,7 +164,8 @@ void ResourceFetcherImpl::didReceiveCachedMetadata( } void ResourceFetcherImpl::didFinishLoading( - WebURLLoader* loader, double finishTime) { + WebURLLoader* loader, double finishTime, + int64_t total_encoded_data_length) { DCHECK(!completed_); RunCallback(response_, data_); diff --git a/content/renderer/fetchers/resource_fetcher_impl.h b/content/renderer/fetchers/resource_fetcher_impl.h index 5ae09e2..aed1d79 100644 --- a/content/renderer/fetchers/resource_fetcher_impl.h +++ b/content/renderer/fetchers/resource_fetcher_impl.h @@ -70,7 +70,8 @@ class ResourceFetcherImpl : public ResourceFetcher, blink::WebURLLoader* loader, const char* data, int data_length, int encoded_data_length); virtual void didFinishLoading( - blink::WebURLLoader* loader, double finishTime); + blink::WebURLLoader* loader, double finishTime, + int64_t total_encoded_data_length); virtual void didFail( blink::WebURLLoader* loader, const blink::WebURLError& error); diff --git a/content/renderer/media/android/media_info_loader.cc b/content/renderer/media/android/media_info_loader.cc index 875265c..8a49e04 100644 --- a/content/renderer/media/android/media_info_loader.cc +++ b/content/renderer/media/android/media_info_loader.cc @@ -147,7 +147,8 @@ void MediaInfoLoader::didReceiveCachedMetadata( void MediaInfoLoader::didFinishLoading( WebURLLoader* loader, - double finishTime) { + double finishTime, + int64_t total_encoded_data_length) { DCHECK(active_loader_.get()); DidBecomeReady(kOk); } diff --git a/content/renderer/media/android/media_info_loader.h b/content/renderer/media/android/media_info_loader.h index 8e67c80..68e5232 100644 --- a/content/renderer/media/android/media_info_loader.h +++ b/content/renderer/media/android/media_info_loader.h @@ -95,7 +95,8 @@ class CONTENT_EXPORT MediaInfoLoader : private blink::WebURLLoaderClient { const char* data, int dataLength); virtual void didFinishLoading( blink::WebURLLoader* loader, - double finishTime); + double finishTime, + int64_t total_encoded_data_length); virtual void didFail( blink::WebURLLoader* loader, const blink::WebURLError&); diff --git a/content/renderer/media/buffered_data_source_unittest.cc b/content/renderer/media/buffered_data_source_unittest.cc index e486907..df4aae8 100644 --- a/content/renderer/media/buffered_data_source_unittest.cc +++ b/content/renderer/media/buffered_data_source_unittest.cc @@ -175,7 +175,7 @@ class BufferedDataSourceTest : public testing::Test { void FinishLoading() { data_source_->set_loading(false); - loader()->didFinishLoading(url_loader(), 0); + loader()->didFinishLoading(url_loader(), 0, -1); message_loop_.RunUntilIdle(); } diff --git a/content/renderer/media/buffered_resource_loader.cc b/content/renderer/media/buffered_resource_loader.cc index b050feb..3177209 100644 --- a/content/renderer/media/buffered_resource_loader.cc +++ b/content/renderer/media/buffered_resource_loader.cc @@ -483,7 +483,8 @@ void BufferedResourceLoader::didReceiveCachedMetadata( void BufferedResourceLoader::didFinishLoading( WebURLLoader* loader, - double finishTime) { + double finishTime, + int64_t total_encoded_data_length) { DVLOG(1) << "didFinishLoading"; DCHECK(active_loader_.get()); diff --git a/content/renderer/media/buffered_resource_loader.h b/content/renderer/media/buffered_resource_loader.h index 3331979..ee4759d 100644 --- a/content/renderer/media/buffered_resource_loader.h +++ b/content/renderer/media/buffered_resource_loader.h @@ -164,7 +164,8 @@ class CONTENT_EXPORT BufferedResourceLoader const char* data, int dataLength); virtual void didFinishLoading( blink::WebURLLoader* loader, - double finishTime); + double finishTime, + int64_t total_encoded_data_length); virtual void didFail( blink::WebURLLoader* loader, const blink::WebURLError&); diff --git a/content/renderer/media/buffered_resource_loader_unittest.cc b/content/renderer/media/buffered_resource_loader_unittest.cc index a18422f..94022f6 100644 --- a/content/renderer/media/buffered_resource_loader_unittest.cc +++ b/content/renderer/media/buffered_resource_loader_unittest.cc @@ -425,7 +425,7 @@ TEST_F(BufferedResourceLoaderTest, BufferAndRead) { // Response has completed. EXPECT_CALL(*this, LoadingCallback(BufferedResourceLoader::kLoadingFinished)); - loader_->didFinishLoading(url_loader_, 0); + loader_->didFinishLoading(url_loader_, 0, -1); // Try to read 10 from position 25 will just return with 5 bytes. EXPECT_CALL(*this, ReadCallback(BufferedResourceLoader::kOk, 5)); @@ -518,7 +518,7 @@ TEST_F(BufferedResourceLoaderTest, ReadOutsideBuffer) { EXPECT_CALL(*this, LoadingCallback(BufferedResourceLoader::kLoadingFinished)); EXPECT_CALL(*this, ReadCallback(BufferedResourceLoader::kOk, 5)); - loader_->didFinishLoading(url_loader_, 0); + loader_->didFinishLoading(url_loader_, 0, -1); } TEST_F(BufferedResourceLoaderTest, RequestFailedWhenRead) { diff --git a/content/renderer/npapi/webplugin_impl.cc b/content/renderer/npapi/webplugin_impl.cc index 4027802..7df9ea4 100644 --- a/content/renderer/npapi/webplugin_impl.cc +++ b/content/renderer/npapi/webplugin_impl.cc @@ -132,7 +132,9 @@ class MultiPartResponseClient : public WebURLLoaderClient { byte_range_lower_bound_ += data_length; } - virtual void didFinishLoading(WebURLLoader*, double finishTime) {} + virtual void didFinishLoading(WebURLLoader*, + double finishTime, + int64_t total_encoded_data_length) {} virtual void didFail(WebURLLoader*, const WebURLError&) {} private: @@ -510,7 +512,8 @@ void WebPluginImpl::LoaderClient::didReceiveCachedMetadata( } void WebPluginImpl::LoaderClient::didFinishLoading( - blink::WebURLLoader* loader, double finishTime) { + blink::WebURLLoader* loader, double finishTime, + int64_t total_encoded_data_length) { parent_->didFinishLoading(loader, finishTime); } diff --git a/content/renderer/npapi/webplugin_impl.h b/content/renderer/npapi/webplugin_impl.h index ef7b8ea..b8b59d5 100644 --- a/content/renderer/npapi/webplugin_impl.h +++ b/content/renderer/npapi/webplugin_impl.h @@ -353,7 +353,8 @@ class WebPluginImpl : public WebPlugin, const char* data, int dataLength) OVERRIDE; virtual void didFinishLoading(blink::WebURLLoader*, - double finishTime) OVERRIDE; + double finishTime, + int64_t total_encoded_data_length) OVERRIDE; virtual void didFail(blink::WebURLLoader*, const blink::WebURLError&) OVERRIDE; diff --git a/content/renderer/p2p/port_allocator.cc b/content/renderer/p2p/port_allocator.cc index 5600663..1be8152 100644 --- a/content/renderer/p2p/port_allocator.cc +++ b/content/renderer/p2p/port_allocator.cc @@ -133,8 +133,9 @@ void P2PPortAllocatorSession::didReceiveData( relay_session_response_.append(data, data + data_length); } -void P2PPortAllocatorSession::didFinishLoading(WebURLLoader* loader, - double finish_time) { +void P2PPortAllocatorSession::didFinishLoading( + WebURLLoader* loader, double finish_time, + int64_t total_encoded_data_length) { ParseRelayResponse(); } diff --git a/content/renderer/p2p/port_allocator.h b/content/renderer/p2p/port_allocator.h index edb3403..8ff20a5 100644 --- a/content/renderer/p2p/port_allocator.h +++ b/content/renderer/p2p/port_allocator.h @@ -94,7 +94,8 @@ class P2PPortAllocatorSession : public cricket::BasicPortAllocatorSession, int data_length, int encoded_data_length) OVERRIDE; virtual void didFinishLoading(blink::WebURLLoader* loader, - double finish_time) OVERRIDE; + double finish_time, + int64_t total_encoded_data_length) OVERRIDE; virtual void didFail(blink::WebURLLoader* loader, const blink::WebURLError& error) OVERRIDE; diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.cc b/content/renderer/pepper/pepper_plugin_instance_impl.cc index b54b4d4..dadddf9 100644 --- a/content/renderer/pepper/pepper_plugin_instance_impl.cc +++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc @@ -428,8 +428,8 @@ void PepperPluginInstanceImpl::ExternalDocumentLoader::ReplayReceivedData( 0 /* encoded_data_length */); } if (finished_loading_) { - document_loader->didFinishLoading(NULL, - 0 /* finish_time */); + document_loader->didFinishLoading(NULL, 0 /* finish_time */, + blink::WebURLLoaderClient::kUnknownEncodedDataLength); } if (error_.get()) { document_loader->didFail(NULL, *error_); @@ -446,7 +446,8 @@ void PepperPluginInstanceImpl::ExternalDocumentLoader::didReceiveData( void PepperPluginInstanceImpl::ExternalDocumentLoader::didFinishLoading( WebURLLoader* loader, - double finish_time) { + double finish_time, + int64_t total_encoded_data_length) { DCHECK(!finished_loading_); finished_loading_ = true; } diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.h b/content/renderer/pepper/pepper_plugin_instance_impl.h index 62c6614..cc5b98f 100644 --- a/content/renderer/pepper/pepper_plugin_instance_impl.h +++ b/content/renderer/pepper/pepper_plugin_instance_impl.h @@ -538,7 +538,8 @@ class CONTENT_EXPORT PepperPluginInstanceImpl int data_length, int encoded_data_length); virtual void didFinishLoading(blink::WebURLLoader* loader, - double finish_time); + double finish_time, + int64_t total_encoded_data_length); virtual void didFail(blink::WebURLLoader* loader, const blink::WebURLError& error); diff --git a/content/renderer/pepper/pepper_url_loader_host.cc b/content/renderer/pepper/pepper_url_loader_host.cc index 178548e..e6a2b5c 100644 --- a/content/renderer/pepper/pepper_url_loader_host.cc +++ b/content/renderer/pepper/pepper_url_loader_host.cc @@ -173,7 +173,8 @@ void PepperURLLoaderHost::didReceiveData(WebURLLoader* loader, } void PepperURLLoaderHost::didFinishLoading(WebURLLoader* loader, - double finish_time) { + double finish_time, + int64_t total_encoded_data_length) { // Note that |loader| will be NULL for document loads. SendUpdateToPlugin(new PpapiPluginMsg_URLLoader_FinishedLoading(PP_OK)); } diff --git a/content/renderer/pepper/pepper_url_loader_host.h b/content/renderer/pepper/pepper_url_loader_host.h index 2790c78..d352536 100644 --- a/content/renderer/pepper/pepper_url_loader_host.h +++ b/content/renderer/pepper/pepper_url_loader_host.h @@ -59,7 +59,8 @@ class PepperURLLoaderHost int data_length, int encoded_data_length); virtual void didFinishLoading(blink::WebURLLoader* loader, - double finish_time); + double finish_time, + int64_t total_encoded_data_length); virtual void didFail(blink::WebURLLoader* loader, const blink::WebURLError& error); diff --git a/content/renderer/pepper/pepper_webplugin_impl.cc b/content/renderer/pepper/pepper_webplugin_impl.cc index 8947d73..1cd2850 100644 --- a/content/renderer/pepper/pepper_webplugin_impl.cc +++ b/content/renderer/pepper/pepper_webplugin_impl.cc @@ -211,7 +211,8 @@ void PepperWebPluginImpl::didReceiveData(const char* data, int data_length) { void PepperWebPluginImpl::didFinishLoading() { blink::WebURLLoaderClient* document_loader = instance_->document_loader(); if (document_loader) - document_loader->didFinishLoading(NULL, 0.0); + document_loader->didFinishLoading(NULL, 0.0, + blink::WebURLLoaderClient::kUnknownEncodedDataLength); } void PepperWebPluginImpl::didFailLoading(const blink::WebURLError& error) { diff --git a/content/test/weburl_loader_mock.cc b/content/test/weburl_loader_mock.cc index 5503053..929c542 100644 --- a/content/test/weburl_loader_mock.cc +++ b/content/test/weburl_loader_mock.cc @@ -37,7 +37,7 @@ void WebURLLoaderMock::ServeAsynchronousRequest( return; } client_->didReceiveData(this, data.data(), data.size(), data.size()); - client_->didFinishLoading(this, 0); + client_->didFinishLoading(this, 0, data.size()); } blink::WebURLRequest WebURLLoaderMock::ServeRedirect( diff --git a/webkit/child/multipart_response_delegate_unittest.cc b/webkit/child/multipart_response_delegate_unittest.cc index 4bfa6ab..58c92c5e 100644 --- a/webkit/child/multipart_response_delegate_unittest.cc +++ b/webkit/child/multipart_response_delegate_unittest.cc @@ -75,7 +75,8 @@ class MockWebURLLoaderClient : public WebURLLoaderClient { data_.append(data, data_length); total_encoded_data_length_ += encoded_data_length; } - virtual void didFinishLoading(WebURLLoader*, double finishTime) {} + virtual void didFinishLoading( + WebURLLoader*, double finishTime, int64_t total_encoded_data_length) {} virtual void didFail(WebURLLoader*, const WebURLError&) {} void Reset() { diff --git a/webkit/child/resource_loader_bridge.h b/webkit/child/resource_loader_bridge.h index ac8d1fa..2a54d616 100644 --- a/webkit/child/resource_loader_bridge.h +++ b/webkit/child/resource_loader_bridge.h @@ -155,16 +155,14 @@ class ResourceLoaderBridge { // that case, OnReceivedData will not be called. // The encoded_data_length is the length of the encoded data transferred // over the network, which could be different from data length (e.g. for - // gzipped content), or -1 if unknown. It is only valid while devtools are - // attached. Otherwise it becomes -1. + // gzipped content). virtual void OnDownloadedData(int len, int encoded_data_length) = 0; // Called when a chunk of response data is available. This method may // be called multiple times or not at all if an error occurs. // The encoded_data_length is the length of the encoded data transferred // over the network, which could be different from data length (e.g. for - // gzipped content), or -1 if unknown. It is only valid while devtools are - // attached. Otherwise it becomes -1. + // gzipped content). virtual void OnReceivedData(const char* data, int data_length, int encoded_data_length) = 0; @@ -180,7 +178,8 @@ class ResourceLoaderBridge { bool was_ignored_by_handler, bool stale_copy_in_cache, const std::string& security_info, - const base::TimeTicks& completion_time) = 0; + const base::TimeTicks& completion_time, + int64 total_transfer_size) = 0; protected: virtual ~Peer() {} diff --git a/webkit/child/weburlloader_impl.cc b/webkit/child/weburlloader_impl.cc index 64f91ab..fb805a5 100644 --- a/webkit/child/weburlloader_impl.cc +++ b/webkit/child/weburlloader_impl.cc @@ -247,7 +247,8 @@ class WebURLLoaderImpl::Context : public base::RefCounted<Context>, bool was_ignored_by_handler, bool stale_copy_in_cache, const std::string& security_info, - const base::TimeTicks& completion_time) OVERRIDE; + const base::TimeTicks& completion_time, + int64 total_transfer_size) OVERRIDE; private: friend class base::RefCounted<Context>; @@ -601,7 +602,8 @@ void WebURLLoaderImpl::Context::OnCompletedRequest( bool was_ignored_by_handler, bool stale_copy_in_cache, const std::string& security_info, - const base::TimeTicks& completion_time) { + const base::TimeTicks& completion_time, + int64 total_transfer_size) { if (ftp_listing_delegate_) { ftp_listing_delegate_->OnCompletedRequest(); ftp_listing_delegate_.reset(NULL); @@ -622,7 +624,8 @@ void WebURLLoaderImpl::Context::OnCompletedRequest( error_code)); } else { client_->didFinishLoading( - loader_, (completion_time - TimeTicks()).InSecondsF()); + loader_, (completion_time - TimeTicks()).InSecondsF(), + total_transfer_size); } } @@ -674,7 +677,7 @@ void WebURLLoaderImpl::Context::HandleDataURL() { } OnCompletedRequest(error_code, false, false, info.security_info, - base::TimeTicks::Now()); + base::TimeTicks::Now(), 0); } // WebURLLoaderImpl ----------------------------------------------------------- |