| 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 26 matching lines...) Expand all Loading... |
| 37 ChromeDataUseAscriber::ChromeDataUseAscriber() { | 37 ChromeDataUseAscriber::ChromeDataUseAscriber() { |
| 38 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 38 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 39 } | 39 } |
| 40 | 40 |
| 41 ChromeDataUseAscriber::~ChromeDataUseAscriber() { | 41 ChromeDataUseAscriber::~ChromeDataUseAscriber() { |
| 42 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 42 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 43 DCHECK(subframe_to_mainframe_map_.empty()); | 43 DCHECK(subframe_to_mainframe_map_.empty()); |
| 44 DCHECK(data_use_recorders_.empty()); | 44 DCHECK(data_use_recorders_.empty()); |
| 45 } | 45 } |
| 46 | 46 |
| 47 ChromeDataUseRecorder* ChromeDataUseAscriber::GetDataUseRecorder( | 47 ChromeDataUseRecorder* ChromeDataUseAscriber::GetOrCreateDataUseRecorder( |
| 48 net::URLRequest* request, | 48 net::URLRequest* request) { |
| 49 bool can_create_new) { | 49 DataUseRecorderEntry entry = GetOrCreateDataUseRecorderEntry(request); |
| 50 DataUseRecorderEntry entry = GetDataUseRecorderEntry(request, can_create_new); | |
| 51 return entry == data_use_recorders_.end() ? nullptr : &(*entry); | 50 return entry == data_use_recorders_.end() ? nullptr : &(*entry); |
| 52 } | 51 } |
| 53 | 52 |
| 54 ChromeDataUseAscriber::DataUseRecorderEntry | 53 ChromeDataUseRecorder* ChromeDataUseAscriber::GetDataUseRecorder( |
| 55 ChromeDataUseAscriber::GetDataUseRecorderEntry(net::URLRequest* request, | 54 const net::URLRequest& request) { |
| 56 bool can_create_new) { | |
| 57 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 55 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 58 | 56 |
| 59 // TODO(ryansturm): Handle PlzNavigate (http://crbug/664233). | 57 // TODO(ryansturm): Handle PlzNavigate (http://crbug/664233). |
| 58 if (content::IsBrowserSideNavigationEnabled()) |
| 59 return nullptr; |
| 60 |
| 61 // If a DataUseRecorder has already been set as user data, then return that. |
| 62 auto user_data = static_cast<DataUseRecorderEntryAsUserData*>( |
| 63 request.GetUserData(DataUseRecorderEntryAsUserData::kUserDataKey)); |
| 64 return user_data ? &(*user_data->recorder_entry()) : nullptr; |
| 65 } |
| 66 |
| 67 ChromeDataUseAscriber::DataUseRecorderEntry |
| 68 ChromeDataUseAscriber::GetOrCreateDataUseRecorderEntry( |
| 69 net::URLRequest* request) { |
| 70 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 71 |
| 72 // TODO(ryansturm): Handle PlzNavigate (http://crbug/664233). |
| 60 if (content::IsBrowserSideNavigationEnabled()) | 73 if (content::IsBrowserSideNavigationEnabled()) |
| 61 return data_use_recorders_.end(); | 74 return data_use_recorders_.end(); |
| 62 | 75 |
| 63 // If a DataUseRecorder has already been set as user data, then return that. | 76 // If a DataUseRecorder has already been set as user data, then return that. |
| 64 auto user_data = static_cast<DataUseRecorderEntryAsUserData*>( | 77 auto user_data = static_cast<DataUseRecorderEntryAsUserData*>( |
| 65 request->GetUserData(DataUseRecorderEntryAsUserData::kUserDataKey)); | 78 request->GetUserData(DataUseRecorderEntryAsUserData::kUserDataKey)); |
| 66 if (user_data) | 79 if (user_data) |
| 67 return user_data->recorder_entry(); | 80 return user_data->recorder_entry(); |
| 68 | 81 |
| 69 if (!can_create_new) | |
| 70 return data_use_recorders_.end(); | |
| 71 | |
| 72 // If request is associated with a ChromeService, create a new | 82 // If request is associated with a ChromeService, create a new |
| 73 // DataUseRecorder for it. There is no reason to aggregate URLRequests | 83 // DataUseRecorder for it. There is no reason to aggregate URLRequests |
| 74 // from ChromeServices into the same DataUseRecorder instance. | 84 // from ChromeServices into the same DataUseRecorder instance. |
| 75 DataUseUserData* service = static_cast<DataUseUserData*>( | 85 DataUseUserData* service = static_cast<DataUseUserData*>( |
| 76 request->GetUserData(DataUseUserData::kUserDataKey)); | 86 request->GetUserData(DataUseUserData::kUserDataKey)); |
| 77 if (service) { | 87 if (service) { |
| 78 DataUseRecorderEntry entry = CreateNewDataUseRecorder(request); | 88 DataUseRecorderEntry entry = CreateNewDataUseRecorder(request); |
| 79 | 89 |
| 80 entry->data_use().set_description( | 90 entry->data_use().set_description( |
| 81 DataUseUserData::GetServiceNameAsString(service->service_name())); | 91 DataUseUserData::GetServiceNameAsString(service->service_name())); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 // Create a new DataUseRecorder for all other requests. | 146 // Create a new DataUseRecorder for all other requests. |
| 137 DataUseRecorderEntry entry = CreateNewDataUseRecorder(request); | 147 DataUseRecorderEntry entry = CreateNewDataUseRecorder(request); |
| 138 DataUse& data_use = entry->data_use(); | 148 DataUse& data_use = entry->data_use(); |
| 139 data_use.set_url(request->url()); | 149 data_use.set_url(request->url()); |
| 140 return entry; | 150 return entry; |
| 141 } | 151 } |
| 142 | 152 |
| 143 void ChromeDataUseAscriber::OnUrlRequestDestroyed(net::URLRequest* request) { | 153 void ChromeDataUseAscriber::OnUrlRequestDestroyed(net::URLRequest* request) { |
| 144 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 154 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 145 | 155 |
| 146 DataUseRecorderEntry entry = GetDataUseRecorderEntry(request, true); | 156 DataUseRecorderEntry entry = GetOrCreateDataUseRecorderEntry(request); |
| 147 | 157 |
| 148 if (entry == data_use_recorders_.end()) | 158 if (entry == data_use_recorders_.end()) |
| 149 return; | 159 return; |
| 150 | 160 |
| 151 DataUseRecorder* recorder = &(*entry); | 161 DataUseRecorder* recorder = &(*entry); |
| 152 | 162 |
| 153 RenderFrameHostID frame_key = entry->main_frame_id(); | 163 RenderFrameHostID frame_key = entry->main_frame_id(); |
| 154 auto frame_iter = main_render_frame_data_use_map_.find(frame_key); | 164 auto frame_iter = main_render_frame_data_use_map_.find(frame_key); |
| 155 bool is_in_render_frame_map = | 165 bool is_in_render_frame_map = |
| 156 frame_iter != main_render_frame_data_use_map_.end() && | 166 frame_iter != main_render_frame_data_use_map_.end() && |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 392 int new_render_process_id, | 402 int new_render_process_id, |
| 393 int new_render_frame_id) { | 403 int new_render_frame_id) { |
| 394 if (visible_main_render_frames_.find( | 404 if (visible_main_render_frames_.find( |
| 395 RenderFrameHostID(old_render_process_id, old_render_frame_id)) != | 405 RenderFrameHostID(old_render_process_id, old_render_frame_id)) != |
| 396 visible_main_render_frames_.end()) { | 406 visible_main_render_frames_.end()) { |
| 397 WasShownOrHidden(new_render_process_id, new_render_frame_id, true); | 407 WasShownOrHidden(new_render_process_id, new_render_frame_id, true); |
| 398 } | 408 } |
| 399 } | 409 } |
| 400 | 410 |
| 401 } // namespace data_use_measurement | 411 } // namespace data_use_measurement |
| OLD | NEW |