Title: [217081] trunk
Revision
217081
Author
[email protected]
Date
2017-05-18 18:16:47 -0700 (Thu, 18 May 2017)

Log Message

[MediaStream] do not cache gUM permissions
https://bugs.webkit.org/show_bug.cgi?id=172245

Reviewed by Youenn Fablet.

Source/WebCore:

No new tests, updated fast/mediastream/MediaDevices-getUserMedia.html.

* platform/mediastream/RealtimeMediaSourceCenter.cpp:
(WebCore::RealtimeMediaSourceCenter::validateRequestConstraints): Add salt parameter.
* platform/mediastream/RealtimeMediaSourceCenter.h:

Source/WebKit2:

* UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
(WebKit::UserMediaPermissionRequestManagerProxy::invalidatePendingRequests):
(WebKit::UserMediaPermissionRequestManagerProxy::createRequest):
(WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasDenied):
(WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted):
(WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
(WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
(WebKit::FrameAuthorizationState::FrameAuthorizationState): Deleted.
(WebKit::FrameAuthorizationState::hasPermissionToUseCaptureDevice): Deleted.
(WebKit::FrameAuthorizationState::setHasPermissionToUseCaptureDevice): Deleted.
(WebKit::FrameAuthorizationState::ensureSecurityOriginsAreEqual): Deleted.
(WebKit::UserMediaPermissionRequestManagerProxy::stateForRequest): Deleted.
* UIProcess/UserMediaPermissionRequestManagerProxy.h:
(WebKit::FrameAuthorizationState::setDeviceIdentifierHashSalt): Deleted.
(WebKit::FrameAuthorizationState::deviceIdentifierHashSalt): Deleted.
* UIProcess/UserMediaPermissionRequestProxy.cpp:
(WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
* UIProcess/UserMediaPermissionRequestProxy.h:
(WebKit::UserMediaPermissionRequestProxy::create):
(WebKit::UserMediaPermissionRequestProxy::deviceIdentifierHashSalt):

LayoutTests:

* fast/mediastream/MediaDevices-getUserMedia-expected.txt: Updated.
* fast/mediastream/MediaDevices-getUserMedia.html:
* http/tests/media/media-stream/get-user-media-prompt-expected.txt:
* http/tests/media/media-stream/get-user-media-prompt.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (217080 => 217081)


--- trunk/LayoutTests/ChangeLog	2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/LayoutTests/ChangeLog	2017-05-19 01:16:47 UTC (rev 217081)
@@ -1,3 +1,15 @@
+2017-05-18  Eric Carlson  <[email protected]>
+
+        [MediaStream] do not cache gUM permissions
+        https://bugs.webkit.org/show_bug.cgi?id=172245
+
+        Reviewed by Youenn Fablet.
+
+        * fast/mediastream/MediaDevices-getUserMedia-expected.txt: Updated.
+        * fast/mediastream/MediaDevices-getUserMedia.html:
+        * http/tests/media/media-stream/get-user-media-prompt-expected.txt:
+        * http/tests/media/media-stream/get-user-media-prompt.html:
+
 2017-05-18  Zalan Bujtas  <[email protected]>
 
         Redundant ellipsis box triggers ASSERT_WITH_SECURITY_IMPLICATION in InlineBox::parent().

Modified: trunk/LayoutTests/fast/mediastream/MediaDevices-getUserMedia-expected.txt (217080 => 217081)


--- trunk/LayoutTests/fast/mediastream/MediaDevices-getUserMedia-expected.txt	2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/LayoutTests/fast/mediastream/MediaDevices-getUserMedia-expected.txt	2017-05-19 01:16:47 UTC (rev 217081)
@@ -49,9 +49,6 @@
 PASS navigator.mediaDevices.getUserMedia({audio:false, video:videoConstraints}).then(invalidGotStream).catch(errorWithConstraints2) did not throw exception.
 PASS Error callback called.
 PASS errorArg.name is "Error"
-
-PASS navigator.mediaDevices.getUserMedia({audio:true}).then(validStream).catch(error1); did not throw exception.
-PASS Stream generated because page has already authenticated.
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/fast/mediastream/MediaDevices-getUserMedia.html (217080 => 217081)


--- trunk/LayoutTests/fast/mediastream/MediaDevices-getUserMedia.html	2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/LayoutTests/fast/mediastream/MediaDevices-getUserMedia.html	2017-05-19 01:16:47 UTC (rev 217081)
@@ -27,11 +27,6 @@
                 finishJSTest();
             }
 
-            function validStream(e) {
-                testPassed("Stream generated because page has already authenticated.");
-                finishJSTest();
-            }
-
             function error1(e) {
                 testFailed(`Error callback called, error = ${e}`);
                 finishJSTest();
@@ -42,12 +37,7 @@
                 errorArg = e;
                 shouldBeEqualToString("errorArg.name", "Error");
 
-                // We tell LayoutTestRunner to deny user media requests but expect the gUM call to succeed
-                // as it should not see the request because the current browsing context has already
-                // successfully created a stream for the mock audio device.
-                setUserMediaPermission(false);
-                debug("");
-                shouldNotThrow("navigator.mediaDevices.getUserMedia({audio:true}).then(validStream).catch(error1);");
+                finishJSTest();
             }
 
             function errorWithConstraints1() {

Modified: trunk/LayoutTests/http/tests/media/media-stream/get-user-media-prompt-expected.txt (217080 => 217081)


--- trunk/LayoutTests/http/tests/media/media-stream/get-user-media-prompt-expected.txt	2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/LayoutTests/http/tests/media/media-stream/get-user-media-prompt-expected.txt	2017-05-19 01:16:47 UTC (rev 217081)
@@ -17,9 +17,9 @@
 PASS stream.getAudioTracks().length is 0
 PASS stream.getVideoTracks().length is 1
 
-** Request a stream with video and audio, the user should be not prompted **
+** Request a stream with video and audio, the user should be prompted again **
 PASS navigator.mediaDevices.getUserMedia({audio:true, video:true}).then(gotStream3); did not throw exception.
-PASS numberOfTimesGetUserMediaHasBeenCalled() is 2
+PASS numberOfTimesGetUserMediaHasBeenCalled() is 3
 PASS stream.getAudioTracks().length is 1
 PASS stream.getVideoTracks().length is 1
 

Modified: trunk/LayoutTests/http/tests/media/media-stream/get-user-media-prompt.html (217080 => 217081)


--- trunk/LayoutTests/http/tests/media/media-stream/get-user-media-prompt.html	2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/LayoutTests/http/tests/media/media-stream/get-user-media-prompt.html	2017-05-19 01:16:47 UTC (rev 217081)
@@ -15,7 +15,7 @@
             function gotStream3(s)
             {
                 stream = s;
-                shouldBe("numberOfTimesGetUserMediaHasBeenCalled()", "2");
+                shouldBe("numberOfTimesGetUserMediaHasBeenCalled()", "3");
                 shouldBe("stream.getAudioTracks().length", "1");
                 shouldBe("stream.getVideoTracks().length", "1");
 
@@ -30,7 +30,7 @@
                 shouldBe("stream.getAudioTracks().length", "0");
                 shouldBe("stream.getVideoTracks().length", "1");
 
-                debug("<br>** Request a stream with video and audio, the user should be not prompted **");
+                debug("<br>** Request a stream with video and audio, the user should be prompted again **");
                 shouldNotThrow("navigator.mediaDevices.getUserMedia({audio:true, video:true}).then(gotStream3);");
             }
 

Modified: trunk/Source/WebCore/ChangeLog (217080 => 217081)


--- trunk/Source/WebCore/ChangeLog	2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebCore/ChangeLog	2017-05-19 01:16:47 UTC (rev 217081)
@@ -1,3 +1,16 @@
+2017-05-18  Eric Carlson  <[email protected]>
+
+        [MediaStream] do not cache gUM permissions
+        https://bugs.webkit.org/show_bug.cgi?id=172245
+
+        Reviewed by Youenn Fablet.
+
+        No new tests, updated fast/mediastream/MediaDevices-getUserMedia.html.
+
+        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
+        (WebCore::RealtimeMediaSourceCenter::validateRequestConstraints): Add salt parameter.
+        * platform/mediastream/RealtimeMediaSourceCenter.h:
+
 2017-05-18  Zalan Bujtas  <[email protected]>
 
         Redundant ellipsis box triggers ASSERT_WITH_SECURITY_IMPLICATION in InlineBox::parent().

Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp (217080 => 217081)


--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp	2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp	2017-05-19 01:16:47 UTC (rev 217081)
@@ -206,7 +206,7 @@
         it.value();
 }
 
-void RealtimeMediaSourceCenter::validateRequestConstraints(ValidConstraintsHandler&& validHandler, InvalidConstraintsHandler&& invalidHandler, const MediaConstraints& audioConstraints, const MediaConstraints& videoConstraints)
+void RealtimeMediaSourceCenter::validateRequestConstraints(ValidConstraintsHandler&& validHandler, InvalidConstraintsHandler&& invalidHandler, const MediaConstraints& audioConstraints, const MediaConstraints& videoConstraints, String&& deviceIdentifierHashSalt)
 {
     struct DeviceInfo {
         unsigned fitnessScore;
@@ -265,7 +265,7 @@
             videoSourceIds.uncheckedAppend(WTFMove(info.id));
     }
 
-    validHandler(WTFMove(audioSourceIds), WTFMove(videoSourceIds));
+    validHandler(WTFMove(audioSourceIds), WTFMove(videoSourceIds), WTFMove(deviceIdentifierHashSalt));
 }
 
 void RealtimeMediaSourceCenter::setVisibility(bool isVisible)

Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h (217080 => 217081)


--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h	2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h	2017-05-19 01:16:47 UTC (rev 217081)
@@ -58,9 +58,9 @@
     WEBCORE_EXPORT static RealtimeMediaSourceCenter& singleton();
     static void setSharedStreamCenterOverride(RealtimeMediaSourceCenter*);
 
-    using ValidConstraintsHandler = WTF::Function<void(Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs)>;
+    using ValidConstraintsHandler = WTF::Function<void(Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs, String&&)>;
     using InvalidConstraintsHandler = WTF::Function<void(const String& invalidConstraint)>;
-    virtual void validateRequestConstraints(ValidConstraintsHandler&&, InvalidConstraintsHandler&&, const MediaConstraints& audioConstraints, const MediaConstraints& videoConstraints);
+    virtual void validateRequestConstraints(ValidConstraintsHandler&&, InvalidConstraintsHandler&&, const MediaConstraints& audioConstraints, const MediaConstraints& videoConstraints, String&&);
 
     using NewMediaStreamHandler = std::function<void(RefPtr<MediaStreamPrivate>&&)>;
     virtual void createMediaStream(NewMediaStreamHandler&&, const String& audioDeviceID, const String& videoDeviceID, const MediaConstraints* audioConstraints, const MediaConstraints* videoConstraints) = 0;

Modified: trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp (217080 => 217081)


--- trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp	2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp	2017-05-19 01:16:47 UTC (rev 217081)
@@ -77,7 +77,7 @@
 {
 }
 
-void RealtimeMediaSourceCenterOwr::validateRequestConstraints(ValidConstraintsHandler&& validHandler, InvalidConstraintsHandler&& invalidHandler, const MediaConstraints& audioConstraints, const MediaConstraints& videoConstraints)
+void RealtimeMediaSourceCenterOwr::validateRequestConstraints(ValidConstraintsHandler&& validHandler, InvalidConstraintsHandler&& invalidHandler, const MediaConstraints& audioConstraints, const MediaConstraints& videoConstraints, String&& deviceIdentifierHashSalt)
 {
     m_validConstraintsHandler = WTFMove(validHandler);
     m_invalidConstraintsHandler = WTFMove(invalidHandler);
@@ -94,7 +94,7 @@
     if (videoConstraints.isValid)
         videoSources.append(String("video"));
 
-    m_validConstraintsHandler(WTFMove(audioSources), WTFMove(videoSources));
+    m_validConstraintsHandler(WTFMove(audioSources), WTFMove(videoSources), WTFMove(deviceIdentifierHashSalt));
     m_validConstraintsHandler = nullptr;
     m_invalidConstraintsHandler = nullptr;
 }

Modified: trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h (217080 => 217081)


--- trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h	2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h	2017-05-19 01:16:47 UTC (rev 217081)
@@ -53,7 +53,7 @@
     RealtimeMediaSourceCenterOwr();
     ~RealtimeMediaSourceCenterOwr();
 
-    void validateRequestConstraints(ValidConstraintsHandler&& validHandler, InvalidConstraintsHandler&& invalidHandler, const MediaConstraints& audioConstraints, const MediaConstraints& videoConstraints) final;
+    void validateRequestConstraints(ValidConstraintsHandler&& validHandler, InvalidConstraintsHandler&& invalidHandler, const MediaConstraints& audioConstraints, const MediaConstraints& videoConstraints, String&&) final;
 
     void createMediaStream(NewMediaStreamHandler&&, const String& audioDeviceID, const String& videoDeviceID, const MediaConstraints* videoConstraints, const MediaConstraints* audioConstraints) final;
 

Modified: trunk/Source/WebKit2/ChangeLog (217080 => 217081)


--- trunk/Source/WebKit2/ChangeLog	2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebKit2/ChangeLog	2017-05-19 01:16:47 UTC (rev 217081)
@@ -1,3 +1,31 @@
+2017-05-18  Eric Carlson  <[email protected]>
+
+        [MediaStream] do not cache gUM permissions
+        https://bugs.webkit.org/show_bug.cgi?id=172245
+
+        Reviewed by Youenn Fablet.
+
+        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
+        (WebKit::UserMediaPermissionRequestManagerProxy::invalidatePendingRequests):
+        (WebKit::UserMediaPermissionRequestManagerProxy::createRequest):
+        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasDenied):
+        (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted):
+        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
+        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
+        (WebKit::FrameAuthorizationState::FrameAuthorizationState): Deleted.
+        (WebKit::FrameAuthorizationState::hasPermissionToUseCaptureDevice): Deleted.
+        (WebKit::FrameAuthorizationState::setHasPermissionToUseCaptureDevice): Deleted.
+        (WebKit::FrameAuthorizationState::ensureSecurityOriginsAreEqual): Deleted.
+        (WebKit::UserMediaPermissionRequestManagerProxy::stateForRequest): Deleted.
+        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
+        (WebKit::FrameAuthorizationState::setDeviceIdentifierHashSalt): Deleted.
+        (WebKit::FrameAuthorizationState::deviceIdentifierHashSalt): Deleted.
+        * UIProcess/UserMediaPermissionRequestProxy.cpp:
+        (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
+        * UIProcess/UserMediaPermissionRequestProxy.h:
+        (WebKit::UserMediaPermissionRequestProxy::create):
+        (WebKit::UserMediaPermissionRequestProxy::deviceIdentifierHashSalt):
+
 2017-05-18  Tim Horton  <[email protected]>
 
         Data interaction conclusion snapshot has too much margin

Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp (217080 => 217081)


--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp	2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp	2017-05-19 01:16:47 UTC (rev 217081)
@@ -40,56 +40,6 @@
 
 namespace WebKit {
 
-FrameAuthorizationState::FrameAuthorizationState(Ref<SecurityOrigin>&& userMediaDocumentSecurityOrigin, Ref<SecurityOrigin>&& topLevelDocumentSecurityOrigin)
-    : m_userMediaDocumentSecurityOrigin(WTFMove(userMediaDocumentSecurityOrigin))
-    , m_topLevelDocumentSecurityOrigin(WTFMove(topLevelDocumentSecurityOrigin))
-{
-}
-
-bool FrameAuthorizationState::hasPermissionToUseCaptureDevice(const String& deviceUID)
-{
-    return m_authorizedDeviceUIDs.find(deviceUID) != notFound;
-}
-
-void FrameAuthorizationState::setHasPermissionToUseCaptureDevice(const String& deviceUID, bool hasPermission)
-{
-    if (deviceUID.isEmpty())
-        return;
-
-    size_t index = m_authorizedDeviceUIDs.find(deviceUID);
-    if (hasPermission == (index != notFound))
-        return;
-
-    if (hasPermission)
-        m_authorizedDeviceUIDs.append(deviceUID);
-    else
-        m_authorizedDeviceUIDs.remove(index);
-}
-
-void FrameAuthorizationState::ensureSecurityOriginsAreEqual(WebCore::SecurityOrigin& userMediaDocumentSecurityOrigin, WebCore::SecurityOrigin& topLevelDocumentSecurityOrigin)
-{
-    if (m_userMediaDocumentSecurityOrigin->equal(&userMediaDocumentSecurityOrigin) && m_topLevelDocumentSecurityOrigin->equal(&topLevelDocumentSecurityOrigin))
-        return;
-
-    m_userMediaDocumentSecurityOrigin = userMediaDocumentSecurityOrigin;
-    m_topLevelDocumentSecurityOrigin = topLevelDocumentSecurityOrigin;
-    m_authorizedDeviceUIDs.clear();
-    m_deviceIdentifierHashSalt = emptyString();
-}
-
-template <typename RequestType>
-FrameAuthorizationState& UserMediaPermissionRequestManagerProxy::stateForRequest(RequestType& request)
-{
-    auto& state = m_frameStates.add(request.frameID(), nullptr).iterator->value;
-    if (state) {
-        state->ensureSecurityOriginsAreEqual(request.userMediaDocumentSecurityOrigin(), request.topLevelDocumentSecurityOrigin());
-        return *state;
-    }
-
-    state = std::make_unique<FrameAuthorizationState>(request.userMediaDocumentSecurityOrigin(), request.topLevelDocumentSecurityOrigin());
-    return *state;
-}
-
 UserMediaPermissionRequestManagerProxy::UserMediaPermissionRequestManagerProxy(WebPageProxy& page)
     : m_page(page)
     , m_rejectionTimer(*this, &UserMediaPermissionRequestManagerProxy::rejectionTimerFired)
@@ -116,8 +66,6 @@
     for (auto& request : m_pendingDeviceRequests.values())
         request->invalidate();
     m_pendingDeviceRequests.clear();
-
-    m_frameStates.clear();
 }
 
 void UserMediaPermissionRequestManagerProxy::stopCapture()
@@ -131,9 +79,9 @@
     invalidatePendingRequests();
 }
 
-Ref<UserMediaPermissionRequestProxy> UserMediaPermissionRequestManagerProxy::createRequest(uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs)
+Ref<UserMediaPermissionRequestProxy> UserMediaPermissionRequestManagerProxy::createRequest(uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs, String&& deviceIDHashSalt)
 {
-    auto request = UserMediaPermissionRequestProxy::create(*this, userMediaID, frameID, WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin), WTFMove(audioDeviceUIDs), WTFMove(videoDeviceUIDs));
+    auto request = UserMediaPermissionRequestProxy::create(*this, userMediaID, frameID, WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin), WTFMove(audioDeviceUIDs), WTFMove(videoDeviceUIDs), WTFMove(deviceIDHashSalt));
     m_pendingUserMediaRequests.add(userMediaID, request.ptr());
     return request;
 }
