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 28e78c1e80aa936201bb11f20fb468dacf986549..6ca4087b47bc78df99f4d5d5c0ad3aa1e59c9035 100644 |
--- a/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc |
+++ b/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc |
@@ -58,10 +58,6 @@ ChromeDataUseRecorder* ChromeDataUseAscriber::GetDataUseRecorder( |
const net::URLRequest& request) { |
DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
- // TODO(ryansturm): Handle PlzNavigate (http://crbug/664233). |
- if (content::IsBrowserSideNavigationEnabled()) |
- return nullptr; |
- |
// If a DataUseRecorder has already been set as user data, then return that. |
auto* user_data = static_cast<DataUseRecorderEntryAsUserData*>( |
request.GetUserData(DataUseRecorderEntryAsUserData::kUserDataKey)); |
@@ -73,10 +69,6 @@ ChromeDataUseAscriber::GetOrCreateDataUseRecorderEntry( |
net::URLRequest* request) { |
DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
- // TODO(ryansturm): Handle PlzNavigate (http://crbug/664233). |
- if (content::IsBrowserSideNavigationEnabled()) |
- return data_use_recorders_.end(); |
- |
// If a DataUseRecorder has already been set as user data, then return that. |
auto* user_data = static_cast<DataUseRecorderEntryAsUserData*>( |
request->GetUserData(DataUseRecorderEntryAsUserData::kUserDataKey)); |
@@ -96,6 +88,27 @@ ChromeDataUseAscriber::GetOrCreateDataUseRecorderEntry( |
return entry; |
} |
+ const content::ResourceRequestInfo* request_info = |
+ content::ResourceRequestInfo::ForRequest(request); |
+ if (!request_info || |
+ request_info->GetGlobalRequestID() == content::GlobalRequestID()) { |
+ // Create a new DataUseRecorder for all other requests. |
+ DataUseRecorderEntry entry = |
+ CreateNewDataUseRecorder(request, DataUse::TrafficType::UNKNOWN); |
+ DataUse& data_use = entry->data_use(); |
+ data_use.set_url(request->url()); |
+ return entry; |
+ } |
+ |
+ if (request_info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME) { |
+ DataUseRecorderEntry new_entry = |
+ CreateNewDataUseRecorder(request, DataUse::TrafficType::USER_TRAFFIC); |
+ new_entry->set_main_frame_request_id(request_info->GetGlobalRequestID()); |
+ pending_navigation_data_use_map_.insert( |
+ std::make_pair(request_info->GetGlobalRequestID(), new_entry)); |
+ return new_entry; |
+ } |
+ |
int render_process_id = -1; |
int render_frame_id = -1; |
bool has_valid_frame = content::ResourceRequestInfo::GetRenderFrameForRequest( |
@@ -121,26 +134,6 @@ ChromeDataUseAscriber::GetOrCreateDataUseRecorderEntry( |
return data_use_recorders_.end(); |
} |
- const content::ResourceRequestInfo* request_info = |
- content::ResourceRequestInfo::ForRequest(request); |
- content::ResourceType resource_type = |
- request_info ? request_info->GetResourceType() |
- : content::RESOURCE_TYPE_LAST_TYPE; |
- |
- if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME) { |
- content::GlobalRequestID navigation_key = |
- request_info->GetGlobalRequestID(); |
- |
- DataUseRecorderEntry new_entry = |
- CreateNewDataUseRecorder(request, DataUse::TrafficType::USER_TRAFFIC); |
- new_entry->set_main_frame_request_id(navigation_key); |
- pending_navigation_data_use_map_.insert( |
- std::make_pair(navigation_key, new_entry)); |
- |
- return new_entry; |
- } |
- |
- DCHECK(frame_iter != main_render_frame_data_use_map_.end()); |
auto entry = frame_iter->second; |
request->SetUserData( |
DataUseRecorderEntryAsUserData::kUserDataKey, |
@@ -198,25 +191,28 @@ void ChromeDataUseAscriber::OnUrlRequestDestroyed(net::URLRequest* request) { |
for (auto& observer : observers_) |
observer.OnPageResourceLoad(*request, &entry->data_use()); |
- 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 = |
- frame_iter != main_render_frame_data_use_map_.end() && |
- frame_iter->second->HasPendingURLRequest(request); |
- |
+ bool will_datause_complete = false; |
const content::ResourceRequestInfo* request_info = |
content::ResourceRequestInfo::ForRequest(request); |
- 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(); |
+ |
+ if (request_info && |
+ request_info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME) { |
+ will_datause_complete = |
+ pending_navigation_data_use_map_.find(entry->main_frame_request_id()) == |
+ pending_navigation_data_use_map_.end(); |
+ } else { |
+ // Non-mainframe, Services, and other requests. |
+ auto frame_iter = |
+ main_render_frame_data_use_map_.find(entry->main_frame_id()); |
+ will_datause_complete = |
+ frame_iter == main_render_frame_data_use_map_.end() || |
+ !frame_iter->second->HasPendingURLRequest(request); |
+ } |
DataUseAscriber::OnUrlRequestDestroyed(request); |
request->RemoveUserData(DataUseRecorderEntryAsUserData::kUserDataKey); |
- if (entry->IsDataUseComplete() && !is_in_render_frame_map && |
- !is_in_pending_navigation_map) { |
+ if (entry->IsDataUseComplete() && will_datause_complete) { |
NotifyDataUseCompleted(entry); |
data_use_recorders_.erase(entry); |
} |
@@ -228,9 +224,6 @@ void ChromeDataUseAscriber::RenderFrameCreated(int render_process_id, |
int main_render_frame_id) { |
DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
- if (content::IsBrowserSideNavigationEnabled()) |
- return; |
- |
if (main_render_process_id != -1 && main_render_frame_id != -1) { |
// Create an entry in |subframe_to_mainframe_map_| for this frame mapped to |
// it's parent frame. |
@@ -259,9 +252,6 @@ void ChromeDataUseAscriber::RenderFrameDeleted(int render_process_id, |
int main_render_frame_id) { |
DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
- if (content::IsBrowserSideNavigationEnabled()) |
- return; |
- |
RenderFrameHostID key(render_process_id, render_frame_id); |
if (main_render_process_id == -1 && main_render_frame_id == -1) { |
@@ -384,7 +374,6 @@ void ChromeDataUseAscriber::DidFinishNavigation(int render_process_id, |
} else { |
// Navigation is not same page, so remove old entry from |
// |main_render_frame_data_use_map_|, possibly marking it complete. |
- main_render_frame_data_use_map_.erase(frame_it); |
if (old_frame_entry->IsDataUseComplete()) { |
NotifyDataUseCompleted(old_frame_entry); |
data_use_recorders_.erase(old_frame_entry); |
@@ -405,6 +394,7 @@ void ChromeDataUseAscriber::DidFinishNavigation(int render_process_id, |
data_use.set_url(gurl); |
} |
+ main_render_frame_data_use_map_.erase(frame_it); |
rajendrant
2017/05/24 07:14:09
Moving it down, since |old_frame_entry| is accesse
RyanSturm
2017/05/24 16:08:44
Acknowledged.
|
main_render_frame_data_use_map_.insert(std::make_pair(mainframe, entry)); |
} |
} |