Changeset 188385 in webkit


Ignore:
Timestamp:
Aug 13, 2015 10:33:43 AM (9 years ago)
Author:
mdaiter@apple.com
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):

Location:
trunk
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r188379 r188385  
     12015-08-13  Matthew Daiter  <mdaiter@apple.com>
     2
     3        UserMediaRequest should supply IDs of devices selected by user
     4        https://bugs.webkit.org/show_bug.cgi?id=147263
     5        <rdar://problem/21983345>
     6
     7        Reviewed by Jer Noble.
     8
     9        * Modules/mediastream/UserMediaRequest.cpp:
     10        (WebCore::UserMediaRequest::userMediaAccessGranted):
     11        * Modules/mediastream/UserMediaRequest.h:
     12        * platform/mock/UserMediaClientMock.h:
     13
    1142015-08-12  Carlos Garcia Campos  <cgarcia@igalia.com>
    215
  • trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp

    r188356 r188385  
    144144}
    145145
    146 void UserMediaRequest::userMediaAccessGranted()
    147 {
     146void UserMediaRequest::userMediaAccessGranted(const String& videoDeviceUID, const String& audioDeviceUID)
     147{
     148    m_chosenVideoDeviceUID = videoDeviceUID;
     149    m_chosenAudioDeviceUID = audioDeviceUID;
    148150    RefPtr<UserMediaRequest> protectedThis(this);
    149151    callOnMainThread([protectedThis] {
  • trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h

    r188356 r188385  
    6767
    6868    void start();
    69     WEBCORE_EXPORT void userMediaAccessGranted();
     69    WEBCORE_EXPORT void userMediaAccessGranted(const String& videoDeviceUID, const String& audioDeviceUID);
    7070    WEBCORE_EXPORT void userMediaAccessDenied();
    7171
     
    7575    const Vector<String>& videoDeviceUIDs() const { return m_videoDeviceUIDs; }
    7676    const Vector<String>& audioDeviceUIDs() const { return m_audioDeviceUIDs; }
     77   
     78    const String& firstVideoDeviceUID() const { return !videoDeviceUIDs().isEmpty() ? videoDeviceUIDs().at(0) : emptyString(); }
     79    const String& firstAudioDeviceUID() const { return !audioDeviceUIDs().isEmpty() ? audioDeviceUIDs().at(0) : emptyString(); }
    7780
    7881private:
     
    9598    Vector<String> m_audioDeviceUIDs;
    9699   
     100    String m_chosenVideoDeviceUID;
     101    String m_chosenAudioDeviceUID;
     102   
    97103    UserMediaController* m_controller;
    98104
  • trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h

    r187282 r188385  
    5151    virtual ~RealtimeMediaSourceCenter();
    5252
    53     static RealtimeMediaSourceCenter& singleton();
     53    WEBCORE_EXPORT static RealtimeMediaSourceCenter& singleton();
    5454    static void setSharedStreamCenter(RealtimeMediaSourceCenter*);
    5555
  • trunk/Source/WebCore/platform/mock/UserMediaClientMock.h

    r177259 r188385  
    4646    {
    4747        if (m_requestSuccess)
    48             m_request->userMediaAccessGranted();
     48            m_request->userMediaAccessGranted(m_request->videoDeviceUIDs().at(0), m_request->audioDeviceUIDs().at(0));
    4949        else
    5050            m_request->userMediaAccessDenied();
  • trunk/Source/WebKit/mac/ChangeLog

    r188217 r188385  
     12015-08-13  Matthew Daiter  <mdaiter@apple.com>
     2
     3        Linking device query ability from WebKit2 to clients
     4        https://bugs.webkit.org/show_bug.cgi?id=147263
     5        <rdar://problem/21983345>
     6
     7        Reviewed by Jer Noble.
     8
     9        * WebCoreSupport/WebUserMediaClient.mm:
     10        (-[WebUserMediaPolicyListener allow]):
     11        (-[WebUserMediaPolicyListener allowDeviceWithVideoUID:andAudioUID:]):
     12
     13
    1142015-08-10  Chris Dumez  <cdumez@apple.com>
    215
  • trunk/Source/WebKit/mac/WebCoreSupport/WebUserMediaClient.mm

    r186279 r188385  
    4848- (id)initWithUserMediaRequest:(PassRefPtr<UserMediaRequest>)request;
    4949- (void)cancelRequest;
    50 - (void)allow;
     50- (void)allowDeviceWithVideoUID:(const String&)videoUID andAudioUID:(const String&)audioUID;
    5151- (void)deny;
    5252@end
     
    153153    if (!_request)
    154154        return;
    155 
    156     _request->userMediaAccessGranted();
     155   
     156    const String& videoUID = _request->firstVideoDeviceUID();
     157    const String& audioUID = _request->firstAudioDeviceUID();
     158   
     159    _request->userMediaAccessGranted(videoUID, audioUID);
     160    RemoveRequestFromMap(_request.get());
     161#endif
     162}
     163
     164- (void)allowDeviceWithVideoUID:(const String&)videoUID andAudioUID:(const String&)audioUID
     165{
     166#if ENABLE(MEDIA_STREAM)
     167    if (!_request)
     168        return;
     169   
     170    _request->userMediaAccessGranted(videoUID, audioUID);
     171   
    157172    RemoveRequestFromMap(_request.get());
    158173#endif
  • trunk/Source/WebKit2/ChangeLog

    r188365 r188385  
     12015-08-13  Matthew Daiter  <mdaiter@apple.com>
     2
     3        Linking device query ability from WebKit2 to clients
     4        https://bugs.webkit.org/show_bug.cgi?id=147263
     5        <rdar://problem/21983345>
     6
     7        Reviewed by Jer Noble.
     8
     9        * Platform/mac/LayerHostingContext.mm:
     10        (WebKit::LayerHostingContext::setColorMatchUntaggedContent):
     11        (WebKit::LayerHostingContext::colorMatchUntaggedContent):
     12        * UIProcess/API/C/WKUserMediaPermissionRequest.cpp:
     13        (WKUserMediaPermissionRequestAllow):
     14        (WKUserMediaPermissionRequestDeviceNamesVideo):
     15        (WKUserMediaPermissionRequestDeviceNamesAudio):
     16        * UIProcess/API/C/WKUserMediaPermissionRequest.h:
     17        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
     18        (WebKit::UserMediaPermissionRequestManagerProxy::didReceiveUserMediaPermissionDecision): Deleted.
     19        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
     20        * UIProcess/UserMediaPermissionRequestProxy.cpp:
     21        (WebKit::UserMediaPermissionRequestProxy::allow):
     22        (WebKit::UserMediaPermissionRequestProxy::deny):
     23        * UIProcess/UserMediaPermissionRequestProxy.h:
     24        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
     25        (WebKit::UserMediaPermissionRequestManager::didReceiveUserMediaPermissionDecision):
     26
     27
    1282015-08-12  Alexey Proskuryakov  <ap@apple.com>
    229
  • trunk/Source/WebKit2/UIProcess/API/C/WKUserMediaPermissionRequest.cpp

    r176011 r188385  
    2222#include "UserMediaPermissionRequestProxy.h"
    2323#include "WKAPICast.h"
     24#include "WKArray.h"
     25#include "WKMutableArray.h"
     26#include "WKString.h"
    2427
    2528using namespace WebKit;
     
    3033}
    3134
    32 void WKUserMediaPermissionRequestAllow(WKUserMediaPermissionRequestRef userMediaPermissionRequestRef)
     35
     36void WKUserMediaPermissionRequestAllowBest(WKUserMediaPermissionRequestRef userMediaPermissionRequestRef)
    3337{
    34     toImpl(userMediaPermissionRequestRef)->allow();
     38    const String& videoDevice = toImpl(userMediaPermissionRequestRef)->firstVideoDeviceUID();
     39    const String& audioDevice = toImpl(userMediaPermissionRequestRef)->firstAudioDeviceUID();
     40    toImpl(userMediaPermissionRequestRef)->allow(videoDevice, audioDevice);
     41}
     42
     43void WKUserMediaPermissionRequestAllow(WKUserMediaPermissionRequestRef userMediaPermissionRequestRef, WKStringRef videoDeviceUID, WKStringRef audioDeviceUID)
     44{
     45    toImpl(userMediaPermissionRequestRef)->allow(toWTFString(videoDeviceUID), toWTFString(audioDeviceUID));
    3546}
    3647
     
    3950    toImpl(userMediaPermissionRequestRef)->deny();
    4051}
     52
     53WKArrayRef WKUserMediaPermissionRequestDeviceNamesVideo(WKUserMediaPermissionRequestRef userMediaPermissionRef)
     54{
     55    WKMutableArrayRef array = WKMutableArrayRef();
     56    for (auto& name : toImpl(userMediaPermissionRef)->videoDeviceUIDs()) {
     57        String deviceName = toImpl(userMediaPermissionRef)->getDeviceNameForUID(name, WebCore::RealtimeMediaSource::Type::Video);
     58        WKArrayAppendItem(array, toAPI(API::String::create(deviceName).ptr()));
     59    }
     60    return array;
     61}
     62
     63WKArrayRef WKUserMediaPermissionRequestDeviceNamesAudio(WKUserMediaPermissionRequestRef userMediaPermissionRef)
     64{
     65    WKMutableArrayRef array = WKMutableArrayRef();
     66    for (auto& name : toImpl(userMediaPermissionRef)->audioDeviceUIDs()) {
     67        String deviceName = toImpl(userMediaPermissionRef)->getDeviceNameForUID(name, WebCore::RealtimeMediaSource::Type::Audio);
     68        WKArrayAppendItem(array, toAPI(API::String::create(deviceName).ptr()));
     69    }
     70    return array;
     71}
     72
     73WKStringRef WKUserMediaPermissionRequestFirstVideoDeviceUID(WKUserMediaPermissionRequestRef userMediaPermissionRef)
     74{
     75    return !toImpl(userMediaPermissionRef)->videoDeviceUIDs().isEmpty() ? reinterpret_cast<WKStringRef>(WKArrayGetItemAtIndex(WKUserMediaPermissionRequestDeviceNamesVideo(userMediaPermissionRef), 0)) : reinterpret_cast<WKStringRef>(WKStringCreateWithUTF8CString(""));
     76}
     77
     78WKStringRef WKUserMediaPermissionRequestFirstAudioDeviceUID(WKUserMediaPermissionRequestRef userMediaPermissionRef)
     79{
     80    return !toImpl(userMediaPermissionRef)->audioDeviceUIDs().isEmpty() ? reinterpret_cast<WKStringRef>(WKArrayGetItemAtIndex(WKUserMediaPermissionRequestDeviceNamesAudio(userMediaPermissionRef), 0)) : reinterpret_cast<WKStringRef>(WKStringCreateWithUTF8CString(""));
     81}
  • trunk/Source/WebKit2/UIProcess/API/C/WKUserMediaPermissionRequest.h

    r176011 r188385  
    2828WK_EXPORT WKTypeID WKUserMediaPermissionRequestGetTypeID();
    2929
    30 WK_EXPORT void WKUserMediaPermissionRequestAllow(WKUserMediaPermissionRequestRef);
     30WK_EXPORT void WKUserMediaPermissionRequestAllowBest(WKUserMediaPermissionRequestRef);
     31WK_EXPORT void WKUserMediaPermissionRequestAllow(WKUserMediaPermissionRequestRef, WKStringRef videoDeviceUID, WKStringRef audioDeviceUID);
    3132WK_EXPORT void WKUserMediaPermissionRequestDeny(WKUserMediaPermissionRequestRef);
     33
     34WK_EXPORT WKArrayRef WKUserMediaPermissionRequestDeviceNamesVideo(WKUserMediaPermissionRequestRef);
     35WK_EXPORT WKArrayRef WKUserMediaPermissionRequestDeviceNamesAudio(WKUserMediaPermissionRequestRef);
     36   
     37WK_EXPORT WKStringRef WKUserMediaPermissionRequestFirstVideoDeviceUID(WKUserMediaPermissionRequestRef);
     38WK_EXPORT WKStringRef WKUserMediaPermissionRequestFirstAudioDeviceUID(WKUserMediaPermissionRequestRef);
    3239
    3340#ifdef __cplusplus
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitUserMediaPermissionRequest.cpp

    r188121 r188385  
    7171
    7272    priv->madeDecision = true;
    73     priv->request->allow();
     73
     74    const String& videoDevice = priv->request->firstVideoDeviceUID();
     75    const String& audioDevice = priv->request->firstAudioDeviceUID();
     76   
     77    priv->request->allow(videoDevice, audioDevice);
     78}
     79
     80static void webkitUserMediaPermissionRequestAllow(WebKitPermissionRequest* request, const char* videoDeviceUID, const char* audioDeviceUID)
     81{
     82    ASSERT(WEBKIT_IS_USER_MEDIA_PERMISSION_REQUEST(request));
     83
     84    WebKitUserMediaPermissionRequestPrivate* priv = WEBKIT_USER_MEDIA_PERMISSION_REQUEST(request)->priv;
     85
     86    // Only one decision at a time.
     87    if (priv->madeDecision)
     88        return;
     89
     90    priv->madeDecision = true;
     91    priv->request->allow(String::fromUTF8(videoDeviceUID), String::fromUTF8(audioDeviceUID));
    7492}
    7593
  • trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp

    r187258 r188385  
    4646}
    4747
    48 void UserMediaPermissionRequestManagerProxy::didReceiveUserMediaPermissionDecision(uint64_t userMediaID, bool allowed)
     48void UserMediaPermissionRequestManagerProxy::didReceiveUserMediaPermissionDecision(uint64_t userMediaID, bool allowed, const String& videoDeviceUID, const String& audioDeviceUID)
    4949{
    5050    if (!m_page.isValid())
     
    5555
    5656#if ENABLE(MEDIA_STREAM)
    57     // 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
    58     m_page.process().send(Messages::WebPage::DidReceiveUserMediaPermissionDecision(userMediaID, allowed, "", ""), m_page.pageID());
     57    m_page.process().send(Messages::WebPage::DidReceiveUserMediaPermissionDecision(userMediaID, allowed, videoDeviceUID, audioDeviceUID), m_page.pageID());
    5958#else
    6059    UNUSED_PARAM(allowed);
  • trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.h

    r187258 r188385  
    3737
    3838    // Called by UserMediaPermissionRequestProxy when a decision is made by the user.
    39     void didReceiveUserMediaPermissionDecision(uint64_t, bool allow);
     39    void didReceiveUserMediaPermissionDecision(uint64_t, bool allow, const String& videoDeviceUID, const String& audioDeviceUID);
    4040
    4141private:
  • trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.cpp

    r187435 r188385  
    3737}
    3838
    39 void UserMediaPermissionRequestProxy::allow()
     39void UserMediaPermissionRequestProxy::allow(const String& videoDeviceUID, const String& audioDeviceUID)
    4040{
    41     m_manager.didReceiveUserMediaPermissionDecision(m_userMediaID, true);
     41    m_manager.didReceiveUserMediaPermissionDecision(m_userMediaID, true, videoDeviceUID, audioDeviceUID);
    4242}
    4343
    4444void UserMediaPermissionRequestProxy::deny()
    4545{
    46     m_manager.didReceiveUserMediaPermissionDecision(m_userMediaID, false);
     46    m_manager.didReceiveUserMediaPermissionDecision(m_userMediaID, false, emptyString(), emptyString());
    4747}
    4848
  • trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.h

    r187435 r188385  
    3737    }
    3838
    39     void allow();
     39    void allow(const String& videoDeviceUID, const String& audioDeviceUID);
    4040    void deny();
    4141
     
    5151    const Vector<String>& videoDeviceUIDs() const { return m_videoDeviceUIDs; }
    5252    const Vector<String>& audioDeviceUIDs() const { return m_audiodeviceUIDs; }
     53   
     54    const String& firstVideoDeviceUID() const { return !videoDeviceUIDs().isEmpty() ? videoDeviceUIDs().at(0) : emptyString(); }
     55    const String& firstAudioDeviceUID() const { return !audioDeviceUIDs().isEmpty() ? audioDeviceUIDs().at(0) : emptyString(); }
    5356
    5457private:
  • trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp

    r187435 r188385  
    8383
    8484    if (allowed)
    85         request->userMediaAccessGranted();
     85        request->userMediaAccessGranted(deviceUIDVideo, deviceUIDAudio);
    8686    else
    8787        request->userMediaAccessDenied();
  • trunk/Tools/TestWebKitAPI/Tests/WebKit2/UserMedia.cpp

    r186182 r188385  
    3535void decidePolicyForUserMediaPermissionRequestCallBack(WKPageRef, WKFrameRef, WKSecurityOriginRef, WKUserMediaPermissionRequestRef permissionRequest, const void* /* clientInfo */)
    3636{
    37     WKUserMediaPermissionRequestAllow(permissionRequest);
     37    WKUserMediaPermissionRequestAllowBest(permissionRequest);
    3838    done = true;
    3939}
  • trunk/Tools/WebKitTestRunner/TestController.cpp

    r188157 r188385  
    3232#include "StringFunctions.h"
    3333#include "TestInvocation.h"
     34#include <WebKit/WKArray.h>
    3435#include <WebKit/WKAuthenticationChallenge.h>
    3536#include <WebKit/WKAuthenticationDecisionListener.h>
     
    14931494
    14941495    for (auto& request : m_userMediaPermissionRequests) {
    1495         if (m_isUserMediaPermissionAllowed)
    1496             WKUserMediaPermissionRequestAllow(request.get());
    1497         else
     1496        if (m_isUserMediaPermissionAllowed) {
     1497            if (WKArrayGetSize(WKUserMediaPermissionRequestDeviceNamesVideo(request.get())) || WKArrayGetSize(WKUserMediaPermissionRequestDeviceNamesAudio(request.get())))
     1498                WKUserMediaPermissionRequestAllow(request.get(), WKUserMediaPermissionRequestFirstVideoDeviceUID(request.get()), WKUserMediaPermissionRequestFirstAudioDeviceUID(request.get()));
     1499        } else
    14981500            WKUserMediaPermissionRequestDeny(request.get());
    14991501    }
Note: See TracChangeset for help on using the changeset viewer.