Changeset 246185 in webkit
- Timestamp:
- Jun 6, 2019 8:29:01 PM (5 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r246184 r246185 1 2019-06-06 Youenn Fablet <youenn@apple.com> 2 3 Use an enumeration in UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo callback 4 https://bugs.webkit.org/show_bug.cgi?id=198548 5 6 Reviewed by Eric Carlson. 7 8 Move from an Optional<bool> to an enum having three values to ease readability. 9 10 * UIProcess/UserMediaPermissionCheckProxy.cpp: 11 (WebKit::UserMediaPermissionCheckProxy::setUserMediaAccessInfo): 12 (WebKit::UserMediaPermissionCheckProxy::complete): 13 * UIProcess/UserMediaPermissionCheckProxy.h: 14 (WebKit::UserMediaPermissionCheckProxy::invalidate): 15 * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: 16 (WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged): 17 (WebKit::UserMediaPermissionRequestManagerProxy::startProcessingUserMediaPermissionRequest): 18 (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo): 19 (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame): 20 * UIProcess/UserMediaPermissionRequestManagerProxy.h: 21 1 22 2019-06-06 Youenn Fablet <youenn@apple.com> 2 23 -
trunk/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.cpp
r241270 r246185 50 50 { 51 51 ASSERT(m_completionHandler); 52 complete(allowed );52 complete(allowed ? PermissionInfo::Granted : PermissionInfo::Unknown); 53 53 } 54 54 55 void UserMediaPermissionCheckProxy::complete( Optional<bool> allowed)55 void UserMediaPermissionCheckProxy::complete(PermissionInfo info) 56 56 { 57 57 if (!m_completionHandler) … … 59 59 60 60 auto completionHandler = WTFMove(m_completionHandler); 61 completionHandler( allowed);61 completionHandler(info); 62 62 } 63 63 -
trunk/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.h
r241270 r246185 39 39 class UserMediaPermissionCheckProxy : public API::ObjectImpl<API::Object::Type::UserMediaPermissionCheck> { 40 40 public: 41 42 using CompletionHandler = WTF::CompletionHandler<void( Optional<bool> allowed)>;41 enum class PermissionInfo { Error, Unknown, Granted }; 42 using CompletionHandler = WTF::CompletionHandler<void(PermissionInfo)>; 43 43 44 44 static Ref<UserMediaPermissionCheckProxy> create(uint64_t frameID, CompletionHandler&& handler, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin) … … 49 49 void deny() { setUserMediaAccessInfo(false); } 50 50 void setUserMediaAccessInfo(bool); 51 void invalidate() { complete( { }); }51 void invalidate() { complete(PermissionInfo::Error); } 52 52 53 53 uint64_t frameID() const { return m_frameID; } … … 59 59 ~UserMediaPermissionCheckProxy(); 60 60 61 void complete( Optional<bool> allowed);61 void complete(PermissionInfo); 62 62 63 63 uint64_t m_frameID; -
trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp
r246125 r246185 122 122 return; 123 123 124 auto handler = [this](Optional<bool> originHasPersistentAccess) mutable { 125 if (!originHasPersistentAccess || !m_page.hasRunningProcess()) 126 return; 127 128 if (m_grantedRequests.isEmpty() && !*originHasPersistentAccess) 124 auto handler = [this](PermissionInfo permissionInfo) mutable { 125 switch (permissionInfo) { 126 case PermissionInfo::Error: 127 return; 128 case PermissionInfo::Unknown: 129 if (m_grantedRequests.isEmpty()) 130 return; 131 break; 132 case PermissionInfo::Granted: 133 break; 134 } 135 if (!m_page.hasRunningProcess()) 129 136 return; 130 137 … … 380 387 auto& userMediaDocumentSecurityOrigin = m_currentUserMediaRequest->userMediaDocumentSecurityOrigin(); 381 388 auto& topLevelDocumentSecurityOrigin = m_currentUserMediaRequest->topLevelDocumentSecurityOrigin(); 382 getUserMediaPermissionInfo(m_currentUserMediaRequest->frameID(), userMediaDocumentSecurityOrigin, topLevelDocumentSecurityOrigin, [this, request = m_currentUserMediaRequest]( Optional<bool> hasPersistentAccess) mutable {389 getUserMediaPermissionInfo(m_currentUserMediaRequest->frameID(), userMediaDocumentSecurityOrigin, topLevelDocumentSecurityOrigin, [this, request = m_currentUserMediaRequest](auto permissionInfo) mutable { 383 390 if (!request->isPending()) 384 391 return; 385 392 386 if (!hasPersistentAccess) { 387 denyRequest(*m_currentUserMediaRequest, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason::OtherFailure); 388 return; 393 switch (permissionInfo) { 394 case PermissionInfo::Error: 395 this->denyRequest(*m_currentUserMediaRequest, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason::OtherFailure); 396 return; 397 case PermissionInfo::Unknown: 398 break; 399 case PermissionInfo::Granted: 400 m_currentUserMediaRequest->setHasPersistentAccess(); 401 break; 389 402 } 390 391 ALWAYS_LOG(LOGIDENTIFIER, m_currentUserMediaRequest->userMediaID(), ", persistent access: ", *hasPersistentAccess); 392 processUserMediaPermissionRequest(*hasPersistentAccess); 403 this->processUserMediaPermissionRequest(); 393 404 }); 394 405 } 395 406 396 void UserMediaPermissionRequestManagerProxy::processUserMediaPermissionRequest(bool hasPersistentAccess) 397 { 398 ALWAYS_LOG(LOGIDENTIFIER, m_currentUserMediaRequest->userMediaID()); 399 400 if (hasPersistentAccess) 401 m_currentUserMediaRequest->setHasPersistentAccess(); 407 void UserMediaPermissionRequestManagerProxy::processUserMediaPermissionRequest() 408 { 409 ALWAYS_LOG(LOGIDENTIFIER, m_currentUserMediaRequest->userMediaID(), ", persistent access: ", m_currentUserMediaRequest->hasPersistentAccess()); 402 410 403 411 auto& userMediaDocumentSecurityOrigin = m_currentUserMediaRequest->userMediaDocumentSecurityOrigin(); … … 505 513 } 506 514 507 void UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo(uint64_t frameID, Ref<SecurityOrigin>&& userMediaDocumentOrigin, Ref<SecurityOrigin>&& topLevelDocumentOrigin, CompletionHandler<void( Optional<bool>)>&& handler)515 void UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo(uint64_t frameID, Ref<SecurityOrigin>&& userMediaDocumentOrigin, Ref<SecurityOrigin>&& topLevelDocumentOrigin, CompletionHandler<void(PermissionInfo)>&& handler) 508 516 { 509 517 auto* webFrame = m_page.process().webFrame(frameID); … … 519 527 m_pendingDeviceRequests.add(requestID); 520 528 521 auto request = UserMediaPermissionCheckProxy::create(frameID, [this, weakThis = makeWeakPtr(*this), requestID, handler = WTFMove(handler)](Optional<bool> allowed) mutable { 522 if (!weakThis || !m_pendingDeviceRequests.remove(requestID) || !allowed) { 523 handler({ }); 524 return; 525 } 526 handler(*allowed); 529 auto request = UserMediaPermissionCheckProxy::create(frameID, [this, weakThis = makeWeakPtr(*this), requestID, handler = WTFMove(handler)](auto permissionInfo) mutable { 530 if (!weakThis || !m_pendingDeviceRequests.remove(requestID)) 531 permissionInfo = PermissionInfo::Error; 532 handler(permissionInfo); 527 533 }, WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin)); 528 534 … … 595 601 ALWAYS_LOG(LOGIDENTIFIER, userMediaID); 596 602 597 auto completionHandler = [this, userMediaID, frameID, userMediaDocumentOrigin = userMediaDocumentOrigin.copyRef(), topLevelDocumentOrigin = topLevelDocumentOrigin.copyRef()](Optional<bool> originHasPersistentAccess) mutable { 598 if (!originHasPersistentAccess) 599 return; 603 auto completionHandler = [this, userMediaID, frameID, userMediaDocumentOrigin = userMediaDocumentOrigin.copyRef(), topLevelDocumentOrigin = topLevelDocumentOrigin.copyRef()](PermissionInfo permissionInfo) mutable { 604 605 bool originHasPersistentAccess; 606 switch (permissionInfo) { 607 case PermissionInfo::Error: 608 return; 609 case PermissionInfo::Unknown: 610 originHasPersistentAccess = false; 611 break; 612 case PermissionInfo::Granted: 613 originHasPersistentAccess = true; 614 break; 615 } 600 616 601 617 if (!m_page.hasRunningProcess()) … … 607 623 auto& requestOrigin = userMediaDocumentOrigin.get(); 608 624 auto& topOrigin = topLevelDocumentOrigin.get(); 609 m_page.websiteDataStore().deviceIdHashSaltStorage().deviceIdHashSaltForOrigin(requestOrigin, topOrigin, [this, weakThis = makeWeakPtr(*this), requestID, frameID, userMediaID, userMediaDocumentOrigin = WTFMove(userMediaDocumentOrigin), topLevelDocumentOrigin = WTFMove(topLevelDocumentOrigin), originHasPersistentAccess = *originHasPersistentAccess] (String&& deviceIDHashSalt) {625 m_page.websiteDataStore().deviceIdHashSaltStorage().deviceIdHashSaltForOrigin(requestOrigin, topOrigin, [this, weakThis = makeWeakPtr(*this), requestID, frameID, userMediaID, userMediaDocumentOrigin = WTFMove(userMediaDocumentOrigin), topLevelDocumentOrigin = WTFMove(topLevelDocumentOrigin), originHasPersistentAccess] (String&& deviceIDHashSalt) { 610 626 if (!weakThis || !m_pendingDeviceRequests.remove(requestID)) 611 627 return; -
trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.h
r246093 r246185 101 101 bool wasRequestDenied(uint64_t mainFrameID, const WebCore::SecurityOrigin& userMediaDocumentOrigin, const WebCore::SecurityOrigin& topLevelDocumentOrigin, bool needsAudio, bool needsVideo, bool needsScreenCapture); 102 102 103 void getUserMediaPermissionInfo(uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, CompletionHandler<void(Optional<bool>)>&&); 103 using PermissionInfo = UserMediaPermissionCheckProxy::PermissionInfo; 104 void getUserMediaPermissionInfo(uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, CompletionHandler<void(PermissionInfo)>&&); 104 105 105 106 RequestAction getRequestAction(const UserMediaPermissionRequestProxy&); … … 109 110 Vector<WebCore::CaptureDevice> computeFilteredDeviceList(bool revealIdsAndLabels, const String& deviceIDHashSalt); 110 111 111 void processUserMediaPermissionRequest( bool hasPersistentAccess);112 void processUserMediaPermissionRequest(); 112 113 void processUserMediaPermissionInvalidRequest(const String& invalidConstraint); 113 114 void processUserMediaPermissionValidRequest(Vector<WebCore::CaptureDevice>&& audioDevices, Vector<WebCore::CaptureDevice>&& videoDevices, String&& deviceIdentifierHashSalt);
Note: See TracChangeset
for help on using the changeset viewer.