Title: [188385] trunk
Revision
188385
Author
mdai...@apple.com
Date
2015-08-13 10:33:43 -0700 (Thu, 13 Aug 2015)

Log Message

Source/WebCore:
UserMediaRequest should supply IDs of devices selected by user
https://bugs.webkit.org/show_bug.cgi?id=147263
<rdar://problem/21983345>

Reviewed by Jer Noble.

* Modules/mediastream/UserMediaRequest.cpp:
(WebCore::UserMediaRequest::userMediaAccessGranted):
* Modules/mediastream/UserMediaRequest.h:
* platform/mock/UserMediaClientMock.h:

Source/WebKit/mac:
Linking device query ability from WebKit2 to clients
https://bugs.webkit.org/show_bug.cgi?id=147263
<rdar://problem/21983345>

Reviewed by Jer Noble.

* WebCoreSupport/WebUserMediaClient.mm:
(-[WebUserMediaPolicyListener allow]):
(-[WebUserMediaPolicyListener allowDeviceWithVideoUID:andAudioUID:]):

Source/WebKit2:
Linking device query ability from WebKit2 to clients
https://bugs.webkit.org/show_bug.cgi?id=147263
<rdar://problem/21983345>

Reviewed by Jer Noble.

* Platform/mac/LayerHostingContext.mm:
(WebKit::LayerHostingContext::setColorMatchUntaggedContent):
(WebKit::LayerHostingContext::colorMatchUntaggedContent):
* UIProcess/API/C/WKUserMediaPermissionRequest.cpp:
(WKUserMediaPermissionRequestAllow):
(WKUserMediaPermissionRequestDeviceNamesVideo):
(WKUserMediaPermissionRequestDeviceNamesAudio):
* UIProcess/API/C/WKUserMediaPermissionRequest.h:
* UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
(WebKit::UserMediaPermissionRequestManagerProxy::didReceiveUserMediaPermissionDecision): Deleted.
* UIProcess/UserMediaPermissionRequestManagerProxy.h:
* UIProcess/UserMediaPermissionRequestProxy.cpp:
(WebKit::UserMediaPermissionRequestProxy::allow):
(WebKit::UserMediaPermissionRequestProxy::deny):
* UIProcess/UserMediaPermissionRequestProxy.h:
* WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
(WebKit::UserMediaPermissionRequestManager::didReceiveUserMediaPermissionDecision):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (188384 => 188385)


--- trunk/Source/WebCore/ChangeLog	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Source/WebCore/ChangeLog	2015-08-13 17:33:43 UTC (rev 188385)
@@ -1,3 +1,16 @@
+2015-08-13  Matthew Daiter  <mdai...@apple.com>
+
+        UserMediaRequest should supply IDs of devices selected by user
+        https://bugs.webkit.org/show_bug.cgi?id=147263
+        <rdar://problem/21983345>
+
+        Reviewed by Jer Noble.
+
+        * Modules/mediastream/UserMediaRequest.cpp:
+        (WebCore::UserMediaRequest::userMediaAccessGranted):
+        * Modules/mediastream/UserMediaRequest.h:
+        * platform/mock/UserMediaClientMock.h:
+
 2015-08-12  Carlos Garcia Campos  <cgar...@igalia.com>
 
         [Cairo] Improve image quality when using newer versions of cairo/pixman

Modified: trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp (188384 => 188385)


--- trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp	2015-08-13 17:33:43 UTC (rev 188385)
@@ -143,8 +143,10 @@
     });
 }
 
