Chromium Code Reviews| 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 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 144 return entry; | 144 return entry; |
| 145 } | 145 } |
| 146 | 146 |
| 147 // Create a new DataUseRecorder for all other requests. | 147 // Create a new DataUseRecorder for all other requests. |
| 148 DataUseRecorderEntry entry = CreateNewDataUseRecorder(request); | 148 DataUseRecorderEntry entry = CreateNewDataUseRecorder(request); |
| 149 DataUse& data_use = entry->data_use(); | 149 DataUse& data_use = entry->data_use(); |
| 150 data_use.set_url(request->url()); | 150 data_use.set_url(request->url()); |
| 151 return entry; | 151 return entry; |
| 152 } | 152 } |
| 153 | 153 |
| 154 void ChromeDataUseAscriber::OnUrlRequestCompleted( | |
| 155 const net::URLRequest& request, | |
| 156 bool started) { | |
| 157 ChromeDataUseRecorder* recorder = GetDataUseRecorder(request); | |
|
tbansal1
2017/05/11 20:55:41
Add DCHECK_CURRENTLY_ON(content::BrowserThread::IO
rajendrant
2017/05/16 01:04:14
Done.
| |
| 158 | |
| 159 if (!recorder) | |
| 160 return; | |
| 161 | |
| 162 const content::ResourceRequestInfo* request_info = | |
| 163 content::ResourceRequestInfo::ForRequest(&request); | |
| 164 if (!request_info || | |
| 165 request_info->GetResourceType() != content::RESOURCE_TYPE_MAIN_FRAME) | |
| 166 return; | |
|
tbansal1
2017/05/11 20:55:41
parens are needed here since the if-conditional sp
rajendrant
2017/05/16 01:04:14
Done.
| |
| 167 | |
| 168 // If request was not successful, then NavigationHandle in | |
|
tbansal1
2017/05/11 20:55:41
Do you have to check somewhere that |request| was
rajendrant
2017/05/16 01:04:14
Yes. This was missed.
| |
| 169 // DidFinishMainFrameNavigation will not have GlobalRequestID. So we erase the | |
| 170 // DataUseRecorderEntry here. | |
| 171 pending_navigation_data_use_map_.erase(recorder->main_frame_request_id()); | |
| 172 } | |
| 173 | |
| 154 void ChromeDataUseAscriber::OnUrlRequestDestroyed(net::URLRequest* request) { | 174 void ChromeDataUseAscriber::OnUrlRequestDestroyed(net::URLRequest* request) { |
| 155 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 175 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 156 | 176 |
| 157 DataUseRecorderEntry entry = GetOrCreateDataUseRecorderEntry(request); | 177 DataUseRecorderEntry entry = GetOrCreateDataUseRecorderEntry(request); |
| 158 | 178 |
| 159 if (entry == data_use_recorders_.end()) | 179 if (entry == data_use_recorders_.end()) |
| 160 return; | 180 return; |
| 161 | 181 |
| 162 DataUseRecorder* recorder = &(*entry); | |
| 163 | |
| 164 RenderFrameHostID frame_key = entry->main_frame_id(); | 182 RenderFrameHostID frame_key = entry->main_frame_id(); |
| 165 auto frame_iter = main_render_frame_data_use_map_.find(frame_key); | 183 auto frame_iter = main_render_frame_data_use_map_.find(frame_key); |
| 166 bool is_in_render_frame_map = | 184 bool is_in_render_frame_map = |
| 167 frame_iter != main_render_frame_data_use_map_.end() && | 185 frame_iter != main_render_frame_data_use_map_.end() && |
| 168 frame_iter->second->HasPendingURLRequest(request); | 186 frame_iter->second->HasPendingURLRequest(request); |
| 169 | 187 |
| 170 const content::ResourceRequestInfo* request_info = | 188 const content::ResourceRequestInfo* request_info = |
| 171 content::ResourceRequestInfo::ForRequest(request); | 189 content::ResourceRequestInfo::ForRequest(request); |
| 172 content::ResourceType resource_type = request_info | 190 bool is_in_pending_navigation_map = |
| 173 ? request_info->GetResourceType() | 191 request_info && |
| 174 : content::RESOURCE_TYPE_LAST_TYPE; | 192 request_info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME && |
| 175 | 193 pending_navigation_data_use_map_.find(entry->main_frame_request_id()) != |
| 176 bool is_in_pending_navigation_map = false; | 194 pending_navigation_data_use_map_.end(); |
| 177 if (request_info && resource_type == content::RESOURCE_TYPE_MAIN_FRAME) { | |
| 178 auto navigation_iter = pending_navigation_data_use_map_.find( | |
| 179 entry->main_frame_request_id()); | |
| 180 is_in_pending_navigation_map = | |
| 181 navigation_iter != pending_navigation_data_use_map_.end(); | |
| 182 | |
| 183 // If request was not successful, then NavigationHandle in | |
| 184 // DidFinishMainFrameNavigation will not have GlobalRequestID. So we erase | |
| 185 // the DataUseRecorderEntry here. | |
| 186 if (is_in_pending_navigation_map && !request->status().is_success()) { | |
| 187 pending_navigation_data_use_map_.erase(navigation_iter); | |
| 188 is_in_pending_navigation_map = false; | |
| 189 } | |
| 190 } | |
| 191 | 195 |
| 192 DataUseAscriber::OnUrlRequestDestroyed(request); | 196 DataUseAscriber::OnUrlRequestDestroyed(request); |
| 193 request->RemoveUserData(DataUseRecorderEntryAsUserData::kUserDataKey); | 197 request->RemoveUserData(DataUseRecorderEntryAsUserData::kUserDataKey); |
| 194 | 198 |
| 195 if (recorder->IsDataUseComplete() && !is_in_render_frame_map && | 199 if (entry->IsDataUseComplete() && !is_in_render_frame_map && |
| 196 !is_in_pending_navigation_map) { | 200 !is_in_pending_navigation_map) { |
| 197 OnDataUseCompleted(entry); | 201 OnDataUseCompleted(entry); |
| 198 data_use_recorders_.erase(entry); | 202 data_use_recorders_.erase(entry); |
| 199 } | 203 } |
| 200 } | 204 } |
| 201 | 205 |
| 202 void ChromeDataUseAscriber::RenderFrameCreated(int render_process_id, | 206 void ChromeDataUseAscriber::RenderFrameCreated(int render_process_id, |
| 203 int render_frame_id, | 207 int render_frame_id, |
| 204 int main_render_process_id, | 208 int main_render_process_id, |
| 205 int main_render_frame_id) { | 209 int main_render_frame_id) { |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 415 int new_render_process_id, | 419 int new_render_process_id, |
| 416 int new_render_frame_id) { | 420 int new_render_frame_id) { |
| 417 if (visible_main_render_frames_.find( | 421 if (visible_main_render_frames_.find( |
| 418 RenderFrameHostID(old_render_process_id, old_render_frame_id)) != | 422 RenderFrameHostID(old_render_process_id, old_render_frame_id)) != |
| 419 visible_main_render_frames_.end()) { | 423 visible_main_render_frames_.end()) { |
| 420 WasShownOrHidden(new_render_process_id, new_render_frame_id, true); | 424 WasShownOrHidden(new_render_process_id, new_render_frame_id, true); |
| 421 } | 425 } |
| 422 } | 426 } |
| 423 | 427 |
| 424 } // namespace data_use_measurement | 428 } // namespace data_use_measurement |
| OLD | NEW |