@@ -179,12 +127,6 @@
     if (!request)
         return;
 
-    auto& frameState = stateForRequest(*request);
-    for (const auto& deviceUID : request->videoDeviceUIDs())
-        frameState.setHasPermissionToUseCaptureDevice(deviceUID, false);
-    for (const auto& deviceUID : request->audioDeviceUIDs())
-        frameState.setHasPermissionToUseCaptureDevice(deviceUID, false);
-
     denyRequest(userMediaID, reason, emptyString());
 }
 
@@ -212,15 +154,8 @@
     if (!request)
         return;
 
-    auto& frameState = stateForRequest(*request);
-    if (!audioDeviceUID.isEmpty())
-        frameState.setHasPermissionToUseCaptureDevice(audioDeviceUID, true);
-    if (!videoDeviceUID.isEmpty())
-        frameState.setHasPermissionToUseCaptureDevice(videoDeviceUID, true);
-
     UserMediaProcessManager::singleton().willCreateMediaStream(*this, !audioDeviceUID.isEmpty(), !videoDeviceUID.isEmpty());
-
-    m_page.process().send(Messages::WebPage::UserMediaAccessWasGranted(userMediaID, audioDeviceUID, videoDeviceUID, frameState.deviceIdentifierHashSalt()), m_page.pageID());
+    m_page.process().send(Messages::WebPage::UserMediaAccessWasGranted(userMediaID, audioDeviceUID, videoDeviceUID, request->deviceIdentifierHashSalt()), m_page.pageID());
 #else
     UNUSED_PARAM(userMediaID);
     UNUSED_PARAM(audioDeviceUID);
