| 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::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::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::SERVICE_WORKER | 
|  | 153           : DataUse::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::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 | 
|---|