WebKit Bugzilla
Attachment 357581 Details for
Bug 192793
: Add a new SPI for controlling getUserMedia
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-192793-20181218110125.patch (text/plain), 43.77 KB, created by
youenn fablet
on 2018-12-18 11:01:25 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2018-12-18 11:01:25 PST
Size:
43.77 KB
patch
obsolete
>Subversion Revision: 239282 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index cc9c4ab4fa4c7dca456962bff2591f4c082d317b..367ca341894f4c6524aa82d90c9bffb9b76fb194 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,45 @@ >+2018-12-17 Youenn Fablet <youenn@apple.com> >+ >+ Add a new SPI for controlling getUserMedia >+ https://bugs.webkit.org/show_bug.cgi?id=192793 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Some weaknesses of the current getUserMedia SPI were found. >+ In particular: >+ - The hash salt should be handled by WebKit >+ - No need to expose the frame URL, only the top level origin is needed >+ - The names of the callback can be improved. >+ Addressed these by creating a new SPI which will replace the current one. >+ The current SPI will be removed later on. >+ >+ Did some refactoring by making the callbacks not returning false. >+ Instead, implement the default behavior inside the request objects as deny methods. >+ >+ * UIProcess/API/APIUIClient.h: >+ (API::UIClient::decidePolicyForUserMediaPermissionRequest): >+ (API::UIClient::checkUserMediaPermissionForOrigin): >+ * UIProcess/API/C/WKPage.cpp: >+ (WKPageSetPageUIClient): >+ * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: >+ * UIProcess/API/Cocoa/WKWebView.mm: >+ (-[WKWebView _mediaCaptureState]): >+ (-[WKWebView _setMediaCaptureMuted:]): >+ * UIProcess/API/Cocoa/WKWebViewPrivate.h: >+ * UIProcess/Cocoa/UIDelegate.h: >+ * UIProcess/Cocoa/UIDelegate.mm: >+ (WebKit::UIDelegate::setDelegate): >+ (WebKit::requestUserMediaAuthorizationForFrame): >+ (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest): >+ (WebKit::UIDelegate::UIClient::checkUserMediaPermissionForOrigin): >+ (WebKit::UIDelegate::UIClient::mediaCaptureStateDidChange): >+ * UIProcess/UserMediaPermissionCheckProxy.h: >+ (WebKit::UserMediaPermissionCheckProxy::deny): >+ * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: >+ (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame): >+ (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo): >+ * UIProcess/UserMediaPermissionRequestProxy.h: >+ > 2018-12-17 Zan Dobersek <zdobersek@igalia.com> > > Unreviewed WPE build fix after r239277. >diff --git a/Source/WebKit/SourcesCocoa.txt b/Source/WebKit/SourcesCocoa.txt >index f1a057a45db0fa35ce10dcf419693efe818a6da3..eb69a53d22720429fa879ffbe53df878558c5c59 100644 >--- a/Source/WebKit/SourcesCocoa.txt >+++ b/Source/WebKit/SourcesCocoa.txt >@@ -319,6 +319,7 @@ UIProcess/Cocoa/FindClient.mm > UIProcess/Cocoa/FullscreenClient.mm > UIProcess/Cocoa/IconLoadingDelegate.mm > UIProcess/Cocoa/LegacyCustomProtocolManagerClient.mm >+UIProcess/Cocoa/MediaCaptureUtilities.mm > UIProcess/Cocoa/NavigationState.mm > UIProcess/Cocoa/PageClientImplCocoa.mm > UIProcess/Cocoa/PlaybackSessionManagerProxy.mm >diff --git a/Source/WebKit/UIProcess/API/APIUIClient.h b/Source/WebKit/UIProcess/API/APIUIClient.h >index 43ff763b9048cc40a967d9456bbe03acbb95027c..03d12300d17169f47c81dc2601a6a40717d70aac 100644 >--- a/Source/WebKit/UIProcess/API/APIUIClient.h >+++ b/Source/WebKit/UIProcess/API/APIUIClient.h >@@ -129,8 +129,8 @@ public: > > virtual bool runOpenPanel(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, OpenPanelParameters*, WebKit::WebOpenPanelResultListenerProxy*) { return false; } > virtual void decidePolicyForGeolocationPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, Function<void(bool)>&) { } >- virtual bool decidePolicyForUserMediaPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, SecurityOrigin&, WebKit::UserMediaPermissionRequestProxy&) { return false; } >- virtual bool checkUserMediaPermissionForOrigin(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, SecurityOrigin&, WebKit::UserMediaPermissionCheckProxy&) { return false; } >+ virtual void decidePolicyForUserMediaPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, SecurityOrigin&, WebKit::UserMediaPermissionRequestProxy&) { } >+ virtual void checkUserMediaPermissionForOrigin(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, SecurityOrigin&, WebKit::UserMediaPermissionCheckProxy&) { } > virtual void decidePolicyForNotificationPermissionRequest(WebKit::WebPageProxy&, SecurityOrigin&, Function<void(bool)>&& completionHandler) { completionHandler(false); } > virtual void requestStorageAccessConfirm(WebKit::WebPageProxy&, WebKit::WebFrameProxy*, const WTF::String& requestingDomain, const WTF::String& currentDomain, CompletionHandler<void(bool)>&& completionHandler) { completionHandler(true); } > >diff --git a/Source/WebKit/UIProcess/API/C/WKPage.cpp b/Source/WebKit/UIProcess/API/C/WKPage.cpp >index 2ce38bbf789738dc5a41e8350880faba978ec642..bd1efcac6f8254ac5f8f24cc0b039b0c0888b77f 100644 >--- a/Source/WebKit/UIProcess/API/C/WKPage.cpp >+++ b/Source/WebKit/UIProcess/API/C/WKPage.cpp >@@ -1855,22 +1855,24 @@ void WKPageSetPageUIClient(WKPageRef pageRef, const WKPageUIClientBase* wkClient > m_client.decidePolicyForGeolocationPermissionRequest(toAPI(&page), toAPI(&frame), toAPI(&origin), toAPI(GeolocationPermissionRequest::create(std::exchange(completionHandler, nullptr)).ptr()), m_client.base.clientInfo); > } > >- bool decidePolicyForUserMediaPermissionRequest(WebPageProxy& page, WebFrameProxy& frame, API::SecurityOrigin& userMediaDocumentOrigin, API::SecurityOrigin& topLevelDocumentOrigin, UserMediaPermissionRequestProxy& permissionRequest) final >+ void decidePolicyForUserMediaPermissionRequest(WebPageProxy& page, WebFrameProxy& frame, API::SecurityOrigin& userMediaDocumentOrigin, API::SecurityOrigin& topLevelDocumentOrigin, UserMediaPermissionRequestProxy& permissionRequest) final > { >- if (!m_client.decidePolicyForUserMediaPermissionRequest) >- return false; >+ if (!m_client.decidePolicyForUserMediaPermissionRequest) { >+ permissionRequest.deny(); >+ return; >+ } > > m_client.decidePolicyForUserMediaPermissionRequest(toAPI(&page), toAPI(&frame), toAPI(&userMediaDocumentOrigin), toAPI(&topLevelDocumentOrigin), toAPI(&permissionRequest), m_client.base.clientInfo); >- return true; > } > >- bool checkUserMediaPermissionForOrigin(WebPageProxy& page, WebFrameProxy& frame, API::SecurityOrigin& userMediaDocumentOrigin, API::SecurityOrigin& topLevelDocumentOrigin, UserMediaPermissionCheckProxy& request) final >+ void checkUserMediaPermissionForOrigin(WebPageProxy& page, WebFrameProxy& frame, API::SecurityOrigin& userMediaDocumentOrigin, API::SecurityOrigin& topLevelDocumentOrigin, UserMediaPermissionCheckProxy& request) final > { >- if (!m_client.checkUserMediaPermissionForOrigin) >- return false; >+ if (!m_client.checkUserMediaPermissionForOrigin) { >+ request.deny(); >+ return; >+ } > > m_client.checkUserMediaPermissionForOrigin(toAPI(&page), toAPI(&frame), toAPI(&userMediaDocumentOrigin), toAPI(&topLevelDocumentOrigin), toAPI(&request), m_client.base.clientInfo); >- return true; > } > > void decidePolicyForNotificationPermissionRequest(WebPageProxy& page, API::SecurityOrigin& origin, Function<void(bool)>&& completionHandler) final >diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h b/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h >index 46c9517af0efaeb46ac92a48f82de5a8a9f55002..b9a9291141bf0fb6d6fcfe11b9779291bd4210e7 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h >+++ b/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h >@@ -105,6 +105,8 @@ struct UIEdgeInsets; > > - (void)_webView:(WKWebView *)webView imageOrMediaDocumentSizeChanged:(CGSize)size WK_API_AVAILABLE(macosx(10.12), ios(10.0)); > - (NSDictionary *)_dataDetectionContextForWebView:(WKWebView *)webView WK_API_AVAILABLE(macosx(10.12), ios(10.0)); >+- (void)_webView:(WKWebView *)webView requestMediaCaptureAuthorizationForFrame:(WKFrameInfo *)mainFrame devices:(_WKCaptureDevices)devices decisionHandler:(void (^)(BOOL authorized))decisionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); >+- (void)_webView:(WKWebView *)webView isMediaCaptureAuthorizedForFrame:(WKFrameInfo *)mainFrame decisionHandler:(void (^)(BOOL authorized))decisionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); > - (void)_webView:(WKWebView *)webView requestUserMediaAuthorizationForDevices:(_WKCaptureDevices)devices url:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL decisionHandler:(void (^)(BOOL authorized))decisionHandler WK_API_AVAILABLE(macosx(10.13), ios(11.0)); > - (void)_webView:(WKWebView *)webView checkUserMediaPermissionForURL:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL frameIdentifier:(NSUInteger)frameIdentifier decisionHandler:(void (^)(NSString *salt, BOOL authorized))decisionHandler WK_API_AVAILABLE(macosx(10.12.3), ios(10.3)); > - (void)_webView:(WKWebView *)webView mediaCaptureStateDidChange:(_WKMediaCaptureState)state WK_API_AVAILABLE(macosx(10.13), ios(11.0)); >diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm b/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm >index ba2048eabaab68cd733825c64f8b920fab96441e..db34dd157270a01dbd2b92cd918508bfe21f70b1 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm >+++ b/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm >@@ -40,6 +40,7 @@ > #import "IconLoadingDelegate.h" > #import "LegacySessionStateCoding.h" > #import "Logging.h" >+#import "MediaCaptureUtilities.h" > #import "NavigationState.h" > #import "ObjCObjectGraph.h" > #import "PageClient.h" >@@ -5438,6 +5439,16 @@ - (BOOL)_isInFullscreen > #endif > } > >+- (_WKMediaCaptureState)_mediaCaptureState >+{ >+ return WebKit::toWKMediaCaptureState(_page->mediaStateFlags()); >+} >+ >+- (void)_setMediaCaptureMuted:(BOOL)muted >+{ >+ _page->setMediaStreamCaptureMuted(muted); >+} >+ > - (void)_muteMediaCapture > { > _page->setMediaStreamCaptureMuted(true); >diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h b/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h >index 170c2aaefa150b41f996cce468ce32779bad6f8f..fa1c8d449ae6a8b3bd2fb157f889ecf8a43ab9ac 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h >+++ b/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h >@@ -390,6 +390,9 @@ typedef NS_OPTIONS(NSUInteger, _WKRectEdge) { > @property (nonatomic, setter=_setFullscreenDelegate:) id<_WKFullscreenDelegate> _fullscreenDelegate WK_API_AVAILABLE(macosx(10.13), ios(11.0)); > @property (nonatomic, readonly) BOOL _isInFullscreen WK_API_AVAILABLE(macosx(10.12.3)); > >+@property (nonatomic, readonly) _WKMediaCaptureState _mediaCaptureState WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); >+ >+- (void)_setMediaCaptureMuted:(BOOL)muted WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); > - (void)_muteMediaCapture WK_API_AVAILABLE(macosx(10.13), ios(11.0)); > - (void)_setPageMuted:(_WKMediaMutedState)mutedState WK_API_AVAILABLE(macosx(10.13), ios(11.0)); > >diff --git a/Source/WebKit/UIProcess/Cocoa/UIDelegate.h b/Source/WebKit/UIProcess/Cocoa/UIDelegate.h >index 38dd7ecbcfb5f2a60fc86c98be8b0f31a854ff86..8fd16a9812c04adf085e544aee3804c822d5f166 100644 >--- a/Source/WebKit/UIProcess/Cocoa/UIDelegate.h >+++ b/Source/WebKit/UIProcess/Cocoa/UIDelegate.h >@@ -123,8 +123,8 @@ private: > #endif > bool needsFontAttributes() const final { return m_uiDelegate.m_delegateMethods.webViewDidChangeFontAttributes; } > void didChangeFontAttributes(const WebCore::FontAttributes&) final; >- bool decidePolicyForUserMediaPermissionRequest(WebPageProxy&, WebFrameProxy&, API::SecurityOrigin&, API::SecurityOrigin&, UserMediaPermissionRequestProxy&) final; >- bool checkUserMediaPermissionForOrigin(WebPageProxy&, WebFrameProxy&, API::SecurityOrigin&, API::SecurityOrigin&, UserMediaPermissionCheckProxy&) final; >+ void decidePolicyForUserMediaPermissionRequest(WebPageProxy&, WebFrameProxy&, API::SecurityOrigin&, API::SecurityOrigin&, UserMediaPermissionRequestProxy&) final; >+ void checkUserMediaPermissionForOrigin(WebPageProxy&, WebFrameProxy&, API::SecurityOrigin&, API::SecurityOrigin&, UserMediaPermissionCheckProxy&) final; > void mediaCaptureStateDidChange(WebCore::MediaProducer::MediaStateFlags) final; > void printFrame(WebPageProxy&, WebFrameProxy&) final; > #if PLATFORM(IOS_FAMILY) >@@ -198,8 +198,8 @@ private: > bool webViewFullscreenMayReturnToInline : 1; > bool webViewDidEnterFullscreen : 1; > bool webViewDidExitFullscreen : 1; >- bool webViewRequestUserMediaAuthorizationForDevicesURLMainFrameURLDecisionHandler : 1; >- bool webViewCheckUserMediaPermissionForURLMainFrameURLFrameIdentifierDecisionHandler : 1; >+ bool webViewRequestMediaCaptureAuthorizationForFrameDecisionHandler : 1; >+ bool webViewIsMediaCaptureAuthorizedForFrameDecisionHandler : 1; > bool webViewMediaCaptureStateDidChange : 1; > bool webViewDidChangeFontAttributes : 1; > #if PLATFORM(IOS_FAMILY) >diff --git a/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm b/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm >index ce84a8884789735d1a132b1eb6ea6de2803a786d..76da152ed0d550a62069fb0768d18f095baf5582 100644 >--- a/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm >+++ b/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm >@@ -31,6 +31,7 @@ > #import "APIFrameInfo.h" > #import "APIHitTestResult.h" > #import "CompletionHandlerCallChecker.h" >+#import "MediaCaptureUtilities.h" > #import "NativeWebWheelEvent.h" > #import "NavigationActionData.h" > #import "UserMediaPermissionCheckProxy.h" >@@ -150,8 +151,9 @@ void UIDelegate::setDelegate(id <WKUIDelegate> delegate) > m_delegateMethods.webViewDidNotHandleTapAsClickAtPoint = [delegate respondsToSelector:@selector(_webView:didNotHandleTapAsClickAtPoint:)]; > m_delegateMethods.presentingViewControllerForWebView = [delegate respondsToSelector:@selector(_presentingViewControllerForWebView:)]; > #endif >- m_delegateMethods.webViewRequestUserMediaAuthorizationForDevicesURLMainFrameURLDecisionHandler = [delegate respondsToSelector:@selector(_webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:)]; >- m_delegateMethods.webViewCheckUserMediaPermissionForURLMainFrameURLFrameIdentifierDecisionHandler = [delegate respondsToSelector:@selector(_webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:)]; >+ m_delegateMethods.webViewRequestMediaCaptureAuthorizationForFrameDecisionHandler = [delegate respondsToSelector:@selector(_webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:)] || [delegate respondsToSelector:@selector(_webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:)]; >+ m_delegateMethods.webViewIsMediaCaptureAuthorizedForFrameDecisionHandler = [delegate respondsToSelector:@selector(_webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:)] || [delegate respondsToSelector:@selector(_webView:isMediaCaptureAuthorizedForFrame:decisionHandler:)]; >+ > m_delegateMethods.webViewMediaCaptureStateDidChange = [delegate respondsToSelector:@selector(_webView:mediaCaptureStateDidChange:)]; > m_delegateMethods.webViewDidChangeFontAttributes = [delegate respondsToSelector:@selector(_webView:didChangeFontAttributes:)]; > m_delegateMethods.dataDetectionContextForWebView = [delegate respondsToSelector:@selector(_dataDetectionContextForWebView:)]; >@@ -855,7 +857,7 @@ bool UIDelegate::UIClient::runOpenPanel(WebPageProxy*, WebFrameProxy* webFramePr > #endif > > #if ENABLE(MEDIA_STREAM) >-static void requestUserMediaAuthorizationForDevices(const WebFrameProxy& frame, UserMediaPermissionRequestProxy& request, id <WKUIDelegatePrivate> delegate, WKWebView& webView) >+static void requestUserMediaAuthorizationForFrame(const WebFrameProxy& frame, API::SecurityOrigin& topLevelOrigin, UserMediaPermissionRequestProxy& request, id <WKUIDelegatePrivate> delegate, WKWebView& webView) > { > auto decisionHandler = makeBlockPtr([protectedRequest = makeRef(request)](BOOL authorized) { > if (!authorized) { >@@ -867,10 +869,6 @@ static void requestUserMediaAuthorizationForDevices(const WebFrameProxy& frame, > protectedRequest->allow(audioDeviceUID, videoDeviceUID); > }); > >- const WebFrameProxy* mainFrame = frame.page()->mainFrame(); >- URL requestFrameURL(URL(), frame.url()); >- URL mainFrameURL(URL(), mainFrame->url()); >- > _WKCaptureDevices devices = 0; > if (request.requiresAudioCapture()) > devices |= _WKCaptureDeviceMicrophone; >@@ -881,8 +879,19 @@ static void requestUserMediaAuthorizationForDevices(const WebFrameProxy& frame, > ASSERT(!(devices & _WKCaptureDeviceCamera)); > } > >- auto protectedWebView = RetainPtr<WKWebView>(&webView); >- [delegate _webView:protectedWebView.get() requestUserMediaAuthorizationForDevices:devices url:requestFrameURL mainFrameURL:mainFrameURL decisionHandler:decisionHandler.get()]; >+ const WebFrameProxy* mainFrame = frame.page()->mainFrame(); >+ >+ // FIXME: Provide a specific delegate for display capture. >+ if (!request.requiresDisplayCapture() && [delegate respondsToSelector:@selector(_webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:)]) { >+ >+ [delegate _webView:&webView requestMediaCaptureAuthorizationForFrame:wrapper(API::FrameInfo::create(*mainFrame, topLevelOrigin.securityOrigin())) devices:devices decisionHandler:decisionHandler.get()]; >+ return; >+ } >+ >+ URL requestFrameURL(URL(), frame.url()); >+ URL mainFrameURL(URL(), mainFrame->url()); >+ >+ [delegate _webView:&webView requestUserMediaAuthorizationForDevices:devices url:requestFrameURL mainFrameURL:mainFrameURL decisionHandler:decisionHandler.get()]; > } > #endif > >@@ -895,13 +904,13 @@ void UIDelegate::UIClient::didChangeFontAttributes(const WebCore::FontAttributes > [privateUIDelegate _webView:m_uiDelegate.m_webView didChangeFontAttributes:fontAttributes.createDictionary().get()]; > } > >-bool UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest(WebPageProxy& page, WebFrameProxy& frame, API::SecurityOrigin& userMediaOrigin, API::SecurityOrigin& topLevelOrigin, UserMediaPermissionRequestProxy& request) >+void UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest(WebPageProxy& page, WebFrameProxy& frame, API::SecurityOrigin& userMediaOrigin, API::SecurityOrigin& topLevelOrigin, UserMediaPermissionRequestProxy& request) > { > #if ENABLE(MEDIA_STREAM) > auto delegate = m_uiDelegate.m_delegate.get(); >- if (!delegate || !m_uiDelegate.m_delegateMethods.webViewRequestUserMediaAuthorizationForDevicesURLMainFrameURLDecisionHandler) { >+ if (!delegate || !m_uiDelegate.m_delegateMethods.webViewRequestMediaCaptureAuthorizationForFrameDecisionHandler) { > request.deny(UserMediaPermissionRequestProxy::UserMediaAccessDenialReason::UserMediaDisabled); >- return true; >+ return; > } > > bool requiresAudioCapture = request.requiresAudioCapture(); >@@ -909,21 +918,21 @@ bool UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest(WebPageProx > bool requiresDisplayCapture = request.requiresDisplayCapture(); > if (!requiresAudioCapture && !requiresVideoCapture && !requiresDisplayCapture) { > request.deny(UserMediaPermissionRequestProxy::UserMediaAccessDenialReason::NoConstraints); >- return true; >+ return; > } > > #if PLATFORM(IOS_FAMILY) > bool usingMockCaptureDevices = page.preferences().mockCaptureDevicesEnabled(); >- auto requestCameraAuthorization = makeBlockPtr([this, &frame, protectedRequest = makeRef(request), webView = RetainPtr<WKWebView>(m_uiDelegate.m_webView), usingMockCaptureDevices]() { >+ auto requestCameraAuthorization = makeBlockPtr([this, &frame, protectedRequest = makeRef(request), webView = RetainPtr<WKWebView>(m_uiDelegate.m_webView), topLevelOrigin = makeRef(topLevelOrigin), usingMockCaptureDevices]() { > > if (!protectedRequest->requiresVideoCapture()) { >- requestUserMediaAuthorizationForDevices(frame, protectedRequest, (id <WKUIDelegatePrivate>)m_uiDelegate.m_delegate.get(), *webView.get()); >+ requestUserMediaAuthorizationForFrame(frame, protectedRequest, (id <WKUIDelegatePrivate>)m_uiDelegate.m_delegate.get(), *webView.get()); > return; > } > AVAuthorizationStatus cameraAuthorizationStatus = usingMockCaptureDevices ? AVAuthorizationStatusAuthorized : [getAVCaptureDeviceClass() authorizationStatusForMediaType:getAVMediaTypeVideo()]; > switch (cameraAuthorizationStatus) { > case AVAuthorizationStatusAuthorized: >- requestUserMediaAuthorizationForDevices(frame, protectedRequest, (id <WKUIDelegatePrivate>)m_uiDelegate.m_delegate.get(), *webView.get()); >+ requestUserMediaAuthorizationForFrame(frame, protectedRequest, (id <WKUIDelegatePrivate>)m_uiDelegate.m_delegate.get(), *webView.get()); > break; > case AVAuthorizationStatusDenied: > case AVAuthorizationStatusRestricted: >@@ -935,7 +944,7 @@ bool UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest(WebPageProx > protectedRequest->deny(UserMediaPermissionRequestProxy::UserMediaAccessDenialReason::PermissionDenied); > return; > } >- requestUserMediaAuthorizationForDevices(frame, protectedRequest, (id <WKUIDelegatePrivate>)m_uiDelegate.m_delegate.get(), *webView.get()); >+ requestUserMediaAuthorizationForFrame(frame, topLevelOrigin, protectedRequest, (id <WKUIDelegatePrivate>)m_uiDelegate.m_delegate.get(), *webView.get()); > }); > > [getAVCaptureDeviceClass() requestAccessForMediaType:getAVMediaTypeVideo() completionHandler:decisionHandler.get()]; >@@ -968,53 +977,51 @@ bool UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest(WebPageProx > } else > requestCameraAuthorization(); > #else >- requestUserMediaAuthorizationForDevices(frame, request, (id <WKUIDelegatePrivate>)m_uiDelegate.m_delegate.get(), *m_uiDelegate.m_webView); >+ requestUserMediaAuthorizationForFrame(frame, topLevelOrigin, request, (id <WKUIDelegatePrivate>)m_uiDelegate.m_delegate.get(), *m_uiDelegate.m_webView); > #endif > #endif >- >- return true; > } > >-bool UIDelegate::UIClient::checkUserMediaPermissionForOrigin(WebPageProxy& page, WebFrameProxy& frame, API::SecurityOrigin& userMediaOrigin, API::SecurityOrigin& topLevelOrigin, UserMediaPermissionCheckProxy& request) >+void UIDelegate::UIClient::checkUserMediaPermissionForOrigin(WebPageProxy& page, WebFrameProxy& frame, API::SecurityOrigin& userMediaOrigin, API::SecurityOrigin& topLevelOrigin, UserMediaPermissionCheckProxy& request) > { > auto delegate = m_uiDelegate.m_delegate.get(); >- if (!delegate || !m_uiDelegate.m_delegateMethods.webViewCheckUserMediaPermissionForURLMainFrameURLFrameIdentifierDecisionHandler) { >+ if (!delegate || !m_uiDelegate.m_delegateMethods.webViewIsMediaCaptureAuthorizedForFrameDecisionHandler) { > request.setUserMediaAccessInfo(false); >- return true; >+ return; > } > >- WKWebView *webView = m_uiDelegate.m_webView; >- const WebFrameProxy* mainFrame = frame.page()->mainFrame(); >- URL requestFrameURL(URL(), frame.url()); >- URL mainFrameURL(URL(), mainFrame->url()); >+ const auto mainFrame = frame.page()->mainFrame(); >+ >+ if ([delegate respondsToSelector:@selector(_webView:isMediaCaptureAuthorizedForFrame:decisionHandler:)]) { >+ auto decisionHandler = makeBlockPtr([protectedRequest = makeRef(request)](BOOL authorized) { >+ protectedRequest->setUserMediaAccessInfo(authorized); >+ }); >+ >+ [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView isMediaCaptureAuthorizedForFrame:wrapper(API::FrameInfo::create(*mainFrame, topLevelOrigin.securityOrigin())) decisionHandler:decisionHandler.get()]; >+ return; >+ } > > auto decisionHandler = makeBlockPtr([protectedRequest = makeRef(request)](NSString*, BOOL authorized) { > protectedRequest->setUserMediaAccessInfo(authorized); > }); > >- [(id <WKUIDelegatePrivate>)delegate _webView:webView checkUserMediaPermissionForURL:requestFrameURL mainFrameURL:mainFrameURL frameIdentifier:frame.frameID() decisionHandler:decisionHandler.get()]; >+ URL requestFrameURL(URL(), frame.url()); >+ URL mainFrameURL(URL(), mainFrame->url()); > >- return true; >+ [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView checkUserMediaPermissionForURL:requestFrameURL mainFrameURL:mainFrameURL frameIdentifier:frame.frameID() decisionHandler:decisionHandler.get()]; > } > > void UIDelegate::UIClient::mediaCaptureStateDidChange(WebCore::MediaProducer::MediaStateFlags state) > { > WKWebView *webView = m_uiDelegate.m_webView; >+ >+ [webView didChangeValueForKey:@"mediaCaptureState"]; >+ > auto delegate = m_uiDelegate.m_delegate.get(); > if (!delegate || !m_uiDelegate.m_delegateMethods.webViewMediaCaptureStateDidChange) > return; > >- _WKMediaCaptureState mediaCaptureState = _WKMediaCaptureStateNone; >- if (state & WebCore::MediaProducer::HasActiveAudioCaptureDevice) >- mediaCaptureState |= _WKMediaCaptureStateActiveMicrophone; >- if (state & WebCore::MediaProducer::HasActiveVideoCaptureDevice) >- mediaCaptureState |= _WKMediaCaptureStateActiveCamera; >- if (state & WebCore::MediaProducer::HasMutedAudioCaptureDevice) >- mediaCaptureState |= _WKMediaCaptureStateMutedMicrophone; >- if (state & WebCore::MediaProducer::HasMutedVideoCaptureDevice) >- mediaCaptureState |= _WKMediaCaptureStateMutedCamera; >- >- [(id <WKUIDelegatePrivate>)delegate _webView:webView mediaCaptureStateDidChange:mediaCaptureState]; >+ [(id <WKUIDelegatePrivate>)delegate _webView:webView mediaCaptureStateDidChange:toWKMediaCaptureState(state)]; > } > > void UIDelegate::UIClient::reachedApplicationCacheOriginQuota(WebPageProxy*, const WebCore::SecurityOrigin& securityOrigin, uint64_t currentQuota, uint64_t totalBytesNeeded, Function<void (unsigned long long)>&& completionHandler) >diff --git a/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.h b/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.h >index d91f04ffdab8d142454d5063fe17f0ebfa8334eb..6a089506cea388d1d4c3d6defda5fe0e0aee57c4 100644 >--- a/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.h >+++ b/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.h >@@ -46,6 +46,7 @@ public: > return adoptRef(*new UserMediaPermissionCheckProxy(frameID, WTFMove(handler), WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin))); > } > >+ void deny() { setUserMediaAccessInfo(false); } > void setUserMediaAccessInfo(bool); > void invalidate(); > >diff --git a/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp b/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp >index 95f553dd225ebcaf3db8f9ad02b57a43a8bcbf83..74d57889978d7c31f0d13c9e1c4c81c8c8fa459d 100644 >--- a/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp >+++ b/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp >@@ -374,8 +374,7 @@ void UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame( > return; > } > >- if (!m_page.uiClient().decidePolicyForUserMediaPermissionRequest(m_page, *m_page.process().webFrame(frameID), WTFMove(userMediaOrigin), WTFMove(topLevelOrigin), pendingRequest.get())) >- userMediaAccessWasDenied(userMediaID, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason::UserMediaDisabled); >+ m_page.uiClient().decidePolicyForUserMediaPermissionRequest(m_page, *m_page.process().webFrame(frameID), WTFMove(userMediaOrigin), WTFMove(topLevelOrigin), pendingRequest.get()); > }; > > auto requestID = generateRequestID(); >@@ -417,10 +416,7 @@ void UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo(uint64_t > auto request = UserMediaPermissionCheckProxy::create(frameID, WTFMove(handler), WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin)); > > m_pendingDeviceRequests.add(requestID, request.copyRef()); >- if (!m_page.uiClient().checkUserMediaPermissionForOrigin(m_page, *m_page.process().webFrame(frameID), userMediaOrigin.get(), topLevelOrigin.get(), request.get())) { >- m_pendingDeviceRequests.take(requestID); >- handler(false); >- } >+ m_page.uiClient().checkUserMediaPermissionForOrigin(m_page, *m_page.process().webFrame(frameID), userMediaOrigin.get(), topLevelOrigin.get(), request.get()); > } > > bool UserMediaPermissionRequestManagerProxy::wasGrantedVideoOrAudioAccess(uint64_t frameID, const SecurityOrigin& userMediaDocumentOrigin, const SecurityOrigin& topLevelDocumentOrigin) >diff --git a/Source/WebKit/UIProcess/UserMediaPermissionRequestProxy.h b/Source/WebKit/UIProcess/UserMediaPermissionRequestProxy.h >index 5980dc709a00285d0aa8e735cd308197c9118bdb..ac805e788be2317e0a7aaeb718909cf45bca8908 100644 >--- a/Source/WebKit/UIProcess/UserMediaPermissionRequestProxy.h >+++ b/Source/WebKit/UIProcess/UserMediaPermissionRequestProxy.h >@@ -45,7 +45,7 @@ public: > void allow(); > > enum class UserMediaAccessDenialReason { NoConstraints, UserMediaDisabled, NoCaptureDevices, InvalidConstraint, HardwareError, PermissionDenied, OtherFailure }; >- void deny(UserMediaAccessDenialReason); >+ void deny(UserMediaAccessDenialReason = UserMediaAccessDenialReason::UserMediaDisabled); > > void invalidate(); > >diff --git a/Source/WebKit/WebKit.xcodeproj/project.pbxproj b/Source/WebKit/WebKit.xcodeproj/project.pbxproj >index 2832bb7c4b81ae89965666ee4b517fe0d307b1f7..41fdda14aadffa8a716fb68722e66d4d2ab0b38d 100644 >--- a/Source/WebKit/WebKit.xcodeproj/project.pbxproj >+++ b/Source/WebKit/WebKit.xcodeproj/project.pbxproj >@@ -2998,6 +2998,8 @@ > 410482CB1DDD2FB500F006D0 /* RTCNetwork.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCNetwork.cpp; sourceTree = "<group>"; }; > 410482CC1DDD2FB500F006D0 /* RTCNetwork.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCNetwork.h; sourceTree = "<group>"; }; > 4111436320F677B10026F912 /* InjectUserScriptImmediately.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InjectUserScriptImmediately.h; sourceTree = "<group>"; }; >+ 411286EF21C8A90C003A8550 /* MediaCaptureUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaCaptureUtilities.h; sourceTree = "<group>"; }; >+ 411286F021C8A90D003A8550 /* MediaCaptureUtilities.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MediaCaptureUtilities.mm; sourceTree = "<group>"; }; > 4112B5471F9FD3AB00E67875 /* NetworkRTCResolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkRTCResolver.cpp; sourceTree = "<group>"; }; > 4112B5471F9FD3AB00E67986 /* NetworkRTCResolverCocoa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkRTCResolverCocoa.cpp; sourceTree = "<group>"; }; > 4112B5481F9FD3AC00E67875 /* NetworkRTCResolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkRTCResolver.h; sourceTree = "<group>"; }; >@@ -5300,6 +5302,8 @@ > 0F0C365918C0555800F607D7 /* LayerRepresentation.h */, > 7A821F4B1E2F664800604577 /* LegacyCustomProtocolManagerClient.h */, > 7A821F4D1E2F679E00604577 /* LegacyCustomProtocolManagerClient.mm */, >+ 411286F021C8A90D003A8550 /* MediaCaptureUtilities.mm */, >+ 411286EF21C8A90C003A8550 /* MediaCaptureUtilities.h */, > 1ABC3DF41899E437004F0626 /* NavigationState.h */, > 1ABC3DF31899E437004F0626 /* NavigationState.mm */, > 5C6CE6D31F59EA350007C6CB /* PageClientImplCocoa.h */, >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index e7c0324a8cc02f13896c2d323169ed189ed6796a..5c8d1fbbc7024d19e18cc122eaeaebdaef4bfa5a 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,26 @@ >+2018-12-17 Youenn Fablet <youenn@apple.com> >+ >+ Add a new SPI for controlling getUserMedia >+ https://bugs.webkit.org/show_bug.cgi?id=192793 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * MiniBrowser/mac/WK2BrowserWindowController.m: >+ (-[WK2BrowserWindowController _webView:requestUserMediaAuthorizationForFrame:devices:decisionHandler:]): >+ (-[WK2BrowserWindowController _webView:isMediaCaptureAuthorizedForFrame:decisionHandler:]): >+ * TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm: >+ (-[NavigationWhileGetUserMediaPromptDisplayedUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]): >+ * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm: >+ (-[GetUserMediaRepromptUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]): >+ * TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm: >+ (-[MediaStreamTrackDetachedUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]): >+ * TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm: >+ (-[UserMediaUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]): >+ (-[UserMediaUIDelegate _webView:isMediaCaptureAuthorizedForFrame:decisionHandler:]): >+ * TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm: >+ (-[SimulateFailedSandboxUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]): >+ (-[SimulateFailedSandboxUIDelegate _webView:isMediaCaptureAuthorizedForFrame:decisionHandler:]): >+ > 2018-12-17 Daniel Bates <dabates@apple.com> > > Support concatenating StringView with other string types >diff --git a/Tools/MiniBrowser/mac/WK2BrowserWindowController.m b/Tools/MiniBrowser/mac/WK2BrowserWindowController.m >index 3e739d7c915538e00329cff0c047aaa70fd4a1bf..9b4812c174cc314cd18f41fe13c9b50b731899f5 100644 >--- a/Tools/MiniBrowser/mac/WK2BrowserWindowController.m >+++ b/Tools/MiniBrowser/mac/WK2BrowserWindowController.m >@@ -791,14 +791,14 @@ - (void)findBarViewDidChangeHeight > { > } > >-- (void)_webView:(WKWebView *)webView requestUserMediaAuthorizationForDevices:(_WKCaptureDevices)devices url:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL decisionHandler:(void (^)(BOOL authorized))decisionHandler >+- (void)_webView:(WKWebView *)webView requestUserMediaAuthorizationForFrame:(WKFrameInfo *) mainFrame devices: (_WKCaptureDevices)devices decisionHandler:(void (^)(BOOL authorized))decisionHandler > { > decisionHandler(true); > } > >-- (void)_webView:(WKWebView *)webView checkUserMediaPermissionForURL:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL frameIdentifier:(NSUInteger)frameIdentifier decisionHandler:(void (^)(NSString *salt, BOOL authorized))decisionHandler >+- (void)_webView:(WKWebView *)webView isMediaCaptureAuthorizedForFrame:(WKFrameInfo *) mainFrame decisionHandler:(void (^)(BOOL authorized))decisionHandler > { >- decisionHandler(@"", false); >+ decisionHandler(false); > } > > @end >diff --git a/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm b/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm >index 421eea4292cbab14e946f798a35deb73f82b3508..6af6cfa9830fa4c5da777bfb830ac1182412be34 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm >+++ b/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm >@@ -42,12 +42,12 @@ static bool okToProceed = false; > static bool shouldReleaseInEnumerate = false; > > @interface NavigationWhileGetUserMediaPromptDisplayedUIDelegate : NSObject<WKUIDelegate> >-- (void)_webView:(WKWebView *)webView requestUserMediaAuthorizationForDevices:(_WKCaptureDevices)devices url:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL decisionHandler:(void (^)(BOOL authorized))decisionHandler; >+- (void)_webView:(WKWebView *)webView requestMediaCaptureAuthorizationForFrame:(WKFrameInfo*) mainFrame devices: (_WKCaptureDevices)devices decisionHandler:(void (^)(BOOL))decisionHandler; > - (void)_webView:(WKWebView *)webView checkUserMediaPermissionForURL:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL frameIdentifier:(NSUInteger)frameIdentifier decisionHandler:(void (^)(NSString *salt, BOOL authorized))decisionHandler; > @end > > @implementation NavigationWhileGetUserMediaPromptDisplayedUIDelegate >-- (void)_webView:(WKWebView *)webView requestUserMediaAuthorizationForDevices:(_WKCaptureDevices)devices url:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL decisionHandler:(void (^)(BOOL authorized))decisionHandler >+- (void)_webView:(WKWebView *)webView requestMediaCaptureAuthorizationForFrame:(WKFrameInfo*) mainFrame devices: (_WKCaptureDevices)devices decisionHandler:(void (^)(BOOL))decisionHandler > { > [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]]; > [webView release]; >diff --git a/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm b/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm >index c432fcae5e8fc59791233e50bdbb7532cbac4f7e..d9db657d50b043bd0bf2dbf12814befcc9caae7f 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm >+++ b/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm >@@ -41,12 +41,12 @@ > static bool wasPrompted = false; > > @interface GetUserMediaRepromptUIDelegate : NSObject<WKUIDelegate> >-- (void)_webView:(WKWebView *)webView requestUserMediaAuthorizationForDevices:(_WKCaptureDevices)devices url:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL decisionHandler:(void (^)(BOOL authorized))decisionHandler; >+- (void)_webView:(WKWebView *)webView requestMediaCaptureAuthorizationForFrame:(WKFrameInfo*) mainFrame devices: (_WKCaptureDevices)devices decisionHandler:(void (^)(BOOL))decisionHandler; > - (void)_webView:(WKWebView *)webView checkUserMediaPermissionForURL:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL frameIdentifier:(NSUInteger)frameIdentifier decisionHandler:(void (^)(NSString *salt, BOOL authorized))decisionHandler; > @end > > @implementation GetUserMediaRepromptUIDelegate >-- (void)_webView:(WKWebView *)webView requestUserMediaAuthorizationForDevices:(_WKCaptureDevices)devices url:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL decisionHandler:(void (^)(BOOL authorized))decisionHandler >+- (void)_webView:(WKWebView *)webView requestMediaCaptureAuthorizationForFrame:(WKFrameInfo*) mainFrame devices: (_WKCaptureDevices)devices decisionHandler:(void (^)(BOOL))decisionHandler > { > wasPrompted = true; > decisionHandler(YES); >diff --git a/Tools/TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm b/Tools/TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm >index 1eccd0a6ee331642632d4d5c6df0bbcd02ae2f43..caa79dd4a25e5a15debbd55461faca4f60b6614d 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm >+++ b/Tools/TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm >@@ -40,13 +40,13 @@ > static bool hasRecievedCorrectCaptureState = false; > > @interface MediaStreamTrackDetachedUIDelegate : NSObject<WKUIDelegate> >-- (void)_webView:(WKWebView *)webView requestUserMediaAuthorizationForDevices:(_WKCaptureDevices)devices url:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL decisionHandler:(void (^)(BOOL authorized))decisionHandler; >+- (void)_webView:(WKWebView *)webView requestMediaCaptureAuthorizationForFrame:(WKFrameInfo*) mainFrame devices: (_WKCaptureDevices)devices decisionHandler:(void (^)(BOOL))decisionHandler; > - (void)_webView:(WKWebView *)webView checkUserMediaPermissionForURL:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL frameIdentifier:(NSUInteger)frameIdentifier decisionHandler:(void (^)(NSString *salt, BOOL authorized))decisionHandler; > - (void)_webView:(WKWebView *)webView mediaCaptureStateDidChange:(_WKMediaCaptureState)state; > @end > > @implementation MediaStreamTrackDetachedUIDelegate >-- (void)_webView:(WKWebView *)webView requestUserMediaAuthorizationForDevices:(_WKCaptureDevices)devices url:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL decisionHandler:(void (^)(BOOL authorized))decisionHandler >+- (void)_webView:(WKWebView *)webView requestMediaCaptureAuthorizationForFrame:(WKFrameInfo*) mainFrame devices: (_WKCaptureDevices)devices decisionHandler:(void (^)(BOOL))decisionHandler > { > decisionHandler(YES); > } >diff --git a/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm b/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm >index 88333c3fbb680e165e7f261a626e5b1d131b3bab..1085c5ec378fe6978301bf22b9e2f803523c56e4 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm >+++ b/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm >@@ -39,7 +39,6 @@ > > #if WK_API_ENABLED > >-static bool refuseRequest = false; > static bool wasPrompted = false; > > static bool receivedScriptMessage = false; >@@ -62,15 +61,10 @@ @end > > @implementation UserMediaUIDelegate > >-- (void)_webView:(WKWebView *)webView requestUserMediaAuthorizationForDevices:(NSUInteger)devices url:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL decisionHandler:(void (^)(BOOL))decisionHandler >+- (void)_webView:(WKWebView *)webView requestMediaCaptureAuthorizationForFrame:(WKFrameInfo*) mainFrame devices: (_WKCaptureDevices)devices decisionHandler:(void (^)(BOOL))decisionHandler > { > wasPrompted = true; > >- if (refuseRequest) { >- decisionHandler(NO); >- return; >- } >- > BOOL needsMicrophoneAuthorized = devices & _WKCaptureDeviceMicrophone; > BOOL needsCameraAuthorized = devices & _WKCaptureDeviceCamera; > if (!needsMicrophoneAuthorized && !needsCameraAuthorized) { >@@ -81,14 +75,9 @@ - (void)_webView:(WKWebView *)webView requestUserMediaAuthorizationForDevices:(N > decisionHandler(YES); > } > >-- (void)_webView:(WKWebView *)webView checkUserMediaPermissionForURL:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL frameIdentifier:(NSUInteger)frameIdentifier decisionHandler:(void (^)(NSString *, BOOL))decisionHandler >+- (void)_webView:(WKWebView *)webView isMediaCaptureAuthorizedForFrame:(WKFrameInfo *) mainFrame decisionHandler:(void (^)(BOOL authorized))decisionHandler > { >- if (refuseRequest) { >- decisionHandler(nil, NO); >- return; >- } >- >- decisionHandler(@"0x987654321", NO); >+ decisionHandler(NO); > } > @end > >diff --git a/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm b/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm >index c73c98994e417334902552a878def5d17225bdf4..9cd985f79f14f35696e596daa13a93ca304a8426 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm >+++ b/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm >@@ -39,7 +39,6 @@ > > #if WK_API_ENABLED > >-static bool refuseRequest = false; > static bool wasPrompted = false; > > static bool receivedScriptMessage = false; >@@ -62,15 +61,10 @@ @end > > @implementation SimulateFailedSandboxUIDelegate > >-- (void)_webView:(WKWebView *)webView requestUserMediaAuthorizationForDevices:(NSUInteger)devices url:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL decisionHandler:(void (^)(BOOL))decisionHandler >+- (void)_webView:(WKWebView *)webView requestMediaCaptureAuthorizationForFrame:(WKFrameInfo*) mainFrame devices: (_WKCaptureDevices)devices decisionHandler:(void (^)(BOOL))decisionHandler > { > wasPrompted = true; > >- if (refuseRequest) { >- decisionHandler(NO); >- return; >- } >- > BOOL needsMicrophoneAuthorized = devices & _WKCaptureDeviceMicrophone; > BOOL needsCameraAuthorized = devices & _WKCaptureDeviceCamera; > if (!needsMicrophoneAuthorized && !needsCameraAuthorized) { >@@ -81,14 +75,9 @@ - (void)_webView:(WKWebView *)webView requestUserMediaAuthorizationForDevices:(N > decisionHandler(YES); > } > >-- (void)_webView:(WKWebView *)webView checkUserMediaPermissionForURL:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL frameIdentifier:(NSUInteger)frameIdentifier decisionHandler:(void (^)(NSString *, BOOL))decisionHandler >+- (void)_webView:(WKWebView *)webView isMediaCaptureAuthorizedForFrame:(WKFrameInfo *) mainFrame decisionHandler:(void (^)(BOOL authorized))decisionHandler > { >- if (refuseRequest) { >- decisionHandler(nil, NO); >- return; >- } >- >- decisionHandler(@"0x987654321", NO); >+ decisionHandler(NO); > } > @end >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 192793
:
357581
|
357590
|
357605
|
357639
|
357729
|
357745
|
357873
|
357885
|
358631
|
358647
|
359296
|
359314
|
359331