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

Side by Side Diff: chrome/browser/permissions/permission_context_base_unittest.cc

Issue 2250993002: Add prior dismissal and ignore count metrics for all permission actions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@kendra-permission-action-reporting
Patch Set: Comments Created 4 years, 3 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/permissions/permission_context_base.h" 5 #include "chrome/browser/permissions/permission_context_base.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 } 160 }
161 #endif 161 #endif
162 } 162 }
163 163
164 void TestAskAndGrant_TestContent() { 164 void TestAskAndGrant_TestContent() {
165 TestPermissionContext permission_context( 165 TestPermissionContext permission_context(
166 profile(), content::PermissionType::NOTIFICATIONS, 166 profile(), content::PermissionType::NOTIFICATIONS,
167 CONTENT_SETTINGS_TYPE_NOTIFICATIONS); 167 CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
168 GURL url("http://www.google.com"); 168 GURL url("http://www.google.com");
169 NavigateAndCommit(url); 169 NavigateAndCommit(url);
170 base::HistogramTester histograms;
170 171
171 const PermissionRequestID id( 172 const PermissionRequestID id(
172 web_contents()->GetRenderProcessHost()->GetID(), 173 web_contents()->GetRenderProcessHost()->GetID(),
173 web_contents()->GetMainFrame()->GetRoutingID(), 174 web_contents()->GetMainFrame()->GetRoutingID(),
174 -1); 175 -1);
175 permission_context.RequestPermission( 176 permission_context.RequestPermission(
176 web_contents(), 177 web_contents(),
177 id, url, true /* user_gesture */, 178 id, url, true /* user_gesture */,
178 base::Bind(&TestPermissionContext::TrackPermissionDecision, 179 base::Bind(&TestPermissionContext::TrackPermissionDecision,
179 base::Unretained(&permission_context))); 180 base::Unretained(&permission_context)));
180 181
181 RespondToPermission(&permission_context, id, url, CONTENT_SETTING_ALLOW); 182 RespondToPermission(&permission_context, id, url, CONTENT_SETTING_ALLOW);
182 EXPECT_EQ(1u, permission_context.decisions().size()); 183 EXPECT_EQ(1u, permission_context.decisions().size());
183 EXPECT_EQ(CONTENT_SETTING_ALLOW, permission_context.decisions()[0]); 184 EXPECT_EQ(CONTENT_SETTING_ALLOW, permission_context.decisions()[0]);
184 EXPECT_TRUE(permission_context.tab_context_updated()); 185 EXPECT_TRUE(permission_context.tab_context_updated());
185 EXPECT_EQ(CONTENT_SETTING_ALLOW, 186 EXPECT_EQ(CONTENT_SETTING_ALLOW,
186 permission_context.GetContentSettingFromMap(url, url)); 187 permission_context.GetContentSettingFromMap(url, url));
188
189 histograms.ExpectUniqueSample(
190 "Permissions.Prompt.Accepted.PriorDismissCount.Notifications", 0, 1);
191 histograms.ExpectUniqueSample(
192 "Permissions.Prompt.Accepted.PriorIgnoreCount.Notifications", 0, 1);
187 } 193 }
188 194
189 void TestAskAndDismiss_TestContent() { 195 void TestAskAndDismiss_TestContent() {
190 TestPermissionContext permission_context( 196 TestPermissionContext permission_context(
191 profile(), content::PermissionType::MIDI_SYSEX, 197 profile(), content::PermissionType::MIDI_SYSEX,
192 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); 198 CONTENT_SETTINGS_TYPE_MIDI_SYSEX);
193 GURL url("http://www.google.es"); 199 GURL url("http://www.google.es");
194 NavigateAndCommit(url); 200 NavigateAndCommit(url);
201 base::HistogramTester histograms;
195 202
196 const PermissionRequestID id( 203 const PermissionRequestID id(
197 web_contents()->GetRenderProcessHost()->GetID(), 204 web_contents()->GetRenderProcessHost()->GetID(),
198 web_contents()->GetMainFrame()->GetRoutingID(), 205 web_contents()->GetMainFrame()->GetRoutingID(),
199 -1); 206 -1);
200 permission_context.RequestPermission( 207 permission_context.RequestPermission(
201 web_contents(), 208 web_contents(),
202 id, url, true /* user_gesture */, 209 id, url, true /* user_gesture */,
203 base::Bind(&TestPermissionContext::TrackPermissionDecision, 210 base::Bind(&TestPermissionContext::TrackPermissionDecision,
204 base::Unretained(&permission_context))); 211 base::Unretained(&permission_context)));
205 212
206 RespondToPermission(&permission_context, id, url, CONTENT_SETTING_ASK); 213 RespondToPermission(&permission_context, id, url, CONTENT_SETTING_ASK);
207 EXPECT_EQ(1u, permission_context.decisions().size()); 214 EXPECT_EQ(1u, permission_context.decisions().size());
208 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); 215 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]);
209 EXPECT_TRUE(permission_context.tab_context_updated()); 216 EXPECT_TRUE(permission_context.tab_context_updated());
210 EXPECT_EQ(CONTENT_SETTING_ASK, 217 EXPECT_EQ(CONTENT_SETTING_ASK,
211 permission_context.GetContentSettingFromMap(url, url)); 218 permission_context.GetContentSettingFromMap(url, url));
219
220 histograms.ExpectUniqueSample(
221 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", 0, 1);
222 histograms.ExpectUniqueSample(
223 "Permissions.Prompt.Dismissed.PriorIgnoreCount.MidiSysEx", 0, 1);
212 } 224 }
213 225
214 void DismissMultipleTimesAndExpectBlock( 226 void DismissMultipleTimesAndExpectBlock(
215 const GURL& url, 227 const GURL& url,
216 content::PermissionType permission_type, 228 content::PermissionType permission_type,
217 ContentSettingsType content_settings_type, 229 ContentSettingsType content_settings_type,
218 uint32_t iterations) { 230 uint32_t iterations) {
219 base::HistogramTester histograms; 231 base::HistogramTester histograms;
220 232
221 // Dismiss |iterations| times. The final dismiss should change the decision 233 // Dismiss |iterations| times. The final dismiss should change the decision
222 // from dismiss to block, and hence change the persisted content setting. 234 // from dismiss to block, and hence change the persisted content setting.
223 for (uint32_t i = 0; i < iterations; ++i) { 235 for (uint32_t i = 0; i < iterations; ++i) {
224 TestPermissionContext permission_context( 236 TestPermissionContext permission_context(
225 profile(), permission_type, content_settings_type); 237 profile(), permission_type, content_settings_type);
226 ContentSetting expected = 238 ContentSetting expected =
227 (i < (iterations - 1)) ? CONTENT_SETTING_ASK : CONTENT_SETTING_BLOCK; 239 (i < (iterations - 1)) ? CONTENT_SETTING_ASK : CONTENT_SETTING_BLOCK;
228 240
229 const PermissionRequestID id( 241 const PermissionRequestID id(
230 web_contents()->GetRenderProcessHost()->GetID(), 242 web_contents()->GetRenderProcessHost()->GetID(),
231 web_contents()->GetMainFrame()->GetRoutingID(), i); 243 web_contents()->GetMainFrame()->GetRoutingID(), i);
232 permission_context.RequestPermission( 244 permission_context.RequestPermission(
233 web_contents(), id, url, true /* user_gesture */, 245 web_contents(), id, url, true /* user_gesture */,
234 base::Bind(&TestPermissionContext::TrackPermissionDecision, 246 base::Bind(&TestPermissionContext::TrackPermissionDecision,
235 base::Unretained(&permission_context))); 247 base::Unretained(&permission_context)));
236 248
237 RespondToPermission(&permission_context, id, url, CONTENT_SETTING_ASK); 249 RespondToPermission(&permission_context, id, url, CONTENT_SETTING_ASK);
238 histograms.ExpectTotalCount( 250 histograms.ExpectTotalCount(
239 "Permissions.Prompt.DismissCount." + 251 "Permissions.Prompt.Dismissed.PriorDismissCount." +
240 PermissionUtil::GetPermissionString(permission_type), 252 PermissionUtil::GetPermissionString(permission_type),
241 i + 1); 253 i + 1);
254 histograms.ExpectBucketCount(
255 "Permissions.Prompt.Dismissed.PriorDismissCount." +
256 PermissionUtil::GetPermissionString(permission_type),
257 i, 1);
242 258
243 EXPECT_EQ(1u, permission_context.decisions().size()); 259 EXPECT_EQ(1u, permission_context.decisions().size());
244 EXPECT_EQ(expected, permission_context.decisions()[0]); 260 EXPECT_EQ(expected, permission_context.decisions()[0]);
245 EXPECT_TRUE(permission_context.tab_context_updated()); 261 EXPECT_TRUE(permission_context.tab_context_updated());
246 EXPECT_EQ(expected, 262 EXPECT_EQ(expected,
247 permission_context.GetContentSettingFromMap(url, url)); 263 permission_context.GetContentSettingFromMap(url, url));
248 } 264 }
249 265
250 // Ensure that we finish in the block state. 266 // Ensure that we finish in the block state.
251 TestPermissionContext permission_context( 267 TestPermissionContext permission_context(
(...skipping 15 matching lines...) Expand all
267 283
268 const PermissionRequestID id( 284 const PermissionRequestID id(
269 web_contents()->GetRenderProcessHost()->GetID(), 285 web_contents()->GetRenderProcessHost()->GetID(),
270 web_contents()->GetMainFrame()->GetRoutingID(), i); 286 web_contents()->GetMainFrame()->GetRoutingID(), i);
271 permission_context.RequestPermission( 287 permission_context.RequestPermission(
272 web_contents(), id, url, true /* user_gesture */, 288 web_contents(), id, url, true /* user_gesture */,
273 base::Bind(&TestPermissionContext::TrackPermissionDecision, 289 base::Bind(&TestPermissionContext::TrackPermissionDecision,
274 base::Unretained(&permission_context))); 290 base::Unretained(&permission_context)));
275 291
276 RespondToPermission(&permission_context, id, url, CONTENT_SETTING_ASK); 292 RespondToPermission(&permission_context, id, url, CONTENT_SETTING_ASK);
277 histograms.ExpectTotalCount("Permissions.Prompt.DismissCount.Geolocation", 293 histograms.ExpectTotalCount(
278 i + 1); 294 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation",
295 i + 1);
296 histograms.ExpectBucketCount(
297 "Permissions.Prompt.Dismissed.PriorDismissCount.Geolocation", i, 1);
279 EXPECT_EQ(1u, permission_context.decisions().size()); 298 EXPECT_EQ(1u, permission_context.decisions().size());
280 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]); 299 EXPECT_EQ(CONTENT_SETTING_ASK, permission_context.decisions()[0]);
281 EXPECT_TRUE(permission_context.tab_context_updated()); 300 EXPECT_TRUE(permission_context.tab_context_updated());
282 EXPECT_EQ(CONTENT_SETTING_ASK, 301 EXPECT_EQ(CONTENT_SETTING_ASK,
283 permission_context.GetContentSettingFromMap(url, url)); 302 permission_context.GetContentSettingFromMap(url, url));
284 } 303 }
285 304
286 // Flush the dismissal counts. Enable the block on too many dismissals 305 // Flush the dismissal counts. Enable the block on too many dismissals
287 // feature, which is disabled by default. 306 // feature, which is disabled by default.
288 HostContentSettingsMapFactory::GetForProfile(profile()) 307 HostContentSettingsMapFactory::GetForProfile(profile())
(...skipping 23 matching lines...) Expand all
312 CONTENT_SETTINGS_TYPE_GEOLOCATION, 3); 331 CONTENT_SETTINGS_TYPE_GEOLOCATION, 3);
313 DismissMultipleTimesAndExpectBlock(url, 332 DismissMultipleTimesAndExpectBlock(url,
314 content::PermissionType::NOTIFICATIONS, 333 content::PermissionType::NOTIFICATIONS,
315 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, 3); 334 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, 3);
316 base::FeatureList::ClearInstanceForTesting(); 335 base::FeatureList::ClearInstanceForTesting();
317 } 336 }
318 337
319 void TestVariationBlockOnSeveralDismissals_TestContent() { 338 void TestVariationBlockOnSeveralDismissals_TestContent() {
320 GURL url("https://www.google.com"); 339 GURL url("https://www.google.com");
321 NavigateAndCommit(url); 340 NavigateAndCommit(url);
341 base::HistogramTester histograms;
322 342
323 // Set up the custom parameter and custom value. 343 // Set up the custom parameter and custom value.
324 base::FieldTrialList field_trials_(nullptr); 344 base::FieldTrialList field_trials_(nullptr);
325 base::FieldTrial* trial = base::FieldTrialList::CreateFieldTrial( 345 base::FieldTrial* trial = base::FieldTrialList::CreateFieldTrial(
326 kPromptTrialName, kPromptGroupName); 346 kPromptTrialName, kPromptGroupName);
327 std::map<std::string, std::string> params; 347 std::map<std::string, std::string> params;
328 params[PermissionDecisionAutoBlocker::kPromptDismissCountKey] = "5"; 348 params[PermissionDecisionAutoBlocker::kPromptDismissCountKey] = "5";
329 ASSERT_TRUE(variations::AssociateVariationParams( 349 ASSERT_TRUE(variations::AssociateVariationParams(
330 kPromptTrialName, kPromptGroupName, params)); 350 kPromptTrialName, kPromptGroupName, params));
331 351
(...skipping 26 matching lines...) Expand all
358 web_contents(), id, url, true /* user_gesture */, 378 web_contents(), id, url, true /* user_gesture */,
359 base::Bind(&TestPermissionContext::TrackPermissionDecision, 379 base::Bind(&TestPermissionContext::TrackPermissionDecision,
360 base::Unretained(&permission_context))); 380 base::Unretained(&permission_context)));
361 381
362 RespondToPermission(&permission_context, id, url, CONTENT_SETTING_ASK); 382 RespondToPermission(&permission_context, id, url, CONTENT_SETTING_ASK);
363 EXPECT_EQ(1u, permission_context.decisions().size()); 383 EXPECT_EQ(1u, permission_context.decisions().size());
364 EXPECT_EQ(expected, permission_context.decisions()[0]); 384 EXPECT_EQ(expected, permission_context.decisions()[0]);
365 EXPECT_TRUE(permission_context.tab_context_updated()); 385 EXPECT_TRUE(permission_context.tab_context_updated());
366 EXPECT_EQ(expected, 386 EXPECT_EQ(expected,
367 permission_context.GetContentSettingFromMap(url, url)); 387 permission_context.GetContentSettingFromMap(url, url));
388
389 histograms.ExpectTotalCount(
390 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i + 1);
391 histograms.ExpectBucketCount(
392 "Permissions.Prompt.Dismissed.PriorDismissCount.MidiSysEx", i, 1);
368 } 393 }
369 394
370 // Ensure that we finish in the block state. 395 // Ensure that we finish in the block state.
371 TestPermissionContext permission_context( 396 TestPermissionContext permission_context(
372 profile(), content::PermissionType::MIDI_SYSEX, 397 profile(), content::PermissionType::MIDI_SYSEX,
373 CONTENT_SETTINGS_TYPE_MIDI_SYSEX); 398 CONTENT_SETTINGS_TYPE_MIDI_SYSEX);
374 EXPECT_EQ(CONTENT_SETTING_BLOCK, 399 EXPECT_EQ(CONTENT_SETTING_BLOCK,
375 permission_context.GetContentSettingFromMap(url, url)); 400 permission_context.GetContentSettingFromMap(url, url));
376 base::FeatureList::ClearInstanceForTesting(); 401 base::FeatureList::ClearInstanceForTesting();
377 variations::testing::ClearAllVariationParams(); 402 variations::testing::ClearAllVariationParams();
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 TestParallelRequests(CONTENT_SETTING_ALLOW); 641 TestParallelRequests(CONTENT_SETTING_ALLOW);
617 } 642 }
618 643
619 TEST_F(PermissionContextBaseTests, TestParallelRequestsBlocked) { 644 TEST_F(PermissionContextBaseTests, TestParallelRequestsBlocked) {
620 TestParallelRequests(CONTENT_SETTING_BLOCK); 645 TestParallelRequests(CONTENT_SETTING_BLOCK);
621 } 646 }
622 647
623 TEST_F(PermissionContextBaseTests, TestParallelRequestsDismissed) { 648 TEST_F(PermissionContextBaseTests, TestParallelRequestsDismissed) {
624 TestParallelRequests(CONTENT_SETTING_ASK); 649 TestParallelRequests(CONTENT_SETTING_ASK);
625 } 650 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698