-void UserMediaRequest::userMediaAccessGranted()
+void UserMediaRequest::userMediaAccessGranted(const String& videoDeviceUID, const String& audioDeviceUID)
 {
+    m_chosenVideoDeviceUID = videoDeviceUID;
+    m_chosenAudioDeviceUID = audioDeviceUID;
     RefPtr<UserMediaRequest> protectedThis(this);
     callOnMainThread([protectedThis] {
         // 3 - the user granted access, ask platform to create the media stream descriptors.

Modified: trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h (188384 => 188385)


--- trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h	2015-08-13 17:33:43 UTC (rev 188385)
@@ -66,7 +66,7 @@
     WEBCORE_EXPORT SecurityOrigin* securityOrigin() const;
 
     void start();
-    WEBCORE_EXPORT void userMediaAccessGranted();
+    WEBCORE_EXPORT void userMediaAccessGranted(const String& videoDeviceUID, const String& audioDeviceUID);
     WEBCORE_EXPORT void userMediaAccessDenied();
 
     bool requiresAudio() const { return m_audioConstraints; }
@@ -74,6 +74,9 @@
     
     const Vector<String>& videoDeviceUIDs() const { return m_videoDeviceUIDs; }
     const Vector<String>& audioDeviceUIDs() const { return m_audioDeviceUIDs; }
+    
+    const String& firstVideoDeviceUID() const { return !videoDeviceUIDs().isEmpty() ? videoDeviceUIDs().at(0) : emptyString(); }
+    const String& firstAudioDeviceUID() const { return !audioDeviceUIDs().isEmpty() ? audioDeviceUIDs().at(0) : emptyString(); }
 
 private:
     UserMediaRequest(ScriptExecutionContext*, UserMediaController*, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints, MediaDevices::Promise&&);
@@ -94,6 +97,9 @@
     Vector<String> m_videoDeviceUIDs;
     Vector<String> m_audioDeviceUIDs;
     
+    String m_chosenVideoDeviceUID;
+    String m_chosenAudioDeviceUID;
+    
     UserMediaController* m_controller;
 
     MediaDevices::Promise m_promise;

Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h (188384 => 188385)


--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h	2015-08-13 17:33:43 UTC (rev 188385)
@@ -50,7 +50,7 @@
 public:
     virtual ~RealtimeMediaSourceCenter();
 
-    static RealtimeMediaSourceCenter& singleton();
+    WEBCORE_EXPORT static RealtimeMediaSourceCenter& singleton();
     static void setSharedStreamCenter(RealtimeMediaSourceCenter*);
 
     virtual void validateRequestConstraints(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints) = 0;

Modified: trunk/Source/WebCore/platform/mock/UserMediaClientMock.h (188384 => 188385)


--- trunk/Source/WebCore/platform/mock/UserMediaClientMock.h	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Source/WebCore/platform/mock/UserMediaClientMock.h	2015-08-13 17:33:43 UTC (rev 188385)
@@ -45,7 +45,7 @@
     void fire() override
     {
         if (m_requestSuccess)
-            m_request->userMediaAccessGranted();
+            m_request->userMediaAccessGranted(m_request->videoDeviceUIDs().at(0), m_request->audioDeviceUIDs().at(0));
         else
             m_request->userMediaAccessDenied();
     }

Modified: trunk/Source/WebKit/mac/ChangeLog (188384 => 188385)


--- trunk/Source/WebKit/mac/ChangeLog	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Source/WebKit/mac/ChangeLog	2015-08-13 17:33:43 UTC (rev 188385)
@@ -1,3 +1,16 @@
+2015-08-13  Matthew Daiter  <mdai...@apple.com>
+
+        Linking device query ability from WebKit2 to clients
+        https://bugs.webkit.org/show_bug.cgi?id=147263
+        <rdar://problem/21983345>
+
+        Reviewed by Jer Noble.
+
+        * WebCoreSupport/WebUserMediaClient.mm:
+        (-[WebUserMediaPolicyListener allow]):
+        (-[WebUserMediaPolicyListener allowDeviceWithVideoUID:andAudioUID:]):
+
+
 2015-08-10  Chris Dumez  <cdu...@apple.com>
 
         Align WebKit1's PageCache size with WebKit2's

Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebUserMediaClient.mm (188384 => 188385)


--- trunk/Source/WebKit/mac/WebCoreSupport/WebUserMediaClient.mm	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebUserMediaClient.mm	2015-08-13 17:33:43 UTC (rev 188385)
@@ -47,7 +47,7 @@
 }
 - (id)initWithUserMediaRequest:(PassRefPtr<UserMediaRequest>)request;
 - (void)cancelRequest;
-- (void)allow;
+- (void)allowDeviceWithVideoUID:(const String&)videoUID andAudioUID:(const String&)audioUID;
 - (void)deny;
 @end
 
@@ -152,8 +152,23 @@
 #if ENABLE(MEDIA_STREAM)
     if (!_request)
         return;
+    
+    const String& videoUID = _request->firstVideoDeviceUID();
+    const String& audioUID = _request->firstAudioDeviceUID();
+    
+    _request->userMediaAccessGranted(videoUID, audioUID);
+    RemoveRequestFromMap(_request.get());
+#endif
+}
 
-    _request->userMediaAccessGranted();
+- (void)allowDeviceWithVideoUID:(const String&)videoUID andAudioUID:(const String&)audioUID
+{
+#if ENABLE(MEDIA_STREAM)
+    if (!_request)
+        return;
+    
+    _request->userMediaAccessGranted(videoUID, audioUID);
+    
     RemoveRequestFromMap(_request.get());
 #endif
 }

Modified: trunk/Source/WebKit2/ChangeLog (188384 => 188385)


--- trunk/Source/WebKit2/ChangeLog	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Source/WebKit2/ChangeLog	2015-08-13 17:33:43 UTC (rev 188385)
@@ -1,3 +1,30 @@
+2015-08-13  Matthew Daiter  <mdai...@apple.com>
+
+        Linking device query ability from WebKit2 to clients
+        https://bugs.webkit.org/show_bug.cgi?id=147263
+        <rdar://problem/21983345>
+
+        Reviewed by Jer Noble.
+
+        * Platform/mac/LayerHostingContext.mm:
+        (WebKit::LayerHostingContext::setColorMatchUntaggedContent):
+        (WebKit::LayerHostingContext::colorMatchUntaggedContent):
+        * UIProcess/API/C/WKUserMediaPermissionRequest.cpp:
+        (WKUserMediaPermissionRequestAllow):
+        (WKUserMediaPermissionRequestDeviceNamesVideo):
+        (WKUserMediaPermissionRequestDeviceNamesAudio):
+        * UIProcess/API/C/WKUserMediaPermissionRequest.h:
+        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
+        (WebKit::UserMediaPermissionRequestManagerProxy::didReceiveUserMediaPermissionDecision): Deleted.
+        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
+        * UIProcess/UserMediaPermissionRequestProxy.cpp:
+        (WebKit::UserMediaPermissionRequestProxy::allow):
+        (WebKit::UserMediaPermissionRequestProxy::deny):
+        * UIProcess/UserMediaPermissionRequestProxy.h:
+        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
+        (WebKit::UserMediaPermissionRequestManager::didReceiveUserMediaPermissionDecision):
+
+
 2015-08-12  Alexey Proskuryakov  <a...@apple.com>
 
         [Mac] WebKit processes should have access to com.apple.nesessionmanager.flow-divert-token

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKUserMediaPermissionRequest.cpp (188384 => 188385)


--- trunk/Source/WebKit2/UIProcess/API/C/WKUserMediaPermissionRequest.cpp	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKUserMediaPermissionRequest.cpp	2015-08-13 17:33:43 UTC (rev 188385)
@@ -21,6 +21,9 @@
 
 #include "UserMediaPermissionRequestProxy.h"
 #include "WKAPICast.h"
+#include "WKArray.h"
+#include "WKMutableArray.h"
+#include "WKString.h"
 
 using namespace WebKit;
 
@@ -29,12 +32,50 @@
     return toAPI(UserMediaPermissionRequestProxy::APIType);
 }
 
-void WKUserMediaPermissionRequestAllow(WKUserMediaPermissionRequestRef userMediaPermissionRequestRef)
+
+void WKUserMediaPermissionRequestAllowBest(WKUserMediaPermissionRequestRef userMediaPermissionRequestRef)
 {
-    toImpl(userMediaPermissionRequestRef)->allow();
+    const String& videoDevice = toImpl(userMediaPermissionRequestRef)->firstVideoDeviceUID();
+    const String& audioDevice = toImpl(userMediaPermissionRequestRef)->firstAudioDeviceUID();
+    toImpl(userMediaPermissionRequestRef)->allow(videoDevice, audioDevice);
 }
 
+void WKUserMediaPermissionRequestAllow(WKUserMediaPermissionRequestRef userMediaPermissionRequestRef, WKStringRef videoDeviceUID, WKStringRef audioDeviceUID)
+{
+    toImpl(userMediaPermissionRequestRef)->allow(toWTFString(videoDeviceUID), toWTFString(audioDeviceUID));
+}
+
 void WKUserMediaPermissionRequestDeny(WKUserMediaPermissionRequestRef userMediaPermissionRequestRef)
 {
     toImpl(userMediaPermissionRequestRef)->deny();
 }
+
+WKArrayRef WKUserMediaPermissionRequestDeviceNamesVideo(WKUserMediaPermissionRequestRef userMediaPermissionRef)
+{
+    WKMutableArrayRef array = WKMutableArrayRef();
+    for (auto& name : toImpl(userMediaPermissionRef)->videoDeviceUIDs()) {
+        String deviceName = toImpl(userMediaPermissionRef)->getDeviceNameForUID(name, WebCore::RealtimeMediaSource::Type::Video);
+        WKArrayAppendItem(array, toAPI(API::String::create(deviceName).ptr()));
+    }
+    return array;
+}
+
+WKArrayRef WKUserMediaPermissionRequestDeviceNamesAudio(WKUserMediaPermissionRequestRef userMediaPermissionRef)
+{
+    WKMutableArrayRef array = WKMutableArrayRef();
+    for (auto& name : toImpl(userMediaPermissionRef)->audioDeviceUIDs()) {
+        String deviceName = toImpl(userMediaPermissionRef)->getDeviceNameForUID(name, WebCore::RealtimeMediaSource::Type::Audio);
+        WKArrayAppendItem(array, toAPI(API::String::create(deviceName).ptr()));
+    }
+    return array;
+}
+
+WKStringRef WKUserMediaPermissionRequestFirstVideoDeviceUID(WKUserMediaPermissionRequestRef userMediaPermissionRef)
+{
+    return !toImpl(userMediaPermissionRef)->videoDeviceUIDs().isEmpty() ? reinterpret_cast<WKStringRef>(WKArrayGetItemAtIndex(WKUserMediaPermissionRequestDeviceNamesVideo(userMediaPermissionRef), 0)) : reinterpret_cast<WKStringRef>(WKStringCreateWithUTF8CString(""));
+}
+
+WKStringRef WKUserMediaPermissionRequestFirstAudioDeviceUID(WKUserMediaPermissionRequestRef userMediaPermissionRef)
+{
+    return !toImpl(userMediaPermissionRef)->audioDeviceUIDs().isEmpty() ? reinterpret_cast<WKStringRef>(WKArrayGetItemAtIndex(WKUserMediaPermissionRequestDeviceNamesAudio(userMediaPermissionRef), 0)) : reinterpret_cast<WKStringRef>(WKStringCreateWithUTF8CString(""));
+}

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKUserMediaPermissionRequest.h (188384 => 188385)


