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

Unified Diff: chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc

Issue 2890673002: TEST 2868733002 (Closed)
Patch Set: log Created 3 years, 7 months 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 side-by-side diff with in-line comments
Download patch
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 7e0c3a2a264cba0c4256380621c5fe2d53bfb2ec..d2fcdfdcba47ad3a5287ea2eb757ecea4c244d59 100644
--- a/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc
+++ b/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc
@@ -41,7 +41,10 @@ ChromeDataUseAscriber::ChromeDataUseAscriber() {
ChromeDataUseAscriber::~ChromeDataUseAscriber() {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
DCHECK(subframe_to_mainframe_map_.empty());
- DCHECK(data_use_recorders_.empty());
+ // |data_use_recorders_| can be non empty, when mainframe url requests are
+ // created but no mainframe navigations take place.
+ // TODO(rajendrant): Enable this check when fixed for unittests.
+ // DCHECK(data_use_recorders_.empty());
}
ChromeDataUseRecorder* ChromeDataUseAscriber::GetOrCreateDataUseRecorder(
@@ -156,16 +159,41 @@ ChromeDataUseAscriber::GetOrCreateDataUseRecorderEntry(
return entry;
}
+void ChromeDataUseAscriber::OnUrlRequestCompleted(
+ const net::URLRequest& request,
+ bool started) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+ ChromeDataUseRecorder* recorder = GetDataUseRecorder(request);
+
+ if (!recorder)
+ return;
+
+ const content::ResourceRequestInfo* request_info =
+ content::ResourceRequestInfo::ForRequest(&request);
+ if (!request_info ||
+ request_info->GetResourceType() != content::RESOURCE_TYPE_MAIN_FRAME) {
+ return;
+ }
+
+ // If mainframe request was not successful, then NavigationHandle in
+ // DidFinishMainFrameNavigation will not have GlobalRequestID. So we erase the
+ // DataUseRecorderEntry here.
+ if (!request.status().is_success())
+ pending_navigation_data_use_map_.erase(recorder->main_frame_request_id());
+}
+
void ChromeDataUseAscriber::OnUrlRequestDestroyed(net::URLRequest* request) {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+ // TODO(rajendrant): GetDataUseRecorder is sufficient and
+ // GetOrCreateDataUseRecorderEntry is not needed. The entry gets created in
+ // DataUseAscriber::OnBeforeUrlRequest().
DataUseRecorderEntry entry = GetOrCreateDataUseRecorderEntry(request);
if (entry == data_use_recorders_.end())
return;
- DataUseRecorder* recorder = &(*entry);
-
RenderFrameHostID frame_key = entry->main_frame_id();
auto frame_iter = main_render_frame_data_use_map_.find(frame_key);
bool is_in_render_frame_map =
@@ -174,30 +202,16 @@ void ChromeDataUseAscriber::OnUrlRequestDestroyed(net::URLRequest* request) {
const content::ResourceRequestInfo* request_info =
content::ResourceRequestInfo::ForRequest(request);
- content::ResourceType resource_type = request_info
- ? request_info->GetResourceType()
- : content::RESOURCE_TYPE_LAST_TYPE;
-
- bool is_in_pending_navigation_map = false;
- if (request_info && resource_type == content::RESOURCE_TYPE_MAIN_FRAME) {
- auto navigation_iter = pending_navigation_data_use_map_.find(
- entry->main_frame_request_id());
- is_in_pending_navigation_map =
- navigation_iter != pending_navigation_data_use_map_.end();
-
- // If request was not successful, then NavigationHandle in
- // DidFinishMainFrameNavigation will not have GlobalRequestID. So we erase
- // the DataUseRecorderEntry here.
- if (is_in_pending_navigation_map && !request->status().is_success()) {
- pending_navigation_data_use_map_.erase(navigation_iter);
- is_in_pending_navigation_map = false;
- }
- }
+ bool is_in_pending_navigation_map =
+ request_info &&
+ request_info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME &&
+ pending_navigation_data_use_map_.find(entry->main_frame_request_id()) !=
+ pending_navigation_data_use_map_.end();
DataUseAscriber::OnUrlRequestDestroyed(request);
request->RemoveUserData(DataUseRecorderEntryAsUserData::kUserDataKey);
- if (recorder->IsDataUseComplete() && !is_in_render_frame_map &&
+ if (entry->IsDataUseComplete() && !is_in_render_frame_map &&
!is_in_pending_navigation_map) {
OnDataUseCompleted(entry);
data_use_recorders_.erase(entry);

Powered by Google App Engine
This is Rietveld 408576698