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

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

Issue 2838873004: Add PermissionDialogTests for grouped Media requests (Closed)
Patch Set: Created 3 years, 8 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_request_manager.h" 5 #include "chrome/browser/permissions/permission_request_manager.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/metrics/field_trial.h" 8 #include "base/metrics/field_trial.h"
9 #include "base/test/scoped_feature_list.h"
9 #include "build/build_config.h" 10 #include "build/build_config.h"
10 #include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" 11 #include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h"
11 #include "chrome/browser/custom_handlers/register_protocol_handler_permission_re quest.h" 12 #include "chrome/browser/custom_handlers/register_protocol_handler_permission_re quest.h"
12 #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h" 13 #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h"
13 #include "chrome/browser/media/webrtc/media_stream_devices_controller.h" 14 #include "chrome/browser/media/webrtc/media_stream_devices_controller.h"
14 #include "chrome/browser/permissions/permission_context_base.h" 15 #include "chrome/browser/permissions/permission_context_base.h"
15 #include "chrome/browser/permissions/permission_request_impl.h" 16 #include "chrome/browser/permissions/permission_request_impl.h"
16 #include "chrome/browser/permissions/permission_util.h" 17 #include "chrome/browser/permissions/permission_util.h"
17 #include "chrome/browser/profiles/profile.h" 18 #include "chrome/browser/profiles/profile.h"
18 #include "chrome/browser/ui/browser.h" 19 #include "chrome/browser/ui/browser.h"
19 #include "chrome/browser/ui/permission_bubble/mock_permission_prompt_factory.h" 20 #include "chrome/browser/ui/permission_bubble/mock_permission_prompt_factory.h"
20 #include "chrome/browser/ui/tabs/tab_strip_model.h" 21 #include "chrome/browser/ui/tabs/tab_strip_model.h"
21 #include "chrome/browser/ui/test/test_browser_dialog.h" 22 #include "chrome/browser/ui/test/test_browser_dialog.h"
23 #include "chrome/common/chrome_features.h"
22 #include "chrome/test/base/in_process_browser_test.h" 24 #include "chrome/test/base/in_process_browser_test.h"
23 #include "chrome/test/base/ui_test_utils.h" 25 #include "chrome/test/base/ui_test_utils.h"
24 #include "components/content_settings/core/common/content_settings_types.h" 26 #include "components/content_settings/core/common/content_settings_types.h"
25 #include "components/variations/variations_associated_data.h" 27 #include "components/variations/variations_associated_data.h"
26 #include "content/public/browser/render_frame_host.h" 28 #include "content/public/browser/render_frame_host.h"
27 #include "content/public/browser/render_process_host.h" 29 #include "content/public/browser/render_process_host.h"
28 #include "content/public/test/browser_test_utils.h" 30 #include "content/public/test/browser_test_utils.h"
29 #include "content/public/test/test_utils.h" 31 #include "content/public/test/test_utils.h"
30 #include "net/test/embedded_test_server/embedded_test_server.h" 32 #include "net/test/embedded_test_server/embedded_test_server.h"
31 33
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 base::Bind(decided), base::Bind(cleanup))); 208 base::Bind(decided), base::Bind(cleanup)));
207 return owned_requests_.back().get(); 209 return owned_requests_.back().get();
208 } 210 }
209 211
210 void PermissionDialogTest::ShowDialog(const std::string& name) { 212 void PermissionDialogTest::ShowDialog(const std::string& name) {
211 constexpr const char* kMultipleName = "multiple"; 213 constexpr const char* kMultipleName = "multiple";
212 // Permissions to request for a "multiple" request. Only types handled in 214 // Permissions to request for a "multiple" request. Only types handled in
213 // PermissionRequestImpl::GetMessageTextFragment() are valid. 215 // PermissionRequestImpl::GetMessageTextFragment() are valid.
214 constexpr ContentSettingsType kMultipleRequests[] = { 216 constexpr ContentSettingsType kMultipleRequests[] = {
215 CONTENT_SETTINGS_TYPE_GEOLOCATION, CONTENT_SETTINGS_TYPE_NOTIFICATIONS, 217 CONTENT_SETTINGS_TYPE_GEOLOCATION, CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
216 CONTENT_SETTINGS_TYPE_MIDI_SYSEX}; 218 CONTENT_SETTINGS_TYPE_MIDI_SYSEX,
219 };
220 constexpr ContentSettingsType kMultipleRequestsWithMedia[] = {
221 CONTENT_SETTINGS_TYPE_GEOLOCATION, CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
222 CONTENT_SETTINGS_TYPE_MIDI_SYSEX, CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
223 CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA};
217 constexpr struct { 224 constexpr struct {
218 const char* name; 225 const char* name;
219 ContentSettingsType type; 226 ContentSettingsType type;
220 } kNameToType[] = { 227 } kNameToType[] = {
221 {"flash", CONTENT_SETTINGS_TYPE_PLUGINS}, 228 {"flash", CONTENT_SETTINGS_TYPE_PLUGINS},
222 {"geolocation", CONTENT_SETTINGS_TYPE_GEOLOCATION}, 229 {"geolocation", CONTENT_SETTINGS_TYPE_GEOLOCATION},
223 {"protected_media", CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER}, 230 {"protected_media", CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER},
224 {"notifications", CONTENT_SETTINGS_TYPE_NOTIFICATIONS}, 231 {"notifications", CONTENT_SETTINGS_TYPE_NOTIFICATIONS},
225 {"mic", CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC}, 232 {"mic", CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC},
226 {"camera", CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA}, 233 {"camera", CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA},
(...skipping 15 matching lines...) Expand all
242 manager->AddRequest(MakeRegisterProtocolHandlerRequest()); 249 manager->AddRequest(MakeRegisterProtocolHandlerRequest());
243 break; 250 break;
244 case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS: 251 case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS:
245 // TODO(tapted): Prompt for downloading multiple files. 252 // TODO(tapted): Prompt for downloading multiple files.
246 break; 253 break;
247 case CONTENT_SETTINGS_TYPE_DURABLE_STORAGE: 254 case CONTENT_SETTINGS_TYPE_DURABLE_STORAGE:
248 // TODO(tapted): Prompt for quota request. 255 // TODO(tapted): Prompt for quota request.
249 break; 256 break;
250 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC: 257 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC:
251 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: 258 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA:
252 AddMediaRequest(manager, it->type); 259 if (base::FeatureList::IsEnabled(
260 features::kUsePermissionManagerForMediaRequests)) {
261 manager->AddRequest(MakePermissionRequest(it->type));
262 } else {
263 AddMediaRequest(manager, it->type);
264 }
253 break; 265 break;
254 // Regular permissions requests. 266 // Regular permissions requests.
255 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: 267 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX:
256 case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING: // Same as notifications. 268 case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING: // Same as notifications.
257 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: 269 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
258 case CONTENT_SETTINGS_TYPE_GEOLOCATION: 270 case CONTENT_SETTINGS_TYPE_GEOLOCATION:
259 case CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER: // ChromeOS only. 271 case CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER: // ChromeOS only.
260 case CONTENT_SETTINGS_TYPE_PPAPI_BROKER: 272 case CONTENT_SETTINGS_TYPE_PPAPI_BROKER:
261 case CONTENT_SETTINGS_TYPE_PLUGINS: // Flash. 273 case CONTENT_SETTINGS_TYPE_PLUGINS: // Flash.
262 manager->AddRequest(MakePermissionRequest(it->type)); 274 manager->AddRequest(MakePermissionRequest(it->type));
263 break; 275 break;
264 case CONTENT_SETTINGS_TYPE_DEFAULT: 276 case CONTENT_SETTINGS_TYPE_DEFAULT:
265 EXPECT_EQ(kMultipleName, name); 277 EXPECT_EQ(kMultipleName, name);
266 for (auto request : kMultipleRequests) 278 if (base::FeatureList::IsEnabled(
267 manager->AddRequest(MakePermissionRequest(request)); 279 features::kUsePermissionManagerForMediaRequests)) {
280 for (auto request : kMultipleRequestsWithMedia)
281 manager->AddRequest(MakePermissionRequest(request));
282 } else {
283 for (auto request : kMultipleRequests)
284 manager->AddRequest(MakePermissionRequest(request));
285 }
286
268 break; 287 break;
269 default: 288 default:
270 ADD_FAILURE() << "Not a permission type, or one that doesn't prompt."; 289 ADD_FAILURE() << "Not a permission type, or one that doesn't prompt.";
271 return; 290 return;
272 } 291 }
273 manager->DisplayPendingRequests(); 292 manager->DisplayPendingRequests();
274 } 293 }
275 294
276 // Requests before the load event should be bundled into one bubble. 295 // Requests before the load event should be bundled into one bubble.
277 // http://crbug.com/512849 flaky 296 // http://crbug.com/512849 flaky
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 } 481 }
463 482
464 // Host wants to show notifications. 483 // Host wants to show notifications.
465 IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_notifications) { 484 IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_notifications) {
466 RunDialog(); 485 RunDialog();
467 } 486 }
468 487
469 // Host wants to use your microphone. 488 // Host wants to use your microphone.
470 IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_mic) { 489 IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_mic) {
471 RunDialog(); 490 RunDialog();
491
492 {
493 base::test::ScopedFeatureList scoped_feature_list;
494 scoped_feature_list.InitAndEnableFeature(
495 features::kUsePermissionManagerForMediaRequests);
496 RunDialog();
497 }
472 } 498 }
473 499
474 // Host wants to use your camera. 500 // Host wants to use your camera.
475 IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_camera) { 501 IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_camera) {
476 RunDialog(); 502 RunDialog();
503
504 {
505 base::test::ScopedFeatureList scoped_feature_list;
506 scoped_feature_list.InitAndEnableFeature(
507 features::kUsePermissionManagerForMediaRequests);
508 RunDialog();
509 }
477 } 510 }
478 511
479 // Host wants to open email links. 512 // Host wants to open email links.
480 IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_protocol_handlers) { 513 IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_protocol_handlers) {
481 RunDialog(); 514 RunDialog();
482 } 515 }
483 516
484 // Host wants to use your MIDI devices. 517 // Host wants to use your MIDI devices.
485 IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_midi) { 518 IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_midi) {
486 RunDialog(); 519 RunDialog();
487 } 520 }
488 521
489 // Shows a permissions bubble with multiple requests. 522 // Shows a permissions bubble with multiple requests.
490 IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_multiple) { 523 IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_multiple) {
491 RunDialog(); 524 RunDialog();
525
526 {
527 base::test::ScopedFeatureList scoped_feature_list;
528 scoped_feature_list.InitAndEnableFeature(
529 features::kUsePermissionManagerForMediaRequests);
530 RunDialog();
531 }
492 } 532 }
493 533
494 // CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER is ChromeOS only. 534 // CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER is ChromeOS only.
495 #if defined(OS_CHROMEOS) 535 #if defined(OS_CHROMEOS)
496 #define MAYBE_InvokeDialog_protected_media InvokeDialog_protected_media 536 #define MAYBE_InvokeDialog_protected_media InvokeDialog_protected_media
497 #else 537 #else
498 #define MAYBE_InvokeDialog_protected_media DISABLED_InvokeDialog_protected_media 538 #define MAYBE_InvokeDialog_protected_media DISABLED_InvokeDialog_protected_media
499 #endif 539 #endif
500 IN_PROC_BROWSER_TEST_F(PermissionDialogTest, 540 IN_PROC_BROWSER_TEST_F(PermissionDialogTest,
501 MAYBE_InvokeDialog_protected_media) { 541 MAYBE_InvokeDialog_protected_media) {
502 RunDialog(); 542 RunDialog();
503 } 543 }
504 544
505 } // anonymous namespace 545 } // anonymous namespace
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698