Ignore:
Timestamp:
Feb 8, 2021, 12:37:31 AM (4 years ago)
Author:
Philippe Normand
Message:

Permission request API for MediaKeySystem access support
https://bugs.webkit.org/show_bug.cgi?id=221187

Reviewed by Jer Noble.

Source/WebCore:

Support for user permission requesting when access to an EME MediaKeySystem is being
requested by the page. This is similar to the mediaDevices access guards.

Existing test media/encrypted-media/mock-MediaKeySystemAccess.html was updated to cover this
new code path and WPE/GTK API tests as well.

  • CMakeLists.txt:
  • Headers.cmake:
  • Modules/encryptedmedia/MediaKeySystemClient.h: Added.
  • Modules/encryptedmedia/MediaKeySystemController.cpp: Added.

(WebCore::MediaKeySystemController::supplementName):
(WebCore::MediaKeySystemController::MediaKeySystemController):
(WebCore::MediaKeySystemController::~MediaKeySystemController):
(WebCore::provideMediaKeySystemTo):
(WebCore::MediaKeySystemController::logRequestMediaKeySystemDenial):

  • Modules/encryptedmedia/MediaKeySystemController.h: Added.

(WebCore::MediaKeySystemController::client const):
(WebCore::MediaKeySystemController::from):
(WebCore::MediaKeySystemController::requestMediaKeySystem):
(WebCore::MediaKeySystemController::cancelMediaKeySystemRequest):

  • Modules/encryptedmedia/MediaKeySystemRequest.cpp: Added.

(WebCore::MediaKeySystemRequest::create):
(WebCore::MediaKeySystemRequest::MediaKeySystemRequest):
(WebCore::MediaKeySystemRequest::~MediaKeySystemRequest):
(WebCore::MediaKeySystemRequest::topLevelDocumentOrigin const):
(WebCore::MediaKeySystemRequest::start):
(WebCore::MediaKeySystemRequest::allow):
(WebCore::MediaKeySystemRequest::deny):
(WebCore::MediaKeySystemRequest::stop):
(WebCore::MediaKeySystemRequest::activeDOMObjectName const):
(WebCore::MediaKeySystemRequest::document const):

  • Modules/encryptedmedia/MediaKeySystemRequest.h: Added.

(WebCore::MediaKeySystemRequest::setAllowCallback):
(WebCore::MediaKeySystemRequest::identifier const):
(WebCore::MediaKeySystemRequest::keySystem const):

  • Modules/encryptedmedia/NavigatorEME.cpp:

(WebCore::NavigatorEME::requestMediaKeySystemAccess):

Source/WebKit:

Add new IPC and C API exposing MediaKeySystem access permissions to the UIProcess. At least
GTK/WPE would like to have API for asking permission to the user when EME's MediaKeyAccess
is being requested by a page. On Apple platforms the permission is granted by default until
a decision is made about supporting this in their APIUIClient.

  • CMakeLists.txt:
  • Headers.cmake:
  • Platform/Logging.h:
  • Shared/API/APIObject.h:
  • Shared/API/c/WKBase.h:
  • Sources.txt:
  • UIProcess/API/APIUIClient.h:

(API::UIClient::decidePolicyForMediaKeySystemPermissionRequest):

  • UIProcess/API/C/WKAPICast.h:
  • UIProcess/API/C/WKMediaKeySystemPermissionCallback.cpp: Added.

(WKMediaKeySystemPermissionCallbackGetTypeID):
(WKMediaKeySystemPermissionCallbackComplete):

  • UIProcess/API/C/WKMediaKeySystemPermissionCallback.h: Added.
  • UIProcess/API/C/WKPage.cpp:

(WKPageSetPageUIClient):

  • UIProcess/API/C/WKPageUIClient.h:
  • UIProcess/MediaKeySystemPermissionRequest.h: Added.

(WebKit::MediaKeySystemPermissionRequest::create):
(WebKit::MediaKeySystemPermissionRequest::complete):
(WebKit::MediaKeySystemPermissionRequest::keySystem const):
(WebKit::MediaKeySystemPermissionRequest::MediaKeySystemPermissionRequest):
(WebKit::MediaKeySystemPermissionCallback::create):
(WebKit::MediaKeySystemPermissionCallback::complete):
(WebKit::MediaKeySystemPermissionCallback::MediaKeySystemPermissionCallback):

  • UIProcess/MediaKeySystemPermissionRequestManagerProxy.cpp: Added.

(WebKit::MediaKeySystemPermissionRequestManagerProxy::MediaKeySystemPermissionRequestManagerProxy):
(WebKit::MediaKeySystemPermissionRequestManagerProxy::~MediaKeySystemPermissionRequestManagerProxy):
(WebKit::MediaKeySystemPermissionRequestManagerProxy::invalidatePendingRequests):
(WebKit::MediaKeySystemPermissionRequestManagerProxy::denyRequest):
(WebKit::MediaKeySystemPermissionRequestManagerProxy::grantRequest):
(WebKit::MediaKeySystemPermissionRequestManagerProxy::createRequestForFrame):
(WebKit::MediaKeySystemPermissionRequestManagerProxy::logChannel const):
(WebKit::MediaKeySystemPermissionRequestManagerProxy::logger const):

  • UIProcess/MediaKeySystemPermissionRequestManagerProxy.h: Added.

(WebKit::MediaKeySystemPermissionRequestManagerProxy::page const):
(WebKit::MediaKeySystemPermissionRequestManagerProxy::denyRequest):

  • UIProcess/MediaKeySystemPermissionRequestProxy.cpp: Added.

