| Index: chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc
|
| diff --git a/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc b/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc
|
| index a41f0296c23da9b94cc5a08cd2084f2128059a3c..dddd21ebce12827cbb6e2696f9253df1e7dfdcc3 100644
|
| --- a/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc
|
| +++ b/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc
|
| @@ -16,8 +16,14 @@
|
| #include "content/public/common/browser_side_navigation_policy.h"
|
| #include "net/url_request/url_request.h"
|
|
|
| -namespace data_use_measurement {
|
| +namespace {
|
| +const base::TimeDelta kDiscardPendingNavigationsThreshold =
|
| + base::TimeDelta::FromSeconds(5);
|
| +const base::TimeDelta kDiscardPendingNavigationsInterval =
|
| + base::TimeDelta::FromSeconds(10);
|
| +}
|
|
|
| +namespace data_use_measurement {
|
| // static
|
| const void* ChromeDataUseAscriber::DataUseRecorderEntryAsUserData::
|
| kUserDataKey = static_cast<void*>(
|
| @@ -36,7 +42,9 @@ ChromeDataUseAscriber::ChromeDataUseAscriber() {
|
|
|
| ChromeDataUseAscriber::~ChromeDataUseAscriber() {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
|
| - DCHECK_EQ(0u, data_use_recorders_.size());
|
| + DCHECK_EQ(0u, render_frame_data_use_map_.size());
|
| + DCHECK_EQ(pending_navigation_data_use_map_.size(),
|
| + data_use_recorders_.size());
|
| }
|
|
|
| DataUseRecorder* ChromeDataUseAscriber::GetDataUseRecorder(
|
| @@ -96,6 +104,8 @@ void ChromeDataUseAscriber::OnBeforeUrlRequest(net::URLRequest* request) {
|
| new DataUseRecorderEntryAsUserData(entry));
|
| pending_navigation_data_use_map_.insert(
|
| std::make_pair(request_info->GetGlobalRequestID(), entry));
|
| +
|
| + DeleteOldPendingNavigationEntries(base::Time::Now());
|
| }
|
|
|
| void ChromeDataUseAscriber::OnUrlRequestDestroyed(net::URLRequest* request) {
|
| @@ -190,4 +200,26 @@ ChromeDataUseAscriber::CreateURLRequestClassifier() const {
|
| return base::MakeUnique<ContentURLRequestClassifier>();
|
| }
|
|
|
| +void ChromeDataUseAscriber::DeleteOldPendingNavigationEntries(base::Time now) {
|
| + if (last_pending_navigations_discard_time_ >
|
| + now + kDiscardPendingNavigationsInterval) {
|
| + return;
|
| + }
|
| + last_pending_navigations_discard_time_ = now;
|
| +
|
| + for (auto iter = pending_navigation_data_use_map_.begin();
|
| + iter != pending_navigation_data_use_map_.end();) {
|
| + DataUseRecorderEntry entry = iter->second;
|
| + DataUseRecorder* recorder = (*entry).get();
|
| + const DataUse& data_use = (*entry)->data_use();
|
| + if (recorder->IsDataUseComplete() &&
|
| + data_use.start_time() <= now - kDiscardPendingNavigationsThreshold) {
|
| + data_use_recorders_.erase(entry);
|
| + iter = pending_navigation_data_use_map_.erase(iter);
|
| + } else {
|
| + iter++;
|
| + }
|
| + }
|
| +}
|
| +
|
| } // namespace data_use_measurement
|
|
|