Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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); | |
|
raymes
2016/08/22 02:55:09
Should we add some tests for blocked/ignored?
dominickn
2016/08/22 22:40:51
crrev.com/2258763002 refactors this testing a bit
| |
| 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 Loading... | |
| 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 } |
| OLD | NEW |