Changeset 176952 in webkit
- Timestamp:
- Dec 8, 2014 10:14:19 AM (9 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r176949 r176952 1 2014-12-08 Philippe Normand <pnormand@igalia.com> 2 3 [GTK] UserMedia Permission Request API 4 https://bugs.webkit.org/show_bug.cgi?id=136449 5 6 Reviewed by Carlos Garcia Campos. 7 8 Very basic constraints validation support in the GStreamer 9 MediaStreamCenter. This is needed so the GTK C API tests using the 10 getUserMedia() API would not time out. 11 12 * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp: 13 (WebCore::MediaStreamCenterGStreamer::~MediaStreamCenterGStreamer): 14 (WebCore::MediaStreamCenterGStreamer::validateRequestConstraints): 15 (WebCore::MediaStreamCenterGStreamer::createMediaStream): 16 1 17 2014-12-08 Anders Carlsson <andersca@apple.com> 2 18 -
trunk/Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp
r165607 r176952 60 60 } 61 61 62 void MediaStreamCenterGStreamer::validateRequestConstraints(PassRefPtr<MediaStreamCreationClient> , PassRefPtr<MediaConstraints>, PassRefPtr<MediaConstraints>)62 void MediaStreamCenterGStreamer::validateRequestConstraints(PassRefPtr<MediaStreamCreationClient> prpQueryClient, PassRefPtr<MediaConstraints>, PassRefPtr<MediaConstraints>) 63 63 { 64 notImplemented(); 64 RefPtr<MediaStreamCreationClient> client = prpQueryClient; 65 // FIXME: Actually do constraints validation. The MediaConstraints 66 // need to comply with the available audio/video device(s) 67 // capabilities. See bug #123345. 68 client->constraintsValidated(); 65 69 } 66 70 67 void MediaStreamCenterGStreamer::createMediaStream(PassRefPtr<MediaStreamCreationClient> , PassRefPtr<MediaConstraints>, PassRefPtr<MediaConstraints>)71 void MediaStreamCenterGStreamer::createMediaStream(PassRefPtr<MediaStreamCreationClient> prpQueryClient, PassRefPtr<MediaConstraints>, PassRefPtr<MediaConstraints>) 68 72 { 69 notImplemented(); 73 RefPtr<MediaStreamCreationClient> client = prpQueryClient; 74 ASSERT(client); 75 76 Vector<RefPtr<MediaStreamSource>> audioSources; 77 Vector<RefPtr<MediaStreamSource>> videoSources; 78 // FIXME: fill source vectors, see bug #110150. 79 client->didCreateStream(MediaStreamPrivate::create(audioSources, videoSources)); 80 70 81 } 71 82 -
trunk/Source/WebKit2/ChangeLog
r176951 r176952 1 2014-12-08 Philippe Normand <pnormand@igalia.com> 2 3 [GTK] UserMedia Permission Request API 4 https://bugs.webkit.org/show_bug.cgi?id=136449 5 6 Reviewed by Carlos Garcia Campos. 7 8 * PlatformGTK.cmake: GTK-specific new files. 9 * UIProcess/API/gtk/WebKitUIClient.cpp: DecidePolicy handler 10 implementation for UserMediaPermissionRequest. 11 * UIProcess/API/gtk/WebKitUserMediaPermissionRequest.cpp: Added, 12 WebKitGTK API for UserMediaPermissionRequest, very similar to the 13 one used for Geolocation. 14 (webkitUserMediaPermissionRequestAllow): 15 (webkitUserMediaPermissionRequestDeny): 16 (webkit_permission_request_interface_init): 17 (webkitUserMediaPermissionRequestDispose): 18 (webkit_user_media_permission_get_media_types): 19 (webkitUserMediaPermissionRequestGetProperty): 20 (webkit_user_media_permission_request_class_init): 21 (webkitUserMediaPermissionRequestCreate): 22 * UIProcess/API/gtk/WebKitUserMediaPermissionRequest.h: Added. 23 * UIProcess/API/gtk/WebKitUserMediaPermissionRequestPrivate.h: Added. 24 * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Expose new API 25 in documentation. 26 * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Ditto. 27 * UIProcess/API/gtk/webkit2.h: Expose UserMediaPermissionRequest API. 28 1 29 2014-12-08 Anders Carlsson <andersca@apple.com> 2 30 -
trunk/Source/WebKit2/PlatformGTK.cmake
r176540 r176952 207 207 UIProcess/API/gtk/WebKitUserContentManagerPrivate.h 208 208 UIProcess/API/gtk/WebKitUserContentManager.cpp 209 UIProcess/API/gtk/WebKitUserMediaPermissionRequest.cpp 210 UIProcess/API/gtk/WebKitUserMediaPermissionRequest.h 211 UIProcess/API/gtk/WebKitUserMediaPermissionRequestPrivate.h 209 212 UIProcess/API/gtk/WebKitVersion.cpp 210 213 UIProcess/API/gtk/WebKitVersion.h.in … … 362 365 ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitUserContent.h 363 366 ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitUserContentManager.h 367 ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitUserMediaPermissionRequest.h 364 368 ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitWebContext.h 365 369 ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitWebInspector.h -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitPrivate.h
r170702 r176952 43 43 #include <WebKit/WKString.h> 44 44 #include <WebKit/WKTextChecker.h> 45 #include <WebKit/WKUserMediaPermissionRequest.h> 45 46 #include <WebKit/WebKit2_C.h> 46 47 #include <glib.h> -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp
r170702 r176952 27 27 #include "WebKitPrivate.h" 28 28 #include "WebKitURIRequestPrivate.h" 29 #include "WebKitUserMediaPermissionRequestPrivate.h" 29 30 #include "WebKitWebViewBasePrivate.h" 30 31 #include "WebKitWebViewPrivate.h" … … 159 160 } 160 161 162 virtual bool decidePolicyForUserMediaPermissionRequest(WebPageProxy&, WebFrameProxy&, WebSecurityOrigin& securityOrigin, UserMediaPermissionRequestProxy& permissionRequest) override 163 { 164 GRefPtr<WebKitUserMediaPermissionRequest> userMediaPermissionRequest = adoptGRef(webkitUserMediaPermissionRequestCreate(permissionRequest, securityOrigin)); 165 webkitWebViewMakePermissionRequest(m_webView, WEBKIT_PERMISSION_REQUEST(userMediaPermissionRequest.get())); 166 return true; 167 } 168 161 169 virtual void printFrame(WebPageProxy*, WebFrameProxy* frame) override 162 170 { -
trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml
r175694 r176952 25 25 <xi:include href="xml/WebKitGeolocationPermissionRequest.xml"/> 26 26 <xi:include href="xml/WebKitNavigationAction.xml"/> 27 <xi:include href="xml/WebKitUserMediaPermissionRequest.xml"/> 27 28 <xi:include href="xml/WebKitPolicyDecision.xml"/> 28 29 <xi:include href="xml/WebKitNavigationPolicyDecision.xml"/> -
trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt
r176256 r176952 597 597 598 598 <SECTION> 599 <FILE>WebKitUserMediaPermissionRequest</FILE> 600 WebKitUserMediaPermissionRequest 601 webkit_user_media_permission_is_for_audio_device 602 webkit_user_media_permission_is_for_video_device 603 604 <SUBSECTION Standard> 605 WebKitUserMediaPermissionRequestClass 606 WEBKIT_TYPE_USER_MEDIA_PERMISSION_REQUEST 607 WEBKIT_USER_MEDIA_PERMISSION_REQUEST 608 WEBKIT_IS_USER_MEDIA_PERMISSION_REQUEST 609 WEBKIT_USER_MEDIA_PERMISSION_REQUEST_CLASS 610 WEBKIT_IS_USER_MEDIA_PERMISSION_REQUEST_CLASS 611 WEBKIT_USER_MEDIA_PERMISSION_REQUEST_GET_CLASS 612 613 <SUBSECTION Private> 614 WebKitUserMediaPermissionRequestPrivate 615 webkit_user_media_permission_request_get_type 616 </SECTION> 617 618 <SECTION> 599 619 <FILE>WebKitPolicyDecision</FILE> 600 620 WebKitPolicyDecision -
trunk/Source/WebKit2/UIProcess/API/gtk/webkit2.h
r171792 r176952 63 63 #include <webkit2/WebKitUserContent.h> 64 64 #include <webkit2/WebKitUserContentManager.h> 65 #include <webkit2/WebKitUserMediaPermissionRequest.h> 65 66 #include <webkit2/WebKitVersion.h> 66 67 #include <webkit2/WebKitWebContext.h> -
trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp
r176011 r176952 39 39 } 40 40 41 PassRefPtr<UserMediaPermissionRequestProxy> UserMediaPermissionRequestManagerProxy::createRequest(uint64_t userMediaID, bool audio, bool video)41 PassRefPtr<UserMediaPermissionRequestProxy> UserMediaPermissionRequestManagerProxy::createRequest(uint64_t userMediaID, bool requiresAudio, bool requiresVideo) 42 42 { 43 RefPtr<UserMediaPermissionRequestProxy> request = UserMediaPermissionRequestProxy::create(*this, userMediaID, audio, video);43 RefPtr<UserMediaPermissionRequestProxy> request = UserMediaPermissionRequestProxy::create(*this, userMediaID, requiresAudio, requiresVideo); 44 44 m_pendingRequests.add(userMediaID, request.get()); 45 45 return request.release(); -
trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.cpp
r176011 r176952 20 20 #include "UserMediaPermissionRequestProxy.h" 21 21 22 #include "APINumber.h"23 22 #include "UserMediaPermissionRequestManagerProxy.h" 24 23 #include <wtf/text/StringHash.h> … … 26 25 namespace WebKit { 27 26 28 UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, bool audio, bool video)27 UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, bool requiresAudio, bool requiresVideo) 29 28 : m_manager(manager) 30 29 , m_userMediaID(userMediaID) 30 , m_requiresAudio(requiresAudio) 31 , m_requiresVideo(requiresVideo) 31 32 { 32 HashMap<String, RefPtr<API::Object>> parametersMap;33 parametersMap.add(ASCIILiteral("audio"), API::Boolean::create(audio));34 parametersMap.add(ASCIILiteral("video"), API::Boolean::create(video));35 m_mediaParameters = ImmutableDictionary::create(WTF::move(parametersMap));36 33 } 37 34 -
trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.h
r176011 r176952 21 21 22 22 #include "APIObject.h" 23 #include "ImmutableDictionary.h"24 23 #include <wtf/PassRefPtr.h> 25 24 … … 30 29 class UserMediaPermissionRequestProxy : public API::ObjectImpl<API::Object::Type::UserMediaPermissionRequest> { 31 30 public: 32 static PassRefPtr<UserMediaPermissionRequestProxy> create(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, bool audio, bool video)31 static PassRefPtr<UserMediaPermissionRequestProxy> create(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, bool requiresAudio, bool requiresVideo) 33 32 { 34 return adoptRef(new UserMediaPermissionRequestProxy(manager, userMediaID, audio, video));33 return adoptRef(new UserMediaPermissionRequestProxy(manager, userMediaID, requiresAudio, requiresVideo)); 35 34 } 36 35 … … 40 39 void invalidate(); 41 40 42 PassRefPtr<ImmutableDictionary> mediaParameters() const { return m_mediaParameters; } 41 bool requiresAudio() const { return m_requiresAudio; } 42 bool requiresVideo() const { return m_requiresVideo; } 43 43 44 44 private: 45 UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy&, uint64_t userMediaID, bool audio, bool video);45 UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy&, uint64_t userMediaID, bool requiresAudio, bool requiresVideo); 46 46 47 47 UserMediaPermissionRequestManagerProxy& m_manager; 48 48 uint64_t m_userMediaID; 49 RefPtr<ImmutableDictionary> m_mediaParameters; 49 bool m_requiresAudio; 50 bool m_requiresVideo; 50 51 }; 51 52 -
trunk/Tools/ChangeLog
r176951 r176952 1 2014-12-08 Philippe Normand <pnormand@igalia.com> 2 3 [GTK] UserMedia Permission Request API 4 https://bugs.webkit.org/show_bug.cgi?id=136449 5 6 Reviewed by Carlos Garcia Campos. 7 8 The GTK version of the MiniBrowser has gained UserMedia permission 9 request support. 10 11 * MiniBrowser/gtk/BrowserWindow.c: Show a popup when the page 12 requires user permission to access audio/video devices. 13 (permissionRequestDialogCallback): 14 (webViewDecidePermissionRequest): 15 (geolocationRequestDialogCallback): Deleted. 16 1 17 2014-12-08 Anders Carlsson <andersca@apple.com> 2 18 -
trunk/Tools/MiniBrowser/gtk/BrowserWindow.c
r176539 r176952 256 256 } 257 257 258 static void geolocationRequestDialogCallback(GtkDialog *dialog, gint response, WebKitPermissionRequest *request)258 static void permissionRequestDialogCallback(GtkDialog *dialog, gint response, WebKitPermissionRequest *request) 259 259 { 260 260 switch (response) { … … 409 409 static gboolean webViewDecidePermissionRequest(WebKitWebView *webView, WebKitPermissionRequest *request, BrowserWindow *window) 410 410 { 411 if (!WEBKIT_IS_GEOLOCATION_PERMISSION_REQUEST(request)) 411 const gchar *dialog_title = NULL; 412 const gchar *dialog_message = NULL; 413 const gchar *dialog_message_format = NULL; 414 415 if (WEBKIT_IS_GEOLOCATION_PERMISSION_REQUEST(request)) { 416 dialog_title = "Geolocation request"; 417 dialog_message_format = "%s"; 418 dialog_message = "Allow geolocation request?"; 419 } else if (WEBKIT_IS_USER_MEDIA_PERMISSION_REQUEST(request)) { 420 dialog_message_format = "Allow access to %s device?"; 421 gboolean is_for_audio_device = webkit_user_media_permission_is_for_audio_device(WEBKIT_USER_MEDIA_PERMISSION_REQUEST(request)); 422 gboolean is_for_video_device = webkit_user_media_permission_is_for_video_device(WEBKIT_USER_MEDIA_PERMISSION_REQUEST(request)); 423 dialog_title = "UserMedia request"; 424 if (is_for_audio_device) { 425 if (is_for_video_device) 426 dialog_message = "audio/video"; 427 else 428 dialog_message = "audio"; 429 } else if (is_for_video_device) 430 dialog_message = "video"; 431 } else 412 432 return FALSE; 413 433 414 434 GtkWidget *dialog = gtk_message_dialog_new(GTK_WINDOW(window), 415 416 417 418 "Geolocation request");419 420 gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), "Allow geolocation request?");421 g_signal_connect(dialog, "response", G_CALLBACK( geolocationRequestDialogCallback), g_object_ref(request));435 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, 436 GTK_MESSAGE_QUESTION, 437 GTK_BUTTONS_YES_NO, 438 "%s", dialog_title); 439 440 gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), dialog_message_format, dialog_message); 441 g_signal_connect(dialog, "response", G_CALLBACK(permissionRequestDialogCallback), g_object_ref(request)); 422 442 gtk_widget_show(dialog); 423 424 443 return TRUE; 425 444 } -
trunk/Tools/Scripts/run-gtk-tests
r176020 r176952 82 82 SkippedTest("WebKit2/TestWebKit2", "WebKit2.GeolocationTransitionToHighAccuracy", "Test causes crash on the next test", 125068), 83 83 SkippedTest("WebKit2/TestWebKit2", "WebKit2.GeolocationTransitionToLowAccuracy", "Test causes crash on the next test", 125068), 84 SkippedTest("WebKit2/TestWebKit2", "WebKit2.UserMediaBasic", "Test times out because constraints validation support is missing", 136449),85 84 ] 86 85 -
trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp
r175160 r176952 198 198 test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(request)); 199 199 200 if (test->m_verifyMediaTypes && WEBKIT_IS_USER_MEDIA_PERMISSION_REQUEST(request)) { 201 WebKitUserMediaPermissionRequest* userMediaRequest = WEBKIT_USER_MEDIA_PERMISSION_REQUEST(request); 202 g_assert(webkit_user_media_permission_is_for_audio_device(userMediaRequest) == test->m_expectedAudioMedia); 203 g_assert(webkit_user_media_permission_is_for_video_device(userMediaRequest) == test->m_expectedVideoMedia); 204 } 205 200 206 if (test->m_allowPermissionRequests) 201 207 webkit_permission_request_allow(request); … … 210 216 , m_scriptDialogConfirmed(true) 211 217 , m_allowPermissionRequests(false) 218 , m_verifyMediaTypes(false) 219 , m_expectedAudioMedia(false) 220 , m_expectedVideoMedia(false) 212 221 , m_mouseTargetModifiers(0) 213 222 { … … 289 298 bool m_scriptDialogConfirmed; 290 299 bool m_allowPermissionRequests; 300 gboolean m_verifyMediaTypes; 301 gboolean m_expectedAudioMedia; 302 gboolean m_expectedVideoMedia; 291 303 WindowProperties m_windowProperties; 292 304 HashSet<WTF::String> m_windowPropertiesChanged; … … 621 633 } 622 634 623 static void testWebView PermissionRequests(UIClientTest* test, gconstpointer)635 static void testWebViewGeolocationPermissionRequests(UIClientTest* test, gconstpointer) 624 636 { 625 637 // Some versions of geoclue give a runtime warning because it tries … … 662 674 } 663 675 676 static void testWebViewUserMediaPermissionRequests(UIClientTest* test, gconstpointer) 677 { 678 WebKitSettings* settings = webkit_web_view_get_settings(test->m_webView); 679 gboolean enabled = webkit_settings_get_enable_media_stream(settings); 680 webkit_settings_set_enable_media_stream(settings, TRUE); 681 682 test->showInWindowAndWaitUntilMapped(); 683 static const char* userMediaRequestHTML = 684 "<html>" 685 " <script>" 686 " function runTest()" 687 " {" 688 " navigator.webkitGetUserMedia({audio: true, video: true}," 689 " function(s) { document.title = \"OK\" }," 690 " function(e) { document.title = e.name });" 691 " }" 692 " </script>" 693 " <body onload='runTest();'></body>" 694 "</html>"; 695 696 test->m_verifyMediaTypes = TRUE; 697 test->m_expectedAudioMedia = TRUE; 698 test->m_expectedVideoMedia = TRUE; 699 700 // Test denying a permission request. 701 test->m_allowPermissionRequests = false; 702 test->loadHtml(userMediaRequestHTML, nullptr); 703 test->waitUntilTitleChangedTo("PermissionDeniedError"); 704 705 // Test allowing a permission request. 706 test->m_allowPermissionRequests = true; 707 test->loadHtml(userMediaRequestHTML, nullptr); 708 test->waitUntilTitleChangedTo("OK"); 709 710 webkit_settings_set_enable_media_stream(settings, enabled); 711 } 712 713 static void testWebViewAudioOnlyUserMediaPermissionRequests(UIClientTest* test, gconstpointer) 714 { 715 WebKitSettings* settings = webkit_web_view_get_settings(test->m_webView); 716 gboolean enabled = webkit_settings_get_enable_media_stream(settings); 717 webkit_settings_set_enable_media_stream(settings, TRUE); 718 719 test->showInWindowAndWaitUntilMapped(); 720 static const char* userMediaRequestHTML = 721 "<html>" 722 " <script>" 723 " function runTest()" 724 " {" 725 " navigator.webkitGetUserMedia({audio: true, video: false}," 726 " function(s) { document.title = \"OK\" }," 727 " function(e) { document.title = e.name });" 728 " }" 729 " </script>" 730 " <body onload='runTest();'></body>" 731 "</html>"; 732 733 test->m_verifyMediaTypes = TRUE; 734 test->m_expectedAudioMedia = TRUE; 735 test->m_expectedVideoMedia = FALSE; 736 737 // Test denying a permission request. 738 test->m_allowPermissionRequests = false; 739 test->loadHtml(userMediaRequestHTML, nullptr); 740 test->waitUntilTitleChangedTo("PermissionDeniedError"); 741 742 webkit_settings_set_enable_media_stream(settings, enabled); 743 } 744 664 745 class FileChooserTest: public UIClientTest { 665 746 public: … … 786 867 UIClientTest::add("WebKitWebView", "window-properties", testWebViewWindowProperties); 787 868 UIClientTest::add("WebKitWebView", "mouse-target", testWebViewMouseTarget); 788 UIClientTest::add("WebKitWebView", "permission-requests", testWebViewPermissionRequests); 869 UIClientTest::add("WebKitWebView", "geolocation-permission-requests", testWebViewGeolocationPermissionRequests); 870 UIClientTest::add("WebKitWebView", "usermedia-permission-requests", testWebViewUserMediaPermissionRequests); 871 UIClientTest::add("WebKitWebView", "audio-usermedia-permission-request", testWebViewAudioOnlyUserMediaPermissionRequests); 789 872 FileChooserTest::add("WebKitWebView", "file-chooser-request", testWebViewFileChooserRequest); 790 873 }
Note: See TracChangeset
for help on using the changeset viewer.