--- trunk/Source/WebKit2/UIProcess/API/C/WKUserMediaPermissionRequest.h	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKUserMediaPermissionRequest.h	2015-08-13 17:33:43 UTC (rev 188385)
@@ -27,9 +27,16 @@
 
 WK_EXPORT WKTypeID WKUserMediaPermissionRequestGetTypeID();
 
-WK_EXPORT void WKUserMediaPermissionRequestAllow(WKUserMediaPermissionRequestRef);
+WK_EXPORT void WKUserMediaPermissionRequestAllowBest(WKUserMediaPermissionRequestRef);
+WK_EXPORT void WKUserMediaPermissionRequestAllow(WKUserMediaPermissionRequestRef, WKStringRef videoDeviceUID, WKStringRef audioDeviceUID);
 WK_EXPORT void WKUserMediaPermissionRequestDeny(WKUserMediaPermissionRequestRef);
 
+WK_EXPORT WKArrayRef WKUserMediaPermissionRequestDeviceNamesVideo(WKUserMediaPermissionRequestRef);
+WK_EXPORT WKArrayRef WKUserMediaPermissionRequestDeviceNamesAudio(WKUserMediaPermissionRequestRef);
+    
+WK_EXPORT WKStringRef WKUserMediaPermissionRequestFirstVideoDeviceUID(WKUserMediaPermissionRequestRef);
+WK_EXPORT WKStringRef WKUserMediaPermissionRequestFirstAudioDeviceUID(WKUserMediaPermissionRequestRef);
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitUserMediaPermissionRequest.cpp (188384 => 188385)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitUserMediaPermissionRequest.cpp	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitUserMediaPermissionRequest.cpp	2015-08-13 17:33:43 UTC (rev 188385)
@@ -70,9 +70,27 @@
         return;
 
     priv->madeDecision = true;
