Title: [253037] trunk
- Revision
- 253037
- Author
- you...@apple.com
- Date
- 2019-12-03 06:45:21 -0800 (Tue, 03 Dec 2019)
Log Message
Expose WKWebView API to stop ongoing capture
https://bugs.webkit.org/show_bug.cgi?id=204787
Reviewed by Eric Carlson.
Source/WebKit:
Covered by API test.
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _stopMediaCapture]):
* UIProcess/API/Cocoa/WKWebViewPrivate.h:
Tools:
* TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
(TestWebKitAPI::TEST):
* TestWebKitAPI/Tests/WebKit/getUserMedia.html:
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (253036 => 253037)
--- trunk/Source/WebKit/ChangeLog 2019-12-03 13:37:01 UTC (rev 253036)
+++ trunk/Source/WebKit/ChangeLog 2019-12-03 14:45:21 UTC (rev 253037)
@@ -1,5 +1,18 @@
2019-12-03 youenn fablet <you...@apple.com>
+ Expose WKWebView API to stop ongoing capture
+ https://bugs.webkit.org/show_bug.cgi?id=204787
+
+ Reviewed by Eric Carlson.
+
+ Covered by API test.
+
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView _stopMediaCapture]):
+ * UIProcess/API/Cocoa/WKWebViewPrivate.h:
+
+2019-12-03 youenn fablet <you...@apple.com>
+
[Cocoa] Run camera capture in UIProcess by default in layout tests
https://bugs.webkit.org/show_bug.cgi?id=204512
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (253036 => 253037)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2019-12-03 13:37:01 UTC (rev 253036)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2019-12-03 14:45:21 UTC (rev 253037)
@@ -4987,6 +4987,11 @@
#endif
}
+- (void)_stopMediaCapture
+{
+ _page->stopMediaCapture();
+}
+
- (void)_stopAllMediaPlayback
{
_page->stopAllMediaPlayback();
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h (253036 => 253037)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h 2019-12-03 13:37:01 UTC (rev 253036)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h 2019-12-03 14:45:21 UTC (rev 253037)
@@ -422,6 +422,7 @@
- (void)_setPageMuted:(_WKMediaMutedState)mutedState WK_API_AVAILABLE(macos(10.13), ios(11.0));
@property (nonatomic, setter=_setMediaCaptureEnabled:) BOOL _mediaCaptureEnabled WK_API_AVAILABLE(macos(10.13), ios(11.0));
+- (void)_stopMediaCapture WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
@property (nonatomic, readonly) BOOL _canTogglePictureInPicture;
@property (nonatomic, readonly) BOOL _isPictureInPictureActive;
Modified: trunk/Tools/ChangeLog (253036 => 253037)
--- trunk/Tools/ChangeLog 2019-12-03 13:37:01 UTC (rev 253036)
+++ trunk/Tools/ChangeLog 2019-12-03 14:45:21 UTC (rev 253037)
@@ -1,5 +1,16 @@
2019-12-03 youenn fablet <you...@apple.com>
+ Expose WKWebView API to stop ongoing capture
+ https://bugs.webkit.org/show_bug.cgi?id=204787
+
+ Reviewed by Eric Carlson.
+
+ * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
+ (TestWebKitAPI::TEST):
+ * TestWebKitAPI/Tests/WebKit/getUserMedia.html:
+
+2019-12-03 youenn fablet <you...@apple.com>
+
[Cocoa] Run camera capture in UIProcess by default in layout tests
https://bugs.webkit.org/show_bug.cgi?id=204512
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMedia.mm (253036 => 253037)
--- trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMedia.mm 2019-12-03 13:37:01 UTC (rev 253036)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMedia.mm 2019-12-03 14:45:21 UTC (rev 253037)
@@ -157,6 +157,39 @@
EXPECT_TRUE(waitUntilCaptureState(webView, _WKMediaCaptureStateNone));
}
+TEST(WebKit2, CaptureStop)
+{
+ auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+ auto processPoolConfig = adoptNS([[_WKProcessPoolConfiguration alloc] init]);
+ auto preferences = [configuration preferences];
+ preferences._mediaCaptureRequiresSecureConnection = NO;
+ preferences._mediaDevicesEnabled = YES;
+ preferences._mockCaptureDevicesEnabled = YES;
+
+ auto messageHandler = adoptNS([[GUMMessageHandler alloc] init]);
+ [[configuration.get() userContentController] addScriptMessageHandler:messageHandler.get() name:@"gum"];
+
+ auto webView = [[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration.get() processPoolConfiguration:processPoolConfig.get()];
+ auto delegate = adoptNS([[GetUserMediaCaptureUIDelegate alloc] init]);
+ webView.UIDelegate = delegate.get();
+
+ [webView loadTestPageNamed:@"getUserMedia"];
+ EXPECT_TRUE(waitUntilCaptureState(webView, _WKMediaCaptureStateActiveCamera));
+
+ [webView _setPageMuted: _WKMediaCaptureDevicesMuted];
+ EXPECT_TRUE(waitUntilCaptureState(webView, _WKMediaCaptureStateMutedCamera));
+ [webView _setPageMuted: _WKMediaNoneMuted];
+ EXPECT_TRUE(waitUntilCaptureState(webView, _WKMediaCaptureStateActiveCamera));
+
+ [webView stringByEvaluatingJavaScript:@"notifyEndedEvent()"];
+ [webView _stopMediaCapture];
+
+ TestWebKitAPI::Util::run(&done);
+ done = false;
+
+ EXPECT_TRUE(waitUntilCaptureState(webView, _WKMediaCaptureStateNone));
+}
+
#if WK_HAVE_C_SPI
TEST(WebKit, WebAudioAndGetUserMedia)
{
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit/getUserMedia.html (253036 => 253037)
--- trunk/Tools/TestWebKitAPI/Tests/WebKit/getUserMedia.html 2019-12-03 13:37:01 UTC (rev 253036)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit/getUserMedia.html 2019-12-03 14:45:21 UTC (rev 253037)
@@ -60,6 +60,28 @@
{
navigator.mediaDevices.getUserMedia({audio: true, video: true}).then(s => stream = s);
}
+
+ function notifyEndedEvent()
+ {
+ if (!stream || !stream.getVideoTracks().length) {
+ window.webkit.messageHandlers.gum.postMessage("No stream or video track");
+ return;
+ }
+
+ let waitForEndedEvent = true;
+ stream.getVideoTracks()[0]._onended_ = () => {
+ if (!waitForEndedEvent)
+ return;
+ waitForEndedEvent = false;
+ window.webkit.messageHandlers.gum.postMessage("PASS");
+ }
+ setTimeout(() => {
+ if (!waitForEndedEvent)
+ return;
+ waitForEndedEvent = false;
+ window.webkit.messageHandlers.gum.postMessage("Did not receive an ended event after 5 seconds");
+ }, 5000);
+ }
</script>
<head>
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes