| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |