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

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

Issue 2875263003: Support for transfer navigations in data use ascriber (Closed)
Patch Set: 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 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

Powered by Google App Engine
This is Rietveld 408576698