@@ -248,6 +183,12 @@
 void UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, const WebCore::MediaConstraints& audioConstraints, const WebCore::MediaConstraints& videoConstraints)
 {
 #if ENABLE(MEDIA_STREAM)
+    if (!UserMediaProcessManager::singleton().captureEnabled()) {
+        m_pendingRejections.append(userMediaID);
+        scheduleNextRejection();
+        return;
+    }
+
     WebCore::RealtimeMediaSourceCenter::InvalidConstraintsHandler invalidHandler = [this, userMediaID](const String& invalidConstraint) {
         if (!m_page.isValid())
             return;
@@ -255,7 +196,7 @@
         denyRequest(userMediaID, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason::InvalidConstraint, invalidConstraint);
     };
 
-    WebCore::RealtimeMediaSourceCenter::ValidConstraintsHandler validHandler = [this, userMediaID, frameID, userMediaDocumentOrigin = userMediaDocumentOrigin.copyRef(), topLevelDocumentOrigin = topLevelDocumentOrigin.copyRef()](Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs) mutable {
+    WebCore::RealtimeMediaSourceCenter::ValidConstraintsHandler validHandler = [this, userMediaID, frameID, userMediaDocumentOrigin = userMediaDocumentOrigin.copyRef(), topLevelDocumentOrigin = topLevelDocumentOrigin.copyRef()](Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs, String&& deviceIdentifierHashSalt) mutable {
         if (!m_page.isValid())
             return;
 
@@ -264,44 +205,14 @@
             return;
         }
 
-        bool authorizedForAudio = false;
-        bool authorizedForVideo = false;
-        
         auto userMediaOrigin = API::SecurityOrigin::create(userMediaDocumentOrigin.get());
         auto topLevelOrigin = API::SecurityOrigin::create(topLevelDocumentOrigin.get());
-        
-        auto request = createRequest(userMediaID, frameID, WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin), WTFMove(audioDeviceUIDs), WTFMove(videoDeviceUIDs));
+        auto request = createRequest(userMediaID, frameID, WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin), WTFMove(audioDeviceUIDs), WTFMove(videoDeviceUIDs), WTFMove(deviceIdentifierHashSalt));
 
