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

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

Issue 2865913002: Support for identifying traffic type in data use ascriber (Closed)
Patch Set: compile fix 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 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 <string> 7 #include <string>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "chrome/browser/data_use_measurement/chrome_data_use_recorder.h" 10 #include "chrome/browser/data_use_measurement/chrome_data_use_recorder.h"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 request->GetUserData(DataUseRecorderEntryAsUserData::kUserDataKey)); 78 request->GetUserData(DataUseRecorderEntryAsUserData::kUserDataKey));
79 if (user_data) 79 if (user_data)
80 return user_data->recorder_entry(); 80 return user_data->recorder_entry();
81 81
82 // If request is associated with a ChromeService, create a new 82 // If request is associated with a ChromeService, create a new
83 // DataUseRecorder for it. There is no reason to aggregate URLRequests 83 // DataUseRecorder for it. There is no reason to aggregate URLRequests
84 // from ChromeServices into the same DataUseRecorder instance. 84 // from ChromeServices into the same DataUseRecorder instance.
85 DataUseUserData* service = static_cast<DataUseUserData*>( 85 DataUseUserData* service = static_cast<DataUseUserData*>(
86 request->GetUserData(DataUseUserData::kUserDataKey)); 86 request->GetUserData(DataUseUserData::kUserDataKey));
87 if (service) { 87 if (service) {
88 DataUseRecorderEntry entry = CreateNewDataUseRecorder(request); 88 DataUseRecorderEntry entry =
89 89 CreateNewDataUseRecorder(request, DataUse::TrafficType::SERVICES);
90 entry->data_use().set_description( 90 entry->data_use().set_description(
91 DataUseUserData::GetServiceNameAsString(service->service_name())); 91 DataUseUserData::GetServiceNameAsString(service->service_name()));
92 return entry; 92 return entry;
93 } 93 }
94 94
95 int render_process_id = -1; 95 int render_process_id = -1;
96 int render_frame_id = -1; 96 int render_frame_id = -1;
97 bool has_valid_frame = content::ResourceRequestInfo::GetRenderFrameForRequest( 97 bool has_valid_frame = content::ResourceRequestInfo::GetRenderFrameForRequest(
98 request, &render_process_id, &render_frame_id); 98 request, &render_process_id, &render_frame_id);
99 if (has_valid_frame && 99 if (has_valid_frame &&
(...skipping 20 matching lines...) Expand all
120 const content::ResourceRequestInfo* request_info = 120 const content::ResourceRequestInfo* request_info =
121 content::ResourceRequestInfo::ForRequest(request); 121 content::ResourceRequestInfo::ForRequest(request);
122 content::ResourceType resource_type = 122 content::ResourceType resource_type =
123 request_info ? request_info->GetResourceType() 123 request_info ? request_info->GetResourceType()
124 : content::RESOURCE_TYPE_LAST_TYPE; 124 : content::RESOURCE_TYPE_LAST_TYPE;
125 125
126 if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME) { 126 if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME) {
127 content::GlobalRequestID navigation_key = 127 content::GlobalRequestID navigation_key =
128 request_info->GetGlobalRequestID(); 128 request_info->GetGlobalRequestID();
129 129
130 DataUseRecorderEntry new_entry = CreateNewDataUseRecorder(request); 130 DataUseRecorderEntry new_entry =
131 CreateNewDataUseRecorder(request, DataUse::TrafficType::USER_TRAFFIC);
131 new_entry->set_main_frame_request_id(navigation_key); 132 new_entry->set_main_frame_request_id(navigation_key);
132 pending_navigation_data_use_map_.insert( 133 pending_navigation_data_use_map_.insert(
133 std::make_pair(navigation_key, new_entry)); 134 std::make_pair(navigation_key, new_entry));
134 135
135 return new_entry; 136 return new_entry;
136 } 137 }
137 138
138 DCHECK(frame_iter != main_render_frame_data_use_map_.end()); 139 DCHECK(frame_iter != main_render_frame_data_use_map_.end());
139 auto entry = frame_iter->second; 140 auto entry = frame_iter->second;
140 request->SetUserData( 141 request->SetUserData(
141 DataUseRecorderEntryAsUserData::kUserDataKey, 142 DataUseRecorderEntryAsUserData::kUserDataKey,
142 base::MakeUnique<DataUseRecorderEntryAsUserData>(entry)); 143 base::MakeUnique<DataUseRecorderEntryAsUserData>(entry));
143 entry->AddPendingURLRequest(request); 144 entry->AddPendingURLRequest(request);
144 return entry; 145 return entry;
145 } 146 }
146 147
147 // Create a new DataUseRecorder for all other requests. 148 // Create a new DataUseRecorder for all other requests.
148 DataUseRecorderEntry entry = CreateNewDataUseRecorder(request); 149 DataUseRecorderEntry entry = CreateNewDataUseRecorder(
150 request,
151 content::ResourceRequestInfo::OriginatedFromServiceWorker(request)
152 ? DataUse::TrafficType::SERVICE_WORKER
153 : DataUse::TrafficType::UNKNOWN);
149 DataUse& data_use = entry->data_use(); 154 DataUse& data_use = entry->data_use();
150 data_use.set_url(request->url()); 155 data_use.set_url(request->url());
151 return entry; 156 return entry;
152 } 157 }
153 158
154 void ChromeDataUseAscriber::OnUrlRequestDestroyed(net::URLRequest* request) { 159 void ChromeDataUseAscriber::OnUrlRequestDestroyed(net::URLRequest* request) {
155 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 160 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
156 161
157 DataUseRecorderEntry entry = GetOrCreateDataUseRecorderEntry(request); 162 DataUseRecorderEntry entry = GetOrCreateDataUseRecorderEntry(request);
158 163
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 subframe_to_mainframe_map_.insert(std::make_pair( 219 subframe_to_mainframe_map_.insert(std::make_pair(
215 RenderFrameHostID(render_process_id, render_frame_id), 220 RenderFrameHostID(render_process_id, render_frame_id),
216 RenderFrameHostID(main_render_process_id, main_render_frame_id))); 221 RenderFrameHostID(main_render_process_id, main_render_frame_id)));
217 } else { 222 } else {
218 subframe_to_mainframe_map_.insert( 223 subframe_to_mainframe_map_.insert(
219 std::make_pair(RenderFrameHostID(render_process_id, render_frame_id), 224 std::make_pair(RenderFrameHostID(render_process_id, render_frame_id),
220 RenderFrameHostID(render_process_id, render_frame_id))); 225 RenderFrameHostID(render_process_id, render_frame_id)));
221 auto frame_iter = main_render_frame_data_use_map_.find( 226 auto frame_iter = main_render_frame_data_use_map_.find(
222 RenderFrameHostID(render_process_id, render_frame_id)); 227 RenderFrameHostID(render_process_id, render_frame_id));
223 DCHECK(frame_iter == main_render_frame_data_use_map_.end()); 228 DCHECK(frame_iter == main_render_frame_data_use_map_.end());
224 DataUseRecorderEntry entry = CreateNewDataUseRecorder(nullptr); 229 DataUseRecorderEntry entry =
230 CreateNewDataUseRecorder(nullptr, DataUse::TrafficType::UNKNOWN);
225 entry->set_main_frame_id( 231 entry->set_main_frame_id(
226 RenderFrameHostID(render_process_id, render_frame_id)); 232 RenderFrameHostID(render_process_id, render_frame_id));
227 main_render_frame_data_use_map_.insert(std::make_pair( 233 main_render_frame_data_use_map_.insert(std::make_pair(
228 RenderFrameHostID(render_process_id, render_frame_id), entry)); 234 RenderFrameHostID(render_process_id, render_frame_id), entry));
229 } 235 }
230 } 236 }
231 237
232 void ChromeDataUseAscriber::RenderFrameDeleted(int render_process_id, 238 void ChromeDataUseAscriber::RenderFrameDeleted(int render_process_id,
233 int render_frame_id, 239 int render_frame_id,
234 int main_render_process_id, 240 int main_render_process_id,
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 // Find the pending navigation entry. 283 // Find the pending navigation entry.
278 auto navigation_iter = 284 auto navigation_iter =
279 pending_navigation_data_use_map_.find(global_request_id); 285 pending_navigation_data_use_map_.find(global_request_id);
280 // We might not find a navigation entry since the pending navigation may not 286 // We might not find a navigation entry since the pending navigation may not
281 // have caused any HTTP or HTTPS URLRequests to be made. 287 // have caused any HTTP or HTTPS URLRequests to be made.
282 if (navigation_iter == pending_navigation_data_use_map_.end()) { 288 if (navigation_iter == pending_navigation_data_use_map_.end()) {
283 // No pending navigation entry to worry about. However, the old frame entry 289 // No pending navigation entry to worry about. However, the old frame entry
284 // must be removed from frame map, and possibly marked complete and deleted. 290 // must be removed from frame map, and possibly marked complete and deleted.
285 if (frame_it != main_render_frame_data_use_map_.end()) { 291 if (frame_it != main_render_frame_data_use_map_.end()) {
286 DataUseRecorderEntry old_frame_entry = frame_it->second; 292 DataUseRecorderEntry old_frame_entry = frame_it->second;
293 DataUse::TrafficType old_traffic_type =
294 old_frame_entry->data_use().traffic_type();
287 main_render_frame_data_use_map_.erase(frame_it); 295 main_render_frame_data_use_map_.erase(frame_it);
288 if (old_frame_entry->IsDataUseComplete()) { 296 if (old_frame_entry->IsDataUseComplete()) {
289 OnDataUseCompleted(old_frame_entry); 297 OnDataUseCompleted(old_frame_entry);
290 data_use_recorders_.erase(old_frame_entry); 298 data_use_recorders_.erase(old_frame_entry);
291 } 299 }
292 300
293 // Add a new recorder to the render frame map to replace the deleted one. 301 // Add a new recorder to the render frame map to replace the deleted one.
294 DataUseRecorderEntry entry = data_use_recorders_.emplace( 302 DataUseRecorderEntry entry = data_use_recorders_.emplace(
295 data_use_recorders_.end()); 303 data_use_recorders_.end(), old_traffic_type);
296 std::pair<int, int> frame_key = 304 std::pair<int, int> frame_key =
297 RenderFrameHostID(render_process_id, render_frame_id); 305 RenderFrameHostID(render_process_id, render_frame_id);
298 entry->set_main_frame_id(frame_key); 306 entry->set_main_frame_id(frame_key);
299 main_render_frame_data_use_map_.insert(std::make_pair(frame_key, entry)); 307 main_render_frame_data_use_map_.insert(std::make_pair(frame_key, entry));
300 } 308 }
301 return; 309 return;
302 } 310 }
303 311
304 DataUseRecorderEntry entry = navigation_iter->second; 312 DataUseRecorderEntry entry = navigation_iter->second;
305 pending_navigation_data_use_map_.erase(navigation_iter); 313 pending_navigation_data_use_map_.erase(navigation_iter);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 void ChromeDataUseAscriber::OnDataUseCompleted(DataUseRecorderEntry entry) { 381 void ChromeDataUseAscriber::OnDataUseCompleted(DataUseRecorderEntry entry) {
374 // TODO(ryansturm): Notify observers that data use is complete. 382 // TODO(ryansturm): Notify observers that data use is complete.
375 } 383 }
376 384
377 std::unique_ptr<URLRequestClassifier> 385 std::unique_ptr<URLRequestClassifier>
378 ChromeDataUseAscriber::CreateURLRequestClassifier() const { 386 ChromeDataUseAscriber::CreateURLRequestClassifier() const {
379 return base::MakeUnique<ContentURLRequestClassifier>(); 387 return base::MakeUnique<ContentURLRequestClassifier>();
380 } 388 }
381 389
382 ChromeDataUseAscriber::DataUseRecorderEntry 390 ChromeDataUseAscriber::DataUseRecorderEntry
383 ChromeDataUseAscriber::CreateNewDataUseRecorder(net::URLRequest* request) { 391 ChromeDataUseAscriber::CreateNewDataUseRecorder(
384 DataUseRecorderEntry entry = data_use_recorders_.emplace( 392 net::URLRequest* request,
385 data_use_recorders_.end()); 393 DataUse::TrafficType traffic_type) {
394 DataUseRecorderEntry entry =
395 data_use_recorders_.emplace(data_use_recorders_.end(), traffic_type);
386 if (request) { 396 if (request) {
387 entry->AddPendingURLRequest(request); 397 entry->AddPendingURLRequest(request);
388 request->SetUserData( 398 request->SetUserData(
389 DataUseRecorderEntryAsUserData::kUserDataKey, 399 DataUseRecorderEntryAsUserData::kUserDataKey,
390 base::MakeUnique<DataUseRecorderEntryAsUserData>(entry)); 400 base::MakeUnique<DataUseRecorderEntryAsUserData>(entry));
391 } 401 }
392 return entry; 402 return entry;
393 } 403 }
394 404
395 void ChromeDataUseAscriber::WasShownOrHidden(int main_render_process_id, 405 void ChromeDataUseAscriber::WasShownOrHidden(int main_render_process_id,
(...skipping 19 matching lines...) Expand all
415 int new_render_process_id, 425 int new_render_process_id,
416 int new_render_frame_id) { 426 int new_render_frame_id) {
417 if (visible_main_render_frames_.find( 427 if (visible_main_render_frames_.find(
418 RenderFrameHostID(old_render_process_id, old_render_frame_id)) != 428 RenderFrameHostID(old_render_process_id, old_render_frame_id)) !=
419 visible_main_render_frames_.end()) { 429 visible_main_render_frames_.end()) {
420 WasShownOrHidden(new_render_process_id, new_render_frame_id, true); 430 WasShownOrHidden(new_render_process_id, new_render_frame_id, true);
421 } 431 }
422 } 432 }
423 433
424 } // namespace data_use_measurement 434 } // namespace data_use_measurement
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698