Diff
Modified: trunk/LayoutTests/ChangeLog (290984 => 290985)
--- trunk/LayoutTests/ChangeLog 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/LayoutTests/ChangeLog 2022-03-08 12:24:15 UTC (rev 290985)
@@ -1,5 +1,19 @@
2022-03-08 Youenn Fablet <[email protected]>
+ Add a preference to mute video capture in case audio capture gets interrupted
+ https://bugs.webkit.org/show_bug.cgi?id=237524
+ <rdar://78421282>
+
+ Reviewed by Eric Carlson.
+
+ * fast/mediastream/media-stream-video-track-interrupted-from-audio-expected.txt: Added.
+ * fast/mediastream/media-stream-video-track-interrupted-from-audio.html: Added.
+ * fast/mediastream/media-stream-video-track-interrupted.html: Migrated to testRunner API.
+ * fast/mediastream/track-ended-while-muted.html:
+ * platform/glib/TestExpectations:
+
+2022-03-08 Youenn Fablet <[email protected]>
+
Improve WebRTC VPX media capabilities accuracy
https://bugs.webkit.org/show_bug.cgi?id=237462
Modified: trunk/LayoutTests/fast/mediastream/media-stream-track-interrupted.html (290984 => 290985)
--- trunk/LayoutTests/fast/mediastream/media-stream-track-interrupted.html 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/LayoutTests/fast/mediastream/media-stream-track-interrupted.html 2022-03-08 12:24:15 UTC (rev 290985)
@@ -1,5 +1,4 @@
-<!DOCTYPE html><!-- webkit-test-runner [ CaptureAudioInGPUProcessEnabled=false CaptureAudioInUIProcessEnabled=false ] -->
-<!DOCTYPE html>
+<!DOCTYPE html><!-- webkit-test-runner [ CaptureAudioInGPUProcessEnabled=true CaptureVideoInGPUProcessEnabled=true MuteCameraOnMicrophoneInterruptionEnabled=false ] -->
<html>
<head>
<meta charset="utf-8">
@@ -12,11 +11,11 @@
promise_test(async (test) => {
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
const track = stream.getAudioTracks()[0];
- if (!window.internals)
+ if (!window.testRunner)
return;
let promise = new Promise((resolve, reject) => { track._onmute_ = resolve; setTimeout(() => reject("no mute"), 5000) });
- internals.setMediaStreamSourceInterrupted(track, true);
+ testRunner.setMockCaptureDevicesInterrupted(false, true);
await promise;
assert_true(track.muted, "track is muted");
@@ -23,7 +22,7 @@
assert_true(internals.isMediaStreamSourceInterrupted(track), "source is interrupted");
promise = new Promise((resolve, reject) => { track._onunmute_ = resolve; setTimeout(() => reject("no unmute"), 5000) });
- internals.setMediaStreamSourceInterrupted(track, false);
+ testRunner.setMockCaptureDevicesInterrupted(false, false);
await promise;
assert_false(track.muted, "track is no longer muted");
@@ -74,14 +73,14 @@
assert_true(pageMediaState.includes(isVideo ? 'HasActiveAudioCaptureDevice' : 'HasActiveVideoCaptureDevice'));
assert_false(pageMediaState.includes(isVideo ? 'HasActiveVideoCaptureDevice' : 'HasActiveAudioCaptureDevice'));
pageState = internals.pageMediaState();
- internals.setMediaStreamSourceInterrupted(track, false)
+ testRunner.setMockCaptureDevicesInterrupted(false, false);
}
})
}
- if (window.internals) {
+ if (window.testRunner) {
pageState = internals.pageMediaState();
- internals.setMediaStreamSourceInterrupted(track, true);
+ testRunner.setMockCaptureDevicesInterrupted(isVideo, !isVideo);
}
setTimeout(() => reject("Muted state did not change in 1 second"), 1000);
});
Added: trunk/LayoutTests/fast/mediastream/media-stream-video-track-interrupted-from-audio-expected.txt (0 => 290985)
--- trunk/LayoutTests/fast/mediastream/media-stream-video-track-interrupted-from-audio-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/mediastream/media-stream-video-track-interrupted-from-audio-expected.txt 2022-03-08 12:24:15 UTC (rev 290985)
@@ -0,0 +1,3 @@
+
+PASS Mute/unmute video track if audio gets interrupted
+
Added: trunk/LayoutTests/fast/mediastream/media-stream-video-track-interrupted-from-audio.html (0 => 290985)
--- trunk/LayoutTests/fast/mediastream/media-stream-video-track-interrupted-from-audio.html (rev 0)
+++ trunk/LayoutTests/fast/mediastream/media-stream-video-track-interrupted-from-audio.html 2022-03-08 12:24:15 UTC (rev 290985)
@@ -0,0 +1,33 @@
+<!DOCTYPE html><!-- webkit-test-runner [ CaptureAudioInGPUProcessEnabled=true CaptureVideoInGPUProcessEnabled=true MuteCameraOnMicrophoneInterruptionEnabled=true ] -->
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Video capture source interruption based on audio interruption</title>
+ <script src=""
+ <script src=""
+ </head>
+<body>
+ <script>
+ promise_test(async (test) => {
+ const stream = await navigator.mediaDevices.getUserMedia({audio: true, video: true});
+ const track = stream.getVideoTracks()[0];
+ if (!window.testRunner)
+ return;
+
+ let promise = new Promise((resolve, reject) => { track._onmute_ = resolve; setTimeout(() => reject("no mute"), 5000) });
+ testRunner.setMockCaptureDevicesInterrupted(false, true);
+ await promise;
+
+ assert_true(track.muted, "track is muted");
+
+ promise = new Promise((resolve, reject) => { track._onunmute_ = resolve; setTimeout(() => reject("no unmute"), 5000) });
+ testRunner.setMockCaptureDevicesInterrupted(false, false);
+ await promise;
+
+ assert_false(track.muted, "track is not muted");
+
+ track.stop();
+ }, "Mute/unmute video track if audio gets interrupted");
+ </script>
+</body>
+</html>
Modified: trunk/LayoutTests/fast/mediastream/media-stream-video-track-interrupted.html (290984 => 290985)
--- trunk/LayoutTests/fast/mediastream/media-stream-video-track-interrupted.html 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/LayoutTests/fast/mediastream/media-stream-video-track-interrupted.html 2022-03-08 12:24:15 UTC (rev 290985)
@@ -15,13 +15,13 @@
return;
let promise = new Promise((resolve, reject) => { track._onmute_ = resolve; setTimeout(() => reject("no mute"), 5000) });
- testRunner.setMockCameraIsInterrupted(true);
+ testRunner.setMockCaptureDevicesInterrupted(true, false);
await promise;
assert_true(track.muted, "track is muted");
promise = new Promise((resolve, reject) => { track._onunmute_ = resolve; setTimeout(() => reject("no unmute"), 5000) });
- testRunner.setMockCameraIsInterrupted(false);
+ testRunner.setMockCaptureDevicesInterrupted(false, false);
await promise;
assert_false(track.muted, "track is not muted");
@@ -45,7 +45,7 @@
// getting an interruption, track should be muted.
let promise = new Promise((resolve, reject) => { track._onmute_ = resolve; setTimeout(() => reject("no mute"), 5000) });
- testRunner.setMockCameraIsInterrupted(true);
+ testRunner.setMockCaptureDevicesInterrupted(true, false);
await promise;
assert_true(track.muted, "track is muted");
Modified: trunk/LayoutTests/fast/mediastream/track-ended-while-muted.html (290984 => 290985)
--- trunk/LayoutTests/fast/mediastream/track-ended-while-muted.html 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/LayoutTests/fast/mediastream/track-ended-while-muted.html 2022-03-08 12:24:15 UTC (rev 290985)
@@ -11,13 +11,13 @@
promise_test(async (test) => {
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
const track = stream.getAudioTracks()[0];
- if (!window.internals)
+ if (!window.testRunner)
return;
const clone = track.clone();
let promise = new Promise((resolve, reject) => { track._onmute_ = resolve; setTimeout(() => reject("no mute"), 5000) });
- internals.setMediaStreamSourceInterrupted(track, true);
+ testRunner.setMockCaptureDevicesInterrupted(false, true);
await promise;
track.stop();
Modified: trunk/LayoutTests/platform/glib/TestExpectations (290984 => 290985)
--- trunk/LayoutTests/platform/glib/TestExpectations 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/LayoutTests/platform/glib/TestExpectations 2022-03-08 12:24:15 UTC (rev 290985)
@@ -798,6 +798,9 @@
webkit.org/b/230415 fast/mediastream/RTCPeerConnection-iceconnectionstatechange-event.html [ Timeout ]
webkit.org/b/79203 fast/mediastream/RTCRtpSender-replaceTrack.html [ Failure ]
webkit.org/b/187603 fast/mediastream/media-stream-track-source-failure.html [ Timeout Failure Pass ]
+fast/mediastream/media-stream-video-track-interrupted-from-audio.html [ Failure ]
+fast/mediastream/media-stream-track-interrupted.html [ Failure ]
+fast/mediastream/track-ended-while-muted.html [ Failure ]
webkit.org/b/223508 imported/w3c/web-platform-tests/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html [ Failure Pass ]
Modified: trunk/Source/WTF/ChangeLog (290984 => 290985)
--- trunk/Source/WTF/ChangeLog 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WTF/ChangeLog 2022-03-08 12:24:15 UTC (rev 290985)
@@ -1,3 +1,13 @@
+2022-03-08 Youenn Fablet <[email protected]>
+
+ Add a preference to mute video capture in case audio capture gets interrupted
+ https://bugs.webkit.org/show_bug.cgi?id=237524
+ <rdar://78421282>
+
+ Reviewed by Eric Carlson.
+
+ * Scripts/Preferences/WebPreferencesInternal.yaml:
+
2022-03-08 Sihui Liu <[email protected]>
Add early return for empty path in makeAllDirectories
Modified: trunk/Source/WTF/Scripts/Preferences/WebPreferencesInternal.yaml (290984 => 290985)
--- trunk/Source/WTF/Scripts/Preferences/WebPreferencesInternal.yaml 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WTF/Scripts/Preferences/WebPreferencesInternal.yaml 2022-03-08 12:24:15 UTC (rev 290985)
@@ -640,6 +640,18 @@
WebKit:
default: false
+MuteCameraOnMicrophoneInterruptionEnabled:
+ type: bool
+ condition: ENABLE(MEDIA_STREAM)
+ defaultValue:
+ WebKitLegacy:
+ default: false
+ WebKit:
+ "PLATFORM(IOS_FAMILY)": true
+ default: false
+ WebCore:
+ default: false
+
NPAPIPlugInsEnabledForTestingInWebKitLegacy:
type: bool
humanReadableName: "NPAPI Plug-Ins Enabled In WebKitLegacy"
Modified: trunk/Source/WebCore/ChangeLog (290984 => 290985)
--- trunk/Source/WebCore/ChangeLog 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebCore/ChangeLog 2022-03-08 12:24:15 UTC (rev 290985)
@@ -1,3 +1,30 @@
+2022-03-08 Youenn Fablet <[email protected]>
+
+ Add a preference to mute video capture in case audio capture gets interrupted
+ https://bugs.webkit.org/show_bug.cgi?id=237524
+ <rdar://78421282>
+
+ Reviewed by Eric Carlson.
+
+ In case we detect that a microphone track source gets muted due to interruption, we mute
+ capture video tracks based if allowed by the new MuteCameraOnMicrophoneInterruptionEnabled setting.
+
+ Add support for mock microphone interruption and remove previous in process internals API.
+
+ Test: fast/mediastream/media-stream-video-track-interrupted-from-audio.html
+
+ * Modules/mediastream/MediaStreamTrack.cpp:
+ * Modules/mediastream/MediaStreamTrack.h:
+ * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
+ * platform/mediastream/mac/CoreAudioCaptureSource.h:
+ * platform/mock/MockRealtimeAudioSource.cpp:
+ (WebCore::MockRealtimeAudioSource::setIsInterrupted):
+ * platform/mock/MockRealtimeAudioSource.h:
+ * platform/mock/MockRealtimeMediaSourceCenter.cpp:
+ (WebCore::MockRealtimeMediaSourceCenter::setMockCaptureDevicesInterrupted):
+ (WebCore::MockRealtimeMediaSourceCenter::setMockCameraIsInterrupted): Deleted.
+ * platform/mock/MockRealtimeMediaSourceCenter.h:
+
2022-03-08 Enrique Ocaña González <[email protected]>
[GStreamer] Handle gst pad error as format error
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp (290984 => 290985)
--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp 2022-03-08 12:24:15 UTC (rev 290985)
@@ -91,6 +91,7 @@
if (!isCaptureTrack())
return;
+ m_isInterrupted = m_private->source().interrupted();
allCaptureTracks().add(this);
if (m_private->hasAudio())
@@ -509,6 +510,18 @@
#endif
}
+static void updateVideoCaptureAccordingMicrophoneInterruption(Document& document, bool isMicrophoneInterrupted)
+{
+ auto* page = document.page();
+ for (auto* captureTrack : allCaptureTracks()) {
+ if (!captureTrack->document() || captureTrack->document()->page() != page)
+ continue;
+ auto& source = captureTrack->source();
+ if (!source.isEnded() && source.type() == RealtimeMediaSource::Type::Video)
+ source.setMuted(isMicrophoneInterrupted);
+ }
+}
+
void MediaStreamTrack::updateToPageMutedState()
{
ASSERT(isCaptureTrack());
@@ -612,7 +625,8 @@
void MediaStreamTrack::trackMutedChanged(MediaStreamTrackPrivate&)
{
- if (scriptExecutionContext()->activeDOMObjectsAreStopped() || m_ended)
+ auto* document = this->document();
+ if (document->activeDOMObjectsAreStopped() || m_ended)
return;
queueTaskKeepingObjectAlive(*this, TaskSource::Networking, [this, muted = m_private->muted()] {
@@ -622,6 +636,11 @@
dispatchEvent(Event::create(muted ? eventNames().muteEvent : eventNames().unmuteEvent, Event::CanBubble::No, Event::IsCancelable::No));
});
configureTrackRendering();
+
+ bool wasInterrupted = m_isInterrupted;
+ m_isInterrupted = m_private->source().interrupted();
+ if (wasInterrupted != m_isInterrupted && m_private->source().type() == RealtimeMediaSource::Type::Audio && document->settings().muteCameraOnMicrophoneInterruptionEnabled())
+ updateVideoCaptureAccordingMicrophoneInterruption(*document, m_isInterrupted);
}
void MediaStreamTrack::trackSettingsChanged(MediaStreamTrackPrivate&)
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h (290984 => 290985)
--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h 2022-03-08 12:24:15 UTC (rev 290985)
@@ -208,6 +208,7 @@
bool m_muted { false };
bool m_ended { false };
const bool m_isCaptureTrack { false };
+ bool m_isInterrupted { false };
};
typedef Vector<RefPtr<MediaStreamTrack>> MediaStreamTrackVector;
Modified: trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp (290984 => 290985)
--- trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp 2022-03-08 12:24:15 UTC (rev 290985)
@@ -702,15 +702,6 @@
return m_overrideUnit ? *m_overrideUnit : CoreAudioSharedUnit::singleton();
}
-void CoreAudioCaptureSource::setInterruptedForTesting(bool isInterrupted)
-{
- if (isInterrupted) {
- unit().suspend();
- return;
- }
- unit().resume();
-}
-
void CoreAudioCaptureSourceFactory::beginInterruption()
{
ensureOnMainThread([] {
Modified: trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h (290984 => 290985)
--- trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h 2022-03-08 12:24:15 UTC (rev 290985)
@@ -74,7 +74,6 @@
void stopProducingData() final;
void delaySamples(Seconds) final;
- void setInterruptedForTesting(bool) final;
std::optional<Vector<int>> discreteSampleRates() const final { return { { 8000, 16000, 32000, 44100, 48000, 96000 } }; }
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp (290984 => 290985)
--- trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp 2022-03-08 12:24:15 UTC (rev 290985)
@@ -42,6 +42,10 @@
#include "RealtimeMediaSourceSettings.h"
#include <wtf/UUID.h>
+#if PLATFORM(COCOA)
+#include "MockAudioSharedUnit.h"
+#endif
+
namespace WebCore {
#if !PLATFORM(MAC) && !PLATFORM(IOS_FAMILY) && !USE(GSTREAMER)
@@ -180,6 +184,17 @@
m_delayUntil = MonotonicTime::now() + delta;
}
+void MockRealtimeAudioSource::setIsInterrupted(bool isInterrupted)
+{
+ UNUSED_PARAM(isInterrupted);
+#if PLATFORM(COCOA)
+ if (isInterrupted)
+ MockAudioSharedUnit::singleton().suspend();
+ else
+ MockAudioSharedUnit::singleton().resume();
+#endif
+}
+
} // namespace WebCore
#endif // ENABLE(MEDIA_STREAM)
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.h (290984 => 290985)
--- trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.h 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.h 2022-03-08 12:24:15 UTC (rev 290985)
@@ -45,6 +45,8 @@
static CaptureSourceOrError create(String&& deviceID, String&& name, String&& hashSalt, const MediaConstraints*);
virtual ~MockRealtimeAudioSource();
+ static void setIsInterrupted(bool);
+
WEBCORE_EXPORT void setChannelCount(unsigned);
protected:
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp (290984 => 290985)
--- trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp 2022-03-08 12:24:15 UTC (rev 290985)
@@ -317,9 +317,10 @@
RealtimeMediaSourceCenter::singleton().captureDevicesChanged();
}
-void MockRealtimeMediaSourceCenter::setMockCameraIsInterrupted(bool isInterrupted)
+void MockRealtimeMediaSourceCenter::setMockCaptureDevicesInterrupted(bool isCameraInterrupted, bool isMicrophoneInterrupted)
{
- MockRealtimeVideoSource::setIsInterrupted(isInterrupted);
+ MockRealtimeVideoSource::setIsInterrupted(isCameraInterrupted);
+ MockRealtimeAudioSource::setIsInterrupted(isMicrophoneInterrupted);
}
void MockRealtimeMediaSourceCenter::setDevices(Vector<MockMediaDevice>&& newMockDevices)
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.h (290984 => 290985)
--- trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.h 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.h 2022-03-08 12:24:15 UTC (rev 290985)
@@ -47,7 +47,7 @@
WEBCORE_EXPORT static void addDevice(const MockMediaDevice&);
WEBCORE_EXPORT static void removeDevice(const String& persistentId);
WEBCORE_EXPORT static void resetDevices();
- WEBCORE_EXPORT static void setMockCameraIsInterrupted(bool);
+ WEBCORE_EXPORT static void setMockCaptureDevicesInterrupted(bool isCameraInterrupted, bool isMicrophoneInterrupted);
void setMockAudioCaptureEnabled(bool isEnabled) { m_isMockAudioCaptureEnabled = isEnabled; }
void setMockVideoCaptureEnabled(bool isEnabled) { m_isMockVideoCaptureEnabled = isEnabled; }
Modified: trunk/Source/WebKit/ChangeLog (290984 => 290985)
--- trunk/Source/WebKit/ChangeLog 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/ChangeLog 2022-03-08 12:24:15 UTC (rev 290985)
@@ -1,3 +1,37 @@
+2022-03-08 Youenn Fablet <[email protected]>
+
+ Add a preference to mute video capture in case audio capture gets interrupted
+ https://bugs.webkit.org/show_bug.cgi?id=237524
+ <rdar://78421282>
+
+ Reviewed by Eric Carlson.
+
+ Add support for interrupt mock microphone devices.
+ Send to WebProcess sources whether sources are interrupted each time the source muted value changes.
+ Store that value in remote sources.
+
+ * GPUProcess/GPUProcess.cpp:
+ * GPUProcess/GPUProcess.h:
+ * GPUProcess/GPUProcess.messages.in:
+ * UIProcess/API/C/WKPage.cpp:
+ * UIProcess/API/C/WKPagePrivate.h:
+ * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
+ * UIProcess/GPU/GPUProcessProxy.cpp:
+ * UIProcess/GPU/GPUProcessProxy.h:
+ * UIProcess/WebPageProxy.cpp:
+ * UIProcess/WebPageProxy.h:
+ * WebProcess/WebPage/WebPage.cpp:
+ * WebProcess/WebPage/WebPage.h:
+ * WebProcess/WebPage/WebPage.messages.in:
+ * WebProcess/cocoa/RemoteRealtimeAudioSource.h:
+ * WebProcess/cocoa/RemoteRealtimeDisplaySource.h:
+ * WebProcess/cocoa/RemoteRealtimeMediaSourceProxy.cpp:
+ * WebProcess/cocoa/RemoteRealtimeMediaSourceProxy.h:
+ * WebProcess/cocoa/RemoteRealtimeVideoSource.h:
+ * WebProcess/cocoa/UserMediaCaptureManager.cpp:
+ * WebProcess/cocoa/UserMediaCaptureManager.h:
+ * WebProcess/cocoa/UserMediaCaptureManager.messages.in:
+
2022-03-07 Simon Fraser <[email protected]>
Rename VolatilityState to SetNonVolatileResult
Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.cpp (290984 => 290985)
--- trunk/Source/WebKit/GPUProcess/GPUProcess.cpp 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.cpp 2022-03-08 12:24:15 UTC (rev 290985)
@@ -351,9 +351,9 @@
MockRealtimeMediaSourceCenter::resetDevices();
}
-void GPUProcess::setMockCameraIsInterrupted(bool isInterrupted)
+void GPUProcess::setMockCaptureDevicesInterrupted(bool isCameraInterrupted, bool isMicrophoneInterrupted)
{
- MockRealtimeMediaSourceCenter::setMockCameraIsInterrupted(isInterrupted);
+ MockRealtimeMediaSourceCenter::setMockCaptureDevicesInterrupted(isCameraInterrupted, isMicrophoneInterrupted);
}
#endif // ENABLE(MEDIA_STREAM)
Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.h (290984 => 290985)
--- trunk/Source/WebKit/GPUProcess/GPUProcess.h 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.h 2022-03-08 12:24:15 UTC (rev 290985)
@@ -152,7 +152,7 @@
void clearMockMediaDevices();
void removeMockMediaDevice(const String& persistentId);
void resetMockMediaDevices();
- void setMockCameraIsInterrupted(bool);
+ void setMockCaptureDevicesInterrupted(bool isCameraInterrupted, bool isMicrophoneInterrupted);
bool setCaptureAttributionString(const String&);
#endif
#if HAVE(SC_CONTENT_SHARING_SESSION)
Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in (290984 => 290985)
--- trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in 2022-03-08 12:24:15 UTC (rev 290985)
@@ -39,11 +39,11 @@
UpdateSandboxAccess(Vector<WebKit::SandboxExtension::Handle> extensions);
UpdateCaptureAccess(bool allowAudioCapture, bool allowVideoCapture, bool allowDisplayCapture, WebCore::ProcessIdentifier processID) -> ()
UpdateCaptureOrigin(struct WebCore::SecurityOriginData originData, WebCore::ProcessIdentifier processID)
- AddMockMediaDevice(struct WebCore::MockMediaDevice device);
- ClearMockMediaDevices();
- RemoveMockMediaDevice(String persistentId);
- ResetMockMediaDevices();
- SetMockCameraIsInterrupted(bool isInterrupted);
+ AddMockMediaDevice(struct WebCore::MockMediaDevice device)
+ ClearMockMediaDevices()
+ RemoveMockMediaDevice(String persistentId)
+ ResetMockMediaDevices()
+ SetMockCaptureDevicesInterrupted(bool isCameraInterrupted, bool isMicrophoneInterrupted)
#endif
#if PLATFORM(MAC)
DisplayConfigurationChanged(CGDirectDisplayID displayID, CGDisplayChangeSummaryFlags flags)
Modified: trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp (290984 => 290985)
--- trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp 2022-03-08 12:24:15 UTC (rev 290985)
@@ -3139,15 +3139,15 @@
#endif
}
-void WKPageSetMockCameraIsInterrupted(WKPageRef pageRef, bool isInterrupted)
+void WKPageSetMockCaptureDevicesInterrupted(WKPageRef pageRef, bool isCameraInterrupted, bool isMicrophoneInterrupted)
{
CRASH_IF_SUSPENDED;
#if ENABLE(MEDIA_STREAM) && ENABLE(GPU_PROCESS)
auto& gpuProcess = toImpl(pageRef)->process().processPool().ensureGPUProcess();
- gpuProcess.setMockCameraIsInterrupted(isInterrupted);
+ gpuProcess.setMockCaptureDevicesInterrupted(isCameraInterrupted, isMicrophoneInterrupted);
#endif
#if ENABLE(MEDIA_STREAM) && USE(GSTREAMER)
- toImpl(pageRef)->setMockCameraIsInterrupted(isInterrupted);
+ toImpl(pageRef)->setMockCaptureDevicesInterrupted(isCameraInterrupted, isMicrophoneInterrupted);
#endif
}
Modified: trunk/Source/WebKit/UIProcess/API/C/WKPagePrivate.h (290984 => 290985)
--- trunk/Source/WebKit/UIProcess/API/C/WKPagePrivate.h 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/UIProcess/API/C/WKPagePrivate.h 2022-03-08 12:24:15 UTC (rev 290985)
@@ -201,7 +201,7 @@
WK_EXPORT void WKPageSetMockCameraOrientation(WKPageRef page, uint64_t orientation);
WK_EXPORT bool WKPageIsMockRealtimeMediaSourceCenterEnabled(WKPageRef page);
-WK_EXPORT void WKPageSetMockCameraIsInterrupted(WKPageRef page, bool isInterrupted);
+WK_EXPORT void WKPageSetMockCaptureDevicesInterrupted(WKPageRef page, bool isCameraInterrupted, bool isMicrophoneInterrupted);
typedef void (*WKPageLoadedSubresourceDomainsFunction)(WKArrayRef domains, void* functionContext);
WK_EXPORT void WKPageLoadedSubresourceDomains(WKPageRef page, WKPageLoadedSubresourceDomainsFunction callback, void* callbackContext);
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp (290984 => 290985)
--- trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2022-03-08 12:24:15 UTC (rev 290985)
@@ -146,7 +146,7 @@
}
void sourceMutedChanged() final {
- m_connection->send(Messages::UserMediaCaptureManager::SourceMutedChanged(m_id, m_source->muted()), 0);
+ m_connection->send(Messages::UserMediaCaptureManager::SourceMutedChanged(m_id, m_source->muted(), m_source->interrupted()), 0);
}
void sourceSettingsChanged() final {
Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp (290984 => 290985)
--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp 2022-03-08 12:24:15 UTC (rev 290985)
@@ -350,9 +350,9 @@
send(Messages::GPUProcess::ResetMockMediaDevices { }, 0);
}
-void GPUProcessProxy::setMockCameraIsInterrupted(bool isInterrupted)
+void GPUProcessProxy::setMockCaptureDevicesInterrupted(bool isCameraInterrupted, bool isMicrophoneInterrupted)
{
- send(Messages::GPUProcess::SetMockCameraIsInterrupted { isInterrupted }, 0);
+ send(Messages::GPUProcess::SetMockCaptureDevicesInterrupted { isCameraInterrupted, isMicrophoneInterrupted }, 0);
}
#endif // ENABLE(MEDIA_STREAM)
Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h (290984 => 290985)
--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h 2022-03-08 12:24:15 UTC (rev 290985)
@@ -86,7 +86,7 @@
void clearMockMediaDevices();
void removeMockMediaDevice(const String&);
void resetMockMediaDevices();
- void setMockCameraIsInterrupted(bool);
+ void setMockCaptureDevicesInterrupted(bool isCameraInterrupted, bool isMicrophoneInterrupted);
void updateSandboxAccess(bool allowAudioCapture, bool allowVideoCapture, bool allowDisplayCapture);
#endif
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (290984 => 290985)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2022-03-08 12:24:15 UTC (rev 290985)
@@ -10882,9 +10882,9 @@
}
#if ENABLE(MEDIA_STREAM) && USE(GSTREAMER)
-void WebPageProxy::setMockCameraIsInterrupted(bool isInterrupted)
+void WebPageProxy::setMockCaptureDevicesInterrupted(bool isCameraInterrupted, bool isMicrophoneInterrupted)
{
- send(Messages::WebPage::SetMockCameraIsInterrupted(isInterrupted));
+ send(Messages::WebPage::SetMockCaptureDevicesInterrupted(isCameraInterrupted, isMicrophoneInterrupted));
}
#endif
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (290984 => 290985)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.h 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h 2022-03-08 12:24:15 UTC (rev 290985)
@@ -1892,7 +1892,7 @@
void setOrientationForMediaCapture(uint64_t);
#if ENABLE(MEDIA_STREAM) && USE(GSTREAMER)
- void setMockCameraIsInterrupted(bool);
+ void setMockCaptureDevicesInterrupted(bool isCameraInterrupted, bool isMicrophoneInterrupted);
#endif
bool isHandlingPreventableTouchStart() const { return m_handlingPreventableTouchStartCount; }
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (290984 => 290985)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2022-03-08 12:24:15 UTC (rev 290985)
@@ -4914,9 +4914,9 @@
});
}
-void WebPage::setMockCameraIsInterrupted(bool isInterrupted)
+void WebPage::setMockCaptureDevicesInterrupted(bool isCameraInterrupted, bool isMicrophoneInterrupted)
{
- MockRealtimeMediaSourceCenter::setMockCameraIsInterrupted(isInterrupted);
+ MockRealtimeMediaSourceCenter::setMockCaptureDevicesInterrupted(isCameraInterrupted, isMicrophoneInterrupted);
}
#endif // USE(GSTREAMER)
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (290984 => 290985)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2022-03-08 12:24:15 UTC (rev 290985)
@@ -1244,7 +1244,7 @@
#endif
#if ENABLE(MEDIA_STREAM) && USE(GSTREAMER)
void setOrientationForMediaCapture(uint64_t rotation);
- void setMockCameraIsInterrupted(bool);
+ void setMockCaptureDevicesInterrupted(bool isCameraInterrupted, bool isMicrophoneInterrupted);
#endif
void addUserScript(String&& source, InjectedBundleScriptWorld&, WebCore::UserContentInjectedFrames, WebCore::UserScriptInjectionTime);
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in (290984 => 290985)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2022-03-08 12:24:15 UTC (rev 290985)
@@ -407,7 +407,7 @@
CaptureDevicesChanged()
#if USE(GSTREAMER)
SetOrientationForMediaCapture(int rotation)
- SetMockCameraIsInterrupted(bool isInterrupted)
+ SetMockCaptureDevicesInterrupted(bool isCameraInterrupted, bool isMicrophoneInterrupted)
#endif
#endif
Modified: trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeAudioSource.h (290984 => 290985)
--- trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeAudioSource.h 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeAudioSource.h 2022-03-08 12:24:15 UTC (rev 290985)
@@ -68,7 +68,7 @@
void captureFailed() final;
void remoteAudioSamplesAvailable(const MediaTime&, const WebCore::PlatformAudioData&, const WebCore::AudioStreamDescription&, size_t);
- void sourceMutedChanged(bool value) { notifyMutedChange(value); }
+ void sourceMutedChanged(bool value, bool interrupted);
private:
RemoteRealtimeAudioSource(WebCore::RealtimeMediaSourceIdentifier, const WebCore::CaptureDevice&, const WebCore::MediaConstraints*, String&& name, String&& hashSalt, UserMediaCaptureManager&, bool shouldCaptureInGPUProcess);
@@ -85,6 +85,7 @@
const WebCore::RealtimeMediaSourceCapabilities& capabilities() final { return m_capabilities; }
void whenReady(CompletionHandler<void(String)>&& callback) final { m_proxy.whenReady(WTFMove(callback)); }
WebCore::CaptureDevice::DeviceType deviceType() const final { return m_proxy.deviceType(); }
+ bool interrupted() const final { return m_proxy.interrupted(); }
#if ENABLE(GPU_PROCESS)
// GPUProcessConnection::Client
@@ -101,6 +102,12 @@
WebCore::RealtimeMediaSourceSettings m_settings;
};
+inline void RemoteRealtimeAudioSource::sourceMutedChanged(bool muted, bool interrupted)
+{
+ m_proxy.setInterrupted(interrupted);
+ notifyMutedChange(muted);
+}
+
} // namespace WebKit
#endif
Modified: trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeDisplaySource.h (290984 => 290985)
--- trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeDisplaySource.h 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeDisplaySource.h 2022-03-08 12:24:15 UTC (rev 290985)
@@ -62,7 +62,7 @@
void captureFailed() final;
void remoteVideoSampleAvailable(WebCore::MediaSample& sample, WebCore::VideoSampleMetadata metadata) { videoSampleAvailable(sample, metadata); }
- void sourceMutedChanged(bool value) { notifyMutedChange(value); }
+ void sourceMutedChanged(bool value, bool interrupted);
private:
RemoteRealtimeDisplaySource(WebCore::RealtimeMediaSourceIdentifier, const WebCore::CaptureDevice&, const WebCore::MediaConstraints*, String&& hashSalt, UserMediaCaptureManager&, bool shouldCaptureInGPUProcess);
@@ -79,6 +79,7 @@
const WebCore::RealtimeMediaSourceCapabilities& capabilities() final { return m_capabilities; }
void whenReady(CompletionHandler<void(String)>&& callback) final { m_proxy.whenReady(WTFMove(callback)); }
WebCore::CaptureDevice::DeviceType deviceType() const final { return m_proxy.deviceType(); }
+ bool interrupted() const final { return m_proxy.interrupted(); }
#if ENABLE(GPU_PROCESS)
// GPUProcessConnection::Client
@@ -95,6 +96,12 @@
WebCore::RealtimeMediaSourceSettings m_settings;
};
+inline void RemoteRealtimeDisplaySource::sourceMutedChanged(bool muted, bool interrupted)
+{
+ m_proxy.setInterrupted(interrupted);
+ notifyMutedChange(muted);
+}
+
} // namespace WebKit
#endif
Modified: trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSourceProxy.cpp (290984 => 290985)
--- trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSourceProxy.cpp 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSourceProxy.cpp 2022-03-08 12:24:15 UTC (rev 290985)
@@ -60,11 +60,13 @@
void RemoteRealtimeMediaSourceProxy::startProducingData()
{
+ m_interrupted = false;
connection()->send(Messages::UserMediaCaptureManagerProxy::StartProducingData { m_identifier }, 0);
}
void RemoteRealtimeMediaSourceProxy::stopProducingData()
{
+ m_interrupted = false;
connection()->send(Messages::UserMediaCaptureManagerProxy::StopProducingData { m_identifier }, 0);
}
Modified: trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSourceProxy.h (290984 => 290985)
--- trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSourceProxy.h 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSourceProxy.h 2022-03-08 12:24:15 UTC (rev 290985)
@@ -71,6 +71,9 @@
void didFail(String&& errorMessage);
+ bool interrupted() const { return m_interrupted; }
+ void setInterrupted(bool interrupted) { m_interrupted = interrupted; }
+
private:
WebCore::RealtimeMediaSourceIdentifier m_identifier;
WebCore::CaptureDevice m_device;
@@ -81,6 +84,7 @@
bool m_isReady { false };
CompletionHandler<void(String)> m_callback;
String m_errorMessage;
+ bool m_interrupted { false };
};
inline RemoteRealtimeMediaSourceProxy::RemoteRealtimeMediaSourceProxy(WebCore::RealtimeMediaSourceIdentifier identifier, const WebCore::CaptureDevice& device, bool shouldCaptureInGPUProcess, const WebCore::MediaConstraints* constraints)
Modified: trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeVideoSource.h (290984 => 290985)
--- trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeVideoSource.h 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeVideoSource.h 2022-03-08 12:24:15 UTC (rev 290985)
@@ -67,7 +67,7 @@
void captureFailed() final;
void videoSampleAvailable(WebCore::MediaSample&, WebCore::IntSize, WebCore::VideoSampleMetadata);
- void sourceMutedChanged(bool value) { notifyMutedChange(value); }
+ void sourceMutedChanged(bool value, bool interrupted);
private:
RemoteRealtimeVideoSource(WebCore::RealtimeMediaSourceIdentifier, const WebCore::CaptureDevice&, const WebCore::MediaConstraints*, String&& name, String&& hashSalt, UserMediaCaptureManager&, bool shouldCaptureInGPUProcess);
@@ -90,6 +90,7 @@
WebCore::MediaSample::VideoRotation sampleRotation() const final { return m_sampleRotation; }
void setFrameRateWithPreset(double, RefPtr<WebCore::VideoPreset>) final;
bool prefersPreset(WebCore::VideoPreset&) final;
+ bool interrupted() const final { return m_proxy.interrupted(); }
#if ENABLE(GPU_PROCESS)
// GPUProcessConnection::Client
@@ -110,6 +111,12 @@
WebCore::MediaSample::VideoRotation m_sampleRotation { WebCore::MediaSample::VideoRotation::None };
};
+inline void RemoteRealtimeVideoSource::sourceMutedChanged(bool muted, bool interrupted)
+{
+ m_proxy.setInterrupted(interrupted);
+ notifyMutedChange(muted);
+}
+
} // namespace WebKit
#endif
Modified: trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp (290984 => 290985)
--- trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp 2022-03-08 12:24:15 UTC (rev 290985)
@@ -154,18 +154,18 @@
}, [](std::nullptr_t) { });
}
-void UserMediaCaptureManager::sourceMutedChanged(RealtimeMediaSourceIdentifier identifier, bool muted)
+void UserMediaCaptureManager::sourceMutedChanged(RealtimeMediaSourceIdentifier identifier, bool muted, bool interrupted)
{
auto iterator = m_sources.find(identifier);
if (iterator == m_sources.end())
return;
- switchOn(iterator->value, [muted](Ref<RemoteRealtimeAudioSource>& source) {
- source->sourceMutedChanged(muted);
- }, [muted](Ref<RemoteRealtimeVideoSource>& source) {
- source->sourceMutedChanged(muted);
- }, [muted](Ref<RemoteRealtimeDisplaySource>& source) {
- source->sourceMutedChanged(muted);
+ switchOn(iterator->value, [muted, interrupted](Ref<RemoteRealtimeAudioSource>& source) {
+ source->sourceMutedChanged(muted, interrupted);
+ }, [muted, interrupted](Ref<RemoteRealtimeVideoSource>& source) {
+ source->sourceMutedChanged(muted, interrupted);
+ }, [muted, interrupted](Ref<RemoteRealtimeDisplaySource>& source) {
+ source->sourceMutedChanged(muted, interrupted);
}, [](std::nullptr_t) { });
}
Modified: trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h (290984 => 290985)
--- trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h 2022-03-08 12:24:15 UTC (rev 290985)
@@ -126,7 +126,8 @@
// Messages::UserMediaCaptureManager
void captureFailed(WebCore::RealtimeMediaSourceIdentifier);
void sourceStopped(WebCore::RealtimeMediaSourceIdentifier);
- void sourceMutedChanged(WebCore::RealtimeMediaSourceIdentifier, bool muted);
+ void sourceMutedChanged(WebCore::RealtimeMediaSourceIdentifier, bool muted, bool interrupted);
+
void sourceSettingsChanged(WebCore::RealtimeMediaSourceIdentifier, WebCore::RealtimeMediaSourceSettings&&);
void applyConstraintsSucceeded(WebCore::RealtimeMediaSourceIdentifier, WebCore::RealtimeMediaSourceSettings&&);
void applyConstraintsFailed(WebCore::RealtimeMediaSourceIdentifier, String&&, String&&);
Modified: trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.messages.in (290984 => 290985)
--- trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.messages.in 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.messages.in 2022-03-08 12:24:15 UTC (rev 290985)
@@ -26,7 +26,7 @@
messages -> UserMediaCaptureManager NotRefCounted {
CaptureFailed(WebCore::RealtimeMediaSourceIdentifier id)
SourceStopped(WebCore::RealtimeMediaSourceIdentifier id)
- SourceMutedChanged(WebCore::RealtimeMediaSourceIdentifier id, bool muted)
+ SourceMutedChanged(WebCore::RealtimeMediaSourceIdentifier id, bool muted, bool interrupted)
SourceSettingsChanged(WebCore::RealtimeMediaSourceIdentifier id, WebCore::RealtimeMediaSourceSettings settings)
ApplyConstraintsSucceeded(WebCore::RealtimeMediaSourceIdentifier id, WebCore::RealtimeMediaSourceSettings settings)
ApplyConstraintsFailed(WebCore::RealtimeMediaSourceIdentifier id, String failedConstraint, String message)
Modified: trunk/Tools/ChangeLog (290984 => 290985)
--- trunk/Tools/ChangeLog 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Tools/ChangeLog 2022-03-08 12:24:15 UTC (rev 290985)
@@ -1,3 +1,20 @@
+2022-03-08 Youenn Fablet <[email protected]>
+
+ Add a preference to mute video capture in case audio capture gets interrupted
+ https://bugs.webkit.org/show_bug.cgi?id=237524
+ <rdar://78421282>
+
+ Reviewed by Eric Carlson.
+
+ Add support for interrupt mock microphone devices.
+
+ * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
+ * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+ * WebKitTestRunner/InjectedBundle/TestRunner.h:
+ * WebKitTestRunner/TestController.cpp:
+ * WebKitTestRunner/TestController.h:
+ * WebKitTestRunner/TestInvocation.cpp:
+
2022-03-08 Carlos Garcia Campos <[email protected]>
[GTK][WPE] Do not add new modules under ThirdParty to the tarball
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl (290984 => 290985)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl 2022-03-08 12:24:15 UTC (rev 290985)
@@ -387,7 +387,7 @@
undefined resetMockMediaDevices();
undefined setMockCameraOrientation(unsigned long orientation);
boolean isMockRealtimeMediaSourceCenterEnabled();
- undefined setMockCameraIsInterrupted(boolean isInterrupted);
+ undefined setMockCaptureDevicesInterrupted(boolean isCameraInterrupted, boolean isMicrophoneInterrupted);
boolean hasAppBoundSession();
undefined clearAppBoundSession();
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp (290984 => 290985)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp 2022-03-08 12:24:15 UTC (rev 290985)
@@ -1832,9 +1832,12 @@
return postSynchronousMessageReturningBoolean("IsMockRealtimeMediaSourceCenterEnabled");
}
-void TestRunner::setMockCameraIsInterrupted(bool isInterrupted)
+void TestRunner::setMockCaptureDevicesInterrupted(bool isCameraInterrupted, bool isMicrophoneInterrupted)
{
- postSynchronousMessage("SetMockCameraIsInterrupted", isInterrupted);
+ postSynchronousMessage("SetMockCaptureDevicesInterrupted", createWKDictionary({
+ { "camera", adoptWK(WKBooleanCreate(isCameraInterrupted)) },
+ { "microphone", adoptWK(WKBooleanCreate(isMicrophoneInterrupted)) },
+ }));
}
#if ENABLE(GAMEPAD)
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h (290984 => 290985)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h 2022-03-08 12:24:15 UTC (rev 290985)
@@ -499,7 +499,7 @@
void resetMockMediaDevices();
void setMockCameraOrientation(unsigned);
bool isMockRealtimeMediaSourceCenterEnabled();
- void setMockCameraIsInterrupted(bool);
+ void setMockCaptureDevicesInterrupted(bool isCameraInterrupted, bool isMicrophoneInterrupted);
bool hasAppBoundSession();
void clearAppBoundSession();
Modified: trunk/Tools/WebKitTestRunner/TestController.cpp (290984 => 290985)
--- trunk/Tools/WebKitTestRunner/TestController.cpp 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Tools/WebKitTestRunner/TestController.cpp 2022-03-08 12:24:15 UTC (rev 290985)
@@ -3620,9 +3620,9 @@
return WKPageIsMockRealtimeMediaSourceCenterEnabled(m_mainWebView->page());
}
-void TestController::setMockCameraIsInterrupted(bool isInterrupted)
+void TestController::setMockCaptureDevicesInterrupted(bool isCameraInterrupted, bool isMicrophoneInterrupted)
{
- WKPageSetMockCameraIsInterrupted(m_mainWebView->page(), isInterrupted);
+ WKPageSetMockCaptureDevicesInterrupted(m_mainWebView->page(), isCameraInterrupted, isMicrophoneInterrupted);
}
struct InAppBrowserPrivacyCallbackContext {
Modified: trunk/Tools/WebKitTestRunner/TestController.h (290984 => 290985)
--- trunk/Tools/WebKitTestRunner/TestController.h 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Tools/WebKitTestRunner/TestController.h 2022-03-08 12:24:15 UTC (rev 290985)
@@ -312,7 +312,7 @@
void resetMockMediaDevices();
void setMockCameraOrientation(uint64_t);
bool isMockRealtimeMediaSourceCenterEnabled() const;
- void setMockCameraIsInterrupted(bool);
+ void setMockCaptureDevicesInterrupted(bool isCameraInterrupted, bool isMicrophoneInterrupted);
bool hasAppBoundSession();
void injectUserScript(WKStringRef);
Modified: trunk/Tools/WebKitTestRunner/TestInvocation.cpp (290984 => 290985)
--- trunk/Tools/WebKitTestRunner/TestInvocation.cpp 2022-03-08 12:21:51 UTC (rev 290984)
+++ trunk/Tools/WebKitTestRunner/TestInvocation.cpp 2022-03-08 12:24:15 UTC (rev 290985)
@@ -973,8 +973,11 @@
if (WKStringIsEqualToUTF8CString(messageName, "IsMockRealtimeMediaSourceCenterEnabled"))
return adoptWK(WKBooleanCreate(TestController::singleton().isMockRealtimeMediaSourceCenterEnabled()));
- if (WKStringIsEqualToUTF8CString(messageName, "SetMockCameraIsInterrupted")) {
- TestController::singleton().setMockCameraIsInterrupted(booleanValue(messageBody));
+ if (WKStringIsEqualToUTF8CString(messageName, "SetMockCaptureDevicesInterrupted")) {
+ auto messageBodyDictionary = dictionaryValue(messageBody);
+ bool isCameraInterrupted = booleanValue(messageBodyDictionary, "camera");
+ bool isMicrophoneInterrupted = booleanValue(messageBodyDictionary, "microphone");
+ TestController::singleton().setMockCaptureDevicesInterrupted(isCameraInterrupted, isMicrophoneInterrupted);
return nullptr;
}