@mikep's Answer is very detailed and up to date.
Just as a supplement, I would like to point out that web view WKUIDelegate method decideMediaCapturePermissionsFor is an async version equivalent to the requestMediaCapturePermissionFor method.
code from WKUIDelegate.h:
- (void)webView:(WKWebView *)webView requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin initiatedByFrame:(WKFrameInfo *)frame type:(WKMediaCaptureType)type decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler
WK_SWIFT_ASYNC_NAME(webView(_:decideMediaCapturePermissionsFor:initiatedBy:type:)) WK_SWIFT_ASYNC(5) API_AVAILABLE(macos(12.0), ios(15.0));