-        auto& frameState = stateForRequest(request.get());
-        for (const auto& deviceUID : request->audioDeviceUIDs()) {
-            if (frameState.hasPermissionToUseCaptureDevice(deviceUID)) {
-                authorizedForAudio = true;
-                break;
-            }
-        }
-        for (const auto& deviceUID : request->videoDeviceUIDs()) {
-            if (frameState.hasPermissionToUseCaptureDevice(deviceUID)) {
-                authorizedForVideo = true;
-                break;
-            }
-        }
-
-        if (authorizedForAudio == !request->audioDeviceUIDs().isEmpty() && authorizedForVideo == !request->videoDeviceUIDs().isEmpty()) {
-            userMediaAccessWasGranted(userMediaID, authorizedForAudio ? request->audioDeviceUIDs()[0] : emptyString(), authorizedForVideo ? request->videoDeviceUIDs()[0] : emptyString());
-            return;
-        }
-
         if (!m_page.uiClient().decidePolicyForUserMediaPermissionRequest(m_page, *m_page.process().webFrame(frameID), WTFMove(userMediaOrigin), WTFMove(topLevelOrigin), request.get()))
             userMediaAccessWasDenied(userMediaID, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason::UserMediaDisabled);
-
     };
 
-    if (!UserMediaProcessManager::singleton().captureEnabled()) {
-        m_pendingRejections.append(userMediaID);
-        scheduleNextRejection();
-        return;
-    }
-
     auto haveDeviceSaltHandler = [this, userMediaID, validHandler = WTFMove(validHandler), invalidHandler = WTFMove(invalidHandler), audioConstraints = WebCore::MediaConstraints(audioConstraints), videoConstraints = WebCore::MediaConstraints(videoConstraints)](uint64_t userMediaID, String&& deviceIdentifierHashSalt, bool originHasPersistentAccess) mutable {
 
         auto request = m_pendingDeviceRequests.take(userMediaID);
@@ -314,12 +225,9 @@
         audioConstraints.deviceIDHashSalt = deviceIdentifierHashSalt;
         videoConstraints.deviceIDHashSalt = deviceIdentifierHashSalt;
 
-        auto& frameState = stateForRequest(request.value().get());
-        frameState.setDeviceIdentifierHashSalt(WTFMove(deviceIdentifierHashSalt));
-        
         syncWithWebCorePrefs();
         
-        RealtimeMediaSourceCenter::singleton().validateRequestConstraints(WTFMove(validHandler), WTFMove(invalidHandler), audioConstraints, videoConstraints);
+        RealtimeMediaSourceCenter::singleton().validateRequestConstraints(WTFMove(validHandler), WTFMove(invalidHandler), audioConstraints, videoConstraints, WTFMove(deviceIdentifierHashSalt));
     };
 
     getUserMediaPermissionInfo(userMediaID, frameID, WTFMove(haveDeviceSaltHandler), WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin));
