The system will terminate an app that doesn't have the appropriate key(s) in its Info.plist when it tries to use a capture device, so don't allow that to happen.
<rdar://problem/69761929>
Created attachment 410050 [details] Patch
Comment on attachment 410050 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=410050&action=review > Source/WebKit/UIProcess/Cocoa/UIDelegate.mm:988 > + AVAuthorizationStatus microphoneAuthorizationStatus = usingMockCaptureDevices || !requiresAudioCapture ? AVAuthorizationStatusAuthorized : [PAL::getAVCaptureDeviceClass() authorizationStatusForMediaType:AVMediaTypeAudio]; auto > Source/WebKit/UIProcess/Cocoa/UIDelegate.mm:994 > + AVAuthorizationStatus cameraAuthorizationStatus = usingMockCaptureDevices || !requiresVideoCapture ? AVAuthorizationStatusAuthorized : [PAL::getAVCaptureDeviceClass() authorizationStatusForMediaType:AVMediaTypeVideo]; auto > Source/WebKit/UIProcess/Cocoa/UserMediaPermissionRequestManagerProxy.mm:41 > + static std::once_flag onceFlag; > + static bool validUsageString; > + std::call_once(onceFlag, [] { > + NSString *usageString = NSBundle.mainBundle.infoDictionary[@"NSMicrophoneUsageDescription"]; > + validUsageString = usageString.length; > + }); > + > + return validUsageString; Does this need to be thread-safe? If not, it can be a two-liner: static bool isPermiitted = NSBundle.mainBundle.infoDictionary[@"NSMicrophoneUsageDescription"].length; return isPermitted; > Source/WebKit/UIProcess/Cocoa/UserMediaPermissionRequestManagerProxy.mm:57 > + static std::once_flag onceFlag; > + static bool validUsageString; > + std::call_once(onceFlag, [] { > + NSString *usageString = NSBundle.mainBundle.infoDictionary[@"NSCameraUsageDescription"]; > + validUsageString = usageString.length; > + }); > + > + return validUsageString; Ditto.
Comment on attachment 410050 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=410050&action=review Thanks for the review! >> Source/WebKit/UIProcess/Cocoa/UIDelegate.mm:988 >> + AVAuthorizationStatus microphoneAuthorizationStatus = usingMockCaptureDevices || !requiresAudioCapture ? AVAuthorizationStatusAuthorized : [PAL::getAVCaptureDeviceClass() authorizationStatusForMediaType:AVMediaTypeAudio]; > > auto Why do I have so much trouble remembering to use `auto`? Fixed. >> Source/WebKit/UIProcess/Cocoa/UIDelegate.mm:994 >> + AVAuthorizationStatus cameraAuthorizationStatus = usingMockCaptureDevices || !requiresVideoCapture ? AVAuthorizationStatusAuthorized : [PAL::getAVCaptureDeviceClass() authorizationStatusForMediaType:AVMediaTypeVideo]; > > auto Fixed. >> Source/WebKit/UIProcess/Cocoa/UserMediaPermissionRequestManagerProxy.mm:41 >> + return validUsageString; > > Does this need to be thread-safe? If not, it can be a two-liner: > > static bool isPermiitted = NSBundle.mainBundle.infoDictionary[@"NSMicrophoneUsageDescription"].length; > return isPermitted; Good idea, changed. >> Source/WebKit/UIProcess/Cocoa/UserMediaPermissionRequestManagerProxy.mm:57 >> + return validUsageString; > > Ditto. Ditto.
Created attachment 410072 [details] Patch for landing
Committed r267844: <https://trac.webkit.org/changeset/267844> All reviewed patches have been landed. Closing bug and clearing flags on attachment 410072 [details].