| 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 f7da400c932756f0b3f1683ebdc6e30cfee248a9..9f8a62f4032127be307b1221dda5dbbb8d7a461b 100644
|
| --- a/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc
|
| +++ b/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc
|
| @@ -41,6 +41,7 @@ ChromeDataUseAscriber::ChromeDataUseAscriber() {
|
| ChromeDataUseAscriber::~ChromeDataUseAscriber() {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
|
| DCHECK(subframe_to_mainframe_map_.empty());
|
| + DCHECK(pending_navigation_global_request_id_.empty());
|
| DCHECK(data_use_recorders_.empty());
|
| }
|
|
|
| @@ -251,6 +252,7 @@ void ChromeDataUseAscriber::RenderFrameDeleted(int render_process_id,
|
| }
|
| subframe_to_mainframe_map_.erase(key);
|
| visible_main_render_frames_.erase(key);
|
| + pending_navigation_global_request_id_.erase(key);
|
| }
|
|
|
| void ChromeDataUseAscriber::DidStartMainFrameNavigation(
|
| @@ -262,21 +264,37 @@ void ChromeDataUseAscriber::DidStartMainFrameNavigation(
|
| }
|
|
|
| void ChromeDataUseAscriber::ReadyToCommitMainFrameNavigation(
|
| - GURL gurl,
|
| content::GlobalRequestID global_request_id,
|
| int render_process_id,
|
| - int render_frame_id,
|
| - bool is_same_page_navigation,
|
| - void* navigation_handle) {
|
| + int render_frame_id) {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
|
| + pending_navigation_global_request_id_.insert(
|
| + std::make_pair(RenderFrameHostID(render_process_id, render_frame_id),
|
| + global_request_id));
|
| +}
|
| +
|
| +void ChromeDataUseAscriber::DidFinishNavigation(int render_process_id,
|
| + int render_frame_id,
|
| + GURL gurl,
|
| + bool is_same_page_navigation,
|
| + uint32_t page_transition) {
|
| + DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
|
| +
|
| + RenderFrameHostID mainframe(render_process_id, render_frame_id);
|
| +
|
| + // Find the global request id of the pending navigation.
|
| + auto global_request_id =
|
| + pending_navigation_global_request_id_.find(mainframe);
|
| + DCHECK(global_request_id != pending_navigation_global_request_id_.end());
|
|
|
| // Find the DataUseRecorderEntry the frame is associated with
|
| - auto frame_it = main_render_frame_data_use_map_.find(
|
| - RenderFrameHostID(render_process_id, render_frame_id));
|
| + auto frame_it = main_render_frame_data_use_map_.find(mainframe);
|
|
|
| // Find the pending navigation entry.
|
| auto navigation_iter =
|
| - pending_navigation_data_use_map_.find(global_request_id);
|
| + pending_navigation_data_use_map_.find(global_request_id->second);
|
| + pending_navigation_global_request_id_.erase(global_request_id);
|
| +
|
| // We might not find a navigation entry since the pending navigation may not
|
| // have caused any HTTP or HTTPS URLRequests to be made.
|
| if (navigation_iter == pending_navigation_data_use_map_.end()) {
|
| @@ -284,6 +302,7 @@ void ChromeDataUseAscriber::ReadyToCommitMainFrameNavigation(
|
| // must be removed from frame map, and possibly marked complete and deleted.
|
| if (frame_it != main_render_frame_data_use_map_.end()) {
|
| DataUseRecorderEntry old_frame_entry = frame_it->second;
|
| + old_frame_entry->set_page_transition(page_transition);
|
| main_render_frame_data_use_map_.erase(frame_it);
|
| if (old_frame_entry->IsDataUseComplete()) {
|
| OnDataUseCompleted(old_frame_entry);
|
| @@ -293,29 +312,29 @@ void ChromeDataUseAscriber::ReadyToCommitMainFrameNavigation(
|
| // Add a new recorder to the render frame map to replace the deleted one.
|
| DataUseRecorderEntry entry = data_use_recorders_.emplace(
|
| data_use_recorders_.end());
|
| - std::pair<int, int> frame_key =
|
| - RenderFrameHostID(render_process_id, render_frame_id);
|
| - entry->set_main_frame_id(frame_key);
|
| - main_render_frame_data_use_map_.insert(std::make_pair(frame_key, entry));
|
| + entry->set_main_frame_id(mainframe);
|
| + main_render_frame_data_use_map_.insert(std::make_pair(mainframe, entry));
|
| }
|
| return;
|
| }
|
|
|
| DataUseRecorderEntry entry = navigation_iter->second;
|
| pending_navigation_data_use_map_.erase(navigation_iter);
|
| - entry->set_main_frame_id(
|
| - RenderFrameHostID(render_process_id, render_frame_id));
|
| + entry->set_main_frame_id(mainframe);
|
|
|
| // If the frame has already been deleted then mark this navigation as having
|
| // completed its data use.
|
| if (frame_it == main_render_frame_data_use_map_.end()) {
|
| if (entry->IsDataUseComplete()) {
|
| + entry->set_page_transition(page_transition);
|
| OnDataUseCompleted(entry);
|
| data_use_recorders_.erase(entry);
|
| }
|
| return;
|
| }
|
| DataUseRecorderEntry old_frame_entry = frame_it->second;
|
| + old_frame_entry->set_page_transition(page_transition);
|
| +
|
| if (is_same_page_navigation) {
|
| old_frame_entry->MergeFrom(&(*entry));
|
|
|
| @@ -338,8 +357,7 @@ void ChromeDataUseAscriber::ReadyToCommitMainFrameNavigation(
|
| OnDataUseCompleted(old_frame_entry);
|
| data_use_recorders_.erase(old_frame_entry);
|
|
|
| - if (visible_main_render_frames_.find(
|
| - RenderFrameHostID(render_process_id, render_frame_id)) !=
|
| + if (visible_main_render_frames_.find(mainframe) !=
|
| visible_main_render_frames_.end()) {
|
| entry->set_is_visible(true);
|
| }
|
| @@ -355,18 +373,7 @@ void ChromeDataUseAscriber::ReadyToCommitMainFrameNavigation(
|
| data_use.set_url(gurl);
|
| }
|
|
|
| - main_render_frame_data_use_map_.insert(std::make_pair(
|
| - RenderFrameHostID(render_process_id, render_frame_id), entry));
|
| - }
|
| -}
|
| -
|
| -void ChromeDataUseAscriber::DidFinishNavigation(int render_process_id,
|
| - int render_frame_id,
|
| - uint32_t page_transition) {
|
| - auto frame_it = main_render_frame_data_use_map_.find(
|
| - RenderFrameHostID(render_process_id, render_frame_id));
|
| - if (frame_it != main_render_frame_data_use_map_.end()) {
|
| - frame_it->second->set_page_transition(page_transition);
|
| + main_render_frame_data_use_map_.insert(std::make_pair(mainframe, entry));
|
| }
|
| }
|
|
|
| @@ -414,11 +421,19 @@ void ChromeDataUseAscriber::RenderFrameHostChanged(int old_render_process_id,
|
| int old_render_frame_id,
|
| int new_render_process_id,
|
| int new_render_frame_id) {
|
| - if (visible_main_render_frames_.find(
|
| - RenderFrameHostID(old_render_process_id, old_render_frame_id)) !=
|
| + RenderFrameHostID old_frame(old_render_process_id, old_render_frame_id);
|
| + if (visible_main_render_frames_.find(old_frame) !=
|
| visible_main_render_frames_.end()) {
|
| WasShownOrHidden(new_render_process_id, new_render_frame_id, true);
|
| }
|
| + auto pending_navigation_iter =
|
| + pending_navigation_global_request_id_.find(old_frame);
|
| + if (pending_navigation_iter != pending_navigation_global_request_id_.end()) {
|
| + pending_navigation_global_request_id_.insert(std::make_pair(
|
| + RenderFrameHostID(new_render_process_id, new_render_frame_id),
|
| + pending_navigation_iter->second));
|
| + pending_navigation_global_request_id_.erase(pending_navigation_iter);
|
| + }
|
| }
|
|
|
| } // namespace data_use_measurement
|
|
|