(WebKit::MediaKeySystemPermissionRequestProxy::MediaKeySystemPermissionRequestProxy):
(WebKit::MediaKeySystemPermissionRequestProxy::allow):
(WebKit::MediaKeySystemPermissionRequestProxy::deny):
(WebKit::MediaKeySystemPermissionRequestProxy::invalidate):
(WebKit::MediaKeySystemPermissionRequestProxy::doDefaultAction):

  • UIProcess/MediaKeySystemPermissionRequestProxy.h: Added.

(WebKit::MediaKeySystemPermissionRequestProxy::create):
(WebKit::MediaKeySystemPermissionRequestProxy::isPending const):
(WebKit::MediaKeySystemPermissionRequestProxy::mediaKeySystemID const):
(WebKit::MediaKeySystemPermissionRequestProxy::mainFrameID const):
(WebKit::MediaKeySystemPermissionRequestProxy::frameID const):
(WebKit::MediaKeySystemPermissionRequestProxy::topLevelDocumentSecurityOrigin):
(WebKit::MediaKeySystemPermissionRequestProxy::topLevelDocumentSecurityOrigin const):
(WebKit::MediaKeySystemPermissionRequestProxy::keySystem const):

  • UIProcess/SpeechRecognitionRemoteRealtimeMediaSource.h:
  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::requestMediaKeySystemPermissionForFrame):
(WebKit::WebPageProxy::mediaKeySystemPermissionRequestManager):
(WebKit::WebPageProxy::requestMediaKeySystemPermissionByDefaultAction):

  • UIProcess/WebPageProxy.h:
  • UIProcess/WebPageProxy.messages.in:
  • WebProcess/EncryptedMedia/MediaKeySystemPermissionRequestManager.cpp: Added.

(WebKit::MediaKeySystemPermissionRequestManager::MediaKeySystemPermissionRequestManager):
(WebKit::MediaKeySystemPermissionRequestManager::startMediaKeySystemRequest):
(WebKit::MediaKeySystemPermissionRequestManager::sendMediaKeySystemRequest):
(WebKit::MediaKeySystemPermissionRequestManager::cancelMediaKeySystemRequest):
(WebKit::MediaKeySystemPermissionRequestManager::mediaKeySystemWasGranted):
(WebKit::MediaKeySystemPermissionRequestManager::mediaKeySystemWasDenied):

  • WebProcess/EncryptedMedia/MediaKeySystemPermissionRequestManager.h: Added.
  • WebProcess/WebCoreSupport/WebMediaKeySystemClient.cpp: Added.

(WebKit::WebMediaKeySystemClient::WebMediaKeySystemClient):
(WebKit::WebMediaKeySystemClient::pageDestroyed):
(WebKit::WebMediaKeySystemClient::requestMediaKeySystem):
(WebKit::WebMediaKeySystemClient::cancelMediaKeySystemRequest):

  • WebProcess/WebCoreSupport/WebMediaKeySystemClient.h: Added.

(WebKit::WebMediaKeySystemClient::~WebMediaKeySystemClient):

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::m_limitsNavigationsToAppBoundDomains):
(WebKit::WebPage::mediaKeySystemWasGranted):
(WebKit::WebPage::mediaKeySystemWasDenied):

  • WebProcess/WebPage/WebPage.h:

(WebKit::WebPage::mediaKeySystemPermissionRequestManager):

  • WebProcess/WebPage/WebPage.messages.in:

Tools:

Add support for setting the permission request response from the TestRunner, for usage within layout tests.

  • WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
  • WebKitTestRunner/InjectedBundle/TestRunner.cpp:

(WTR::TestRunner::setIsMediaKeySystemPermissionGranted):

  • WebKitTestRunner/InjectedBundle/TestRunner.h:
  • WebKitTestRunner/TestController.cpp:

(WTR::decidePolicyForMediaKeySystemPermissionRequest):
(WTR::TestController::completeMediaKeySystemPermissionCheck):
(WTR::TestController::setIsMediaKeySystemPermissionGranted):
(WTR::TestController::createWebViewWithOptions):

  • WebKitTestRunner/TestController.h:
  • WebKitTestRunner/TestInvocation.cpp:

(WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

LayoutTests:

Add basic coverage support for overriding the MediaKeySystem permission answer and thus have
the promise rejection tested in this case.

  • media/encrypted-media/mock-MediaKeySystemAccess-expected.txt:
  • media/encrypted-media/mock-MediaKeySystemAccess.html:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/UIProcess/SpeechRecognitionRemoteRealtimeMediaSource.cpp

    r271041 r272480  
    3434#if PLATFORM(COCOA)
    3535#include "SharedRingBufferStorage.h"
     36#include <WebCore/CARingBuffer.h>
     37#include <WebCore/WebAudioBufferList.h>
    3638#endif
    3739
     
    4850    , m_manager(makeWeakPtr(manager))
    4951#if PLATFORM(COCOA)
    50     , m_ringBuffer(makeUnique<CARingBuffer>())
     52    , m_ringBuffer(makeUnique<WebCore::CARingBuffer>())
    5153#endif
    5254{
     
    7880    m_description = description;
    7981
    80     m_ringBuffer = makeUnique<CARingBuffer>(makeUniqueRef<ReadOnlySharedRingBufferStorage>(handle), description, numberOfFrames);
    81     m_buffer = makeUnique<WebAudioBufferList>(description, numberOfFrames);
     82    m_ringBuffer = makeUnique<WebCore::CARingBuffer>(makeUniqueRef<ReadOnlySharedRingBufferStorage>(handle), description, numberOfFrames);
     83    m_buffer = makeUnique<WebCore::WebAudioBufferList>(description, numberOfFrames);
    8284}
    8385
Note: See TracChangeset for help on using the changeset viewer.