@@ -358,9 +266,6 @@
         if (!m_page.isValid())
             return;
 
-        auto& frameState = stateForRequest(request.value().get());
-        frameState.setDeviceIdentifierHashSalt(String(deviceIdentifierHashSalt));
-
         syncWithWebCorePrefs();
         auto deviceInfo = RealtimeMediaSourceCenter::singleton().getMediaStreamDevices();
         m_page.process().send(Messages::WebPage::DidCompleteMediaDeviceEnumeration(userMediaID, deviceInfo, deviceIdentifierHashSalt, originHasPersistentAccess), m_page.pageID());

Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.h (217080 => 217081)


--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.h	2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.h	2017-05-19 01:16:47 UTC (rev 217081)
@@ -36,25 +36,6 @@
 
 class WebPageProxy;
 
-class FrameAuthorizationState {
-public:
-    FrameAuthorizationState(Ref<WebCore::SecurityOrigin>&& userMediaDocumentSecurityOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentSecurityOrigin);
-
-    bool hasPermissionToUseCaptureDevice(const String& deviceUID);
-    void setHasPermissionToUseCaptureDevice(const String&, bool);
-
-    void ensureSecurityOriginsAreEqual(WebCore::SecurityOrigin& userMediaDocumentSecurityOrigin, WebCore::SecurityOrigin& topLevelDocumentSecurityOrigin);
-
-    void setDeviceIdentifierHashSalt(String&& hashSalt) { m_deviceIdentifierHashSalt = hashSalt; }
-    const String& deviceIdentifierHashSalt() const { return m_deviceIdentifierHashSalt; }
-
-private:
-    Ref<WebCore::SecurityOrigin> m_userMediaDocumentSecurityOrigin;
-    Ref<WebCore::SecurityOrigin> m_topLevelDocumentSecurityOrigin;
-    Vector<String> m_authorizedDeviceUIDs;
-    String m_deviceIdentifierHashSalt;
-};
-
 class UserMediaPermissionRequestManagerProxy {
 public:
     explicit UserMediaPermissionRequestManagerProxy(WebPageProxy&);
@@ -69,9 +50,6 @@
     void userMediaAccessWasGranted(uint64_t, const String& audioDeviceUID, const String& videoDeviceUID);
     void userMediaAccessWasDenied(uint64_t, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason);
 
-    template <typename RequestType>
-    FrameAuthorizationState& stateForRequest(RequestType&);
-
     void enumerateMediaDevicesForFrame(uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin);
 
     void stopCapture();
@@ -83,7 +61,7 @@
     void endedCaptureSession();
 
 private:
-    Ref<UserMediaPermissionRequestProxy> createRequest(uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs);
+    Ref<UserMediaPermissionRequestProxy> createRequest(uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs, String&&);
     void denyRequest(uint64_t userMediaID, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason, const String& invalidConstraint);
 
     void getUserMediaPermissionInfo(uint64_t userMediaID, uint64_t frameID, UserMediaPermissionCheckProxy::CompletionHandler&&, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin);
@@ -92,7 +70,6 @@
 
     HashMap<uint64_t, RefPtr<UserMediaPermissionRequestProxy>> m_pendingUserMediaRequests;
     HashMap<uint64_t, Ref<UserMediaPermissionCheckProxy>> m_pendingDeviceRequests;
-    HashMap<uint64_t, std::unique_ptr<FrameAuthorizationState>> m_frameStates;
 
     WebPageProxy& m_page;
 

Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.cpp (217080 => 217081)


--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.cpp	2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.cpp	2017-05-19 01:16:47 UTC (rev 217081)
@@ -30,7 +30,7 @@
 
 namespace WebKit {
 
-UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs)
+UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs, String&& deviceIDHashSalt)
     : m_manager(&manager)
     , m_userMediaID(userMediaID)
     , m_frameID(frameID)
