Changeset 267568 in webkit
- Timestamp:
- Sep 25, 2020, 7:35:47 AM (6 years ago)
- Location:
- trunk
- Files:
-
- 1 deleted
- 10 edited
- 1 moved
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/SourcesCocoa.txt (modified) (1 diff)
-
Source/WebKit/UIProcess/API/APIUIClient.h (modified) (1 diff)
-
Source/WebKit/UIProcess/Cocoa/UIDelegate.mm (modified) (3 diffs)
-
Source/WebKit/UIProcess/Cocoa/UserMediaPermissionRequestProxy.mm (moved) (moved from trunk/Source/WebKit/UIProcess/Cocoa/WKUserMediaCaptureAccessAlert.mm ) (4 diffs)
-
Source/WebKit/UIProcess/Cocoa/WKUserMediaCaptureAccessAlert.h (deleted)
-
Source/WebKit/UIProcess/UserMediaPermissionRequestProxy.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/UserMediaPermissionRequestProxy.h (modified) (1 diff)
-
Source/WebKit/WebKit.xcodeproj/project.pbxproj (modified) (6 diffs)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/MobileMiniBrowser/MobileMiniBrowser/Info.plist (modified) (1 diff)
-
Tools/MobileMiniBrowser/MobileMiniBrowserFramework/WebViewController.m (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r267563 r267568 1 2020-09-25 Youenn Fablet <youenn@apple.com> 2 3 Implement default behavior for getUserMedia requests in case where there is no delegate set 4 https://bugs.webkit.org/show_bug.cgi?id=216968 5 6 Reviewed by Eric Carlson. 7 8 In case page UIDelegate is not set, make the getUserMedia request do its default action. 9 In case there is a UIDelegate but no getUserMedia specific delegates, make the getUserMedia request do its default action. 10 Default action is deny for getDisplayMedia and for non cocoa ports. 11 For cocoa ports, a prompt is shown. 12 13 Manually tested with MiniBrowser and MobileMiniBrowser. 14 15 * SourcesCocoa.txt: 16 * UIProcess/API/APIUIClient.h: 17 (API::UIClient::decidePolicyForUserMediaPermissionRequest): 18 * UIProcess/Cocoa/UIDelegate.mm: 19 (WebKit::requestUserMediaAuthorizationForFrame): 20 * UIProcess/Cocoa/UserMediaPermissionRequestProxy.mm: Renamed from Source/WebKit/UIProcess/Cocoa/WKUserMediaCaptureAccessAlert.mm. 21 (WebKit::alertMessageText): 22 (WebKit::UserMediaPermissionRequestProxy::doDefaultAction): 23 * UIProcess/Cocoa/WKUserMediaCaptureAccessAlert.h: Removed. 24 * UIProcess/UserMediaPermissionRequestProxy.cpp: 25 (WebKit::UserMediaPermissionRequestProxy::doDefaultAction): 26 * UIProcess/UserMediaPermissionRequestProxy.h: 27 * WebKit.xcodeproj/project.pbxproj: 28 1 29 2020-09-25 Youenn Fablet <youenn@apple.com> 2 30 -
trunk/Source/WebKit/SourcesCocoa.txt
r267411 r267568 387 387 UIProcess/Cocoa/UIRemoteObjectRegistry.cpp 388 388 UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 389 UIProcess/Cocoa/UserMediaPermissionRequestProxy.mm 389 390 UIProcess/Cocoa/VersionChecks.mm 390 391 UIProcess/Cocoa/VideoFullscreenManagerProxy.mm -
trunk/Source/WebKit/UIProcess/API/APIUIClient.h
r266890 r267568 139 139 virtual bool runOpenPanel(WebKit::WebPageProxy&, WebKit::WebFrameProxy*, WebKit::FrameInfoData&&, OpenPanelParameters*, WebKit::WebOpenPanelResultListenerProxy*) { return false; } 140 140 virtual void decidePolicyForGeolocationPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, const WebKit::FrameInfoData&, Function<void(bool)>&) { } 141 virtual void decidePolicyForUserMediaPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, SecurityOrigin&, WebKit::UserMediaPermissionRequestProxy& request) { request.d eny(); }141 virtual void decidePolicyForUserMediaPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, SecurityOrigin&, WebKit::UserMediaPermissionRequestProxy& request) { request.doDefaultAction(); } 142 142 virtual void checkUserMediaPermissionForOrigin(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, SecurityOrigin&, WebKit::UserMediaPermissionCheckProxy& request) { request.deny(); } 143 143 virtual void decidePolicyForNotificationPermissionRequest(WebKit::WebPageProxy&, SecurityOrigin&, Function<void(bool)>&& completionHandler) { completionHandler(false); } -
trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm
r267414 r267568 45 45 #import "WKStorageAccessAlert.h" 46 46 #import "WKUIDelegatePrivate.h" 47 #import "WKUserMediaCaptureAccessAlert.h"48 47 #import "WKWebViewConfigurationInternal.h" 49 48 #import "WKWebViewInternal.h" … … 897 896 static void requestUserMediaAuthorizationForFrame(const WebFrameProxy& frame, API::SecurityOrigin& topLevelOrigin, UserMediaPermissionRequestProxy& request, id <WKUIDelegatePrivate> delegate, WKWebView& webView) 898 897 { 898 bool respondsToRequestMediaCaptureAuthorization = [delegate respondsToSelector:@selector(_webView:requestMediaCaptureAuthorization:decisionHandler:)]; 899 bool respondsToRequestUserMediaAuthorizationForDevices = [delegate respondsToSelector:@selector(_webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:)]; 900 901 if (!respondsToRequestMediaCaptureAuthorization && !respondsToRequestUserMediaAuthorizationForDevices) { 902 request.doDefaultAction(); 903 return; 904 } 905 899 906 auto checker = CompletionHandlerCallChecker::create(delegate, @selector(_webView:requestMediaCaptureAuthorization:decisionHandler:)); 900 907 auto decisionHandler = makeBlockPtr([protectedRequest = makeRef(request), checker = WTFMove(checker)](BOOL authorized) { … … 920 927 devices |= _WKCaptureDeviceDisplay; 921 928 ASSERT(!(devices & _WKCaptureDeviceCamera)); 922 }923 924 bool respondsToRequestMediaCaptureAuthorization = [delegate respondsToSelector:@selector(_webView:requestMediaCaptureAuthorization:decisionHandler:)];925 bool respondsToRequestUserMediaAuthorizationForDevices = [delegate respondsToSelector:@selector(_webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:)];926 if (!request.requiresDisplayCapture() && !respondsToRequestUserMediaAuthorizationForDevices && !respondsToRequestMediaCaptureAuthorization) {927 presentUserMediaCaptureAccessAlert(&webView, topLevelOrigin, devices, [decisionHandler = WTFMove(decisionHandler)](bool authorized) mutable {928 decisionHandler(authorized);929 });930 return;931 929 } 932 930 -
trunk/Source/WebKit/UIProcess/Cocoa/UserMediaPermissionRequestProxy.mm
r267567 r267568 25 25 26 26 #import "config.h" 27 #import " WKUserMediaCaptureAccessAlert.h"27 #import "UserMediaPermissionRequestProxy.h" 28 28 29 29 #if ENABLE(MEDIA_STREAM) 30 30 31 #import "UserMediaPermissionRequestManagerProxy.h" 31 32 #import "WKWebViewInternal.h" 32 #import "WKWebViewPrivate.h"33 #import "WebPageProxy.h"34 33 #import <WebCore/LocalizedStrings.h> 35 34 #import <wtf/BlockPtr.h> 36 35 #import <wtf/URLHelpers.h> 37 #import <wtf/text/WTFString.h>38 36 39 37 namespace WebKit { … … 45 43 } 46 44 47 static NSString *alertMessageText( API::SecurityOrigin& topLevelOrigin, _WKCaptureDevices devices)45 static NSString *alertMessageText(const WebCore::SecurityOrigin& origin, bool shouldAskUserForAccessToMicrophone, bool shouldAskUserForAccessToCamera) 48 46 { 49 bool shouldAskUserForAccessToCamera = devices & _WKCaptureDeviceCamera;50 bool shouldAskUserForAccessToMicrophone = devices & _WKCaptureDeviceMicrophone;51 52 auto& origin = topLevelOrigin.securityOrigin();53 47 if (origin.protocol() != "http" && origin.protocol() != "https") 54 48 return nil; … … 63 57 } 64 58 65 void presentUserMediaCaptureAccessAlert(WKWebView *webView, API::SecurityOrigin& topLevelOrigin, _WKCaptureDevices devices, CompletionHandler<void(bool)>&& completionHandler)59 void UserMediaPermissionRequestProxy::doDefaultAction() 66 60 { 67 auto *alertTitle = alertMessageText(topLevelOrigin, devices); 68 if (!alertTitle) { 69 completionHandler(false); 61 ASSERT(m_manager); 62 if (!m_manager) { 63 deny(); 64 return; 65 } 66 auto *webView = fromWebPageProxy(m_manager->page()); 67 if (!webView) { 68 deny(); 69 return; 70 } 71 if (requiresDisplayCapture()) { 72 // FIXME: Implement getDisplayMedia prompt, for now deny. 73 deny(); 70 74 return; 71 75 } 72 76 73 auto completionBlock = makeBlockPtr([completionHandler = WTFMove(completionHandler)](bool shouldAllow) mutable { 74 completionHandler(shouldAllow); 77 auto *alertTitle = alertMessageText(topLevelDocumentSecurityOrigin(), requiresAudioCapture(), requiresVideoCapture()); 78 if (!alertTitle) { 79 deny(); 80 return; 81 } 82 83 auto completionBlock = makeBlockPtr([this, protectedThis = makeRef(*this)](bool shouldAllow) mutable { 84 if (!shouldAllow) 85 deny(); 86 else 87 allow(); 75 88 }); 76 89 … … 106 119 } // namespace WebKit 107 120 108 #endif // ENABLE(DEVICE_ORIENTATION) 121 #else 122 123 namespace WebKit { 124 125 void UserMediaPermissionRequestProxy::doDefaultAction() 126 { 127 ASSERT_NOT_REACHED(); 128 } 129 130 } 131 #endif // ENABLE(MEDIA_STREAM) -
trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestProxy.cpp
r248713 r267568 96 96 } 97 97 98 #if !PLATFORM(COCOA) 99 void UserMediaPermissionRequestProxy::doDefaultAction() 100 { 101 deny(); 102 } 103 #endif 104 98 105 void UserMediaPermissionRequestProxy::invalidate() 99 106 { -
trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestProxy.h
r252048 r267568 47 47 enum class UserMediaAccessDenialReason { NoConstraints, UserMediaDisabled, NoCaptureDevices, InvalidConstraint, HardwareError, PermissionDenied, OtherFailure }; 48 48 void deny(UserMediaAccessDenialReason = UserMediaAccessDenialReason::UserMediaDisabled); 49 50 void doDefaultAction(); 49 51 50 52 void invalidate(); -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r267427 r267568 903 903 413CCD5020DEBC740065A21A /* com.google.googletalkbrowserplugin.sb in Copy Plug-in Sandbox Profiles */ = {isa = PBXBuildFile; fileRef = 413CCD4F20DEBC2F0065A21A /* com.google.googletalkbrowserplugin.sb */; }; 904 904 4143751C20EAEA2D00FAD06C /* cn.microdone.cmb.safari.sb in Copy Plug-in Sandbox Profiles */ = {isa = PBXBuildFile; fileRef = 4143751B20EAEA1E00FAD06C /* cn.microdone.cmb.safari.sb */; }; 905 4147DC692519EC3300214EE7 /* WKUserMediaCaptureAccessAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4147DC672519E29D00214EE7 /* WKUserMediaCaptureAccessAlert.mm */; };906 905 414DD37920BF43F5006959FB /* com.cisco.webex.plugin.gpc64.sb in Resources */ = {isa = PBXBuildFile; fileRef = 414DD37820BF43EA006959FB /* com.cisco.webex.plugin.gpc64.sb */; }; 907 906 414DD37A20BF49A5006959FB /* com.cisco.webex.plugin.gpc64.sb in Copy Plug-in Sandbox Profiles */ = {isa = PBXBuildFile; fileRef = 414DD37820BF43EA006959FB /* com.cisco.webex.plugin.gpc64.sb */; }; … … 3391 3390 411A8DD920DDB6050060D34F /* WKMockMediaDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKMockMediaDevice.h; sourceTree = "<group>"; }; 3392 3391 411A8DDA20DDB6050060D34F /* WKMockMediaDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKMockMediaDevice.cpp; sourceTree = "<group>"; }; 3392 411A9A9A251DE93E00807D7E /* UserMediaPermissionRequestProxy.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = UserMediaPermissionRequestProxy.mm; sourceTree = "<group>"; }; 3393 3393 411B22621E371244004F7363 /* LibWebRTCNetwork.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LibWebRTCNetwork.h; path = Network/webrtc/LibWebRTCNetwork.h; sourceTree = "<group>"; }; 3394 3394 41287D4B225C05C4009A3E26 /* WebSocketTaskCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebSocketTaskCocoa.mm; sourceTree = "<group>"; }; … … 3413 3413 413CCD4F20DEBC2F0065A21A /* com.google.googletalkbrowserplugin.sb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = com.google.googletalkbrowserplugin.sb; sourceTree = "<group>"; }; 3414 3414 4143751B20EAEA1E00FAD06C /* cn.microdone.cmb.safari.sb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cn.microdone.cmb.safari.sb; sourceTree = "<group>"; }; 3415 4147DC672519E29D00214EE7 /* WKUserMediaCaptureAccessAlert.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = WKUserMediaCaptureAccessAlert.mm; sourceTree = "<group>"; };3416 4147DC682519E29D00214EE7 /* WKUserMediaCaptureAccessAlert.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WKUserMediaCaptureAccessAlert.h; sourceTree = "<group>"; };3417 3415 414DD37820BF43EA006959FB /* com.cisco.webex.plugin.gpc64.sb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = com.cisco.webex.plugin.gpc64.sb; sourceTree = "<group>"; }; 3418 3416 4150A5A023E06C910051264A /* GPUProcessSessionParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPUProcessSessionParameters.h; sourceTree = "<group>"; }; … … 6362 6360 463236862314833F00A48FA7 /* UIRemoteObjectRegistry.cpp */, 6363 6361 463236852314833F00A48FA7 /* UIRemoteObjectRegistry.h */, 6362 411A9A9A251DE93E00807D7E /* UserMediaPermissionRequestProxy.mm */, 6364 6363 E4E8648E1B1673FB00C82F40 /* VersionChecks.h */, 6365 6364 E4E8648F1B1673FB00C82F40 /* VersionChecks.mm */, … … 6394 6393 2DC6D9C118C44A610043BAD4 /* WKWebViewContentProviderRegistry.h */, 6395 6394 2DC6D9C218C44A610043BAD4 /* WKWebViewContentProviderRegistry.mm */, 6396 4147DC682519E29D00214EE7 /* WKUserMediaCaptureAccessAlert.h */,6397 4147DC672519E29D00214EE7 /* WKUserMediaCaptureAccessAlert.mm */,6398 6395 C1710CF224A7BD0300D7C112 /* XPCEventHandler.h */, 6399 6396 ); … … 12976 12973 2D11B7C12126A283006F8878 /* UnifiedSource57-mm.mm in Sources */, 12977 12974 2D11B7C22126A283006F8878 /* UnifiedSource57.cpp in Sources */, 12978 4147DC692519EC3300214EE7 /* WKUserMediaCaptureAccessAlert.mm in Sources */,12979 12975 2D11B7C32126A283006F8878 /* UnifiedSource58-mm.mm in Sources */, 12980 12976 2D11B7C42126A283006F8878 /* UnifiedSource58.cpp in Sources */, -
trunk/Tools/ChangeLog
r267567 r267568 1 2020-09-25 Youenn Fablet <youenn@apple.com> 2 3 Implement default behavior for getUserMedia requests in case where there is no delegate set 4 https://bugs.webkit.org/show_bug.cgi?id=216968 5 6 Reviewed by Eric Carlson. 7 8 Add camera and microphone entitlements to MobileMiniBrowser. 9 Expose mediaDevices to web pages and use mock devices. 10 11 * MobileMiniBrowser/MobileMiniBrowser/Info.plist: 12 * MobileMiniBrowser/MobileMiniBrowserFramework/WebViewController.m: 13 (-[WebViewController createWebView]): 14 1 15 2020-09-25 Lauro Moura <lmoura@igalia.com> 2 16 -
trunk/Tools/MobileMiniBrowser/MobileMiniBrowser/Info.plist
r245777 r267568 55 55 <true/> 56 56 </dict> 57 <key>com.apple.security.device.camera</key> 58 <true/> 59 <key>com.apple.security.device.microphone</key> 60 <true/> 61 <key>NSCameraUsageDescription</key> 62 <string>Camera usage description</string> 57 63 </dict> 58 64 </plist> -
trunk/Tools/MobileMiniBrowser/MobileMiniBrowserFramework/WebViewController.m
r247195 r267568 29 29 #import <WebKit/WKNavigation.h> 30 30 #import <WebKit/WKNavigationDelegate.h> 31 #import <WebKit/WKPreferencesPrivate.h> 31 32 #import <WebKit/WKWebView.h> 32 33 #import <WebKit/WKWebViewConfiguration.h> … … 176 177 { 177 178 WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; 179 180 configuration.preferences._mediaDevicesEnabled = YES; 181 configuration.preferences._mockCaptureDevicesEnabled = YES; 182 178 183 WKWebView *webView = [[WKWebView alloc] initWithFrame:self.webViewContainer.bounds configuration:configuration]; 179 184 webView.navigationDelegate = self;
Note:
See TracChangeset
for help on using the changeset viewer.