Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(645)

Side by Side Diff: chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc

Issue 2507813003: Periodically remove old pending navigation entries.
Patch Set: Sync Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "chrome/browser/data_use_measurement/chrome_data_use_ascriber.h" 5 #include "chrome/browser/data_use_measurement/chrome_data_use_ascriber.h"
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "components/data_use_measurement/content/content_url_request_classifier .h" 8 #include "components/data_use_measurement/content/content_url_request_classifier .h"
9 #include "components/data_use_measurement/core/data_use_recorder.h" 9 #include "components/data_use_measurement/core/data_use_recorder.h"
10 #include "components/data_use_measurement/core/data_use_user_data.h" 10 #include "components/data_use_measurement/core/data_use_user_data.h"
11 #include "components/data_use_measurement/core/url_request_classifier.h" 11 #include "components/data_use_measurement/core/url_request_classifier.h"
12 #include "content/public/browser/browser_thread.h" 12 #include "content/public/browser/browser_thread.h"
13 #include "content/public/browser/navigation_handle.h" 13 #include "content/public/browser/navigation_handle.h"
14 #include "content/public/browser/render_frame_host.h" 14 #include "content/public/browser/render_frame_host.h"
15 #include "content/public/browser/resource_request_info.h" 15 #include "content/public/browser/resource_request_info.h"
16 #include "content/public/common/browser_side_navigation_policy.h" 16 #include "content/public/common/browser_side_navigation_policy.h"
17 #include "net/url_request/url_request.h" 17 #include "net/url_request/url_request.h"
18 18
19 namespace {
20 const base::TimeDelta kDiscardPendingNavigationsThreshold =
21 base::TimeDelta::FromSeconds(5);
22 const base::TimeDelta kDiscardPendingNavigationsInterval =
23 base::TimeDelta::FromSeconds(10);
24 }
25
19 namespace data_use_measurement { 26 namespace data_use_measurement {
20
21 // static 27 // static
22 const void* ChromeDataUseAscriber::DataUseRecorderEntryAsUserData:: 28 const void* ChromeDataUseAscriber::DataUseRecorderEntryAsUserData::
23 kUserDataKey = static_cast<void*>( 29 kUserDataKey = static_cast<void*>(
24 &ChromeDataUseAscriber::DataUseRecorderEntryAsUserData::kUserDataKey); 30 &ChromeDataUseAscriber::DataUseRecorderEntryAsUserData::kUserDataKey);
25 31
26 ChromeDataUseAscriber::DataUseRecorderEntryAsUserData:: 32 ChromeDataUseAscriber::DataUseRecorderEntryAsUserData::
27 DataUseRecorderEntryAsUserData(DataUseRecorderEntry entry) 33 DataUseRecorderEntryAsUserData(DataUseRecorderEntry entry)
28 : entry_(entry) {} 34 : entry_(entry) {}
29 35
30 ChromeDataUseAscriber::DataUseRecorderEntryAsUserData:: 36 ChromeDataUseAscriber::DataUseRecorderEntryAsUserData::
31 ~DataUseRecorderEntryAsUserData() {} 37 ~DataUseRecorderEntryAsUserData() {}
32 38
33 ChromeDataUseAscriber::ChromeDataUseAscriber() { 39 ChromeDataUseAscriber::ChromeDataUseAscriber() {
34 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 40 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
35 } 41 }
36 42
37 ChromeDataUseAscriber::~ChromeDataUseAscriber() { 43 ChromeDataUseAscriber::~ChromeDataUseAscriber() {
38 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 44 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
39 DCHECK_EQ(0u, data_use_recorders_.size()); 45 DCHECK_EQ(0u, render_frame_data_use_map_.size());
46 DCHECK_EQ(pending_navigation_data_use_map_.size(),
47 data_use_recorders_.size());
40 } 48 }
41 49
42 DataUseRecorder* ChromeDataUseAscriber::GetDataUseRecorder( 50 DataUseRecorder* ChromeDataUseAscriber::GetDataUseRecorder(
43 net::URLRequest* request) { 51 net::URLRequest* request) {
44 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 52 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
45 return nullptr; 53 return nullptr;
46 } 54 }
47 55
48 void ChromeDataUseAscriber::OnBeforeUrlRequest(net::URLRequest* request) { 56 void ChromeDataUseAscriber::OnBeforeUrlRequest(net::URLRequest* request) {
49 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 57 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 request->GetUserData(DataUseRecorderEntryAsUserData::kUserDataKey)); 97 request->GetUserData(DataUseRecorderEntryAsUserData::kUserDataKey));
90 if (user_data) 98 if (user_data)
91 return; 99 return;
92 100
93 DataUseRecorderEntry entry = data_use_recorders_.insert( 101 DataUseRecorderEntry entry = data_use_recorders_.insert(
94 data_use_recorders_.end(), base::MakeUnique<DataUseRecorder>()); 102 data_use_recorders_.end(), base::MakeUnique<DataUseRecorder>());
95 request->SetUserData(DataUseRecorderEntryAsUserData::kUserDataKey, 103 request->SetUserData(DataUseRecorderEntryAsUserData::kUserDataKey,
96 new DataUseRecorderEntryAsUserData(entry)); 104 new DataUseRecorderEntryAsUserData(entry));
97 pending_navigation_data_use_map_.insert( 105 pending_navigation_data_use_map_.insert(
98 std::make_pair(request_info->GetGlobalRequestID(), entry)); 106 std::make_pair(request_info->GetGlobalRequestID(), entry));
107
108 DeleteOldPendingNavigationEntries(base::Time::Now());
99 } 109 }
100 110
101 void ChromeDataUseAscriber::OnUrlRequestDestroyed(net::URLRequest* request) { 111 void ChromeDataUseAscriber::OnUrlRequestDestroyed(net::URLRequest* request) {
102 const content::ResourceRequestInfo* request_info = 112 const content::ResourceRequestInfo* request_info =
103 content::ResourceRequestInfo::ForRequest(request); 113 content::ResourceRequestInfo::ForRequest(request);
104 content::ResourceType resource_type = request_info 114 content::ResourceType resource_type = request_info
105 ? request_info->GetResourceType() 115 ? request_info->GetResourceType()
106 : content::RESOURCE_TYPE_LAST_TYPE; 116 : content::RESOURCE_TYPE_LAST_TYPE;
107 if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME) { 117 if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME) {
108 // If request was not successful, then ReadyToCommitNavigation will not be 118 // If request was not successful, then ReadyToCommitNavigation will not be
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 pending_navigation_data_use_map_.erase(navigation_iter); 193 pending_navigation_data_use_map_.erase(navigation_iter);
184 data_use_recorders_.erase(entry); 194 data_use_recorders_.erase(entry);
185 } 195 }
186 } 196 }
187 197
188 std::unique_ptr<URLRequestClassifier> 198 std::unique_ptr<URLRequestClassifier>
189 ChromeDataUseAscriber::CreateURLRequestClassifier() const { 199 ChromeDataUseAscriber::CreateURLRequestClassifier() const {
190 return base::MakeUnique<ContentURLRequestClassifier>(); 200 return base::MakeUnique<ContentURLRequestClassifier>();
191 } 201 }
192 202
203 void ChromeDataUseAscriber::DeleteOldPendingNavigationEntries(base::Time now) {
204 if (last_pending_navigations_discard_time_ >
205 now + kDiscardPendingNavigationsInterval) {
206 return;
207 }
208 last_pending_navigations_discard_time_ = now;
209
210 for (auto iter = pending_navigation_data_use_map_.begin();
211 iter != pending_navigation_data_use_map_.end();) {
212 DataUseRecorderEntry entry = iter->second;
213 DataUseRecorder* recorder = (*entry).get();
214 const DataUse& data_use = (*entry)->data_use();
215 if (recorder->IsDataUseComplete() &&
216 data_use.start_time() <= now - kDiscardPendingNavigationsThreshold) {
217 data_use_recorders_.erase(entry);
218 iter = pending_navigation_data_use_map_.erase(iter);
219 } else {
220 iter++;
221 }
222 }
223 }
224
193 } // namespace data_use_measurement 225 } // namespace data_use_measurement
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698