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

Unified Diff: chrome/browser/media/webrtc/media_stream_devices_controller_browsertest.cc

Issue 2123863004: ScreenCapture for Android phase1, part II (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: adopt base::Feature instead of switches 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/media/webrtc/media_stream_devices_controller_browsertest.cc
diff --git a/chrome/browser/media/webrtc/media_stream_devices_controller_browsertest.cc b/chrome/browser/media/webrtc/media_stream_devices_controller_browsertest.cc
index 36dd8f6ab5bfc18f69a3a5d235efb3c8ceabfc9f..09ae0a8030e08487945de7ff85d815d3d7e9f42d 100644
--- a/chrome/browser/media/webrtc/media_stream_devices_controller_browsertest.cc
+++ b/chrome/browser/media/webrtc/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,13 @@ 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 CheckDevicesListContains(content::MediaStreamType type) {
for (const auto& device : media_stream_devices_) {
- if (device.type == content::MEDIA_DEVICE_AUDIO_CAPTURE)
- has_mic = true;
- if (device.type == content::MEDIA_DEVICE_VIDEO_CAPTURE)
- has_cam = true;
+ if (device.type == type) {
+ return true;
+ }
}
-
- return needs_mic == has_mic && needs_cam == has_cam;
+ return false;
}
content::WebContents* GetWebContents() {
@@ -138,6 +136,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 +188,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_;
@@ -637,8 +641,10 @@ IN_PROC_BROWSER_TEST_F(MediaStreamDevicesControllerTest, ContentSettings) {
// Check the media stream result is expected and the devices returned are
// expected;
ASSERT_EQ(test.ExpectedMediaStreamResult(), media_stream_result());
- ASSERT_TRUE(
- DevicesContains(test.ExpectMicAllowed(), test.ExpectCamAllowed()));
+ ASSERT_EQ(CheckDevicesListContains(content::MEDIA_DEVICE_AUDIO_CAPTURE),
+ test.ExpectMicAllowed());
+ ASSERT_EQ(CheckDevicesListContains(content::MEDIA_DEVICE_VIDEO_CAPTURE),
+ test.ExpectCamAllowed());
}
}
@@ -655,7 +661,8 @@ IN_PROC_BROWSER_TEST_F(MediaStreamDevicesControllerTest,
ASSERT_FALSE(controller.IsAskingForVideo());
ASSERT_EQ(content::MEDIA_DEVICE_OK, media_stream_result());
- ASSERT_TRUE(DevicesContains(false, true));
+ ASSERT_FALSE(CheckDevicesListContains(content::MEDIA_DEVICE_AUDIO_CAPTURE));
+ ASSERT_TRUE(CheckDevicesListContains(content::MEDIA_DEVICE_VIDEO_CAPTURE));
}
IN_PROC_BROWSER_TEST_F(MediaStreamDevicesControllerTest,
@@ -672,7 +679,8 @@ IN_PROC_BROWSER_TEST_F(MediaStreamDevicesControllerTest,
// Accept the prompt.
controller.PermissionGranted();
ASSERT_EQ(content::MEDIA_DEVICE_OK, media_stream_result());
- ASSERT_TRUE(DevicesContains(true, true));
+ ASSERT_TRUE(CheckDevicesListContains(content::MEDIA_DEVICE_AUDIO_CAPTURE));
+ ASSERT_TRUE(CheckDevicesListContains(content::MEDIA_DEVICE_VIDEO_CAPTURE));
// Check that re-requesting allows without prompting.
MediaStreamDevicesController controller2(
@@ -683,7 +691,8 @@ IN_PROC_BROWSER_TEST_F(MediaStreamDevicesControllerTest,
ASSERT_FALSE(controller2.IsAskingForVideo());
ASSERT_EQ(content::MEDIA_DEVICE_OK, media_stream_result());
- ASSERT_TRUE(DevicesContains(true, true));
+ ASSERT_TRUE(CheckDevicesListContains(content::MEDIA_DEVICE_AUDIO_CAPTURE));
+ ASSERT_TRUE(CheckDevicesListContains(content::MEDIA_DEVICE_VIDEO_CAPTURE));
}
// For Pepper request from insecure origin, even if it's ALLOW, it won't be
@@ -732,3 +741,53 @@ IN_PROC_BROWSER_TEST_F(MediaStreamDevicesControllerTest,
EXPECT_FALSE(controller.IsAskingForAudio());
EXPECT_FALSE(controller.IsAskingForVideo());
}
+
+#if defined(OS_ANDROID)
+IN_PROC_BROWSER_TEST_F(MediaStreamDevicesControllerTest,
+ RequestAndAllowScreenCapture) {
+ 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,
+ base::Unretained(this)));
+ ASSERT_TRUE(controller.IsAskingForScreenCapture());
+
+ // Accept the prompt.
+ controller.PermissionGranted();
+ ASSERT_EQ(content::MEDIA_DEVICE_OK, media_stream_result());
+ ASSERT_FALSE(CheckDevicesListContains(content::MEDIA_DEVICE_AUDIO_CAPTURE));
+ ASSERT_TRUE(CheckDevicesListContains(content::MEDIA_DESKTOP_VIDEO_CAPTURE));
+
+ // Check that re-requesting still requires prompting.
+ MediaStreamDevicesController controller2(
+ GetWebContents(), CreateRequest(std::string(), example_screen_id()),
+ base::Bind(&MediaStreamDevicesControllerTest::OnMediaStreamResponse,
+ base::Unretained(this)));
+ ASSERT_TRUE(controller2.IsAskingForScreenCapture());
+}
+
+IN_PROC_BROWSER_TEST_F(MediaStreamDevicesControllerTest,
+ RequestAndBlockScreenCapture) {
+ 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,
+ base::Unretained(this)));
+ ASSERT_TRUE(controller.IsAskingForScreenCapture());
+
+ // Block the prompt.
+ controller.PermissionDenied();
+ ASSERT_NE(content::MEDIA_DEVICE_OK, media_stream_result());
+ ASSERT_FALSE(CheckDevicesListContains(content::MEDIA_DEVICE_AUDIO_CAPTURE));
+ ASSERT_FALSE(CheckDevicesListContains(content::MEDIA_DESKTOP_VIDEO_CAPTURE));
+
+ // Check that re-requesting still requires prompting.
+ MediaStreamDevicesController controller2(
+ GetWebContents(), CreateRequest(std::string(), example_screen_id()),
+ base::Bind(&MediaStreamDevicesControllerTest::OnMediaStreamResponse,
+ base::Unretained(this)));
+ ASSERT_TRUE(controller2.IsAskingForScreenCapture());
+}
+#endif // defined(OS_ANDROID)

Powered by Google App Engine
This is Rietveld 408576698