-    priv->request->allow();
+
+    const String& videoDevice = priv->request->firstVideoDeviceUID();
+    const String& audioDevice = priv->request->firstAudioDeviceUID();
+    
+    priv->request->allow(videoDevice, audioDevice);
 }
 
+static void webkitUserMediaPermissionRequestAllow(WebKitPermissionRequest* request, const char* videoDeviceUID, const char* audioDeviceUID)
+{
+    ASSERT(WEBKIT_IS_USER_MEDIA_PERMISSION_REQUEST(request));
+
+    WebKitUserMediaPermissionRequestPrivate* priv = WEBKIT_USER_MEDIA_PERMISSION_REQUEST(request)->priv;
+
+    // Only one decision at a time.
+    if (priv->madeDecision)
+        return;
+
+    priv->madeDecision = true;
+    priv->request->allow(String::fromUTF8(videoDeviceUID), String::fromUTF8(audioDeviceUID));
+}
+
 static void webkitUserMediaPermissionRequestDeny(WebKitPermissionRequest* request)
 {
     ASSERT(WEBKIT_IS_USER_MEDIA_PERMISSION_REQUEST(request));

Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp (188384 => 188385)


--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp	2015-08-13 17:33:43 UTC (rev 188385)
@@ -45,7 +45,7 @@
     return request.release();
 }
 
-void UserMediaPermissionRequestManagerProxy::didReceiveUserMediaPermissionDecision(uint64_t userMediaID, bool allowed)
+void UserMediaPermissionRequestManagerProxy::didReceiveUserMediaPermissionDecision(uint64_t userMediaID, bool allowed, const String& videoDeviceUID, const String& audioDeviceUID)
 {
     if (!m_page.isValid())
         return;
@@ -54,8 +54,7 @@
         return;
 
 #if ENABLE(MEDIA_STREAM)
-    // FIXME(147062): Need to add in the support for Safari to pass strings given from user's decision on what piece of media to open
-    m_page.process().send(Messages::WebPage::DidReceiveUserMediaPermissionDecision(userMediaID, allowed, "", ""), m_page.pageID());
+    m_page.process().send(Messages::WebPage::DidReceiveUserMediaPermissionDecision(userMediaID, allowed, videoDeviceUID, audioDeviceUID), m_page.pageID());
 #else
     UNUSED_PARAM(allowed);
 #endif

Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.h (188384 => 188385)


--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.h	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.h	2015-08-13 17:33:43 UTC (rev 188385)
@@ -36,7 +36,7 @@
     PassRefPtr<UserMediaPermissionRequestProxy> createRequest(uint64_t userMediaID, bool audio, bool video, const Vector<String>& deviceUIDsVideo, const Vector<String>& deviceUIDsAudio);
 
     // Called by UserMediaPermissionRequestProxy when a decision is made by the user.
-    void didReceiveUserMediaPermissionDecision(uint64_t, bool allow);
+    void didReceiveUserMediaPermissionDecision(uint64_t, bool allow, const String& videoDeviceUID, const String& audioDeviceUID);
 
 private:
     HashMap<uint64_t, RefPtr<UserMediaPermissionRequestProxy>> m_pendingRequests;

Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.cpp (188384 => 188385)


--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.cpp	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.cpp	2015-08-13 17:33:43 UTC (rev 188385)
@@ -36,14 +36,14 @@
 {
 }
 
-void UserMediaPermissionRequestProxy::allow()
+void UserMediaPermissionRequestProxy::allow(const String& videoDeviceUID, const String& audioDeviceUID)
 {
-    m_manager.didReceiveUserMediaPermissionDecision(m_userMediaID, true);
+    m_manager.didReceiveUserMediaPermissionDecision(m_userMediaID, true, videoDeviceUID, audioDeviceUID);
 }
 
 void UserMediaPermissionRequestProxy::deny()
 {
-    m_manager.didReceiveUserMediaPermissionDecision(m_userMediaID, false);
+    m_manager.didReceiveUserMediaPermissionDecision(m_userMediaID, false, emptyString(), emptyString());
 }
 
 void UserMediaPermissionRequestProxy::invalidate()

Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.h (188384 => 188385)


--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.h	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.h	2015-08-13 17:33:43 UTC (rev 188385)
@@ -36,7 +36,7 @@
         return adoptRef(new UserMediaPermissionRequestProxy(manager, userMediaID, requiresAudio, requiresVideo, deviceUIDsVideo, deviceUIDsAudio));
     }
 
