Changeset 248104 in webkit
- Timestamp:
- Aug 1, 2019 9:17:56 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r248102 r248104 1 2019-08-01 Youenn Fablet <youenn@apple.com> 2 3 UserMediaPermissionRequestManagerProxy should not use audio+video denied requests to deny audio-only or video-only requests 4 https://bugs.webkit.org/show_bug.cgi?id=200317 5 6 Reviewed by Eric Carlson. 7 8 Update existing test with new behavior. 9 Added new test for the case where video is blocked but not audio. 10 11 * fast/mediastream/getUserMedia-deny-persistency3-expected.txt: 12 * fast/mediastream/getUserMedia-deny-persistency3.html: 13 * fast/mediastream/getUserMedia-deny-persistency4-expected.txt: Added. 14 * fast/mediastream/getUserMedia-deny-persistency4.html: Added. 15 1 16 2019-08-01 Carlos Garcia Campos <cgarcia@igalia.com> 2 17 -
trunk/LayoutTests/fast/mediastream/getUserMedia-deny-persistency3-expected.txt
r217945 r248104 1 1 2 PASS Testing same page getUserMedia deny persistency with audio and video denied2 PASS Testing same page getUserMedia deny persistency, the first denied request being audio and video, the second granted request being audio 3 3 -
trunk/LayoutTests/fast/mediastream/getUserMedia-deny-persistency3.html
r217945 r248104 7 7 <body> 8 8 <script> 9 10 promise_test((test) => { 9 promise_test(async (test) => { 11 10 if (window.testRunner) 12 11 testRunner.setUserMediaPermission(false); 13 returnnavigator.mediaDevices.getUserMedia({audio:true, video:true}).then(assert_unreached, (e) => {12 await navigator.mediaDevices.getUserMedia({audio:true, video:true}).then(assert_unreached, (e) => { 14 13 assert_equals(e.name, "NotAllowedError"); 15 if (window.testRunner)16 testRunner.setUserMediaPermission(true);17 return navigator.mediaDevices.getUserMedia({audio:true, video:false}).then(assert_unreached, (e) => {18 assert_equals(e.name, "NotAllowedError");19 });20 }).then(() => {21 return navigator.mediaDevices.getUserMedia({audio:true, video:false}).then(assert_unreached, (e) => {22 assert_equals(e.name, "NotAllowedError");23 });24 14 }); 25 }, "Testing same page getUserMedia deny persistency with audio and video denied"); 15 if (window.testRunner) 16 testRunner.setUserMediaPermission(true); 17 await navigator.mediaDevices.getUserMedia({audio:true}); 18 if (window.testRunner) 19 testRunner.setUserMediaPermission(false); 20 await navigator.mediaDevices.getUserMedia({audio:true}); 21 22 await navigator.mediaDevices.getUserMedia({video:true}).then(assert_unreached, (e) => { 23 assert_equals(e.name, "NotAllowedError"); 24 }); 25 }, "Testing same page getUserMedia deny persistency, the first denied request being audio and video, the second granted request being audio"); 26 26 </script> 27 27 </body> -
trunk/Source/WebKit/ChangeLog
r248102 r248104 1 2019-08-01 Youenn Fablet <youenn@apple.com> 2 3 UserMediaPermissionRequestManagerProxy should not use audio+video denied requests to deny audio-only or video-only requests 4 https://bugs.webkit.org/show_bug.cgi?id=200317 5 6 Reviewed by Eric Carlson. 7 8 Only match audio+video denied requests with new audio+video requests. 9 That will ensure that audio can still be captured if user denied access to the camera through preferences 10 and website started with a getUserMedia({audio: true, video: true}) call. 11 Covered by added API test. 12 13 * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: 14 (WebKit::UserMediaPermissionRequestManagerProxy::wasRequestDenied): 15 1 16 2019-08-01 Carlos Garcia Campos <cgarcia@igalia.com> 2 17 -
trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp
r247662 r248104 292 292 if (deniedRequest.mainFrameID != mainFrameID) 293 293 continue; 294 295 if (deniedRequest.isScreenCaptureDenied && needsScreenCapture) 296 return true; 297 298 // In case we asked for both audio and video, maybe the callback would have returned true for just audio or just video. 299 if (deniedRequest.isAudioDenied && deniedRequest.isVideoDenied) { 300 if (needsAudio && needsVideo) 301 return true; 302 continue; 303 } 304 294 305 if (deniedRequest.isAudioDenied && needsAudio) 295 306 return true; 296 307 if (deniedRequest.isVideoDenied && needsVideo) 297 return true;298 if (deniedRequest.isScreenCaptureDenied && needsScreenCapture)299 308 return true; 300 309 } -
trunk/Tools/ChangeLog
r248103 r248104 1 2019-08-01 Youenn Fablet <youenn@apple.com> 2 3 UserMediaPermissionRequestManagerProxy should not use audio+video denied requests to deny audio-only or video-only requests 4 https://bugs.webkit.org/show_bug.cgi?id=200317 5 6 Reviewed by Eric Carlson. 7 8 * TestWebKitAPI/Tests/WebKit/getUserMediaAudioVideoCapture.html: Added 9 * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: 10 * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm: 11 (-[GetUserMediaOnlyAudioUIDelegate _webView:requestMediaCaptureAuthorization:decisionHandler:]): 12 (-[GetUserMediaOnlyAudioUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]): 13 (TestWebKitAPI::TEST): 14 1 15 2019-08-01 Aakash Jain <aakash_jain@apple.com> 2 16 -
trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
r248095 r248104 39 39 07492B3C1DF8B86600633DE1 /* enumerateMediaDevices.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 07492B391DF8ADA400633DE1 /* enumerateMediaDevices.html */; }; 40 40 074994421EA5034B000DA44E /* getUserMedia.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 4A410F4D19AF7BEF002EBAB5 /* getUserMedia.html */; }; 41 074994421EA5034B000DA45E /* getUserMediaAudioVideoCapture.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 4A410F4D19AF7BEF002EBAC5 /* getUserMediaAudioVideoCapture.html */; }; 41 42 074994421EA5034B000DA44F /* ondevicechange.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 4A410F4D19AF7BEF002EBAB6 /* ondevicechange.html */; }; 42 43 076E507F1F4513D6006E9F5A /* Logging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 076E507E1F45031E006E9F5A /* Logging.cpp */; }; … … 1206 1207 467C565321B5ED130057516D /* GetSessionCookie.html in Copy Resources */, 1207 1208 074994421EA5034B000DA44E /* getUserMedia.html in Copy Resources */, 1209 074994421EA5034B000DA45E /* getUserMediaAudioVideoCapture.html in Copy Resources */, 1208 1210 F46A095B1ED8A6E600D4AA55 /* gif-and-file-input.html in Copy Resources */, 1209 1211 573255A522139BC700396AE8 /* helloworld.webarchive in Copy Resources */, … … 1669 1671 4A410F4B19AF7BD6002EBAB5 /* UserMedia.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserMedia.cpp; sourceTree = "<group>"; }; 1670 1672 4A410F4D19AF7BEF002EBAB5 /* getUserMedia.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = getUserMedia.html; sourceTree = "<group>"; }; 1673 4A410F4D19AF7BEF002EBAC5 /* getUserMediaAudioVideoCapture.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = getUserMediaAudioVideoCapture.html; sourceTree = "<group>"; }; 1671 1674 4A410F4D19AF7BEF002EBAB6 /* ondevicechange.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = ondevicechange.html; sourceTree = "<group>"; }; 1672 1675 4BB4160116815B2600824238 /* JSWrapperForNodeInWebFrame.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = JSWrapperForNodeInWebFrame.mm; sourceTree = "<group>"; }; … … 3624 3627 26F52EB118288F0F0023D412 /* geolocationWatchPositionWithHighAccuracy.html */, 3625 3628 4A410F4D19AF7BEF002EBAB5 /* getUserMedia.html */, 3629 4A410F4D19AF7BEF002EBAC5 /* getUserMediaAudioVideoCapture.html */, 3626 3630 BCBD372E125ABBE600D2C29F /* icon.png */, 3627 3631 CE3524F51B142BBB0028A7C5 /* input-focus-blur.html */, -
trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm
r246093 r248104 51 51 wasPrompted = true; 52 52 decisionHandler(YES); 53 } 54 55 - (void)_webView:(WKWebView *)webView checkUserMediaPermissionForURL:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL frameIdentifier:(NSUInteger)frameIdentifier decisionHandler:(void (^)(NSString *salt, BOOL authorized))decisionHandler 56 { 57 decisionHandler(@"0x987654321", YES); 58 } 59 @end 60 61 @interface GetUserMediaOnlyAudioUIDelegate : NSObject<WKUIDelegate> 62 - (void)_webView:(WKWebView *)webView requestMediaCaptureAuthorization: (_WKCaptureDevices)devices decisionHandler:(void (^)(BOOL))decisionHandler; 63 - (void)_webView:(WKWebView *)webView checkUserMediaPermissionForURL:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL frameIdentifier:(NSUInteger)frameIdentifier decisionHandler:(void (^)(NSString *salt, BOOL authorized))decisionHandler; 64 @end 65 66 @implementation GetUserMediaOnlyAudioUIDelegate 67 - (void)_webView:(WKWebView *)webView requestMediaCaptureAuthorization: (_WKCaptureDevices)devices decisionHandler:(void (^)(BOOL))decisionHandler 68 { 69 numberOfPrompts++; 70 wasPrompted = true; 71 decisionHandler((devices == _WKCaptureDeviceMicrophone) ? YES : NO); 53 72 } 54 73 … … 120 139 } 121 140 141 TEST(WebKit2, GetUserMediaRepromptAfterAudioVideoBeingDenied) 142 { 143 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 144 auto processPoolConfig = adoptNS([[_WKProcessPoolConfiguration alloc] init]); 145 auto preferences = [configuration preferences]; 146 preferences._mediaCaptureRequiresSecureConnection = NO; 147 preferences._mediaDevicesEnabled = YES; 148 preferences._mockCaptureDevicesEnabled = YES; 149 auto webView = [[GetUserMediaRepromptTestView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration.get() processPoolConfiguration:processPoolConfig.get()]; 150 auto delegate = adoptNS([[GetUserMediaOnlyAudioUIDelegate alloc] init]); 151 webView.UIDelegate = delegate.get(); 152 153 wasPrompted = false; 154 [webView loadTestPageNamed:@"getUserMediaAudioVideoCapture"]; 155 TestWebKitAPI::Util::run(&wasPrompted); 156 EXPECT_TRUE([webView haveStream:NO]); 157 158 wasPrompted = false; 159 [webView stringByEvaluatingJavaScript:@"promptForAudioOnly()"]; 160 TestWebKitAPI::Util::run(&wasPrompted); 161 EXPECT_TRUE([webView haveStream:YES]); 162 } 163 122 164 TEST(WebKit2, MultipleGetUserMediaSynchronously) 123 165 {
Note: See TracChangeset
for help on using the changeset viewer.