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 |