-    void allow();
+    void allow(const String& videoDeviceUID, const String& audioDeviceUID);
     void deny();
 
     void invalidate();
@@ -50,6 +50,9 @@
     
     const Vector<String>& videoDeviceUIDs() const { return m_videoDeviceUIDs; }
     const Vector<String>& audioDeviceUIDs() const { return m_audiodeviceUIDs; }
+    
+    const String& firstVideoDeviceUID() const { return !videoDeviceUIDs().isEmpty() ? videoDeviceUIDs().at(0) : emptyString(); }
+    const String& firstAudioDeviceUID() const { return !audioDeviceUIDs().isEmpty() ? audioDeviceUIDs().at(0) : emptyString(); }
 
 private:
     UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy&, uint64_t userMediaID, bool requiresAudio, bool requiresVideo, const Vector<String>& deviceUIDsVideo, const Vector<String>& deviceUIDsAudio);

Modified: trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp (188384 => 188385)


--- trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp	2015-08-13 17:33:43 UTC (rev 188385)
@@ -82,7 +82,7 @@
     m_requestToIDMap.remove(request);
 
     if (allowed)
-        request->userMediaAccessGranted();
+        request->userMediaAccessGranted(deviceUIDVideo, deviceUIDAudio);
     else
         request->userMediaAccessDenied();
 }

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2/UserMedia.cpp (188384 => 188385)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit2/UserMedia.cpp	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2/UserMedia.cpp	2015-08-13 17:33:43 UTC (rev 188385)
@@ -34,7 +34,7 @@
 
 void decidePolicyForUserMediaPermissionRequestCallBack(WKPageRef, WKFrameRef, WKSecurityOriginRef, WKUserMediaPermissionRequestRef permissionRequest, const void* /* clientInfo */)
 {
-    WKUserMediaPermissionRequestAllow(permissionRequest);
+    WKUserMediaPermissionRequestAllowBest(permissionRequest);
     done = true;
 }
 

Modified: trunk/Tools/WebKitTestRunner/TestController.cpp (188384 => 188385)


--- trunk/Tools/WebKitTestRunner/TestController.cpp	2015-08-13 17:25:01 UTC (rev 188384)
+++ trunk/Tools/WebKitTestRunner/TestController.cpp	2015-08-13 17:33:43 UTC (rev 188385)
@@ -31,6 +31,7 @@
 #include "PlatformWebView.h"
 #include "StringFunctions.h"
 #include "TestInvocation.h"
+#include <WebKit/WKArray.h>
 #include <WebKit/WKAuthenticationChallenge.h>
 #include <WebKit/WKAuthenticationDecisionListener.h>
 #include <WebKit/WKContextConfigurationRef.h>
@@ -1492,9 +1493,10 @@
         return;
 
     for (auto& request : m_userMediaPermissionRequests) {
-        if (m_isUserMediaPermissionAllowed)
-            WKUserMediaPermissionRequestAllow(request.get());
-        else
+        if (m_isUserMediaPermissionAllowed) {
+            if (WKArrayGetSize(WKUserMediaPermissionRequestDeviceNamesVideo(request.get())) || WKArrayGetSize(WKUserMediaPermissionRequestDeviceNamesAudio(request.get())))
+                WKUserMediaPermissionRequestAllow(request.get(), WKUserMediaPermissionRequestFirstVideoDeviceUID(request.get()), WKUserMediaPermissionRequestFirstAudioDeviceUID(request.get()));
+        } else
             WKUserMediaPermissionRequestDeny(request.get());
     }
     m_userMediaPermissionRequests.clear();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to