Diff
Modified: trunk/Source/WebKit/ChangeLog (275161 => 275162)
--- trunk/Source/WebKit/ChangeLog 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Source/WebKit/ChangeLog 2021-03-29 16:32:58 UTC (rev 275162)
@@ -1,3 +1,29 @@
+2021-03-29 Youenn Fablet <[email protected]>
+
+ Promote WKWebView getUserMedia SPI to API
+ https://bugs.webkit.org/show_bug.cgi?id=223806
+
+ Reviewed by Eric Carlson.
+
+ Move SPI to API.
+ Update delegate to take an enumeration instead of two booleans.
+ Make setters completion handlers nullable.
+ Covered by API tests.
+
+ * UIProcess/API/Cocoa/WKUIDelegate.h:
+ * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
+ * UIProcess/API/Cocoa/WKWebView.h:
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView cameraCaptureState]):
+ (-[WKWebView microphoneCaptureState]):
+ (-[WKWebView setMicrophoneCaptureState:completionHandler:]):
+ (-[WKWebView setCameraCaptureState:completionHandler:]):
+ * UIProcess/API/Cocoa/WKWebViewPrivate.h:
+ * UIProcess/Cocoa/UIDelegate.mm:
+ (WebKit::UIDelegate::UIClient::decidePolicyForGeolocationPermissionRequest):
+ (WebKit::UIDelegate::UIClient::shouldAllowDeviceOrientationAndMotionAccess):
+ (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):
+
2021-03-28 Said Abou-Hallawa <[email protected]>
[GPU Process] Don't ever replay DisplayList items of a RemoteImageBuffer in WebProcess
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegate.h (275161 => 275162)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegate.h 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegate.h 2021-03-29 16:32:58 UTC (rev 275162)
@@ -45,6 +45,18 @@
@protocol UIContextMenuInteractionCommitAnimating;
#endif
+typedef NS_ENUM(NSInteger, WKPermissionDecision) {
+ WKPermissionDecisionPrompt,
+ WKPermissionDecisionGrant,
+ WKPermissionDecisionDeny,
+} WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
+typedef NS_ENUM(NSInteger, WKMediaCaptureType) {
+ WKMediaCaptureTypeCamera,
+ WKMediaCaptureTypeMicrophone,
+ WKMediaCaptureTypeCameraAndMicrophone,
+} WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
/*! A class conforming to the WKUIDelegate protocol provides methods for
presenting native UI on behalf of a webpage.
*/
@@ -123,6 +135,17 @@
*/
- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * _Nullable result))completionHandler;
+
+/*! @abstract A delegate to request permission for microphone audio and camera video access.
+ @param webView The web view invoking the delegate method.
+ @param origin The origin of the page.
+ @param frame Information about the frame whose _javascript_ initiated this call.
+ @param type The type of capture (camera, microphone).
+ @param decisionHandler The completion handler to call once the decision is made
+ @discussion If not implemented, the result is the same as calling the decisionHandler with WKPermissionDecisionPrompt.
+ */
+- (void)webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame type:(WKMediaCaptureType)type decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
#if TARGET_OS_IPHONE
/*! @abstract Allows your app to determine whether or not the given element should show a preview.
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h (275161 => 275162)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h 2021-03-29 16:32:58 UTC (rev 275162)
@@ -122,7 +122,6 @@
- (void)_webView:(WKWebView *)webView imageOrMediaDocumentSizeChanged:(CGSize)size WK_API_AVAILABLE(macos(10.12), ios(10.0));
- (NSDictionary *)_dataDetectionContextForWebView:(WKWebView *)webView WK_API_AVAILABLE(macos(10.12), ios(10.0));
-- (void)_webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame audio:(BOOL)audio video:(BOOL)video decisionHandler:(void (^)(_WKPermissionDecision decision))decisionHandler WK_API_AVAILABLE(macos(12.00), ios(15.0));
- (void)_webView:(WKWebView *)webView includeSensitiveMediaDeviceDetails:(void (^)(BOOL includeSensitiveDetails))decisionHandler WK_API_AVAILABLE(macos(10.15), ios(13.0));
- (void)_webView:(WKWebView *)webView requestUserMediaAuthorizationForDevices:(_WKCaptureDevices)devices url:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL decisionHandler:(void (^)(BOOL authorized))decisionHandler WK_API_AVAILABLE(macos(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(macos(10.12.3), ios(10.3));
@@ -130,7 +129,7 @@
- (WKDragDestinationAction)_webView:(WKWebView *)webView dragDestinationActionMaskForDraggingInfo:(id)draggingInfo WK_API_AVAILABLE(macos(10.13), ios(11.0));
- (void)_webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures completionHandler:(void (^)(WKWebView *webView))completionHandler WK_API_AVAILABLE(macos(10.13), ios(11.0));
- (void)_webView:(WKWebView *)webView requestGeolocationPermissionForFrame:(WKFrameInfo *)frame decisionHandler:(void (^)(BOOL allowed))decisionHandler WK_API_AVAILABLE(macos(10.13.4), ios(11.3));
-- (void)_webView:(WKWebView *)webView requestGeolocationPermissionForOrigin:(WKSecurityOrigin*)origin initiatedByFrame:(WKFrameInfo *)frame decisionHandler:(void (^)(_WKPermissionDecision decision))decisionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+- (void)_webView:(WKWebView *)webView requestGeolocationPermissionForOrigin:(WKSecurityOrigin*)origin initiatedByFrame:(WKFrameInfo *)frame decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
- (void)_webView:(WKWebView *)webView runBeforeUnloadConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler WK_API_AVAILABLE(macos(10.13), ios(11.0));
- (void)_webView:(WKWebView *)webView editorStateDidChange:(NSDictionary *)editorState WK_API_AVAILABLE(macos(10.13.4), ios(11.3));
@@ -223,7 +222,7 @@
@param frame The frame that initiated the request.
@param decisionHandler The decision handler to call once the app has made its decision.
*/
-- (void)_webView:(WKWebView *)webView requestDeviceOrientationAndMotionPermissionForOrigin:(WKSecurityOrigin*)origin initiatedByFrame:(WKFrameInfo *)frame decisionHandler:(void (^)(_WKPermissionDecision decision))decisionHandler WK_API_AVAILABLE(ios(WK_IOS_TBA));
+- (void)_webView:(WKWebView *)webView requestDeviceOrientationAndMotionPermissionForOrigin:(WKSecurityOrigin*)origin initiatedByFrame:(WKFrameInfo *)frame decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler WK_API_AVAILABLE(ios(WK_IOS_TBA));
#else // !TARGET_OS_IPHONE
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.h (275161 => 275162)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.h 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.h 2021-03-29 16:32:58 UTC (rev 275162)
@@ -68,6 +68,12 @@
WKMediaPlaybackStateSuspended
} WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+typedef NS_ENUM(NSInteger, WKMediaCaptureState) {
+ WKMediaCaptureStateNone,
+ WKMediaCaptureStateActive,
+ WKMediaCaptureStateMuted,
+} WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
/*! @abstract A copy of the configuration with which the web view was
initialized. */
@property (nonatomic, readonly, copy) WKWebViewConfiguration *configuration;
@@ -354,6 +360,39 @@
*/
- (void)requestMediaPlaybackStateWithCompletionHandler:(void (^)(WKMediaPlaybackState))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
+/*! @abstract The state of camera capture on a web page.
+ @discussion @link WKWebView @/link is key-value observing (KVO) compliant
+ for this property.
+ */
+@property (nonatomic, readonly) WKMediaCaptureState cameraCaptureState WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
+/*! @abstract The state of microphone capture on a web page.
+ @discussion @link WKWebView @/link is key-value observing (KVO) compliant
+ for this property.
+ */
+@property (nonatomic, readonly) WKMediaCaptureState microphoneCaptureState WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
+/*! @abstract Set camera capture state of a WKWebView.
+ @param state State to apply for capture.
+ @param completionHandler A block to invoke after the camera state has been changed.
+ @discussion
+ If value is WKMediaCaptureStateNone, this will stop any camera capture.
+ If value is WKMediaCaptureStateMuted, any active camera capture will become muted.
+ If value is WKMediaCaptureStateActive, any muted camera capture will become active.
+ */
+- (void)setCameraCaptureState:(WKMediaCaptureState)state completionHandler:(void (^_Nullable)(void))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
+/*! @abstract Set microphone capture state of a WKWebView.
+ @param state state to apply for capture.
+ @param completionHandler A block to invoke after the camera state has been changed.
+ @discussion
+ If value is WKMediaCaptureStateNone, this will stop any microphone capture.
+ If value is WKMediaCaptureStateMuted, any active microphone capture will become muted.
+ If value is WKMediaCaptureStateActive, any muted microphone capture will become active.
+ */
+- (void)setMicrophoneCaptureState:(WKMediaCaptureState)state completionHandler:(void (^_Nullable)(void))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
/*! @abstract Get a snapshot for the visible viewport of WKWebView.
@param snapshotConfiguration An object that specifies how the snapshot is configured.
@param completionHandler A block to invoke when the snapshot is ready.
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (275161 => 275162)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2021-03-29 16:32:58 UTC (rev 275162)
@@ -979,6 +979,68 @@
});
}
+- (WKMediaCaptureState)cameraCaptureState
+{
+ auto state = _page->reportedMediaState();
+ if (state & WebCore::MediaProducer::HasActiveVideoCaptureDevice)
+ return WKMediaCaptureStateActive;
+ if (state & WebCore::MediaProducer::HasMutedVideoCaptureDevice)
+ return WKMediaCaptureStateMuted;
+ return WKMediaCaptureStateNone;
+}
+
+- (WKMediaCaptureState)microphoneCaptureState
+{
+ auto state = _page->reportedMediaState();
+ if (state & WebCore::MediaProducer::HasActiveAudioCaptureDevice)
+ return WKMediaCaptureStateActive;
+ if (state & WebCore::MediaProducer::HasMutedAudioCaptureDevice)
+ return WKMediaCaptureStateMuted;
+ return WKMediaCaptureStateNone;
+}
+
+- (void)setMicrophoneCaptureState:(WKMediaCaptureState)state completionHandler:(void (^)(void))completionHandler
+{
+ if (!completionHandler)
+ completionHandler = [] { };
+
+ if (state == WKMediaCaptureStateNone) {
+ _page->stopMediaCapture(WebCore::MediaProducer::MediaCaptureKind::Audio, [completionHandler = makeBlockPtr(completionHandler)] {
+ completionHandler();
+ });
+ return;
+ }
+ auto mutedState = _page->mutedStateFlags();
+ if (state == WKMediaCaptureStateActive && mutedState & WebCore::MediaProducer::AudioCaptureIsMuted)
+ mutedState ^= WebCore::MediaProducer::AudioCaptureIsMuted;
+ else if (state == WKMediaCaptureStateMuted)
+ mutedState = WebCore::MediaProducer::AudioCaptureIsMuted;
+ _page->setMuted(mutedState, [completionHandler = makeBlockPtr(completionHandler)] {
+ completionHandler();
+ });
+}
+
+- (void)setCameraCaptureState:(WKMediaCaptureState)state completionHandler:(void (^)(void))completionHandler
+{
+ if (!completionHandler)
+ completionHandler = [] { };
+
+ if (state == WKMediaCaptureStateNone) {
+ _page->stopMediaCapture(WebCore::MediaProducer::MediaCaptureKind::Video, [completionHandler = makeBlockPtr(completionHandler)] {
+ completionHandler();
+ });
+ return;
+ }
+ auto mutedState = _page->mutedStateFlags();
+ if (state == WKMediaCaptureStateActive && mutedState & WebCore::MediaProducer::VideoCaptureIsMuted)
+ mutedState ^= WebCore::MediaProducer::VideoCaptureIsMuted;
+ else if (state == WKMediaCaptureStateMuted)
+ mutedState = WebCore::MediaProducer::VideoCaptureIsMuted;
+ _page->setMuted(mutedState, [completionHandler = makeBlockPtr(completionHandler)] {
+ completionHandler();
+ });
+}
+
- (void)_evaluateJavaScript:(NSString *)_javascript_String asAsyncFunction:(BOOL)asAsyncFunction withSourceURL:(NSURL *)sourceURL withArguments:(NSDictionary<NSString *, id> *)arguments forceUserGesture:(BOOL)forceUserGesture inFrame:(WKFrameInfo *)frame inWorld:(WKContentWorld *)world completionHandler:(void (^)(id, NSError *))completionHandler
{
auto handler = adoptNS([completionHandler copy]);
@@ -1755,62 +1817,6 @@
return _page->pageLoadState().hasNegotiatedLegacyTLS();
}
-- (_WKMediaCaptureState)_cameraCaptureState
-{
- auto state = _page->reportedMediaState();
- if (state & WebCore::MediaProducer::HasActiveVideoCaptureDevice)
- return _WKMediaCaptureStateActive;
- if (state & WebCore::MediaProducer::HasMutedVideoCaptureDevice)
- return _WKMediaCaptureStateMuted;
- return _WKMediaCaptureStateNone;
-}
-
-- (_WKMediaCaptureState)_microphoneCaptureState
-{
- auto state = _page->reportedMediaState();
- if (state & WebCore::MediaProducer::HasActiveAudioCaptureDevice)
- return _WKMediaCaptureStateActive;
- if (state & WebCore::MediaProducer::HasMutedAudioCaptureDevice)
- return _WKMediaCaptureStateMuted;
- return _WKMediaCaptureStateNone;
-}
-
-- (void)setMicrophoneCaptureState:(_WKMediaCaptureState)state completionHandler:(void (^)(void))completionHandler
-{
- if (state == _WKMediaCaptureStateNone) {
- _page->stopMediaCapture(WebCore::MediaProducer::MediaCaptureKind::Audio, [completionHandler = makeBlockPtr(completionHandler)] {
- completionHandler();
- });
- return;
- }
- auto mutedState = _page->mutedStateFlags();
- if (state == _WKMediaCaptureStateActive && mutedState & WebCore::MediaProducer::AudioCaptureIsMuted)
- mutedState ^= WebCore::MediaProducer::AudioCaptureIsMuted;
- else if (state == _WKMediaCaptureStateMuted)
- mutedState = WebCore::MediaProducer::AudioCaptureIsMuted;
- _page->setMuted(mutedState, [completionHandler = makeBlockPtr(completionHandler)] {
- completionHandler();
- });
-}
-
-- (void)setCameraCaptureState:(_WKMediaCaptureState)state completionHandler:(void (^)(void))completionHandler
-{
- if (state == _WKMediaCaptureStateNone) {
- _page->stopMediaCapture(WebCore::MediaProducer::MediaCaptureKind::Video, [completionHandler = makeBlockPtr(completionHandler)] {
- completionHandler();
- });
- return;
- }
- auto mutedState = _page->mutedStateFlags();
- if (state == _WKMediaCaptureStateActive && mutedState & WebCore::MediaProducer::VideoCaptureIsMuted)
- mutedState ^= WebCore::MediaProducer::VideoCaptureIsMuted;
- else if (state == _WKMediaCaptureStateMuted)
- mutedState = WebCore::MediaProducer::VideoCaptureIsMuted;
- _page->setMuted(mutedState, [completionHandler = makeBlockPtr(completionHandler)] {
- completionHandler();
- });
-}
-
- (void)_frames:(void (^)(_WKFrameTreeNode *))completionHandler
{
_page->getAllFrames([completionHandler = makeBlockPtr(completionHandler), page = makeRef(*_page.get())] (WebKit::FrameTreeNodeData&& data) {
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h (275161 => 275162)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h 2021-03-29 16:32:58 UTC (rev 275162)
@@ -48,12 +48,6 @@
_WKMediaCaptureStateDeprecatedMutedCamera = 1 << 3,
} WK_API_AVAILABLE(macos(10.13), ios(11.0));
-typedef NS_OPTIONS(NSUInteger, _WKMediaCaptureState) {
- _WKMediaCaptureStateNone = 0,
- _WKMediaCaptureStateActive = 1 << 0,
- _WKMediaCaptureStateMuted = 1 << 1,
-} WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
-
typedef NS_OPTIONS(NSUInteger, _WKMediaMutedState) {
_WKMediaNoneMuted = 0,
_WKMediaAudioMuted = 1 << 0,
@@ -67,12 +61,6 @@
_WKCaptureDeviceDisplay = 1 << 2,
} WK_API_AVAILABLE(macos(10.13), ios(11.0));
-typedef NS_OPTIONS(NSUInteger, _WKPermissionDecision) {
- _WKPermissionDecisionPrompt = 1 << 0,
- _WKPermissionDecisionGrant = 1 << 1,
- _WKPermissionDecisionDeny = 1 << 2,
-} WK_API_AVAILABLE(macos(12.00), ios(15.0));
-
typedef NS_OPTIONS(NSUInteger, _WKSelectionAttributes) {
_WKSelectionAttributeNoSelection = 0,
_WKSelectionAttributeIsCaret = 1 << 0,
@@ -193,16 +181,6 @@
*/
@property (nonatomic, readonly) BOOL _negotiatedLegacyTLS WK_API_AVAILABLE(macos(10.15.4), ios(13.4));
-/*! @abstract The state of media capture on a web page.
- @discussion @link WKWebView @/link is key-value observing (KVO) compliant
- for this property.
- */
-@property (nonatomic, readonly) _WKMediaCaptureState _cameraCaptureState WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
-@property (nonatomic, readonly) _WKMediaCaptureState _microphoneCaptureState WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
-
-- (void)setMicrophoneCaptureState:(_WKMediaCaptureState)state completionHandler:(void (^)(void))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
-- (void)setCameraCaptureState:(_WKMediaCaptureState)state completionHandler:(void (^)(void))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
-
- (void)_frames:(void (^)(_WKFrameTreeNode *))completionHandler WK_API_AVAILABLE(macos(11.0), ios(14.0));
// FIXME: Remove these once nobody is using them.
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm (275161 => 275162)
--- trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm 2021-03-29 16:32:58 UTC (rev 275162)
@@ -411,7 +411,7 @@
if (m_uiDelegate->m_delegateMethods.webViewRequestGeolocationPermissionForOriginDecisionHandler) {
auto securityOrigin = WebCore::SecurityOrigin::createFromString(page.pageLoadState().activeURL());
auto checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(_webView:requestGeolocationPermissionForOrigin:initiatedByFrame:decisionHandler:));
- auto decisionHandler = makeBlockPtr([completionHandler = std::exchange(completionHandler, nullptr), securityOrigin = securityOrigin->data(), checker = WTFMove(checker), page = makeWeakPtr(page)] (_WKPermissionDecision decision) mutable {
+ auto decisionHandler = makeBlockPtr([completionHandler = std::exchange(completionHandler, nullptr), securityOrigin = securityOrigin->data(), checker = WTFMove(checker), page = makeWeakPtr(page)] (WKPermissionDecision decision) mutable {
if (checker->completionHandlerHasBeenCalled())
return;
checker->didCallCompletionHandler();
@@ -420,13 +420,13 @@
return;
}
switch (decision) {
- case _WKPermissionDecisionPrompt:
+ case WKPermissionDecisionPrompt:
alertForPermission(*page, MediaPermissionReason::Geolocation, securityOrigin, WTFMove(completionHandler));
break;
- case _WKPermissionDecisionGrant:
+ case WKPermissionDecisionGrant:
completionHandler(true);
break;
- case _WKPermissionDecisionDeny:
+ case WKPermissionDecisionDeny:
completionHandler(false);
break;
}
@@ -1049,7 +1049,7 @@
auto delegate = m_uiDelegate->m_delegate.get();
auto checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(_webView:requestDeviceOrientationAndMotionPermissionForOrigin:initiatedByFrame:decisionHandler:));
- auto decisionHandler = makeBlockPtr([completionHandler = WTFMove(completionHandler), securityOrigin = securityOrigin->data(), checker = WTFMove(checker), page = makeWeakPtr(page)](_WKPermissionDecision decision) mutable {
+ auto decisionHandler = makeBlockPtr([completionHandler = WTFMove(completionHandler), securityOrigin = securityOrigin->data(), checker = WTFMove(checker), page = makeWeakPtr(page)](WKPermissionDecision decision) mutable {
if (checker->completionHandlerHasBeenCalled())
return;
checker->didCallCompletionHandler();
@@ -1058,13 +1058,13 @@
return;
}
switch (decision) {
- case _WKPermissionDecisionPrompt:
+ case WKPermissionDecisionPrompt:
alertForPermission(*page, MediaPermissionReason::DeviceOrientation, securityOrigin, WTFMove(completionHandler));
break;
- case _WKPermissionDecisionGrant:
+ case WKPermissionDecisionGrant:
completionHandler(true);
break;
- case _WKPermissionDecisionDeny:
+ case WKPermissionDecisionDeny:
completionHandler(false);
break;
}
@@ -1097,7 +1097,7 @@
return;
}
- bool respondsToRequestMediaCapturePermission = [delegate respondsToSelector:@selector(_webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:audio:video:decisionHandler:)];
+ bool respondsToRequestMediaCapturePermission = [delegate respondsToSelector:@selector(webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:)];
bool respondsToRequestUserMediaAuthorizationForDevices = [delegate respondsToSelector:@selector(_webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:)];
if (!respondsToRequestMediaCapturePermission && !respondsToRequestUserMediaAuthorizationForDevices) {
@@ -1107,23 +1107,23 @@
// FIXME: Provide a specific delegate for display capture.
if (!request.requiresDisplayCapture() && respondsToRequestMediaCapturePermission) {
- auto checker = CompletionHandlerCallChecker::create(delegate, @selector(_webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:audio:video:decisionHandler:));
- auto decisionHandler = makeBlockPtr([protectedRequest = makeRef(request), checker = WTFMove(checker)](_WKPermissionDecision decision) {
+ auto checker = CompletionHandlerCallChecker::create(delegate, @selector(webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:));
+ auto decisionHandler = makeBlockPtr([protectedRequest = makeRef(request), checker = WTFMove(checker)](WKPermissionDecision decision) {
if (checker->completionHandlerHasBeenCalled())
return;
checker->didCallCompletionHandler();
switch (decision) {
- case _WKPermissionDecisionPrompt:
+ case WKPermissionDecisionPrompt:
protectedRequest->prompt();
break;
- case _WKPermissionDecisionGrant: {
+ case WKPermissionDecisionGrant: {
const String& videoDeviceUID = protectedRequest->requiresVideoCapture() ? protectedRequest->videoDeviceUIDs().first() : String();
const String& audioDeviceUID = protectedRequest->requiresAudioCapture() ? protectedRequest->audioDeviceUIDs().first() : String();
protectedRequest->allow(audioDeviceUID, videoDeviceUID);
break;
}
- case _WKPermissionDecisionDeny:
+ case WKPermissionDecisionDeny:
protectedRequest->deny(UserMediaPermissionRequestProxy::UserMediaAccessDenialReason::PermissionDenied);
break;
}
@@ -1135,7 +1135,10 @@
FrameInfoData frameInfo { frame.isMainFrame(), { }, userMediaOrigin.securityOrigin(), frame.frameID(), mainFrameID };
RetainPtr<WKFrameInfo> frameInfoWrapper = wrapper(API::FrameInfo::create(WTFMove(frameInfo), frame.page()));
- [delegate _webView:m_uiDelegate->m_webView.get().get() requestMediaCapturePermissionForOrigin:wrapper(topLevelOrigin) initiatedByFrame:frameInfoWrapper.get() audio:request.requiresAudioCapture() video:request.requiresVideoCapture() decisionHandler:decisionHandler.get()];
+ WKMediaCaptureType type = WKMediaCaptureTypeCamera;
+ if (request.requiresAudioCapture())
+ type = request.requiresVideoCapture() ? WKMediaCaptureTypeCameraAndMicrophone : WKMediaCaptureTypeMicrophone;
+ [delegate webView:m_uiDelegate->m_webView.get().get() requestMediaCapturePermissionForOrigin:wrapper(topLevelOrigin) initiatedByFrame:frameInfoWrapper.get() type:type decisionHandler:decisionHandler.get()];
return;
}
Modified: trunk/Tools/ChangeLog (275161 => 275162)
--- trunk/Tools/ChangeLog 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Tools/ChangeLog 2021-03-29 16:32:58 UTC (rev 275162)
@@ -1,3 +1,37 @@
+2021-03-29 Youenn Fablet <[email protected]>
+
+ Promote WKWebView getUserMedia SPI to API
+ https://bugs.webkit.org/show_bug.cgi?id=223806
+
+ Reviewed by Eric Carlson.
+
+ * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
+ (-[UserMediaCaptureUIDelegateForParameters webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:]):
+ * TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm:
+ (-[NavigationWhileGetUserMediaPromptDisplayedUIDelegate webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:]):
+ * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
+ (TestWebKitAPI::TEST):
+ * TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm:
+ * TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm:
+ (-[DeviceOrientationPermissionUIDelegate _webView:requestDeviceOrientationAndMotionPermissionForOrigin:initiatedByFrame:decisionHandler:]):
+ (-[DeviceOrientationPermissionValidationDelegate _webView:requestDeviceOrientationAndMotionPermissionForOrigin:initiatedByFrame:decisionHandler:]):
+ * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
+ (-[SpeechRecognitionUIDelegate webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:]):
+ * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
+ (-[GeolocationDelegateNew _webView:requestGeolocationPermissionForOrigin:initiatedByFrame:decisionHandler:]):
+ * TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm:
+ (-[UserMediaUIDelegate webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:]):
+ * TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm:
+ (-[SimulateFailedSandboxUIDelegate webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:]):
+ * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
+ (-[WebsitePoliciesDeviceOrientationUIDelegate _webView:requestDeviceOrientationAndMotionPermissionForOrigin:initiatedByFrame:decisionHandler:]):
+ * TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.h:
+ * TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.mm:
+ (-[UserMediaCaptureUIDelegate init]):
+ (-[UserMediaCaptureUIDelegate setAudioDecision:]):
+ (-[UserMediaCaptureUIDelegate setVideoDecision:]):
+ (-[UserMediaCaptureUIDelegate webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:]):
+
2021-03-28 Cameron McCormack <[email protected]>
Enable AspectRatioOfImgFromWidthAndHeightEnabled for WebKitLegacy.
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMedia.mm (275161 => 275162)
--- trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMedia.mm 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMedia.mm 2021-03-29 16:32:58 UTC (rev 275162)
@@ -50,11 +50,11 @@
@interface UserMediaCaptureUIDelegateForParameters : NSObject<WKUIDelegate>
// WKUIDelegate
-- (void)_webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame audio:(BOOL)audio video:(BOOL)video decisionHandler:(void (^)(_WKPermissionDecision decision))decisionHandler;
+- (void)webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame type:(WKMediaCaptureType)type decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler;
@end
@implementation UserMediaCaptureUIDelegateForParameters
-- (void)_webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame audio:(BOOL)audio video:(BOOL)video decisionHandler:(void (^)(_WKPermissionDecision decision))decisionHandler {
+- (void)webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame type:(WKMediaCaptureType)type decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler {
EXPECT_WK_STREQ(origin.protocol, @"http");
EXPECT_WK_STREQ(origin.host, @"127.0.0.1");
EXPECT_EQ(origin.port, 9090U);
@@ -65,11 +65,10 @@
EXPECT_FALSE(frame.isMainFrame);
EXPECT_TRUE(frame.webView == webView);
- EXPECT_FALSE(audio);
- EXPECT_TRUE(video);
+ EXPECT_EQ(type, WKMediaCaptureTypeCamera);
done = true;
- decisionHandler(_WKPermissionDecisionGrant);
+ decisionHandler(WKPermissionDecisionGrant);
}
@end
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm (275161 => 275162)
--- trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm 2021-03-29 16:32:58 UTC (rev 275162)
@@ -31,7 +31,7 @@
#import "Test.h"
#import "TestWKWebView.h"
#import <WebKit/WKPreferencesPrivate.h>
-#import <WebKit/WKUIDelegatePrivate.h>
+#import <WebKit/WKUIDelegate.h>
#import <WebKit/WKWebView.h>
#import <WebKit/WKWebViewConfiguration.h>
#import <WebKit/WKWebsiteDataStorePrivate.h>
@@ -42,17 +42,17 @@
static bool shouldReleaseInEnumerate = false;
@interface NavigationWhileGetUserMediaPromptDisplayedUIDelegate : NSObject<WKUIDelegate>
-- (void)_webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame audio:(BOOL)audio video:(BOOL)video decisionHandler:(void (^)(_WKPermissionDecision decision))decisionHandler;
+- (void)webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame type:(WKMediaCaptureType)type decisionHandler:(void (^)(WKPermissionDecision decision))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 requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame audio:(BOOL)audio video:(BOOL)video decisionHandler:(void (^)(_WKPermissionDecision decision))decisionHandler
+- (void)webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame type:(WKMediaCaptureType)type decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler
{
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
[webView release];
okToProceed = true;
- decisionHandler(_WKPermissionDecisionGrant);
+ decisionHandler(WKPermissionDecisionGrant);
}
- (void)_webView:(WKWebView *)webView checkUserMediaPermissionForURL:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL frameIdentifier:(NSUInteger)frameIdentifier decisionHandler:(void (^)(NSString *salt, BOOL authorized))decisionHandler
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm (275161 => 275162)
--- trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm 2021-03-29 16:32:58 UTC (rev 275162)
@@ -106,8 +106,8 @@
preferences._mockCaptureDevicesEnabled = YES;
auto webView = adoptNS([[GetUserMediaRepromptTestView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration.get() processPoolConfiguration:processPoolConfig.get()]);
auto delegate = adoptNS([[UserMediaCaptureUIDelegate alloc] init]);
- [delegate setAudioDecision:_WKPermissionDecisionGrant];
- [delegate setVideoDecision:_WKPermissionDecisionDeny];
+ [delegate setAudioDecision:WKPermissionDecisionGrant];
+ [delegate setVideoDecision:WKPermissionDecisionDeny];
[webView setUIDelegate:delegate.get()];
[webView loadTestPageNamed:@"getUserMediaAudioVideoCapture"];
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm (275161 => 275162)
--- trunk/Tools/TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm 2021-03-29 16:32:58 UTC (rev 275162)
@@ -34,6 +34,7 @@
#import <WebKit/WKPreferencesPrivate.h>
#import <WebKit/WKWebViewConfiguration.h>
#import <WebKit/WKWebViewConfigurationPrivate.h>
+#import <WebKit/WKWebViewPrivate.h>
#import <WebKit/_WKProcessPoolConfiguration.h>
static bool hasReceivedCorrectCaptureState = false;
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm (275161 => 275162)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm 2021-03-29 16:32:58 UTC (rev 275162)
@@ -76,9 +76,9 @@
return self;
}
-- (void)_webView:(WKWebView *)webView requestDeviceOrientationAndMotionPermissionForOrigin:(WKSecurityOrigin*)origin initiatedByFrame:(WKFrameInfo *)requestingFrame decisionHandler:(void (^)(_WKPermissionDecision))decisionHandler
+- (void)_webView:(WKWebView *)webView requestDeviceOrientationAndMotionPermissionForOrigin:(WKSecurityOrigin*)origin initiatedByFrame:(WKFrameInfo *)requestingFrame decisionHandler:(void (^)(WKPermissionDecision))decisionHandler
{
- decisionHandler(_decisionHandler() ? _WKPermissionDecisionGrant : _WKPermissionDecisionDeny);
+ decisionHandler(_decisionHandler() ? WKPermissionDecisionGrant : WKPermissionDecisionDeny);
askedClientForPermission = true;
}
@@ -386,12 +386,12 @@
_validationHandler = WTFMove(validationHandler);
}
-- (void)_webView:(WKWebView *)webView requestDeviceOrientationAndMotionPermissionForOrigin:(WKSecurityOrigin*)origin initiatedByFrame:(WKFrameInfo *)frame decisionHandler:(void (^)(_WKPermissionDecision decision))decisionHandler {
+- (void)_webView:(WKWebView *)webView requestDeviceOrientationAndMotionPermissionForOrigin:(WKSecurityOrigin*)origin initiatedByFrame:(WKFrameInfo *)frame decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler {
if (_validationHandler)
_validationHandler(origin, frame);
askedClientForPermission = true;
- decisionHandler(_WKPermissionDecisionGrant);
+ decisionHandler(WKPermissionDecisionGrant);
}
@end
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm (275161 => 275162)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm 2021-03-29 16:32:58 UTC (rev 275162)
@@ -45,7 +45,7 @@
@interface SpeechRecognitionUIDelegate : NSObject<WKUIDelegatePrivate>
- (void)_webView:(WKWebView *)webView requestSpeechRecognitionPermissionForOrigin:(WKSecurityOrigin *)origin decisionHandler:(void (^)(BOOL))decisionHandler;
-- (void)_webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame audio:(BOOL)audio video:(BOOL)video decisionHandler:(void (^)(_WKPermissionDecision decision))decisionHandler;
+- (void)webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame type:(WKMediaCaptureType)type decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler;
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;
- (void)_webView:(WKWebView *)webView mediaCaptureStateDidChange:(_WKMediaCaptureStateDeprecated)state;
@end
@@ -57,10 +57,10 @@
decisionHandler(shouldGrantPermissionRequest);
}
-- (void)_webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame audio:(BOOL)audio video:(BOOL)video decisionHandler:(void (^)(_WKPermissionDecision decision))decisionHandler
+- (void)webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame type:(WKMediaCaptureType)type decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler
{
permissionRequested = true;
- decisionHandler(shouldGrantPermissionRequest ? _WKPermissionDecisionGrant : _WKPermissionDecisionDeny);
+ decisionHandler(shouldGrantPermissionRequest ? WKPermissionDecisionGrant : WKPermissionDecisionDeny);
}
- (void)_webView:(WKWebView *)webView requestMediaCaptureAuthorization: (_WKCaptureDevices)devices decisionHandler:(void (^)(BOOL))decisionHandler
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm (275161 => 275162)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm 2021-03-29 16:32:58 UTC (rev 275162)
@@ -218,7 +218,7 @@
@end
@implementation GeolocationDelegateNew
-- (void)_webView:(WKWebView *)webView requestGeolocationPermissionForOrigin:(WKSecurityOrigin*)origin initiatedByFrame:(WKFrameInfo *)frame decisionHandler:(void (^)(_WKPermissionDecision decision))decisionHandler {
+- (void)_webView:(WKWebView *)webView requestGeolocationPermissionForOrigin:(WKSecurityOrigin*)origin initiatedByFrame:(WKFrameInfo *)frame decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler {
EXPECT_WK_STREQ(origin.protocol, @"https");
EXPECT_WK_STREQ(origin.host, @"127.0.0.1");
EXPECT_EQ(origin.port, 9090);
@@ -230,7 +230,7 @@
EXPECT_TRUE(frame.webView == webView);
done = true;
- decisionHandler(_WKPermissionDecisionGrant);
+ decisionHandler(WKPermissionDecisionGrant);
}
@end
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm (275161 => 275162)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm 2021-03-29 16:32:58 UTC (rev 275162)
@@ -59,16 +59,11 @@
@implementation UserMediaUIDelegate
-- (void)_webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame audio:(BOOL)audio video:(BOOL)video decisionHandler:(void (^)(_WKPermissionDecision decision))decisionHandler
+- (void)webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame type:(WKMediaCaptureType)type decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler
{
wasPrompted = true;
- if (!audio && !video) {
- decisionHandler(_WKPermissionDecisionDeny);
- return;
- }
-
- decisionHandler(_WKPermissionDecisionGrant);
+ decisionHandler(WKPermissionDecisionGrant);
}
- (void)_webView:(WKWebView *)webView includeSensitiveMediaDeviceDetails:(void (^)(BOOL includeSensitiveDetails))decisionHandler
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm (275161 => 275162)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm 2021-03-29 16:32:58 UTC (rev 275162)
@@ -59,16 +59,11 @@
@implementation SimulateFailedSandboxUIDelegate
-- (void)_webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame audio:(BOOL)audio video:(BOOL)video decisionHandler:(void (^)(_WKPermissionDecision decision))decisionHandler
+- (void)webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame type:(WKMediaCaptureType)type decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler
{
wasPrompted = true;
- if (!audio && !video) {
- decisionHandler(_WKPermissionDecisionDeny);
- return;
- }
-
- decisionHandler(_WKPermissionDecisionGrant);
+ decisionHandler(WKPermissionDecisionGrant);
}
- (void)_webView:(WKWebView *)webView includeSensitiveMediaDeviceDetails:(void (^)(BOOL includeSensitiveDetails))decisionHandler
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm (275161 => 275162)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm 2021-03-29 16:32:58 UTC (rev 275162)
@@ -1481,10 +1481,10 @@
@implementation WebsitePoliciesDeviceOrientationUIDelegate
-- (void)_webView:(WKWebView *)webView requestDeviceOrientationAndMotionPermissionForOrigin:(WKSecurityOrigin*)origin initiatedByFrame:(WKFrameInfo *)requestingFrame decisionHandler:(void (^)(_WKPermissionDecision))decisionHandler
+- (void)_webView:(WKWebView *)webView requestDeviceOrientationAndMotionPermissionForOrigin:(WKSecurityOrigin*)origin initiatedByFrame:(WKFrameInfo *)requestingFrame decisionHandler:(void (^)(WKPermissionDecision))decisionHandler
{
calledShouldAllowDeviceOrientationAndMotionAccessDelegate = true;
- decisionHandler(_WKPermissionDecisionGrant);
+ decisionHandler(WKPermissionDecisionGrant);
}
@end
Modified: trunk/Tools/TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.h (275161 => 275162)
--- trunk/Tools/TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.h 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Tools/TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.h 2021-03-29 16:32:58 UTC (rev 275162)
@@ -24,27 +24,27 @@
*/
#if ENABLE(MEDIA_STREAM)
-#import <WebKit/WKUIDelegatePrivate.h>
+#import <WebKit/WKUIDelegate.h>
@interface UserMediaCaptureUIDelegate : NSObject<WKUIDelegate> {
bool _wasPrompted;
int _numberOfPrompts;
- _WKPermissionDecision _audioDecision;
- _WKPermissionDecision _videoDecision;
+ WKPermissionDecision _audioDecision;
+ WKPermissionDecision _videoDecision;
}
@property (readonly) BOOL wasPrompted;
@property int numberOfPrompts;
-@property _WKPermissionDecision decision;
+@property WKPermissionDecision decision;
- (void)waitUntilPrompted;
-(void)resetWasPrompted;
--(void)setAudioDecision:(_WKPermissionDecision)decision;
--(void)setVideoDecision:(_WKPermissionDecision)decision;
+-(void)setAudioDecision:(WKPermissionDecision)decision;
+-(void)setVideoDecision:(WKPermissionDecision)decision;
// WKUIDelegate
-- (void)_webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame audio:(BOOL)audio video:(BOOL)video decisionHandler:(void (^)(_WKPermissionDecision decision))decisionHandler;
+- (void)webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame type:(WKMediaCaptureType)type decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler;
- (void)_webView:(WKWebView *)webView checkUserMediaPermissionForURL:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL frameIdentifier:(NSUInteger)frameIdentifier decisionHandler:(void (^)(NSString *salt, BOOL authorized))decisionHandler;
@end
Modified: trunk/Tools/TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.mm (275161 => 275162)
--- trunk/Tools/TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.mm 2021-03-29 16:31:48 UTC (rev 275161)
+++ trunk/Tools/TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.mm 2021-03-29 16:32:58 UTC (rev 275162)
@@ -39,8 +39,8 @@
if (self != nil) {
_wasPrompted = false;
_numberOfPrompts = 0;
- _audioDecision = _WKPermissionDecisionGrant;
- _videoDecision = _WKPermissionDecisionGrant;
+ _audioDecision = WKPermissionDecisionGrant;
+ _videoDecision = WKPermissionDecisionGrant;
}
return self;
@@ -59,34 +59,38 @@
_wasPrompted = false;
}
--(void)setAudioDecision:(_WKPermissionDecision)decision {
+-(void)setAudioDecision:(WKPermissionDecision)decision {
_audioDecision = decision;
}
--(void)setVideoDecision:(_WKPermissionDecision)decision {
+-(void)setVideoDecision:(WKPermissionDecision)decision {
_videoDecision = decision;
}
-- (void)_webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame audio:(BOOL)audio video:(BOOL)video decisionHandler:(void (^)(_WKPermissionDecision decision))decisionHandler {
+- (void)webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame type:(WKMediaCaptureType)type decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler {
++_numberOfPrompts;
_wasPrompted = true;
- if (audio && _audioDecision == _WKPermissionDecisionDeny) {
- decisionHandler(_WKPermissionDecisionDeny);
- return;
+ switch (type) {
+ case WKMediaCaptureTypeCamera:
+ if (_videoDecision == WKPermissionDecisionDeny) {
+ decisionHandler(WKPermissionDecisionDeny);
+ return;
+ }
+ break;
+ case WKMediaCaptureTypeMicrophone:
+ if (_audioDecision == WKPermissionDecisionDeny) {
+ decisionHandler(WKPermissionDecisionDeny);
+ return;
+ }
+ break;
+ case WKMediaCaptureTypeCameraAndMicrophone:
+ if (_audioDecision == WKPermissionDecisionDeny || _videoDecision == WKPermissionDecisionDeny) {
+ decisionHandler(WKPermissionDecisionDeny);
+ return;
+ }
+ break;
}
- if (video && _videoDecision == _WKPermissionDecisionDeny) {
- decisionHandler(_WKPermissionDecisionDeny);
- return;
- }
- if (audio && _audioDecision == _WKPermissionDecisionPrompt) {
- decisionHandler(_WKPermissionDecisionPrompt);
- return;
- }
- if (video && _videoDecision == _WKPermissionDecisionPrompt) {
- decisionHandler(_WKPermissionDecisionPrompt);
- return;
- }
- decisionHandler(_WKPermissionDecisionGrant);
+ decisionHandler(WKPermissionDecisionGrant);
}
- (void)_webView:(WKWebView *)webView checkUserMediaPermissionForURL:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL frameIdentifier:(NSUInteger)frameIdentifier decisionHandler:(void (^)(NSString *salt, BOOL authorized))decisionHandler {