Changeset 251712 in webkit


Ignore:
Timestamp:
Oct 29, 2019 10:33:43 AM (4 years ago)
Author:
Truitt Savell
Message:

Unreviewed, rolling out r251639.

Caused flakey API failures for GetDisplayMediaTest.Constraints

Reverted changeset:

"Enforce user gesture for getUserMedia in case a previous
getUserMedia call was denied"
https://bugs.webkit.org/show_bug.cgi?id=203362
https://trac.webkit.org/changeset/251639

Location:
trunk
Files:
2 deleted
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r251710 r251712  
     12019-10-29  Truitt Savell  <tsavell@apple.com>
     2
     3        Unreviewed, rolling out r251639.
     4
     5        Caused flakey API failures for GetDisplayMediaTest.Constraints
     6
     7        Reverted changeset:
     8
     9        "Enforce user gesture for getUserMedia in case a previous
     10        getUserMedia call was denied"
     11        https://bugs.webkit.org/show_bug.cgi?id=203362
     12        https://trac.webkit.org/changeset/251639
     13
    1142019-10-29  Chris Dumez  <cdumez@apple.com>
    215
  • trunk/LayoutTests/fast/mediastream/screencapture-user-gesture-expected.txt

    r251639 r251712  
    11
    22PASS Allow getDisplayMedia call in case of user gesture
    3 PASS Disallow getDisplayMedia calls in case of user gesture if not the first call
    43PASS Deny getDisplayMedia call if no user gesture
    54
  • trunk/LayoutTests/fast/mediastream/screencapture-user-gesture.html

    r251639 r251712  
    1313}, "Allow getDisplayMedia call in case of user gesture");
    1414
    15 promise_test(() => {
    16     let promise;
    17     internals.withUserGesture(() => {
    18         const promise1 = navigator.mediaDevices.getDisplayMedia({video : true});
    19         const promise2 = navigator.mediaDevices.getDisplayMedia({video : true}).then(() => {
    20             return Promise.reject("Second promise should reject");
    21         }, () => {
    22             return "Second promise rejected";
    23         });
    24         promise = Promise.all([promise1, promise2]);
    25     });
    26     return promise;
    27 }, "Disallow getDisplayMedia calls in case of user gesture if not the first call");
    28 
    29 
    3015promise_test((test) => {
    3116    return promise_rejects(test, "InvalidAccessError", navigator.mediaDevices.getDisplayMedia({video : true}));
  • trunk/Source/WebCore/ChangeLog

    r251710 r251712  
     12019-10-29  Truitt Savell  <tsavell@apple.com>
     2
     3        Unreviewed, rolling out r251639.
     4
     5        Caused flakey API failures for GetDisplayMediaTest.Constraints
     6
     7        Reverted changeset:
     8
     9        "Enforce user gesture for getUserMedia in case a previous
     10        getUserMedia call was denied"
     11        https://bugs.webkit.org/show_bug.cgi?id=203362
     12        https://trac.webkit.org/changeset/251639
     13
    1142019-10-29  Chris Dumez  <cdumez@apple.com>
    215
  • trunk/Source/WebCore/Modules/mediastream/MediaDevices.cpp

    r251639 r251712  
    4242#include "MediaTrackSupportedConstraints.h"
    4343#include "RealtimeMediaSourceSettings.h"
    44 #include "UserGestureIndicator.h"
    4544#include "UserMediaController.h"
    4645#include "UserMediaRequest.h"
     
    106105}
    107106
    108 bool MediaDevices::computeUserGesturePriviledge(GestureAllowedRequest requestType)
    109 {
    110     auto* currentGestureToken = UserGestureIndicator::currentUserGesture().get();
    111     if (m_currentGestureToken != currentGestureToken) {
    112         m_currentGestureToken = currentGestureToken;
    113         m_requestTypesForCurrentGesture = { };
    114     }
    115 
    116     bool isUserGesturePriviledged = m_currentGestureToken && !m_requestTypesForCurrentGesture.contains(requestType);
    117     m_requestTypesForCurrentGesture.add(requestType);
    118     return isUserGesturePriviledged;
    119 }
    120 
    121 void MediaDevices::getUserMedia(const StreamConstraints& constraints, Promise&& promise)
     107void MediaDevices::getUserMedia(const StreamConstraints& constraints, Promise&& promise) const
    122108{
    123109    auto* document = this->document();
     
    127113    auto audioConstraints = createMediaConstraints(constraints.audio);
    128114    auto videoConstraints = createMediaConstraints(constraints.video);
    129 
    130     bool isUserGesturePriviledged = false;
    131 
    132     if (audioConstraints.isValid)
    133         isUserGesturePriviledged |= computeUserGesturePriviledge(GestureAllowedRequest::Microphone);
    134 
    135     if (videoConstraints.isValid) {
    136         isUserGesturePriviledged |= computeUserGesturePriviledge(GestureAllowedRequest::Camera);
     115    if (videoConstraints.isValid)
    137116        videoConstraints.setDefaultVideoConstraints();
    138     }
    139 
    140     auto request = UserMediaRequest::create(*document, { MediaStreamRequest::Type::UserMedia, WTFMove(audioConstraints), WTFMove(videoConstraints), isUserGesturePriviledged }, WTFMove(promise));
     117
     118    auto request = UserMediaRequest::create(*document, { MediaStreamRequest::Type::UserMedia, WTFMove(audioConstraints), WTFMove(videoConstraints) }, WTFMove(promise));
    141119    request->start();
    142120}
    143121
    144 void MediaDevices::getDisplayMedia(const StreamConstraints& constraints, Promise&& promise)
     122void MediaDevices::getDisplayMedia(const StreamConstraints& constraints, Promise&& promise) const
    145123{
    146124    auto* document = this->document();
     
    148126        return;
    149127
    150     bool isUserGesturePriviledged = computeUserGesturePriviledge(GestureAllowedRequest::Display);
    151     if (!m_disableGetDisplayMediaUserGestureConstraint && !isUserGesturePriviledged) {
     128    if (!m_disableGetDisplayMediaUserGestureConstraint && !UserGestureIndicator::processingUserGesture()) {
    152129        promise.reject(Exception { InvalidAccessError, "getDisplayMedia must be called from a user gesture handler."_s });
    153130        return;
    154131    }
    155132
    156     auto request = UserMediaRequest::create(*document, { MediaStreamRequest::Type::DisplayMedia, { }, createMediaConstraints(constraints.video), isUserGesturePriviledged }, WTFMove(promise));
     133    auto request = UserMediaRequest::create(*document, { MediaStreamRequest::Type::DisplayMedia, { }, createMediaConstraints(constraints.video) }, WTFMove(promise));
    157134    request->start();
    158135}
  • trunk/Source/WebCore/Modules/mediastream/MediaDevices.h

    r251639 r251712  
    5050class MediaDeviceInfo;
    5151class MediaStream;
    52 class UserGestureToken;
    5352
    5453struct MediaTrackSupportedConstraints;
     
    7978        Variant<bool, MediaTrackConstraints> audio;
    8079    };
    81     void getUserMedia(const StreamConstraints&, Promise&&);
    82     void getDisplayMedia(const StreamConstraints&, Promise&&);
     80    void getUserMedia(const StreamConstraints&, Promise&&) const;
     81    void getDisplayMedia(const StreamConstraints&, Promise&&) const;
    8382    void enumerateDevices(EnumerateDevicesPromise&&);
    8483    MediaTrackSupportedConstraints getSupportedConstraints();
     
    111110    void derefEventTarget() final { deref(); }
    112111
    113     enum class GestureAllowedRequest {
    114         Microphone = 1 << 0,
    115         Camera = 1 << 1,
    116         Display = 1 << 2,
    117     };
    118     bool computeUserGesturePriviledge(GestureAllowedRequest);
    119 
    120112    Timer m_scheduledEventTimer;
    121113    UserMediaClient::DeviceChangeObserverToken m_deviceChangeToken;
     
    127119    bool m_canAccessCamera { false };
    128120    bool m_canAccessMicrophone { false };
    129 
    130     OptionSet<GestureAllowedRequest> m_requestTypesForCurrentGesture;
    131     UserGestureToken* m_currentGestureToken { nullptr };
    132121};
    133122
  • trunk/Source/WebCore/platform/mediastream/MediaStreamRequest.h

    r251639 r251712  
    3434struct MediaStreamRequest {
    3535    enum class Type { UserMedia, DisplayMedia };
    36     Type type { Type::UserMedia };
     36    Type type;
    3737    MediaConstraints audioConstraints;
    3838    MediaConstraints videoConstraints;
    39     bool isUserGesturePriviledged { false };
    4039
    4140    template<class Encoder>
     
    4544        encoder << audioConstraints;
    4645        encoder << videoConstraints;
    47         encoder << isUserGesturePriviledged;
    4846    }
    4947
     
    5149    {
    5250        MediaStreamRequest request;
    53         if (decoder.decodeEnum(request.type) && decoder.decode(request.audioConstraints) && decoder.decode(request.videoConstraints) && decoder.decode(request.isUserGesturePriviledged))
     51        if (decoder.decodeEnum(request.type) && decoder.decode(request.audioConstraints) && decoder.decode(request.videoConstraints))
    5452            return request;
    5553
  • trunk/Source/WebKit/ChangeLog

    r251711 r251712  
     12019-10-29  Truitt Savell  <tsavell@apple.com>
     2
     3        Unreviewed, rolling out r251639.
     4
     5        Caused flakey API failures for GetDisplayMediaTest.Constraints
     6
     7        Reverted changeset:
     8
     9        "Enforce user gesture for getUserMedia in case a previous
     10        getUserMedia call was denied"
     11        https://bugs.webkit.org/show_bug.cgi?id=203362
     12        https://trac.webkit.org/changeset/251639
     13
    1142019-10-29  Truitt Savell  <tsavell@apple.com>
    215
  • trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp

    r251639 r251712  
    346346    ASSERT(!(requestingScreenCapture && requestingMicrophone));
    347347
    348     if (!request.isUserGesturePriviledged() && wasRequestDenied(request.frameID(), request.userMediaDocumentSecurityOrigin(), request.topLevelDocumentSecurityOrigin(), requestingMicrophone, requestingCamera, requestingScreenCapture))
     348    if (wasRequestDenied(request.frameID(), request.userMediaDocumentSecurityOrigin(), request.topLevelDocumentSecurityOrigin(), requestingMicrophone, requestingCamera, requestingScreenCapture))
    349349        return RequestAction::Deny;
    350350
  • trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestProxy.h

    r251711 r251712  
    8585    WebCore::CaptureDevice videoDevice() const { return m_eligibleVideoDevices.isEmpty() ? WebCore::CaptureDevice { } : m_eligibleVideoDevices[0]; }
    8686
    87     bool isUserGesturePriviledged() const { return m_request.isUserGesturePriviledged; }
    88 
    8987private:
    9088    UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy&, uint64_t userMediaID, WebCore::FrameIdentifier mainFrameID, WebCore::FrameIdentifier, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<WebCore::CaptureDevice>&& audioDevices, Vector<WebCore::CaptureDevice>&& videoDevices, WebCore::MediaStreamRequest&&);
  • trunk/Tools/ChangeLog

    r251709 r251712  
     12019-10-29  Truitt Savell  <tsavell@apple.com>
     2
     3        Unreviewed, rolling out r251639.
     4
     5        Caused flakey API failures for GetDisplayMediaTest.Constraints
     6
     7        Reverted changeset:
     8
     9        "Enforce user gesture for getUserMedia in case a previous
     10        getUserMedia call was denied"
     11        https://bugs.webkit.org/show_bug.cgi?id=203362
     12        https://trac.webkit.org/changeset/251639
     13
    1142019-10-29  Chris Dumez  <cdumez@apple.com>
    215
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm

    r251639 r251712  
    181181    promptForCapture(@"{ video: true }", false);
    182182    shouldDeny = false;
    183     promptForCapture(@"{ video: true }", true);
     183    promptForCapture(@"{ video: true }", false);
     184    promptForCapture(@"{ video: true }", false);
    184185}
    185186
Note: See TracChangeset for help on using the changeset viewer.