Index: chrome/browser/media/media_stream_devices_controller_browsertest.cc |
diff --git a/chrome/browser/media/media_stream_devices_controller_browsertest.cc b/chrome/browser/media/media_stream_devices_controller_browsertest.cc |
index 93bd2fb1b228729b796aa66a32332c3413a6ca30..1640af3deb907ac3bcfbf00a85d8db509abb8ac5 100644 |
--- a/chrome/browser/media/media_stream_devices_controller_browsertest.cc |
+++ b/chrome/browser/media/media_stream_devices_controller_browsertest.cc |
@@ -49,6 +49,7 @@ class MediaStreamDevicesControllerTest : public WebRtcTestBase { |
MediaStreamDevicesControllerTest() |
: example_audio_id_("fake_audio_dev"), |
example_video_id_("fake_video_dev"), |
+ example_screen_id_("fake_screen_dev"), |
media_stream_result_(content::NUM_MEDIA_REQUEST_RESULTS) {} |
// Dummy callback for when we deny the current request directly. |
@@ -71,6 +72,7 @@ class MediaStreamDevicesControllerTest : public WebRtcTestBase { |
const std::string& example_audio_id() const { return example_audio_id_; } |
const std::string& example_video_id() const { return example_video_id_; } |
+ const std::string& example_screen_id() const { return example_screen_id_; } |
content::MediaStreamRequestResult media_stream_result() const { |
return media_stream_result_; |
@@ -109,17 +111,21 @@ class MediaStreamDevicesControllerTest : public WebRtcTestBase { |
// Checks whether the devices returned in OnMediaStreamResponse contains a |
// microphone and/or camera device. |
- bool DevicesContains(bool needs_mic, bool needs_cam) { |
- bool has_mic = false; |
- bool has_cam = false; |
+ bool DevicesContains(bool needs_audio, bool needs_video) { |
+ bool has_audio = false; |
+ bool has_video = false; |
for (const auto& device : media_stream_devices_) { |
if (device.type == content::MEDIA_DEVICE_AUDIO_CAPTURE) |
- has_mic = true; |
+ has_audio = true; |
if (device.type == content::MEDIA_DEVICE_VIDEO_CAPTURE) |
- has_cam = true; |
+ has_video = true; |
+#if defined(OS_ANDROID) |
+ if (device.type == content::MEDIA_DESKTOP_VIDEO_CAPTURE) |
+ has_video = true; |
+#endif |
} |
- return needs_mic == has_mic && needs_cam == has_cam; |
+ return needs_audio == has_audio && needs_video == has_video; |
} |
content::WebContents* GetWebContents() { |
@@ -138,6 +144,11 @@ class MediaStreamDevicesControllerTest : public WebRtcTestBase { |
content::MediaStreamType video_type = |
video_id.empty() ? content::MEDIA_NO_SERVICE |
: content::MEDIA_DEVICE_VIDEO_CAPTURE; |
+#if defined(OS_ANDROID) |
+ if (!video_id.compare(example_screen_id())) |
+ video_type = content::MEDIA_DESKTOP_VIDEO_CAPTURE; |
+#endif |
+ |
return content::MediaStreamRequest(0, 0, 0, example_url(), false, |
request_type, audio_id, video_id, |
audio_type, video_type); |
@@ -185,6 +196,7 @@ class MediaStreamDevicesControllerTest : public WebRtcTestBase { |
GURL example_url_; |
const std::string example_audio_id_; |
const std::string example_video_id_; |
+ const std::string example_screen_id_; |
content::MediaStreamDevices media_stream_devices_; |
content::MediaStreamRequestResult media_stream_result_; |
@@ -732,3 +744,27 @@ IN_PROC_BROWSER_TEST_F(MediaStreamDevicesControllerTest, |
EXPECT_FALSE(controller.IsAskingForAudio()); |
EXPECT_FALSE(controller.IsAskingForVideo()); |
} |
+ |
+#if defined(OS_ANDROID) |
+IN_PROC_BROWSER_TEST_F(MediaStreamDevicesControllerTest, RequestScreenCapture) { |
+ InitWithUrl(GURL("https://www.example.com")); |
+ // Test that a prompt is required. |
+ MediaStreamDevicesController controller( |
+ GetWebContents(), CreateRequest(std::string(), example_screen_id()), |
+ base::Bind(&MediaStreamDevicesControllerTest::OnMediaStreamResponse, |
+ this)); |
+ ASSERT_TRUE(controller.IsAskingForScreenCapture()); |
+ |
+ // Accept the prompt. |
+ controller.PermissionGranted(); |
+ ASSERT_EQ(content::MEDIA_DEVICE_OK, media_stream_result()); |
+ ASSERT_TRUE(DevicesContains(false, true)); |
+ |
+ // Check that re-requesting still requires prompting. |
+ MediaStreamDevicesController controller2( |
+ GetWebContents(), CreateRequest(std::string(), example_screen_id()), |
+ base::Bind(&MediaStreamDevicesControllerTest::OnMediaStreamResponse, |
+ this)); |
+ ASSERT_TRUE(controller2.IsAskingForScreenCapture()); |
+} |
+#endif |