diff --git a/tests/ceftests/media_access_unittest.cc b/tests/ceftests/media_access_unittest.cc index 6321eb1dd..96d0f5930 100644 --- a/tests/ceftests/media_access_unittest.cc +++ b/tests/ceftests/media_access_unittest.cc @@ -9,6 +9,7 @@ #include "include/cef_parser.h" #include "include/cef_permission_handler.h" #include "include/cef_request_context_handler.h" +#include "include/test/cef_test_helpers.h" #include "include/wrapper/cef_closure_task.h" #include "include/wrapper/cef_stream_resource_handler.h" #include "tests/ceftests/test_handler.h" @@ -49,6 +50,9 @@ class TestSetup { // CONFIGURATION + // True if a user gesture is required for the getDisplayMedia call. + bool needs_user_gesture = false; + // Deny the prompt by returning false in OnRequestMediaAccessPermission. bool deny_implicitly = false; @@ -129,7 +133,8 @@ class MediaAccessTestHandler : public TestHandler, public CefPermissionHandler { " document.location = " "`http://tests/" "exit?result=${val}&data=${encodeURIComponent(JSON.stringify(data))}`;" - "}"; + "}" + "function runTest() {"; if (want_audio_device() || want_video_device()) { page += std::string("navigator.mediaDevices.getUserMedia({audio: ") + @@ -150,7 +155,8 @@ class MediaAccessTestHandler : public TestHandler, public CefPermissionHandler { ".catch(function(err) {" " console.log(err.toString());" " onResult(`ERROR`, {error_str: err.toString()});" - "});"; + "});" + "}"; if (test_setup_->deny_implicitly && IsChromeRuntimeEnabled()) { // Default behavior with the Chrome runtime is to show a UI prompt, so add @@ -164,7 +170,13 @@ class MediaAccessTestHandler : public TestHandler, public CefPermissionHandler { page += "" - "MEDIA ACCESS TEST"; + ""; + + if (!test_setup_->needs_user_gesture) { + page += ""; + } + + page += "MEDIA ACCESS TEST"; // Create the request context that will use an in-memory cache. CefRequestContextSettings settings; @@ -196,6 +208,8 @@ class MediaAccessTestHandler : public TestHandler, public CefPermissionHandler { if (frame->GetURL().ToString() == kMediaNavUrl) { DestroyTest(); } + } else if (test_setup_->needs_user_gesture) { + CefExecuteJavaScriptWithUserGestureForTests(frame, "runTest()"); } } @@ -631,6 +645,7 @@ TEST(MediaAccessTest, DeviceSuccessAudioVideoAsync) { // Screen capture tests TEST(MediaAccessTest, DesktopFailureWhenReturningNoPermission) { TestSetup test_setup; + test_setup.needs_user_gesture = true; CefRefPtr handler = new MediaAccessTestHandler(&test_setup, @@ -649,6 +664,7 @@ TEST(MediaAccessTest, DesktopFailureWhenReturningNoPermission) { TEST(MediaAccessTest, DesktopFailureWhenRequestingVideoButReturningAudio) { TestSetup test_setup; + test_setup.needs_user_gesture = true; CefRefPtr handler = new MediaAccessTestHandler( &test_setup, CEF_MEDIA_PERMISSION_DESKTOP_VIDEO_CAPTURE, @@ -665,6 +681,7 @@ TEST(MediaAccessTest, DesktopFailureWhenRequestingVideoButReturningAudio) { TEST(MediaAccessTest, DesktopPartialSuccessReturningVideo) { TestSetup test_setup; + test_setup.needs_user_gesture = true; CefRefPtr handler = new MediaAccessTestHandler(&test_setup, @@ -683,6 +700,8 @@ TEST(MediaAccessTest, DesktopPartialSuccessReturningVideo) { TEST(MediaAccessTest, DesktopPartialFailureReturningAudio) { TestSetup test_setup; + test_setup.needs_user_gesture = true; + CefRefPtr handler = new MediaAccessTestHandler(&test_setup, CEF_MEDIA_PERMISSION_DESKTOP_AUDIO_CAPTURE |