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>&&);