Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(174)

Side by Side Diff: chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc

Issue 2890673002: TEST 2868733002 (Closed)
Patch Set: log Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 23 matching lines...) Expand all
34 ChromeDataUseAscriber::DataUseRecorderEntryAsUserData:: 34 ChromeDataUseAscriber::DataUseRecorderEntryAsUserData::
35 ~DataUseRecorderEntryAsUserData() {} 35 ~DataUseRecorderEntryAsUserData() {}
36 36
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 // |data_use_recorders_| can be non empty, when mainframe url requests are
45 // created but no mainframe navigations take place.
46 // TODO(rajendrant): Enable this check when fixed for unittests.
47 // DCHECK(data_use_recorders_.empty());
45 } 48 }
46 49
47 ChromeDataUseRecorder* ChromeDataUseAscriber::GetOrCreateDataUseRecorder( 50 ChromeDataUseRecorder* ChromeDataUseAscriber::GetOrCreateDataUseRecorder(
48 net::URLRequest* request) { 51 net::URLRequest* request) {
49 DataUseRecorderEntry entry = GetOrCreateDataUseRecorderEntry(request); 52 DataUseRecorderEntry entry = GetOrCreateDataUseRecorderEntry(request);
50 return entry == data_use_recorders_.end() ? nullptr : &(*entry); 53 return entry == data_use_recorders_.end() ? nullptr : &(*entry);
51 } 54 }
52 55
53 ChromeDataUseRecorder* ChromeDataUseAscriber::GetDataUseRecorder( 56 ChromeDataUseRecorder* ChromeDataUseAscriber::GetDataUseRecorder(
54 const net::URLRequest& request) { 57 const net::URLRequest& request) {
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 DataUseRecorderEntry entry = CreateNewDataUseRecorder( 152 DataUseRecorderEntry entry = CreateNewDataUseRecorder(
150 request, 153 request,
151 content::ResourceRequestInfo::OriginatedFromServiceWorker(request) 154 content::ResourceRequestInfo::OriginatedFromServiceWorker(request)
152 ? DataUse::TrafficType::SERVICE_WORKER 155 ? DataUse::TrafficType::SERVICE_WORKER
153 : DataUse::TrafficType::UNKNOWN); 156 : DataUse::TrafficType::UNKNOWN);
154 DataUse& data_use = entry->data_use(); 157 DataUse& data_use = entry->data_use();
155 data_use.set_url(request->url()); 158 data_use.set_url(request->url());
156 return entry; 159 return entry;
157 } 160 }
158 161
162 void ChromeDataUseAscriber::OnUrlRequestCompleted(
163 const net::URLRequest& request,
164 bool started) {
165 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
166
167 ChromeDataUseRecorder* recorder = GetDataUseRecorder(request);
168
169 if (!recorder)
170 return;
171
172 const content::ResourceRequestInfo* request_info =
173 content::ResourceRequestInfo::ForRequest(&request);
174 if (!request_info ||
175 request_info->GetResourceType() != content::RESOURCE_TYPE_MAIN_FRAME) {
176 return;
177 }
178
179 // If mainframe request was not successful, then NavigationHandle in
180 // DidFinishMainFrameNavigation will not have GlobalRequestID. So we erase the
181 // DataUseRecorderEntry here.
182 if (!request.status().is_success())
183 pending_navigation_data_use_map_.erase(recorder->main_frame_request_id());
184 }
185
159 void ChromeDataUseAscriber::OnUrlRequestDestroyed(net::URLRequest* request) { 186 void ChromeDataUseAscriber::OnUrlRequestDestroyed(net::URLRequest* request) {
160 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 187 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
161 188
189 // TODO(rajendrant): GetDataUseRecorder is sufficient and
190 // GetOrCreateDataUseRecorderEntry is not needed. The entry gets created in
191 // DataUseAscriber::OnBeforeUrlRequest().
162 DataUseRecorderEntry entry = GetOrCreateDataUseRecorderEntry(request); 192 DataUseRecorderEntry entry = GetOrCreateDataUseRecorderEntry(request);
163 193
164 if (entry == data_use_recorders_.end()) 194 if (entry == data_use_recorders_.end())
165 return; 195 return;
166 196
167 DataUseRecorder* recorder = &(*entry);
168
169 RenderFrameHostID frame_key = entry->main_frame_id(); 197 RenderFrameHostID frame_key = entry->main_frame_id();
170 auto frame_iter = main_render_frame_data_use_map_.find(frame_key); 198 auto frame_iter = main_render_frame_data_use_map_.find(frame_key);
171 bool is_in_render_frame_map = 199 bool is_in_render_frame_map =
172 frame_iter != main_render_frame_data_use_map_.end() && 200 frame_iter != main_render_frame_data_use_map_.end() &&
173 frame_iter->second->HasPendingURLRequest(request); 201 frame_iter->second->HasPendingURLRequest(request);
174 202
175 const content::ResourceRequestInfo* request_info = 203 const content::ResourceRequestInfo* request_info =
176 content::ResourceRequestInfo::ForRequest(request); 204 content::ResourceRequestInfo::ForRequest(request);
177 content::ResourceType resource_type = request_info 205 bool is_in_pending_navigation_map =
178 ? request_info->GetResourceType() 206 request_info &&
179 : content::RESOURCE_TYPE_LAST_TYPE; 207 request_info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME &&
180 208 pending_navigation_data_use_map_.find(entry->main_frame_request_id()) !=
181 bool is_in_pending_navigation_map = false; 209 pending_navigation_data_use_map_.end();
182 if (request_info && resource_type == content::RESOURCE_TYPE_MAIN_FRAME) {
183 auto navigation_iter = pending_navigation_data_use_map_.find(
184 entry->main_frame_request_id());
185 is_in_pending_navigation_map =
186 navigation_iter != pending_navigation_data_use_map_.end();
187
188 // If request was not successful, then NavigationHandle in
189 // DidFinishMainFrameNavigation will not have GlobalRequestID. So we erase
190 // the DataUseRecorderEntry here.
191 if (is_in_pending_navigation_map && !request->status().is_success()) {
192 pending_navigation_data_use_map_.erase(navigation_iter);
193 is_in_pending_navigation_map = false;
194 }
195 }
196 210
197 DataUseAscriber::OnUrlRequestDestroyed(request); 211 DataUseAscriber::OnUrlRequestDestroyed(request);
198 request->RemoveUserData(DataUseRecorderEntryAsUserData::kUserDataKey); 212 request->RemoveUserData(DataUseRecorderEntryAsUserData::kUserDataKey);
199 213
200 if (recorder->IsDataUseComplete() && !is_in_render_frame_map && 214 if (entry->IsDataUseComplete() && !is_in_render_frame_map &&
201 !is_in_pending_navigation_map) { 215 !is_in_pending_navigation_map) {
202 OnDataUseCompleted(entry); 216 OnDataUseCompleted(entry);
203 data_use_recorders_.erase(entry); 217 data_use_recorders_.erase(entry);
204 } 218 }
205 } 219 }
206 220
207 void ChromeDataUseAscriber::RenderFrameCreated(int render_process_id, 221 void ChromeDataUseAscriber::RenderFrameCreated(int render_process_id,
208 int render_frame_id, 222 int render_frame_id,
209 int main_render_process_id, 223 int main_render_process_id,
210 int main_render_frame_id) { 224 int main_render_frame_id) {
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 int new_render_process_id, 439 int new_render_process_id,
426 int new_render_frame_id) { 440 int new_render_frame_id) {
427 if (visible_main_render_frames_.find( 441 if (visible_main_render_frames_.find(
428 RenderFrameHostID(old_render_process_id, old_render_frame_id)) != 442 RenderFrameHostID(old_render_process_id, old_render_frame_id)) !=
429 visible_main_render_frames_.end()) { 443 visible_main_render_frames_.end()) {
430 WasShownOrHidden(new_render_process_id, new_render_frame_id, true); 444 WasShownOrHidden(new_render_process_id, new_render_frame_id, true);
431 } 445 }
432 } 446 }
433 447
434 } // namespace data_use_measurement 448 } // namespace data_use_measurement
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698