@@ -38,6 +38,7 @@
     , m_topLevelDocumentSecurityOrigin(WTFMove(topLevelDocumentOrigin))
     , m_videoDeviceUIDs(WTFMove(videoDeviceUIDs))
     , m_audioDeviceUIDs(WTFMove(audioDeviceUIDs))
+    , m_deviceIdentifierHashSalt(WTFMove(deviceIDHashSalt))
 {
 }
 

Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.h (217080 => 217081)


--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.h	2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.h	2017-05-19 01:16:47 UTC (rev 217081)
@@ -33,9 +33,9 @@
 
 class UserMediaPermissionRequestProxy : public API::ObjectImpl<API::Object::Type::UserMediaPermissionRequest> {
 public:
-    static Ref<UserMediaPermissionRequestProxy> create(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& videoDeviceUIDs, Vector<String>&& audioDeviceUIDs)
+    static Ref<UserMediaPermissionRequestProxy> create(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& videoDeviceUIDs, Vector<String>&& audioDeviceUIDs, String&& deviceIDHashSalt)
     {
-        return adoptRef(*new UserMediaPermissionRequestProxy(manager, userMediaID, frameID, WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin), WTFMove(videoDeviceUIDs), WTFMove(audioDeviceUIDs)));
+        return adoptRef(*new UserMediaPermissionRequestProxy(manager, userMediaID, frameID, WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin), WTFMove(videoDeviceUIDs), WTFMove(audioDeviceUIDs), WTFMove(deviceIDHashSalt)));
     }
 
     void allow(const String& videoDeviceUID, const String& audioDeviceUID);
@@ -55,8 +55,10 @@
     WebCore::SecurityOrigin& userMediaDocumentSecurityOrigin() { return m_userMediaDocumentSecurityOrigin.get(); }
     WebCore::SecurityOrigin& topLevelDocumentSecurityOrigin() { return m_topLevelDocumentSecurityOrigin.get(); }
 
+    const String& deviceIdentifierHashSalt() const { return m_deviceIdentifierHashSalt; }
+
 private:
-    UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy&, uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& videoDeviceUIDs, Vector<String>&& audioDeviceUIDs);
+    UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy&, uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& videoDeviceUIDs, Vector<String>&& audioDeviceUIDs, String&&);
 
     UserMediaPermissionRequestManagerProxy* m_manager;
     uint64_t m_userMediaID;
@@ -65,6 +67,7 @@
     Ref<WebCore::SecurityOrigin> m_topLevelDocumentSecurityOrigin;
     Vector<String> m_videoDeviceUIDs;
     Vector<String> m_audioDeviceUIDs;
+    String m_deviceIdentifierHashSalt;
 };
 
 } // namespace WebKit
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to