Changeset 176011 in webkit


Ignore:
Timestamp:
Nov 12, 2014 12:25:05 AM (9 years ago)
Author:
Philippe Normand
Message:

Patch

Location:
trunk
Files:
32 added
37 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r176004 r176011  
     12014-09-01  Philippe Normand  <pnormand@igalia.com>
     2
     3        [WK2] UserMediaClient support
     4        https://bugs.webkit.org/show_bug.cgi?id=123158
     5
     6        Reviewed by Benjamin Poulain.
     7
     8        Simple UserMedia permission request tests inspired from the
     9        Geolocation test suite.
     10
     11        * fast/mediastream/error-expected.txt: Added.
     12        * fast/mediastream/error.html: Added.
     13        * fast/mediastream/script-tests/error.js: Added.
     14        * fast/mediastream/script-tests/success.js: Added.
     15        * fast/mediastream/success-expected.txt: Added.
     16        * fast/mediastream/success.html: Added.
     17        * fast/mediastream/delayed-permission-allowed-expected.txt: Added.
     18        * fast/mediastream/delayed-permission-allowed.html: Added.
     19        * fast/mediastream/delayed-permission-denied-expected.txt: Added.
     20        * fast/mediastream/delayed-permission-denied.html: Added.
     21        * http/tests/media/media-stream/disconnected-frame-already-expected.txt: Added.
     22        * http/tests/media/media-stream/disconnected-frame-already.html: Added.
     23        * http/tests/media/media-stream/disconnected-frame-expected.txt: Added.
     24        * http/tests/media/media-stream/disconnected-frame-permission-denied-expected.txt: Added.
     25        * http/tests/media/media-stream/disconnected-frame-permission-denied.html: Added.
     26        * http/tests/media/media-stream/disconnected-frame.html: Added.
     27        * http/tests/media/media-stream/resources/disconnected-frame-already-inner1.html: Added.
     28        * http/tests/media/media-stream/resources/disconnected-frame-already-inner2.html: Added.
     29        * http/tests/media/media-stream/resources/disconnected-frame-inner.html: Added.
     30        * platform/gtk/TestExpectations:
     31
    1322014-11-11  Jinwoo Song  <jinwoo7.song@samsung.com>
    233
  • trunk/LayoutTests/platform/gtk/TestExpectations

    r175716 r176011  
    292292
    293293# Mediastream implementation is not complete yet.
    294 webkit.org/b/79203 fast/mediastream [ Skip ]
     294webkit.org/b/79203 fast/mediastream/argument-types.html [ Skip ]
     295webkit.org/b/79203 fast/mediastream/getusermedia.html [ Skip ]
     296webkit.org/b/79203 fast/mediastream/MediaStream-add-ended-tracks.html [ Skip ]
     297webkit.org/b/79203 fast/mediastream/MediaStream-add-remove-tracks.html [ Skip ]
     298webkit.org/b/79203 fast/mediastream/MediaStream-add-tracks-to-inactive-stream.html [ Skip ]
     299webkit.org/b/79203 fast/mediastream/MediaStream-clone.html [ Skip ]
     300webkit.org/b/79203 fast/mediastream/MediaStreamConstructor.html [ Skip ]
     301webkit.org/b/79203 fast/mediastream/MediaStream-construct-with-ended-tracks.html [ Skip ]
     302webkit.org/b/79203 fast/mediastream/MediaStream-getTracks.html [ Skip ]
     303webkit.org/b/79203 fast/mediastream/MediaStream-MediaElement-srcObject.html [ Skip ]
     304webkit.org/b/79203 fast/mediastream/MediaStreamTrackEvent-constructor.html [ Skip ]
     305webkit.org/b/79203 fast/mediastream/MediaStreamTrack-getSources.html [ Skip ]
     306webkit.org/b/79203 fast/mediastream/MediaStreamTrack.html [ Skip ]
     307webkit.org/b/79203 fast/mediastream/MediaStreamTrack-onended.html [ Skip ]
     308webkit.org/b/79203 fast/mediastream/no-interface-object.html [ Skip ]
     309webkit.org/b/79203 fast/mediastream/RTCIceCandidate.html [ Skip ]
     310webkit.org/b/79203 fast/mediastream/RTCPeerConnection-AddRemoveStream.html [ Skip ]
     311webkit.org/b/79203 fast/mediastream/RTCPeerConnection-createAnswer.html [ Skip ]
     312webkit.org/b/79203 fast/mediastream/RTCPeerConnection-createOffer.html [ Skip ]
     313webkit.org/b/79203 fast/mediastream/RTCPeerConnection-datachannel.html [ Skip ]
     314webkit.org/b/79203 fast/mediastream/RTCPeerConnection-dtmf.html [ Skip ]
     315webkit.org/b/79203 fast/mediastream/RTCPeerConnection-events.html [ Skip ]
     316webkit.org/b/79203 fast/mediastream/RTCPeerConnection-getConfiguration.html [ Skip ]
     317webkit.org/b/79203 fast/mediastream/RTCPeerConnection-have-local-offer.html [ Skip ]
     318webkit.org/b/79203 fast/mediastream/RTCPeerConnection-have-local-pranswer.html [ Skip ]
     319webkit.org/b/79203 fast/mediastream/RTCPeerConnection-have-remote-offer.html [ Skip ]
     320webkit.org/b/79203 fast/mediastream/RTCPeerConnection-have-remote-pranswer.html [ Skip ]
     321webkit.org/b/79203 fast/mediastream/RTCPeerConnection.html [ Skip ]
     322webkit.org/b/79203 fast/mediastream/RTCPeerConnection-ice.html [ Skip ]
     323webkit.org/b/79203 fast/mediastream/RTCPeerConnection-localDescription.html [ Skip ]
     324webkit.org/b/79203 fast/mediastream/RTCPeerConnection-onnegotiationneeded.html [ Skip ]
     325webkit.org/b/79203 fast/mediastream/RTCPeerConnection-remoteDescription.html [ Skip ]
     326webkit.org/b/79203 fast/mediastream/RTCPeerConnection-stable.html [ Skip ]
     327webkit.org/b/79203 fast/mediastream/RTCPeerConnection-state.html [ Skip ]
     328webkit.org/b/79203 fast/mediastream/RTCPeerConnection-stats.html [ Skip ]
     329webkit.org/b/79203 fast/mediastream/RTCPeerConnection-statsSelector.html [ Skip ]
     330webkit.org/b/79203 fast/mediastream/RTCSessionDescription.html [ Skip ]
    295331webkit.org/b/79203 fast/events/constructors/media-stream-event-constructor.html [ Skip ]
    296332webkit.org/b/79203 webaudio/mediastreamaudiodestinationnode.html [ Skip ]
  • trunk/LayoutTests/platform/mac/TestExpectations

    r175990 r176011  
    158158fast/mediastream
    159159fast/events/constructors/media-stream-event-constructor.html
     160http/tests/media/media-stream
    160161
    161162# Asserts in debug.
  • trunk/Source/WebCore/ChangeLog

    r176010 r176011  
     12014-09-01  Philippe Normand  <pnormand@igalia.com>
     2
     3        [WK2] UserMediaClient support
     4        https://bugs.webkit.org/show_bug.cgi?id=123158
     5
     6        Reviewed by Benjamin Poulain.
     7
     8        Added document and frame accessors, needed by the
     9        UserMediaRequestManager of the WebProcess. Also added two methods
     10        used by the permission request manager to know if access to audio
     11        or video devices is requested.
     12
     13        Tests: fast/mediastream/error.html
     14               fast/mediastream/success.html
     15               fast/mediastream/delayed-permission-allowed.html
     16               fast/mediastream/delayed-permission-denied.html
     17               http/tests/media/media-stream/disconnected-frame-already.html
     18               http/tests/media/media-stream/disconnected-frame-permission-denied.html
     19               http/tests/media/media-stream/disconnected-frame.html
     20
     21        * Modules/mediastream/UserMediaRequest.cpp:
     22        (WebCore::UserMediaRequest::document):
     23        (WebCore::UserMediaRequest::frame):
     24        * Modules/mediastream/UserMediaRequest.h:
     25        (WebCore::UserMediaRequest::requiresAudio):
     26        (WebCore::UserMediaRequest::requiresVideo):
     27
    1282014-11-12  Gyuyoung Kim  <gyuyoung.kim@samsung.com>
    229
  • trunk/Source/WebCore/Modules/mediastream/UserMediaClient.h

    r172849 r176011  
    4545    virtual void pageDestroyed() = 0;
    4646
    47     virtual void requestPermission(PassRefPtr<UserMediaRequest>) = 0;
    48     virtual void cancelRequest(UserMediaRequest*) = 0;
     47    virtual void requestPermission(PassRef<UserMediaRequest>) = 0;
     48    virtual void cancelRequest(UserMediaRequest&) = 0;
    4949
    5050protected:
  • trunk/Source/WebCore/Modules/mediastream/UserMediaController.h

    r168166 r176011  
    4040
    4141    UserMediaClient* client() const { return m_client; }
    42     void requestPermission(PassRefPtr<UserMediaRequest>);
    43     void cancelRequest(UserMediaRequest*);
     42    void requestPermission(PassRef<UserMediaRequest>);
     43    void cancelRequest(UserMediaRequest&);
    4444
    4545    static const char* supplementName();
     
    5050};
    5151
    52 inline void UserMediaController::requestPermission(PassRefPtr<UserMediaRequest> request)
     52inline void UserMediaController::requestPermission(PassRef<UserMediaRequest> request)
    5353{
    54     m_client->requestPermission(request);
     54    m_client->requestPermission(WTF::move(request));
    5555}
    5656
    57 inline void UserMediaController::cancelRequest(UserMediaRequest* request)
     57inline void UserMediaController::cancelRequest(UserMediaRequest& request)
    5858{
    5959    m_client->cancelRequest(request);
  • trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp

    r175265 r176011  
    4141#include "Document.h"
    4242#include "ExceptionCode.h"
     43#include "Frame.h"
    4344#include "MediaConstraintsImpl.h"
    4445#include "MediaStream.h"
     
    124125        // 2 - The constraints are valid, ask the user for access to media.
    125126        if (UserMediaController* controller = protectedThis->m_controller)
    126             controller->requestPermission(protectedThis.get());
     127            controller->requestPermission(*protectedThis.get());
    127128    });
    128129}
     
    202203
    203204    if (m_controller) {
    204         m_controller->cancelRequest(this);
     205        m_controller->cancelRequest(*this);
    205206        m_controller = 0;
    206207    }
  • trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h

    r175265 r176011  
    4949class Dictionary;
    5050class Document;
     51class Frame;
    5152class MediaConstraints;
    5253class MediaStreamPrivate;
     
    6667    WEBCORE_EXPORT void userMediaAccessGranted();
    6768    WEBCORE_EXPORT void userMediaAccessDenied();
     69
     70    bool requiresAudio() const { return m_audioConstraints; }
     71    bool requiresVideo() const { return m_videoConstraints; }
    6872
    6973private:
  • trunk/Source/WebCore/platform/mock/UserMediaClientMock.h

    r164655 r176011  
    3737class UserMediaClientRequestNotifier : public MockNotifier {
    3838public:
    39     UserMediaClientRequestNotifier(PassRefPtr<UserMediaRequest> request, bool requestSuccess)
    40         : m_request(request)
     39    UserMediaClientRequestNotifier(PassRef<UserMediaRequest> request, bool requestSuccess)
     40        : m_request(WTF::move(request))
    4141        , m_requestSuccess(requestSuccess)
    4242    {
     
    5252
    5353private:
    54     RefPtr<UserMediaRequest> m_request;
     54    Ref<UserMediaRequest> m_request;
    5555    bool m_requestSuccess;
    5656};
     
    6161    virtual void pageDestroyed() override { }
    6262
    63     virtual void requestPermission(PassRefPtr<UserMediaRequest> request) override
     63    virtual void requestPermission(PassRef<UserMediaRequest> request) override
    6464    {
    65         RefPtr<UserMediaClientRequestNotifier> notifier = adoptRef(new UserMediaClientRequestNotifier(request, true));
     65        RefPtr<UserMediaClientRequestNotifier> notifier = adoptRef(new UserMediaClientRequestNotifier(WTF::move(request), true));
    6666        m_timerEvents.append(adoptRef(new TimerEvent(this, notifier)));
    6767    }
    6868
    69     virtual void cancelRequest(UserMediaRequest* request) override
     69    virtual void cancelRequest(UserMediaRequest& request) override
    7070    {
    7171        RefPtr<UserMediaClientRequestNotifier> notifier = adoptRef(new UserMediaClientRequestNotifier(request, false));
  • trunk/Source/WebKit2/CMakeLists.txt

    r175564 r176011  
    5050    "${WEBKIT2_DIR}/WebProcess/Launching"
    5151    "${WEBKIT2_DIR}/WebProcess/MediaCache"
     52    "${WEBKIT2_DIR}/WebProcess/MediaStream"
    5253    "${WEBKIT2_DIR}/WebProcess/Network"
    5354    "${WEBKIT2_DIR}/WebProcess/Notifications"
     
    301302    UIProcess/StatisticsRequest.cpp
    302303    UIProcess/TextCheckerCompletion.cpp
     304    UIProcess/UserMediaPermissionRequestManagerProxy.cpp
     305    UIProcess/UserMediaPermissionRequestProxy.cpp
    303306    UIProcess/VisitedLinkProvider.cpp
    304307    UIProcess/WebApplicationCacheManagerProxy.cpp
     
    389392    UIProcess/API/C/WKSessionStateRef.cpp
    390393    UIProcess/API/C/WKTextChecker.cpp
     394    UIProcess/API/C/WKUserMediaPermissionRequest.cpp
    391395    UIProcess/API/C/WKVibration.cpp
    392396    UIProcess/API/C/WKViewportAttributes.cpp
     
    484488
    485489    WebProcess/MediaCache/WebMediaCacheManager.cpp
     490
     491    WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp
    486492
    487493    WebProcess/Network/NetworkProcessConnection.cpp
     
    536542    WebProcess/WebCoreSupport/WebProgressTrackerClient.cpp
    537543    WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp
     544    WebProcess/WebCoreSupport/WebUserMediaClient.cpp
    538545    WebProcess/WebCoreSupport/WebVibrationClient.cpp
    539546
  • trunk/Source/WebKit2/ChangeLog

    r175992 r176011  
     12014-09-01  Philippe Normand  <pnormand@igalia.com>
     2
     3        [WK2] UserMediaClient support
     4        https://bugs.webkit.org/show_bug.cgi?id=123158
     5
     6        Reviewed by Benjamin Poulain.
     7
     8        Support for UserMediaPermissionRequest in WebKit2. It's
     9        implemented similarily to the GeolocationPermissionRequest
     10        support. When the WebPage requires this permission it sends a
     11        message to the UI process which at some point grants or denies the
     12        permission and sends the result back to the WebProcess.
     13
     14        * CMakeLists.txt: Generic CMake support for new files.
     15        * Shared/API/c/WKBase.h: New type for UserMediaPermissionRequest.
     16        * Shared/APIObject.h: Ditto.
     17        * UIProcess/API/C/WKAPICast.h: PermissionRequest API mapping.
     18        * UIProcess/API/APIUIClient.h: New decidePolicy handler for UserMediaPermissionRequest.
     19        (API::UIClient::decidePolicyForUserMediaPermissionRequest):
     20        * UIProcess/API/C/WKPage.cpp: Ditto.
     21        (WKPageSetPageUIClient):
     22        * UIProcess/API/C/WKPageUIClient.h: WKPageUIClient version bump to
     23        5, including the new decidePolicyForUserMediaPermissionRequest member.
     24        * UIProcess/API/C/WKUserMediaPermissionRequest.cpp: Added, C API
     25        implementation of the UserMediaPermissionRequest.
     26        (WKUserMediaPermissionRequestGetTypeID):
     27        (WKUserMediaPermissionRequestAllow):
     28        (WKUserMediaPermissionRequestDeny):
     29        * UIProcess/API/C/WKUserMediaPermissionRequest.h: Added.
     30        * UIProcess/API/C/WebKit2_C.h:
     31        * UIProcess/UserMediaPermissionRequestManagerProxy.h: Added.
     32        * UIProcess/UserMediaPermissionRequestProxy.cpp: Added, proxy
     33        object for the UserMediaPermissionRequestType.
     34        (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
     35        (WebKit::UserMediaPermissionRequestProxy::allow):
     36        (WebKit::UserMediaPermissionRequestProxy::deny):
     37        (WebKit::UserMediaPermissionRequestProxy::invalidate):
     38        * UIProcess/UserMediaPermissionRequestProxy.h: Added.
     39        (WebKit::UserMediaPermissionRequestProxy::create):
     40        (WebKit::UserMediaPermissionRequestProxy::mediaParameters):
     41        * UIProcess/WebPageProxy.cpp:
     42        (WebKit::WebPageProxy::WebPageProxy):
     43        (WebKit::WebPageProxy::requestUserMediaPermissionForFrame): Defer
     44        UserPermissionRequest to the UIClient.
     45        * UIProcess/WebPageProxy.h:
     46        * UIProcess/WebPageProxy.messages.in: New message to handle UserMediaPermissionRequests.
     47        * WebKit2.xcodeproj/project.pbxproj:
     48        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp: Added,
     49        WebProcess side of the UserRequestManager, keeping track of each
     50        permission request.
     51        (WebKit::generateRequestID):
     52        (WebKit::UserMediaPermissionRequestManager::UserMediaPermissionRequestManager):
     53        (WebKit::UserMediaPermissionRequestManager::startRequest):
     54        (WebKit::UserMediaPermissionRequestManager::cancelRequest):
     55        (WebKit::UserMediaPermissionRequestManager::didReceiveUserMediaPermissionDecision):
     56        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h: Added.
     57        * WebProcess/WebCoreSupport/WebUserMediaClient.cpp: Added,
     58        WebProcess implementation of the WebCore::UserMediaClient.
     59        (WebKit::WebUserMediaClient::WebUserMediaClient):
     60        (WebKit::WebUserMediaClient::pageDestroyed):
     61        (WebKit::WebUserMediaClient::requestPermission):
     62        (WebKit::WebUserMediaClient::cancelRequest):
     63        * WebProcess/WebCoreSupport/WebUserMediaClient.h: Added.
     64        * WebProcess/WebPage/WebPage.cpp:
     65        (WebKit::WebPage::WebPage): Create the
     66        UserMediaPermissionRequestManager and register the UserMediaClient
     67        to the page.
     68        (WebKit::WebPage::didReceiveUserMediaPermissionDecision): Dispatch
     69        decision to manager.
     70        * WebProcess/WebPage/WebPage.h:
     71        (WebKit::WebPage::userMediaPermissionRequestManager):
     72        * WebProcess/WebPage/WebPage.messages.in: New Message to handle
     73        permission decision result from the UI process.
     74
    1752014-11-11  Tim Horton  <timothy_horton@apple.com>
    276
  • trunk/Source/WebKit2/Shared/API/c/WKBase.h

    r170219 r176011  
    128128typedef const struct OpaqueWKSession* WKSessionRef;
    129129typedef const struct OpaqueWKSessionState* WKSessionStateRef;
     130typedef const struct OpaqueWKUserMediaPermissionRequest* WKUserMediaPermissionRequestRef;
    130131typedef const struct OpaqueWKVibration* WKVibrationRef;
    131132typedef const struct OpaqueWKViewportAttributes* WKViewportAttributesRef;
  • trunk/Source/WebKit2/Shared/APIObject.h

    r173929 r176011  
    133133        Session,
    134134        TextChecker,
     135        UserMediaPermissionRequest,
    135136        Vibration,
    136137        ViewportAttributes,
  • trunk/Source/WebKit2/UIProcess/API/APIUIClient.h

    r174384 r176011  
    5151class NativeWebWheelEvent;
    5252class NotificationPermissionRequest;
     53class UserMediaPermissionRequestProxy;
    5354class WebColorPickerResultListenerProxy;
    5455class WebFrameProxy;
     
    123124    virtual bool runOpenPanel(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, WebKit::WebOpenPanelParameters*, WebKit::WebOpenPanelResultListenerProxy*) { return false; }
    124125    virtual bool decidePolicyForGeolocationPermissionRequest(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, WebKit::WebSecurityOrigin*, WebKit::GeolocationPermissionRequestProxy*) { return false; }
     126    virtual bool decidePolicyForUserMediaPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, WebKit::WebSecurityOrigin&, WebKit::UserMediaPermissionRequestProxy&) { return false; }
    125127    virtual bool decidePolicyForNotificationPermissionRequest(WebKit::WebPageProxy*, WebKit::WebSecurityOrigin*, WebKit::NotificationPermissionRequest*) { return false; }
    126128
  • trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h

    r170219 r176011  
    6464class GeolocationPermissionRequestProxy;
    6565class NotificationPermissionRequest;
     66class UserMediaPermissionRequestProxy;
    6667class WebApplicationCacheManagerProxy;
    6768class WebBackForwardList;
     
    147148WK_ADD_API_MAPPING(WKSessionStateRef, API::SessionState)
    148149WK_ADD_API_MAPPING(WKTextCheckerRef, WebTextChecker)
     150WK_ADD_API_MAPPING(WKUserMediaPermissionRequestRef, UserMediaPermissionRequestProxy)
    149151WK_ADD_API_MAPPING(WKVibrationRef, WebVibrationProxy)
    150152WK_ADD_API_MAPPING(WKViewportAttributesRef, WebViewportAttributes)
  • trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp

    r175351 r176011  
    7575
    7676template<> struct ClientTraits<WKPageUIClientBase> {
    77     typedef std::tuple<WKPageUIClientV0, WKPageUIClientV1, WKPageUIClientV2, WKPageUIClientV3, WKPageUIClientV4> Versions;
     77    typedef std::tuple<WKPageUIClientV0, WKPageUIClientV1, WKPageUIClientV2, WKPageUIClientV3, WKPageUIClientV4, WKPageUIClientV5> Versions;
    7878};
    7979
     
    15001500        }
    15011501
     1502        virtual bool decidePolicyForUserMediaPermissionRequest(WebPageProxy& page, WebFrameProxy& frame, WebSecurityOrigin& origin, UserMediaPermissionRequestProxy& permissionRequest) override
     1503        {
     1504            if (!m_client.decidePolicyForUserMediaPermissionRequest)
     1505                return false;
     1506
     1507            m_client.decidePolicyForUserMediaPermissionRequest(toAPI(&page), toAPI(&frame), toAPI(&origin), toAPI(&permissionRequest), m_client.base.clientInfo);
     1508            return true;
     1509        }
     1510
    15021511        virtual bool decidePolicyForNotificationPermissionRequest(WebPageProxy* page, WebSecurityOrigin* origin, NotificationPermissionRequest* permissionRequest) override
    15031512        {
  • trunk/Source/WebKit2/UIProcess/API/C/WKPageUIClient.h

    r173930 r176011  
    9191typedef void (*WKPageDidCancelTrackingPotentialLongMousePressCallback)(WKPageRef page, WKTypeRef userData, const void *clientInfo);
    9292typedef void (*WKPageIsPlayingAudioDidChangeCallback)(WKPageRef page, const void* clientInfo);
     93typedef void (*WKPageDecidePolicyForUserMediaPermissionRequestCallback)(WKPageRef page, WKFrameRef frame, WKSecurityOriginRef origin, WKUserMediaPermissionRequestRef permissionRequest, const void* clientInfo);
    9394
    9495// Deprecated   
     
    379380} WKPageUIClientV4;
    380381
    381 enum { kWKPageUIClientCurrentVersion WK_ENUM_DEPRECATED("Use an explicit version number instead") = 2 };
    382 typedef struct WKPageUIClient {
    383     int                                                                 version;
    384     const void *                                                        clientInfo;
    385 
    386     // Version 0.
    387     WKPageCreateNewPageCallback_deprecatedForUseWithV0                  createNewPage_deprecatedForUseWithV0;
    388     WKPageUIClientCallback                                              showPage;
    389     WKPageUIClientCallback                                              close;
    390     WKPageTakeFocusCallback                                             takeFocus;
    391     WKPageFocusCallback                                                 focus;
    392     WKPageUnfocusCallback                                               unfocus;
    393     WKPageRunJavaScriptAlertCallback                                    runJavaScriptAlert;
    394     WKPageRunJavaScriptConfirmCallback                                  runJavaScriptConfirm;
    395     WKPageRunJavaScriptPromptCallback                                   runJavaScriptPrompt;
    396     WKPageSetStatusTextCallback                                         setStatusText;
    397     WKPageMouseDidMoveOverElementCallback_deprecatedForUseWithV0        mouseDidMoveOverElement_deprecatedForUseWithV0;
    398     WKPageMissingPluginButtonClickedCallback_deprecatedForUseWithV0     missingPluginButtonClicked_deprecatedForUseWithV0;
    399     WKPageDidNotHandleKeyEventCallback                                  didNotHandleKeyEvent;
    400     WKPageDidNotHandleWheelEventCallback                                didNotHandleWheelEvent;
    401     WKPageGetToolbarsAreVisibleCallback                                 toolbarsAreVisible;
    402     WKPageSetToolbarsAreVisibleCallback                                 setToolbarsAreVisible;
    403     WKPageGetMenuBarIsVisibleCallback                                   menuBarIsVisible;
    404     WKPageSetMenuBarIsVisibleCallback                                   setMenuBarIsVisible;
    405     WKPageGetStatusBarIsVisibleCallback                                 statusBarIsVisible;
    406     WKPageSetStatusBarIsVisibleCallback                                 setStatusBarIsVisible;
    407     WKPageGetIsResizableCallback                                        isResizable;
    408     WKPageSetIsResizableCallback                                        setIsResizable;
    409     WKPageGetWindowFrameCallback                                        getWindowFrame;
    410     WKPageSetWindowFrameCallback                                        setWindowFrame;
    411     WKPageRunBeforeUnloadConfirmPanelCallback                           runBeforeUnloadConfirmPanel;
    412     WKPageUIClientCallback                                              didDraw;
    413     WKPageUIClientCallback                                              pageDidScroll;
    414     WKPageExceededDatabaseQuotaCallback                                 exceededDatabaseQuota;
    415     WKPageRunOpenPanelCallback                                          runOpenPanel;
    416     WKPageDecidePolicyForGeolocationPermissionRequestCallback           decidePolicyForGeolocationPermissionRequest;
    417     WKPageHeaderHeightCallback                                          headerHeight;
    418     WKPageFooterHeightCallback                                          footerHeight;
    419     WKPageDrawHeaderCallback                                            drawHeader;
    420     WKPageDrawFooterCallback                                            drawFooter;
    421     WKPagePrintFrameCallback                                            printFrame;
    422     WKPageUIClientCallback                                              runModal;
    423     void*                                                               unused1; // Used to be didCompleteRubberBandForMainFrame
    424     WKPageSaveDataToFileInDownloadsFolderCallback                       saveDataToFileInDownloadsFolder;
    425     WKPageShouldInterruptJavaScriptCallback                             shouldInterruptJavaScript;   
     382typedef struct WKPageUIClientV5 {
     383    WKPageUIClientBase                                                  base;
     384
     385    // Version 0.
     386    WKPageCreateNewPageCallback_deprecatedForUseWithV0                  createNewPage_deprecatedForUseWithV0;
     387    WKPageUIClientCallback                                              showPage;
     388    WKPageUIClientCallback                                              close;
     389    WKPageTakeFocusCallback                                             takeFocus;
     390    WKPageFocusCallback                                                 focus;
     391    WKPageUnfocusCallback                                               unfocus;
     392    WKPageRunJavaScriptAlertCallback                                    runJavaScriptAlert;
     393    WKPageRunJavaScriptConfirmCallback                                  runJavaScriptConfirm;
     394    WKPageRunJavaScriptPromptCallback                                   runJavaScriptPrompt;
     395    WKPageSetStatusTextCallback                                         setStatusText;
     396    WKPageMouseDidMoveOverElementCallback_deprecatedForUseWithV0        mouseDidMoveOverElement_deprecatedForUseWithV0;
     397    WKPageMissingPluginButtonClickedCallback_deprecatedForUseWithV0     missingPluginButtonClicked_deprecatedForUseWithV0;
     398    WKPageDidNotHandleKeyEventCallback                                  didNotHandleKeyEvent;
     399    WKPageDidNotHandleWheelEventCallback                                didNotHandleWheelEvent;
     400    WKPageGetToolbarsAreVisibleCallback                                 toolbarsAreVisible;
     401    WKPageSetToolbarsAreVisibleCallback                                 setToolbarsAreVisible;
     402    WKPageGetMenuBarIsVisibleCallback                                   menuBarIsVisible;
     403    WKPageSetMenuBarIsVisibleCallback                                   setMenuBarIsVisible;
     404    WKPageGetStatusBarIsVisibleCallback                                 statusBarIsVisible;
     405    WKPageSetStatusBarIsVisibleCallback                                 setStatusBarIsVisible;
     406    WKPageGetIsResizableCallback                                        isResizable;
     407    WKPageSetIsResizableCallback                                        setIsResizable;
     408    WKPageGetWindowFrameCallback                                        getWindowFrame;
     409    WKPageSetWindowFrameCallback                                        setWindowFrame;
     410    WKPageRunBeforeUnloadConfirmPanelCallback                           runBeforeUnloadConfirmPanel;
     411    WKPageUIClientCallback                                              didDraw;
     412    WKPageUIClientCallback                                              pageDidScroll;
     413    WKPageExceededDatabaseQuotaCallback                                 exceededDatabaseQuota;
     414    WKPageRunOpenPanelCallback                                          runOpenPanel;
     415    WKPageDecidePolicyForGeolocationPermissionRequestCallback           decidePolicyForGeolocationPermissionRequest;
     416    WKPageHeaderHeightCallback                                          headerHeight;
     417    WKPageFooterHeightCallback                                          footerHeight;
     418    WKPageDrawHeaderCallback                                            drawHeader;
     419    WKPageDrawFooterCallback                                            drawFooter;
     420    WKPagePrintFrameCallback                                            printFrame;
     421    WKPageUIClientCallback                                              runModal;
     422    void*                                                               unused1; // Used to be didCompleteRubberBandForMainFrame
     423    WKPageSaveDataToFileInDownloadsFolderCallback                       saveDataToFileInDownloadsFolder;
     424    WKPageShouldInterruptJavaScriptCallback                             shouldInterruptJavaScript;
    426425
    427426    // Version 1.
     
    435434    WKPageHideColorPickerCallback                                       hideColorPicker;
    436435    WKPageUnavailablePluginButtonClickedCallback                        unavailablePluginButtonClicked;
     436   
     437    // Version 3.
     438    WKPagePinnedStateDidChangeCallback                                  pinnedStateDidChange;
     439
     440    // Version 4.
     441    WKPageDidBeginTrackingPotentialLongMousePressCallback               didBeginTrackingPotentialLongMousePress;
     442    WKPageDidRecognizeLongMousePressCallback                            didRecognizeLongMousePress;
     443    WKPageDidCancelTrackingPotentialLongMousePressCallback              didCancelTrackingPotentialLongMousePress;
     444    WKPageIsPlayingAudioDidChangeCallback                               isPlayingAudioDidChange;
     445
     446    // Version 5.
     447    WKPageDecidePolicyForUserMediaPermissionRequestCallback             decidePolicyForUserMediaPermissionRequest;
     448} WKPageUIClientV5;
     449
     450enum { kWKPageUIClientCurrentVersion WK_ENUM_DEPRECATED("Use an explicit version number instead") = 2 };
     451typedef struct WKPageUIClient {
     452    int                                                                 version;
     453    const void *                                                        clientInfo;
     454
     455    // Version 0.
     456    WKPageCreateNewPageCallback_deprecatedForUseWithV0                  createNewPage_deprecatedForUseWithV0;
     457    WKPageUIClientCallback                                              showPage;
     458    WKPageUIClientCallback                                              close;
     459    WKPageTakeFocusCallback                                             takeFocus;
     460    WKPageFocusCallback                                                 focus;
     461    WKPageUnfocusCallback                                               unfocus;
     462    WKPageRunJavaScriptAlertCallback                                    runJavaScriptAlert;
     463    WKPageRunJavaScriptConfirmCallback                                  runJavaScriptConfirm;
     464    WKPageRunJavaScriptPromptCallback                                   runJavaScriptPrompt;
     465    WKPageSetStatusTextCallback                                         setStatusText;
     466    WKPageMouseDidMoveOverElementCallback_deprecatedForUseWithV0        mouseDidMoveOverElement_deprecatedForUseWithV0;
     467    WKPageMissingPluginButtonClickedCallback_deprecatedForUseWithV0     missingPluginButtonClicked_deprecatedForUseWithV0;
     468    WKPageDidNotHandleKeyEventCallback                                  didNotHandleKeyEvent;
     469    WKPageDidNotHandleWheelEventCallback                                didNotHandleWheelEvent;
     470    WKPageGetToolbarsAreVisibleCallback                                 toolbarsAreVisible;
     471    WKPageSetToolbarsAreVisibleCallback                                 setToolbarsAreVisible;
     472    WKPageGetMenuBarIsVisibleCallback                                   menuBarIsVisible;
     473    WKPageSetMenuBarIsVisibleCallback                                   setMenuBarIsVisible;
     474    WKPageGetStatusBarIsVisibleCallback                                 statusBarIsVisible;
     475    WKPageSetStatusBarIsVisibleCallback                                 setStatusBarIsVisible;
     476    WKPageGetIsResizableCallback                                        isResizable;
     477    WKPageSetIsResizableCallback                                        setIsResizable;
     478    WKPageGetWindowFrameCallback                                        getWindowFrame;
     479    WKPageSetWindowFrameCallback                                        setWindowFrame;
     480    WKPageRunBeforeUnloadConfirmPanelCallback                           runBeforeUnloadConfirmPanel;
     481    WKPageUIClientCallback                                              didDraw;
     482    WKPageUIClientCallback                                              pageDidScroll;
     483    WKPageExceededDatabaseQuotaCallback                                 exceededDatabaseQuota;
     484    WKPageRunOpenPanelCallback                                          runOpenPanel;
     485    WKPageDecidePolicyForGeolocationPermissionRequestCallback           decidePolicyForGeolocationPermissionRequest;
     486    WKPageHeaderHeightCallback                                          headerHeight;
     487    WKPageFooterHeightCallback                                          footerHeight;
     488    WKPageDrawHeaderCallback                                            drawHeader;
     489    WKPageDrawFooterCallback                                            drawFooter;
     490    WKPagePrintFrameCallback                                            printFrame;
     491    WKPageUIClientCallback                                              runModal;
     492    void*                                                               unused1; // Used to be didCompleteRubberBandForMainFrame
     493    WKPageSaveDataToFileInDownloadsFolderCallback                       saveDataToFileInDownloadsFolder;
     494    WKPageShouldInterruptJavaScriptCallback                             shouldInterruptJavaScript;   
     495
     496    // Version 1.
     497    WKPageCreateNewPageCallback                                         createNewPage;
     498    WKPageMouseDidMoveOverElementCallback                               mouseDidMoveOverElement;
     499    WKPageDecidePolicyForNotificationPermissionRequestCallback          decidePolicyForNotificationPermissionRequest;
     500    WKPageUnavailablePluginButtonClickedCallback_deprecatedForUseWithV1 unavailablePluginButtonClicked_deprecatedForUseWithV1;
     501
     502    // Version 2.
     503    WKPageShowColorPickerCallback                                       showColorPicker;
     504    WKPageHideColorPickerCallback                                       hideColorPicker;
     505    WKPageUnavailablePluginButtonClickedCallback                        unavailablePluginButtonClicked;
    437506} WKPageUIClient WK_DEPRECATED("Use an explicit versioned struct instead");
    438507
  • trunk/Source/WebKit2/UIProcess/API/C/WebKit2_C.h

    r169711 r176011  
    5858#include <WebKit/WKURLRequest.h>
    5959#include <WebKit/WKURLResponse.h>
     60#include <WebKit/WKUserMediaPermissionRequest.h>
    6061
    6162#if defined(__OBJC__) && __OBJC__
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r175822 r176011  
    5656#include "TextCheckerState.h"
    5757#include "TextIndicator.h"
     58#include "UserMediaPermissionRequestProxy.h"
    5859#include "WKContextPrivate.h"
    5960#include "WebBackForwardList.h"
     
    280281    , m_geolocationPermissionRequestManager(*this)
    281282    , m_notificationPermissionRequestManager(*this)
     283    , m_userMediaPermissionRequestManager(*this)
    282284    , m_viewState(ViewState::NoFlags)
    283285    , m_viewWasEverInWindow(false)
     
    47174719}
    47184720
     4721void WebPageProxy::requestUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String originIdentifier, bool audio, bool video)
     4722{
     4723    WebFrameProxy* frame = m_process->webFrame(frameID);
     4724    MESSAGE_CHECK(frame);
     4725
     4726    RefPtr<WebSecurityOrigin> origin = WebSecurityOrigin::create(SecurityOrigin::createFromDatabaseIdentifier(originIdentifier));
     4727    RefPtr<UserMediaPermissionRequestProxy> request = m_userMediaPermissionRequestManager.createRequest(userMediaID, audio, video);
     4728
     4729    if (!m_uiClient->decidePolicyForUserMediaPermissionRequest(*this, *frame, *origin.get(), *request.get()))
     4730        request->deny();
     4731}
     4732
    47194733void WebPageProxy::requestNotificationPermission(uint64_t requestID, const String& originString)
    47204734{
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r175759 r176011  
    4646#include "SandboxExtension.h"
    4747#include "ShareableBitmap.h"
     48#include "UserMediaPermissionRequestManagerProxy.h"
    4849#include "VisibleContentRectUpdateInfo.h"
    4950#include "WKBase.h"
     
    125126class GraphicsLayer;
    126127class IntSize;
     128class MediaConstraintsImpl;
    127129class ProtectionSpace;
    128130class RunLoopObserver;
     
    10611063    void reachedApplicationCacheOriginQuota(const String& originIdentifier, uint64_t currentQuota, uint64_t totalBytesNeeded, PassRefPtr<Messages::WebPageProxy::ReachedApplicationCacheOriginQuota::DelayedReply>);
    10621064    void requestGeolocationPermissionForFrame(uint64_t geolocationID, uint64_t frameID, String originIdentifier);
     1065
     1066    void requestUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String originIdentifier, bool audio, bool video);
     1067
    10631068    void runModal();
    10641069    void notifyScrollerThumbIsVisibleInRect(const WebCore::IntRect&);
     
    13971402    NotificationPermissionRequestManagerProxy m_notificationPermissionRequestManager;
    13981403
     1404    UserMediaPermissionRequestManagerProxy m_userMediaPermissionRequestManager;
     1405
    13991406    WebCore::ViewState::Flags m_viewState;
    14001407    bool m_viewWasEverInWindow;
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in

    r175564 r176011  
    258258    RequestGeolocationPermissionForFrame(uint64_t geolocationID, uint64_t frameID, String originIdentifier)
    259259   
     260#if ENABLE(MEDIA_STREAM)
     261    # MediaSteam messages
     262    RequestUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String originIdentifier, bool audio, bool video)
     263#endif
     264
    260265    # Notification messages
    261266    RequestNotificationPermission(uint64_t requestID, String originIdentifier)
  • trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r175983 r176011  
    792792                3F889D15188778C900FEADAF /* WebVideoFullscreenManagerProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F889D13188778C900FEADAF /* WebVideoFullscreenManagerProxy.h */; };
    793793                3F889D171887859300FEADAF /* WebVideoFullscreenManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3F889D0D1887699C00FEADAF /* WebVideoFullscreenManager.mm */; };
     794                4A3CC18A19B063E700D14AEF /* UserMediaPermissionRequestManagerProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A410F3919AF7B04002EBAB5 /* UserMediaPermissionRequestManagerProxy.cpp */; };
     795                4A3CC18B19B0640F00D14AEF /* UserMediaPermissionRequestManagerProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A410F3A19AF7B04002EBAB5 /* UserMediaPermissionRequestManagerProxy.h */; };
     796                4A3CC18C19B0641500D14AEF /* UserMediaPermissionRequestProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A410F3B19AF7B04002EBAB5 /* UserMediaPermissionRequestProxy.cpp */; };
     797                4A3CC18D19B0641900D14AEF /* UserMediaPermissionRequestProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A410F3C19AF7B04002EBAB5 /* UserMediaPermissionRequestProxy.h */; };
     798                4A3CC18E19B07B8500D14AEF /* WKUserMediaPermissionRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A410F3519AF7AC3002EBAB5 /* WKUserMediaPermissionRequest.cpp */; };
     799                4A3CC18F19B07B8A00D14AEF /* WKUserMediaPermissionRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A410F3619AF7AC3002EBAB5 /* WKUserMediaPermissionRequest.h */; settings = {ATTRIBUTES = (Private, ); }; };
     800                4A410F4419AF7B27002EBAB5 /* UserMediaPermissionRequestManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A410F4219AF7B27002EBAB5 /* UserMediaPermissionRequestManager.cpp */; };
     801                4A410F4A19AF7B80002EBAB5 /* WebUserMediaClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A410F4819AF7B80002EBAB5 /* WebUserMediaClient.cpp */; };
    794802                4F601432155C5AA2001FBDE0 /* BlockingResponseMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F601430155C5A32001FBDE0 /* BlockingResponseMap.h */; };
    795803                51021E9C12B16788005C033C /* WebContextMenuClientMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51021E9B12B16788005C033C /* WebContextMenuClientMac.mm */; };
     
    28192827                3F889D13188778C900FEADAF /* WebVideoFullscreenManagerProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebVideoFullscreenManagerProxy.h; path = ios/WebVideoFullscreenManagerProxy.h; sourceTree = "<group>"; };
    28202828                3F889D1618877A2400FEADAF /* WebVideoFullscreenManagerProxy.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; name = WebVideoFullscreenManagerProxy.messages.in; path = ios/WebVideoFullscreenManagerProxy.messages.in; sourceTree = "<group>"; };
     2829                4A410F3519AF7AC3002EBAB5 /* WKUserMediaPermissionRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKUserMediaPermissionRequest.cpp; sourceTree = "<group>"; };
     2830                4A410F3619AF7AC3002EBAB5 /* WKUserMediaPermissionRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKUserMediaPermissionRequest.h; sourceTree = "<group>"; };
     2831                4A410F3919AF7B04002EBAB5 /* UserMediaPermissionRequestManagerProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserMediaPermissionRequestManagerProxy.cpp; sourceTree = "<group>"; };
     2832                4A410F3A19AF7B04002EBAB5 /* UserMediaPermissionRequestManagerProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserMediaPermissionRequestManagerProxy.h; sourceTree = "<group>"; };
     2833                4A410F3B19AF7B04002EBAB5 /* UserMediaPermissionRequestProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserMediaPermissionRequestProxy.cpp; sourceTree = "<group>"; };
     2834                4A410F3C19AF7B04002EBAB5 /* UserMediaPermissionRequestProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserMediaPermissionRequestProxy.h; sourceTree = "<group>"; };
     2835                4A410F4219AF7B27002EBAB5 /* UserMediaPermissionRequestManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserMediaPermissionRequestManager.cpp; sourceTree = "<group>"; };
     2836                4A410F4319AF7B27002EBAB5 /* UserMediaPermissionRequestManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserMediaPermissionRequestManager.h; sourceTree = "<group>"; };
     2837                4A410F4819AF7B80002EBAB5 /* WebUserMediaClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebUserMediaClient.cpp; sourceTree = "<group>"; };
     2838                4A410F4919AF7B80002EBAB5 /* WebUserMediaClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebUserMediaClient.h; sourceTree = "<group>"; };
    28212839                4F601430155C5A32001FBDE0 /* BlockingResponseMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlockingResponseMap.h; sourceTree = "<group>"; };
    28222840                510031F61379CACB00C8DFE4 /* SecItemShim.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = SecItemShim.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
     
    51765194                        sourceTree = "<group>";
    51775195                };
     5196                4A410F4119AF7B27002EBAB5 /* MediaStream */ = {
     5197                        isa = PBXGroup;
     5198                        children = (
     5199                                4A410F4219AF7B27002EBAB5 /* UserMediaPermissionRequestManager.cpp */,
     5200                                4A410F4319AF7B27002EBAB5 /* UserMediaPermissionRequestManager.h */,
     5201                        );
     5202                        path = MediaStream;
     5203                        sourceTree = "<group>";
     5204                };
    51785205                5105B0D2162F7A5E00E27709 /* Network */ = {
    51795206                        isa = PBXGroup;
     
    56365663                        isa = PBXGroup;
    56375664                        children = (
     5665                                4A410F4119AF7B27002EBAB5 /* MediaStream */,
    56385666                                512E352A130B559900ABD19A /* ApplicationCache */,
    56395667                                7C6E70F818B2D47E00F24E2E /* cocoa */,
     
    56735701                        isa = PBXGroup;
    56745702                        children = (
     5703                                4A410F4819AF7B80002EBAB5 /* WebUserMediaClient.cpp */,
     5704                                4A410F4919AF7B80002EBAB5 /* WebUserMediaClient.h */,
    56755705                                2D28F3DF1885CCB4004B9EAE /* ios */,
    56765706                                BC111ADE112F5B9A00337BAB /* mac */,
     
    57765806                        isa = PBXGroup;
    57775807                        children = (
     5808                                4A410F3919AF7B04002EBAB5 /* UserMediaPermissionRequestManagerProxy.cpp */,
     5809                                4A410F3A19AF7B04002EBAB5 /* UserMediaPermissionRequestManagerProxy.h */,
     5810                                4A410F3B19AF7B04002EBAB5 /* UserMediaPermissionRequestProxy.cpp */,
     5811                                4A410F3C19AF7B04002EBAB5 /* UserMediaPermissionRequestProxy.h */,
    57785812                                2DA944A81884E9AB00ED86DB /* ios */,
    57795813                                BC032DC410F4387C0058C15A /* API */,
     
    59445978                        isa = PBXGroup;
    59455979                        children = (
     5980                                4A410F3519AF7AC3002EBAB5 /* WKUserMediaPermissionRequest.cpp */,
     5981                                4A410F3619AF7AC3002EBAB5 /* WKUserMediaPermissionRequest.h */,
    59465982                                5123CF18133D25E60056F800 /* cg */,
    59475983                                6EE849C41368D9040038D481 /* mac */,
     
    71967232                                51B15A8513843A3900321AD8 /* EnvironmentUtilities.h in Headers */,
    71977233                                1A7C6CDB1378950800B9C04D /* EnvironmentVariables.h in Headers */,
     7234                                4A3CC18F19B07B8A00D14AEF /* WKUserMediaPermissionRequest.h in Headers */,
    71987235                                1AA575FB1496B52600A4EE06 /* EventDispatcher.h in Headers */,
    71997236                                1A90C1F41264FD71003E44D4 /* FindController.h in Headers */,
     
    76107647                                1ADF591B1890528E0043C145 /* WKWebViewConfiguration.h in Headers */,
    76117648                                BC5744F012638FB3006F0F12 /* WebPopupItem.h in Headers */,
     7649                                4A3CC18D19B0641900D14AEF /* UserMediaPermissionRequestProxy.h in Headers */,
    76127650                                D3B9484711FF4B6500032B39 /* WebPopupMenu.h in Headers */,
    76137651                                BC574E631267D080006F0F12 /* WebPopupMenuProxy.h in Headers */,
     
    76367674                                3760881F150413E900FC82C7 /* WebRenderObject.h in Headers */,
    76377675                                33367630130C9998006C9DE2 /* WebResourceCacheManager.h in Headers */,
     7676                                4A3CC18B19B0640F00D14AEF /* UserMediaPermissionRequestManagerProxy.h in Headers */,
    76387677                                1AAF089B19267EE500B6390C /* WKUserScript.h in Headers */,
    76397678                                33367656130C9ECA006C9DE2 /* WebResourceCacheManagerMessages.h in Headers */,
     
    87108749                        buildActionMask = 2147483647;
    87118750                        files = (
     8751                                4A410F4419AF7B27002EBAB5 /* UserMediaPermissionRequestManager.cpp in Sources */,
    87128752                                BC5D24A116CC3B9E007D5461 /* ChildProcessMain.mm in Sources */,
     8753                                4A410F4A19AF7B80002EBAB5 /* WebUserMediaClient.cpp in Sources */,
    87138754                        );
    87148755                        runOnlyForDeploymentPostprocessing = 0;
     
    91039144                                A1DF631218E0B7C8003A3E2A /* DownloadClient.mm in Sources */,
    91049145                                1A0F29CB120B37160053D1B9 /* VisitedLinkTable.cpp in Sources */,
     9146                                4A3CC18A19B063E700D14AEF /* UserMediaPermissionRequestManagerProxy.cpp in Sources */,
    91059147                                1AC1337F18590AE400F3EC05 /* RemoteObjectRegistry.mm in Sources */,
    91069148                                CEDA12E2152CD1AE00D9E08D /* WebAlternativeTextClient.cpp in Sources */,
     
    92259267                                51D02F64132EC5B900BEAA96 /* WebIconDatabaseMessageReceiver.cpp in Sources */,
    92269268                                C57193BE18C14A44002D0F12 /* WKFormSelectControl.mm in Sources */,
     9269                                4A3CC18E19B07B8500D14AEF /* WKUserMediaPermissionRequest.cpp in Sources */,
    92279270                                2DDF731618E95060004F5A66 /* RemoteLayerBackingStoreCollection.mm in Sources */,
    92289271                                511B24A6132E095700065A0C /* WebIconDatabaseProxy.cpp in Sources */,
     
    93889431                                515E7727183DD6F60007203F /* AsyncRequest.cpp in Sources */,
    93899432                                BCA284D61492F2C7001F9042 /* WKConnection.mm in Sources */,
     9433                                4A3CC18C19B0641500D14AEF /* UserMediaPermissionRequestProxy.cpp in Sources */,
    93909434                                0F0C365818C051BA00F607D7 /* RemoteLayerTreeHostIOS.mm in Sources */,
    93919435                                0F0C365C18C05CA100F607D7 /* RemoteScrollingCoordinatorProxyIOS.mm in Sources */,
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r175549 r176011  
    9999#include "WebUndoStep.h"
    100100#include "WebUserContentController.h"
     101#include "WebUserMediaClient.h"
    101102#include <JavaScriptCore/APICast.h>
    102103#include <WebCore/ArchiveResource.h>
     
    282283    , m_geolocationPermissionRequestManager(this)
    283284#endif
     285#if ENABLE(MEDIA_STREAM)
     286    , m_userMediaPermissionRequestManager(*this)
     287#endif
    284288    , m_canRunBeforeUnloadConfirmPanel(parameters.canRunBeforeUnloadConfirmPanel)
    285289    , m_canRunModal(parameters.canRunModal)
     
    386390#if ENABLE(PROXIMITY_EVENTS)
    387391    WebCore::provideDeviceProximityTo(m_page.get(), new WebDeviceProximityClient(this));
     392#endif
     393#if ENABLE(MEDIA_STREAM)
     394    WebCore::provideUserMediaTo(m_page.get(), new WebUserMediaClient(*this));
    388395#endif
    389396
     
    32533260}
    32543261
     3262#if ENABLE(MEDIA_STREAM)
     3263void WebPage::didReceiveUserMediaPermissionDecision(uint64_t userMediaID, bool allowed)
     3264{
     3265    m_userMediaPermissionRequestManager.didReceiveUserMediaPermissionDecision(userMediaID, allowed);
     3266}
     3267#endif
     3268
    32553269#if !PLATFORM(IOS)
    32563270void WebPage::advanceToNextMisspelling(bool startBeforeSelection)
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h

    r175637 r176011  
    4545#include "SandboxExtension.h"
    4646#include "ShareableBitmap.h"
     47#include "UserMediaPermissionRequestManager.h"
    4748#include <WebCore/DictationAlternative.h>
    4849#include <WebCore/DragData.h>
     
    450451#endif
    451452
     453#if ENABLE(MEDIA_STREAM)
     454    UserMediaPermissionRequestManager& userMediaPermissionRequestManager() { return m_userMediaPermissionRequestManager; }
     455#endif
     456
    452457#if PLATFORM(IOS)
    453458    WebCore::FloatSize screenSize() const;
     
    10201025    void didReceiveNotificationPermissionDecision(uint64_t notificationID, bool allowed);
    10211026
     1027#if ENABLE(MEDIA_STREAM)
     1028    void didReceiveUserMediaPermissionDecision(uint64_t userMediaID, bool allowed);
     1029#endif
     1030
    10221031    void advanceToNextMisspelling(bool startBeforeSelection);
    10231032    void changeSpellingToWord(const String& word);
     
    11851194#if ENABLE(GEOLOCATION)
    11861195    GeolocationPermissionRequestManager m_geolocationPermissionRequestManager;
     1196#endif
     1197
     1198#if ENABLE(MEDIA_STREAM)
     1199    UserMediaPermissionRequestManager m_userMediaPermissionRequestManager;
    11871200#endif
    11881201
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in

    r175637 r176011  
    270270#endif
    271271
     272#if ENABLE(MEDIA_STREAM)
     273    # MediaSteam
     274    DidReceiveUserMediaPermissionDecision(uint64_t userMediaID, bool allowed)
     275#endif
     276
    272277    # Notification
    273278    DidReceiveNotificationPermissionDecision(uint64_t notificationID, bool allowed)
  • trunk/Tools/ChangeLog

    r175991 r176011  
     12014-09-01  Philippe Normand  <pnormand@igalia.com>
     2
     3        [WK2] UserMediaClient support
     4        https://bugs.webkit.org/show_bug.cgi?id=123158
     5
     6        Reviewed by Benjamin Poulain.
     7
     8        Simple API test for the UserMedia permission request API. The
     9        required test infrastructure is also added, inspired by the
     10        Geolocation infrastructure.
     11
     12        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: New API test for UserMedia
     13        Permission request.
     14        * TestWebKitAPI/Tests/WebKit2/UserMedia.cpp: Added.
     15        (TestWebKitAPI::decidePolicyForUserMediaPermissionRequestCallBack):
     16        (TestWebKitAPI::TEST):
     17        * TestWebKitAPI/Tests/WebKit2/getUserMedia.html: Added.
     18        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: new
     19        helper method to set the permission request result without user interaction.
     20        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp: Ditto.
     21        (WTR::InjectedBundle::setUserMediaPermission):
     22        * WebKitTestRunner/InjectedBundle/InjectedBundle.h: Ditto.
     23        * WebKitTestRunner/InjectedBundle/TestRunner.cpp: Ditto.
     24        (WTR::TestRunner::setUserMediaPermission):
     25        * WebKitTestRunner/InjectedBundle/TestRunner.h: Ditto.
     26        * WebKitTestRunner/TestController.cpp:
     27        (WTR::decidePolicyForUserMediaPermissionRequest): Permission
     28        request handler.
     29        (WTR::TestController::createOtherPage): Enable the new UserMedia
     30        permission request handler.
     31        (WTR::TestController::createWebViewWithOptions): Ditto.
     32        (WTR::TestController::resetPreferencesToConsistentValues): Enable
     33        MediaStream support, this is needed for getUserMedia.
     34        (WTR::TestController::resetStateToConsistentValues): clear
     35        UserMedia permissions list and flags.
     36        (WTR::TestController::setUserMediaPermission): Set permission
     37        request result and distpatch it.
     38        (WTR::TestController::handleUserMediaPermissionRequest): Save
     39        request and dispatch it.
     40        (WTR::TestController::decidePolicyForUserMediaPermissionRequestIfPossible):
     41        Dispatch cached permission requests.
     42        * WebKitTestRunner/TestController.h:
     43        * WebKitTestRunner/TestInvocation.cpp:
     44        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
     45
    1462014-11-11  David Kilzer  <ddkilzer@apple.com>
    247
  • trunk/Tools/TestWebKitAPI/CMakeLists.txt

    r175930 r176011  
    169169
    170170target_link_libraries(TestJavaScriptCore ${TestJavaScriptCore_LIBRARIES})
     171add_dependencies(TestJavaScriptCore ${ForwardingHeadersForTestWebKitAPI_NAME})
     172
    171173add_test(TestJavaScriptCore ${TESTWEBKITAPI_RUNTIME_OUTPUT_DIRECTORY}/JavaScriptCore/TestJavaScriptCore)
    172174set_tests_properties(TestJavaScriptCore PROPERTIES TIMEOUT 60)
  • trunk/Tools/TestWebKitAPI/PlatformGTK.cmake

    r175930 r176011  
    9292    ${TESTWEBKITAPI_DIR}/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp
    9393    ${TESTWEBKITAPI_DIR}/Tests/WebKit2/ShouldGoToBackForwardListItem.cpp
     94    ${TESTWEBKITAPI_DIR}/Tests/WebKit2/UserMedia.cpp
    9495    ${TESTWEBKITAPI_DIR}/Tests/WebKit2/UserMessage.cpp
    9596    ${TESTWEBKITAPI_DIR}/Tests/WebKit2/WillSendSubmitEvent.cpp
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r175930 r176011  
    8989                37E38C34169B7D010084C28C /* WebViewDidRemoveFrameFromHierarchy.mm in Sources */ = {isa = PBXBuildFile; fileRef = 37E38C33169B7D010084C28C /* WebViewDidRemoveFrameFromHierarchy.mm */; };
    9090                440A1D3914A0103A008A66F2 /* URL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 440A1D3814A0103A008A66F2 /* URL.cpp */; };
     91                4A410F4C19AF7BD6002EBAB5 /* UserMedia.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A410F4B19AF7BD6002EBAB5 /* UserMedia.cpp */; };
    9192                4BB4160216815B2600824238 /* JSWrapperForNodeInWebFrame.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4BB4160116815B2600824238 /* JSWrapperForNodeInWebFrame.mm */; };
    9293                4BB4160416815F9100824238 /* ElementAtPointInWebFrame.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4BB4160316815F9100824238 /* ElementAtPointInWebFrame.mm */; };
     
    447448                440A1D3814A0103A008A66F2 /* URL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = URL.cpp; sourceTree = "<group>"; };
    448449                44A622C114A0E2B60048515B /* WTFStringUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WTFStringUtilities.h; sourceTree = "<group>"; };
     450                4A410F4B19AF7BD6002EBAB5 /* UserMedia.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserMedia.cpp; sourceTree = "<group>"; };
     451                4A410F4D19AF7BEF002EBAB5 /* getUserMedia.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = getUserMedia.html; sourceTree = "<group>"; };
    449452                4BB4160116815B2600824238 /* JSWrapperForNodeInWebFrame.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = JSWrapperForNodeInWebFrame.mm; sourceTree = "<group>"; };
    450453                4BB4160316815F9100824238 /* ElementAtPointInWebFrame.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ElementAtPointInWebFrame.mm; sourceTree = "<group>"; };
     
    839842                        isa = PBXGroup;
    840843                        children = (
     844                                4A410F4B19AF7BD6002EBAB5 /* UserMedia.cpp */,
    841845                                C0C5D3BB14598B6F00A802A6 /* mac */,
    842846                                BC90977B125571AE00083756 /* Resources */,
     
    973977                        isa = PBXGroup;
    974978                        children = (
     979                                4A410F4D19AF7BEF002EBAB5 /* getUserMedia.html */,
    975980                                C045F9461385C2F800C0F3CD /* 18-characters.html */,
    976981                                F6B7BE9617469B7E008A3445 /* associate-form-controls.html */,
     
    13811386                                1AFDE6561953B2C000C48FFA /* Optional.cpp in Sources */,
    13821387                                C540F776152E4DA000A40C8C /* SimplifyMarkup.mm in Sources */,
     1388                                4A410F4C19AF7BD6002EBAB5 /* UserMedia.cpp in Sources */,
    13831389                                C02B77F2126612140026BF0F /* SpacebarScrolling.cpp in Sources */,
    13841390                                93D3D19E17B1A84200C7C415 /* LayoutMilestonesWithAllContentInFrame.cpp in Sources */,
  • trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl

    r165545 r176011  
    170170    void setMockGeolocationPositionUnavailableError(DOMString errorMessage);
    171171
     172    // MediaStream
     173    void setUserMediaPermission(boolean value);
     174
    172175    // Audio testing.
    173176    [PassContext] void setAudioResult(object data);
  • trunk/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp

    r175783 r176011  
    459459}
    460460
     461void InjectedBundle::setUserMediaPermission(bool enabled)
     462{
     463    auto messageName = adoptWK(WKStringCreateWithUTF8CString("SetUserMediaPermission"));
     464    auto messageBody = adoptWK(WKBooleanCreate(enabled));
     465    WKBundlePostMessage(m_bundle, messageName.get(), messageBody.get());
     466}
     467
    461468void InjectedBundle::setCustomPolicyDelegate(bool enabled, bool permissive)
    462469{
  • trunk/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h

    r169113 r176011  
    9393    void setMockGeolocationPositionUnavailableError(WKStringRef errorMessage);
    9494
     95    // MediaStream.
     96    void setUserMediaPermission(bool);
     97
    9598    // Policy delegate.
    9699    void setCustomPolicyDelegate(bool enabled, bool permissive);
  • trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp

    r168961 r176011  
    721721}
    722722
     723void TestRunner::setUserMediaPermission(bool enabled)
     724{
     725    // FIXME: this should be done by frame.
     726    InjectedBundle::shared().setUserMediaPermission(enabled);
     727}
     728
    723729bool TestRunner::callShouldCloseOnWebView()
    724730{
  • trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h

    r168961 r176011  
    253253    void setMockGeolocationPositionUnavailableError(JSStringRef message);
    254254
     255    // MediaStream
     256    void setUserMediaPermission(bool);
     257
    255258    void setPageVisibility(JSStringRef state);
    256259    void resetPageVisibility();
  • trunk/Tools/WebKitTestRunner/TestController.cpp

    r175783 r176011  
    190190}
    191191
     192static void decidePolicyForUserMediaPermissionRequest(WKPageRef, WKFrameRef, WKSecurityOriginRef, WKUserMediaPermissionRequestRef permissionRequest, const void* clientInfo)
     193{
     194    TestController::shared().handleUserMediaPermissionRequest(permissionRequest);
     195}
     196
    192197int TestController::getCustomTimeout()
    193198{
     
    204209    view->resizeTo(800, 600);
    205210
    206     WKPageUIClientV2 otherPageUIClient = {
    207         { 2, view },
     211    WKPageUIClientV5 otherPageUIClient = {
     212        { 5, view },
    208213        0, // createNewPage_deprecatedForUseWithV0
    209214        0, // showPage
     
    252257        0, // hideColorPicker
    253258        0, // unavailablePluginButtonClicked
     259        0, // pinnedStateDidChange
     260        0, // didBeginTrackingPotentialLongMousePress
     261        0, // didRecognizeLongMousePress
     262        0, // didCancelTrackingPotentialLongMousePress
     263        0, // isPlayingAudioDidChange
     264        decidePolicyForUserMediaPermissionRequest,
    254265    };
    255266    WKPageSetPageUIClient(newPage, &otherPageUIClient.base);
     
    410421{
    411422    m_mainWebView = std::make_unique<PlatformWebView>(m_context.get(), m_pageGroup.get(), nullptr, options);
    412     WKPageUIClientV2 pageUIClient = {
    413         { 2, m_mainWebView.get() },
     423    WKPageUIClientV5 pageUIClient = {
     424        { 5, m_mainWebView.get() },
    414425        0, // createNewPage_deprecatedForUseWithV0
    415426        0, // showPage
     
    458469        0, // hideColorPicker
    459470        unavailablePluginButtonClicked,
     471        0, // pinnedStateDidChange
     472        0, // didBeginTrackingPotentialLongMousePress
     473        0, // didRecognizeLongMousePress
     474        0, // didCancelTrackingPotentialLongMousePress
     475        0, // isPlayingAudioDidChange
     476        decidePolicyForUserMediaPermissionRequest,
    460477    };
    461478    WKPageSetPageUIClient(m_mainWebView->page(), &pageUIClient.base);
     
    547564    WKPreferencesSetXSSAuditorEnabled(preferences, false);
    548565    WKPreferencesSetWebAudioEnabled(preferences, true);
     566    WKPreferencesSetMediaStreamEnabled(preferences, true);
    549567    WKPreferencesSetDeveloperExtrasEnabled(preferences, true);
    550568    WKPreferencesSetJavaScriptExperimentsEnabled(preferences, true);
     
    649667    m_isGeolocationPermissionSet = false;
    650668    m_isGeolocationPermissionAllowed = false;
     669
     670    // Reset UserMedia permissions.
     671    m_userMediaPermissionRequests.clear();
     672    m_isUserMediaPermissionSet = false;
     673    m_isUserMediaPermissionAllowed = false;
    651674
    652675    // Reset Custom Policy Delegate.
     
    13671390}
    13681391
     1392void TestController::setUserMediaPermission(bool enabled)
     1393{
     1394    m_isUserMediaPermissionSet = true;
     1395    m_isUserMediaPermissionAllowed = enabled;
     1396    decidePolicyForUserMediaPermissionRequestIfPossible();
     1397}
     1398
     1399void TestController::handleUserMediaPermissionRequest(WKUserMediaPermissionRequestRef userMediaPermissionRequest)
     1400{
     1401    m_userMediaPermissionRequests.append(userMediaPermissionRequest);
     1402    decidePolicyForUserMediaPermissionRequestIfPossible();
     1403}
     1404
     1405void TestController::decidePolicyForUserMediaPermissionRequestIfPossible()
     1406{
     1407    if (!m_isUserMediaPermissionSet)
     1408        return;
     1409
     1410    for (auto& request : m_userMediaPermissionRequests) {
     1411        if (m_isUserMediaPermissionAllowed)
     1412            WKUserMediaPermissionRequestAllow(request.get());
     1413        else
     1414            WKUserMediaPermissionRequestDeny(request.get());
     1415    }
     1416    m_userMediaPermissionRequests.clear();
     1417}
     1418
    13691419void TestController::setCustomPolicyDelegate(bool enabled, bool permissive)
    13701420{
  • trunk/Tools/WebKitTestRunner/TestController.h

    r174824 r176011  
    8989    void handleGeolocationPermissionRequest(WKGeolocationPermissionRequestRef);
    9090
     91    // MediaStream.
     92    void setUserMediaPermission(bool);
     93    void handleUserMediaPermissionRequest(WKUserMediaPermissionRequestRef);
     94
    9195    // Policy delegate.
    9296    void setCustomPolicyDelegate(bool enabled, bool permissive);
     
    135139
    136140    void decidePolicyForGeolocationPermissionRequestIfPossible();
     141    void decidePolicyForUserMediaPermissionRequestIfPossible();
    137142
    138143    // WKContextInjectedBundleClient
     
    239244    bool m_isGeolocationPermissionAllowed;
    240245
     246    Vector<WKRetainPtr<WKUserMediaPermissionRequestRef>> m_userMediaPermissionRequests;
     247    bool m_isUserMediaPermissionSet;
     248    bool m_isUserMediaPermissionAllowed;
     249
    241250    bool m_policyDelegateEnabled;
    242251    bool m_policyDelegatePermissive;
  • trunk/Tools/WebKitTestRunner/TestInvocation.cpp

    r171880 r176011  
    479479    }
    480480
     481    if (WKStringIsEqualToUTF8CString(messageName, "SetUserMediaPermission")) {
     482        ASSERT(WKGetTypeID(messageBody) == WKBooleanGetTypeID());
     483        WKBooleanRef enabledWK = static_cast<WKBooleanRef>(messageBody);
     484        TestController::shared().setUserMediaPermission(WKBooleanGetValue(enabledWK));
     485        return;
     486    }
     487
    481488    if (WKStringIsEqualToUTF8CString(messageName, "SetCustomPolicyDelegate")) {
    482489        ASSERT(WKGetTypeID(messageBody) == WKDictionaryGetTypeID());
Note: See TracChangeset for help on using the changeset viewer.