Title: [246185] trunk/Source/WebKit
Revision
246185
Author
[email protected]
Date
2019-06-06 20:29:01 -0700 (Thu, 06 Jun 2019)

Log Message

Use an enumeration in UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo callback
https://bugs.webkit.org/show_bug.cgi?id=198548

Reviewed by Eric Carlson.

Move from an Optional<bool> to an enum having three values to ease readability.

* UIProcess/UserMediaPermissionCheckProxy.cpp:
(WebKit::UserMediaPermissionCheckProxy::setUserMediaAccessInfo):
(WebKit::UserMediaPermissionCheckProxy::complete):
* UIProcess/UserMediaPermissionCheckProxy.h:
(WebKit::UserMediaPermissionCheckProxy::invalidate):
* UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
(WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged):
(WebKit::UserMediaPermissionRequestManagerProxy::startProcessingUserMediaPermissionRequest):
(WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo):
(WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
* UIProcess/UserMediaPermissionRequestManagerProxy.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (246184 => 246185)


--- trunk/Source/WebKit/ChangeLog	2019-06-07 01:28:54 UTC (rev 246184)
+++ trunk/Source/WebKit/ChangeLog	2019-06-07 03:29:01 UTC (rev 246185)
@@ -1,5 +1,26 @@
 2019-06-06  Youenn Fablet  <[email protected]>
 
+        Use an enumeration in UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo callback
+        https://bugs.webkit.org/show_bug.cgi?id=198548
+
+        Reviewed by Eric Carlson.
+
+        Move from an Optional<bool> to an enum having three values to ease readability.
+
+        * UIProcess/UserMediaPermissionCheckProxy.cpp:
+        (WebKit::UserMediaPermissionCheckProxy::setUserMediaAccessInfo):
+        (WebKit::UserMediaPermissionCheckProxy::complete):
+        * UIProcess/UserMediaPermissionCheckProxy.h:
+        (WebKit::UserMediaPermissionCheckProxy::invalidate):
+        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
+        (WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged):
+        (WebKit::UserMediaPermissionRequestManagerProxy::startProcessingUserMediaPermissionRequest):
+        (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo):
+        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
+        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
+
+2019-06-06  Youenn Fablet  <[email protected]>
+
         Allow WebKitTestRunner to terminate network process after it finishes service worker file operations
         https://bugs.webkit.org/show_bug.cgi?id=198584
 

Modified: trunk/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.cpp (246184 => 246185)


--- trunk/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.cpp	2019-06-07 01:28:54 UTC (rev 246184)
+++ trunk/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.cpp	2019-06-07 03:29:01 UTC (rev 246185)
@@ -49,16 +49,16 @@
 void UserMediaPermissionCheckProxy::setUserMediaAccessInfo(bool allowed)
 {
     ASSERT(m_completionHandler);
-    complete(allowed);
+    complete(allowed ? PermissionInfo::Granted : PermissionInfo::Unknown);
 }
 
-void UserMediaPermissionCheckProxy::complete(Optional<bool> allowed)
+void UserMediaPermissionCheckProxy::complete(PermissionInfo info)
 {
     if (!m_completionHandler)
         return;
 
     auto completionHandler = WTFMove(m_completionHandler);
-    completionHandler(allowed);
+    completionHandler(info);
 }
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.h (246184 => 246185)


--- trunk/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.h	2019-06-07 01:28:54 UTC (rev 246184)
+++ trunk/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.h	2019-06-07 03:29:01 UTC (rev 246185)
@@ -38,9 +38,9 @@
 
 class UserMediaPermissionCheckProxy : public API::ObjectImpl<API::Object::Type::UserMediaPermissionCheck> {
 public:
+    enum class PermissionInfo { Error, Unknown, Granted };
+    using CompletionHandler = WTF::CompletionHandler<void(PermissionInfo)>;
 
-    using CompletionHandler = WTF::CompletionHandler<void(Optional<bool> allowed)>;
-
     static Ref<UserMediaPermissionCheckProxy> create(uint64_t frameID, CompletionHandler&& handler, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin)
     {
         return adoptRef(*new UserMediaPermissionCheckProxy(frameID, WTFMove(handler), WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin)));
@@ -48,7 +48,7 @@
 
     void deny() { setUserMediaAccessInfo(false); }
     void setUserMediaAccessInfo(bool);
-    void invalidate() { complete({ }); }
+    void invalidate() { complete(PermissionInfo::Error); }
 
     uint64_t frameID() const { return m_frameID; }
     WebCore::SecurityOrigin& userMediaDocumentSecurityOrigin() { return m_userMediaDocumentSecurityOrigin.get(); }
@@ -58,7 +58,7 @@
     UserMediaPermissionCheckProxy(uint64_t frameID, CompletionHandler&&, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin);
     ~UserMediaPermissionCheckProxy();
 
-    void complete(Optional<bool> allowed);
+    void complete(PermissionInfo);
     
     uint64_t m_frameID;
     CompletionHandler m_completionHandler;

Modified: trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp (246184 => 246185)


--- trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp	2019-06-07 01:28:54 UTC (rev 246184)
+++ trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp	2019-06-07 03:29:01 UTC (rev 246185)
@@ -121,11 +121,18 @@
     if (!m_page.hasRunningProcess() || !m_page.mainFrame())
         return;
 
-    auto handler = [this](Optional<bool> originHasPersistentAccess) mutable {
-        if (!originHasPersistentAccess || !m_page.hasRunningProcess())
+    auto handler = [this](PermissionInfo permissionInfo) mutable {
+        switch (permissionInfo) {
+        case PermissionInfo::Error:
             return;
-
-        if (m_grantedRequests.isEmpty() && !*originHasPersistentAccess)
+        case PermissionInfo::Unknown:
+            if (m_grantedRequests.isEmpty())
+                return;
+            break;
+        case PermissionInfo::Granted:
+            break;
+        }
+        if (!m_page.hasRunningProcess())
             return;
 
         m_page.process().send(Messages::WebPage::CaptureDevicesChanged(), m_page.pageID());
@@ -379,27 +386,28 @@
 
     auto& userMediaDocumentSecurityOrigin = m_currentUserMediaRequest->userMediaDocumentSecurityOrigin();
     auto& topLevelDocumentSecurityOrigin = m_currentUserMediaRequest->topLevelDocumentSecurityOrigin();
-    getUserMediaPermissionInfo(m_currentUserMediaRequest->frameID(), userMediaDocumentSecurityOrigin, topLevelDocumentSecurityOrigin, [this, request = m_currentUserMediaRequest](Optional<bool> hasPersistentAccess) mutable {
+    getUserMediaPermissionInfo(m_currentUserMediaRequest->frameID(), userMediaDocumentSecurityOrigin, topLevelDocumentSecurityOrigin, [this, request = m_currentUserMediaRequest](auto permissionInfo) mutable {
         if (!request->isPending())
             return;
 
-        if (!hasPersistentAccess) {
-            denyRequest(*m_currentUserMediaRequest, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason::OtherFailure);
+        switch (permissionInfo) {
+        case PermissionInfo::Error:
+            this->denyRequest(*m_currentUserMediaRequest, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason::OtherFailure);
             return;
+        case PermissionInfo::Unknown:
+            break;
+        case PermissionInfo::Granted:
+            m_currentUserMediaRequest->setHasPersistentAccess();
+            break;
         }
-
-        ALWAYS_LOG(LOGIDENTIFIER, m_currentUserMediaRequest->userMediaID(), ", persistent access: ", *hasPersistentAccess);
-        processUserMediaPermissionRequest(*hasPersistentAccess);
+        this->processUserMediaPermissionRequest();
     });
 }
 
-void UserMediaPermissionRequestManagerProxy::processUserMediaPermissionRequest(bool hasPersistentAccess)
+void UserMediaPermissionRequestManagerProxy::processUserMediaPermissionRequest()
 {
-    ALWAYS_LOG(LOGIDENTIFIER, m_currentUserMediaRequest->userMediaID());
+    ALWAYS_LOG(LOGIDENTIFIER, m_currentUserMediaRequest->userMediaID(), ", persistent access: ", m_currentUserMediaRequest->hasPersistentAccess());
 
-    if (hasPersistentAccess)
-        m_currentUserMediaRequest->setHasPersistentAccess();
-
     auto& userMediaDocumentSecurityOrigin = m_currentUserMediaRequest->userMediaDocumentSecurityOrigin();
     auto& topLevelDocumentSecurityOrigin = m_currentUserMediaRequest->topLevelDocumentSecurityOrigin();
     m_page.websiteDataStore().deviceIdHashSaltStorage().deviceIdHashSaltForOrigin(userMediaDocumentSecurityOrigin, topLevelDocumentSecurityOrigin, [this, request = m_currentUserMediaRequest] (String&& deviceIDHashSalt) mutable {
@@ -504,7 +512,7 @@
     m_page.uiClient().decidePolicyForUserMediaPermissionRequest(m_page, *webFrame, WTFMove(userMediaOrigin), WTFMove(topLevelOrigin), *m_currentUserMediaRequest);
 }
 
-void UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo(uint64_t frameID, Ref<SecurityOrigin>&& userMediaDocumentOrigin, Ref<SecurityOrigin>&& topLevelDocumentOrigin, CompletionHandler<void(Optional<bool>)>&& handler)
+void UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo(uint64_t frameID, Ref<SecurityOrigin>&& userMediaDocumentOrigin, Ref<SecurityOrigin>&& topLevelDocumentOrigin, CompletionHandler<void(PermissionInfo)>&& handler)
 {
     auto* webFrame = m_page.process().webFrame(frameID);
     if (!webFrame || !SecurityOrigin::createFromString(m_page.pageLoadState().activeURL())->isSameSchemeHostPort(topLevelDocumentOrigin.get())) {
@@ -518,12 +526,10 @@
     auto requestID = generateRequestID();
     m_pendingDeviceRequests.add(requestID);
 
-    auto request = UserMediaPermissionCheckProxy::create(frameID, [this, weakThis = makeWeakPtr(*this), requestID, handler = WTFMove(handler)](Optional<bool> allowed) mutable {
-        if (!weakThis || !m_pendingDeviceRequests.remove(requestID) || !allowed) {
-            handler({ });
-            return;
-        }
-        handler(*allowed);
+    auto request = UserMediaPermissionCheckProxy::create(frameID, [this, weakThis = makeWeakPtr(*this), requestID, handler = WTFMove(handler)](auto permissionInfo) mutable {
+        if (!weakThis || !m_pendingDeviceRequests.remove(requestID))
+            permissionInfo = PermissionInfo::Error;
+        handler(permissionInfo);
     }, WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin));
 
     // FIXME: Remove webFrame, userMediaOrigin and topLevelOrigin from this uiClient API call.
@@ -594,9 +600,19 @@
 #if ENABLE(MEDIA_STREAM)
     ALWAYS_LOG(LOGIDENTIFIER, userMediaID);
 
-    auto completionHandler = [this, userMediaID, frameID, userMediaDocumentOrigin = userMediaDocumentOrigin.copyRef(), topLevelDocumentOrigin = topLevelDocumentOrigin.copyRef()](Optional<bool> originHasPersistentAccess) mutable {
-        if (!originHasPersistentAccess)
+    auto completionHandler = [this, userMediaID, frameID, userMediaDocumentOrigin = userMediaDocumentOrigin.copyRef(), topLevelDocumentOrigin = topLevelDocumentOrigin.copyRef()](PermissionInfo permissionInfo) mutable {
+
+        bool originHasPersistentAccess;
+        switch (permissionInfo) {
+        case PermissionInfo::Error:
             return;
+        case PermissionInfo::Unknown:
+            originHasPersistentAccess = false;
+            break;
+        case PermissionInfo::Granted:
+            originHasPersistentAccess = true;
+            break;
+        }
 
         if (!m_page.hasRunningProcess())
             return;
@@ -606,7 +622,7 @@
 
         auto& requestOrigin = userMediaDocumentOrigin.get();
         auto& topOrigin = topLevelDocumentOrigin.get();
-        m_page.websiteDataStore().deviceIdHashSaltStorage().deviceIdHashSaltForOrigin(requestOrigin, topOrigin, [this, weakThis = makeWeakPtr(*this), requestID, frameID, userMediaID, userMediaDocumentOrigin = WTFMove(userMediaDocumentOrigin), topLevelDocumentOrigin = WTFMove(topLevelDocumentOrigin), originHasPersistentAccess = *originHasPersistentAccess] (String&& deviceIDHashSalt) {
+        m_page.websiteDataStore().deviceIdHashSaltStorage().deviceIdHashSaltForOrigin(requestOrigin, topOrigin, [this, weakThis = makeWeakPtr(*this), requestID, frameID, userMediaID, userMediaDocumentOrigin = WTFMove(userMediaDocumentOrigin), topLevelDocumentOrigin = WTFMove(topLevelDocumentOrigin), originHasPersistentAccess] (String&& deviceIDHashSalt) {
             if (!weakThis || !m_pendingDeviceRequests.remove(requestID))
                 return;
 

Modified: trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.h (246184 => 246185)


--- trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.h	2019-06-07 01:28:54 UTC (rev 246184)
+++ trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.h	2019-06-07 03:29:01 UTC (rev 246185)
@@ -100,7 +100,8 @@
     const UserMediaPermissionRequestProxy* searchForGrantedRequest(uint64_t frameID, const WebCore::SecurityOrigin& userMediaDocumentOrigin, const WebCore::SecurityOrigin& topLevelDocumentOrigin, bool needsAudio, bool needsVideo) const;
     bool wasRequestDenied(uint64_t mainFrameID, const WebCore::SecurityOrigin& userMediaDocumentOrigin, const WebCore::SecurityOrigin& topLevelDocumentOrigin, bool needsAudio, bool needsVideo, bool needsScreenCapture);
 
-    void getUserMediaPermissionInfo(uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, CompletionHandler<void(Optional<bool>)>&&);
+    using PermissionInfo = UserMediaPermissionCheckProxy::PermissionInfo;
+    void getUserMediaPermissionInfo(uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, CompletionHandler<void(PermissionInfo)>&&);
 
     RequestAction getRequestAction(const UserMediaPermissionRequestProxy&);
 
@@ -108,7 +109,7 @@
 
     Vector<WebCore::CaptureDevice> computeFilteredDeviceList(bool revealIdsAndLabels, const String& deviceIDHashSalt);
 
-    void processUserMediaPermissionRequest(bool hasPersistentAccess);
+    void processUserMediaPermissionRequest();
     void processUserMediaPermissionInvalidRequest(const String& invalidConstraint);
     void processUserMediaPermissionValidRequest(Vector<WebCore::CaptureDevice>&& audioDevices, Vector<WebCore::CaptureDevice>&& videoDevices, String&& deviceIdentifierHashSalt);
     void startProcessingUserMediaPermissionRequest(Ref<UserMediaPermissionRequestProxy>&&);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to