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); |
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 |