Diff
Modified: trunk/Source/WebCore/ChangeLog (215536 => 215537)
--- trunk/Source/WebCore/ChangeLog 2017-04-19 22:43:49 UTC (rev 215536)
+++ trunk/Source/WebCore/ChangeLog 2017-04-19 23:13:31 UTC (rev 215537)
@@ -1,3 +1,27 @@
+2017-04-19 Eric Carlson <[email protected]>
+
+ [MediaStream] Limit capture to one tab at a time
+ https://bugs.webkit.org/show_bug.cgi?id=171009
+
+ Reviewed by Jon Lee.
+
+ No new tests yet, filed bug 171011.
+
+ * Modules/mediastream/MediaStreamTrack.cpp:
+ (WebCore::MediaStreamTrack::stopTrack): Drive-by fix: renamed from stopProducingData
+ because stopProducingData is a method in RealtimeMediaSource that does something different.
+ (WebCore::MediaStreamTrack::stop): Call stopTrack.
+ (WebCore::MediaStreamTrack::stopProducingData): Deleted.
+ * Modules/mediastream/MediaStreamTrack.h:
+ * Modules/mediastream/MediaStreamTrack.idl:
+
+ * Modules/mediastream/RTCRtpSender.cpp:
+ (WebCore::RTCRtpSender::replaceTrack): Update for rename.
+
+ * platform/mediastream/MediaStreamPrivate.cpp:
+ (WebCore::MediaStreamPrivate::muted): Drive-by fix: a track that has ended but
+ which is not muted will never produce data.
+
2017-04-19 Alex Christensen <[email protected]>
Parsing large XML strings fails
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp (215536 => 215537)
--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp 2017-04-19 22:43:49 UTC (rev 215536)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp 2017-04-19 23:13:31 UTC (rev 215537)
@@ -113,7 +113,7 @@
return MediaStreamTrack::create(*scriptExecutionContext(), m_private->clone());
}
-void MediaStreamTrack::stopProducingData()
+void MediaStreamTrack::stopTrack()
{
// NOTE: this method is called when the "stop" method is called from JS, using the "ImplementedAs" IDL attribute.
// This is done because ActiveDOMObject requires a "stop" method.
@@ -330,7 +330,7 @@
void MediaStreamTrack::stop()
{
- stopProducingData();
+ stopTrack();
}
const char* MediaStreamTrack::activeDOMObjectName() const
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h (215536 => 215537)
--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h 2017-04-19 22:43:49 UTC (rev 215536)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h 2017-04-19 23:13:31 UTC (rev 215537)
@@ -71,7 +71,7 @@
bool ended() const;
Ref<MediaStreamTrack> clone();
- void stopProducingData();
+ void stopTrack();
bool isCaptureTrack() const;
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.idl (215536 => 215537)
--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.idl 2017-04-19 22:43:49 UTC (rev 215536)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.idl 2017-04-19 23:13:31 UTC (rev 215537)
@@ -45,7 +45,7 @@
attribute EventHandler onended;
MediaStreamTrack clone();
- [ImplementedAs=stopProducingData] void stop();
+ [ImplementedAs=stopTrack] void stop();
MediaTrackCapabilities getCapabilities();
MediaTrackConstraints getConstraints();
Modified: trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp (215536 => 215537)
--- trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp 2017-04-19 22:43:49 UTC (rev 215536)
+++ trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp 2017-04-19 23:13:31 UTC (rev 215537)
@@ -85,7 +85,7 @@
}
if (!withTrack && m_track)
- m_track->stopProducingData();
+ m_track->stopTrack();
m_backend->replaceTrack(*this, WTFMove(withTrack), WTFMove(promise));
}
Modified: trunk/Source/WebCore/platform/mediastream/MediaStreamPrivate.cpp (215536 => 215537)
--- trunk/Source/WebCore/platform/mediastream/MediaStreamPrivate.cpp 2017-04-19 22:43:49 UTC (rev 215536)
+++ trunk/Source/WebCore/platform/mediastream/MediaStreamPrivate.cpp 2017-04-19 23:13:31 UTC (rev 215537)
@@ -222,7 +222,7 @@
bool MediaStreamPrivate::muted() const
{
for (auto& track : m_trackSet.values()) {
- if (!track->muted())
+ if (!track->muted() && !track->ended())
return false;
}
return true;
Modified: trunk/Source/WebKit2/ChangeLog (215536 => 215537)
--- trunk/Source/WebKit2/ChangeLog 2017-04-19 22:43:49 UTC (rev 215536)
+++ trunk/Source/WebKit2/ChangeLog 2017-04-19 23:13:31 UTC (rev 215537)
@@ -1,3 +1,24 @@
+2017-04-19 Eric Carlson <[email protected]>
+
+ [MediaStream] Limit capture to one tab at a time
+ https://bugs.webkit.org/show_bug.cgi?id=171009
+
+ Reviewed by Jon Lee.
+
+ * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
+ (WebKit::UserMediaPermissionRequestManagerProxy::stopCapture): Deleted, not used.
+ * UIProcess/UserMediaPermissionRequestManagerProxy.h:
+
+ * UIProcess/UserMediaProcessManager.cpp:
+ (WebKit::UserMediaProcessManager::willEnableMediaStreamInPage): Mute media streams
+ on other pages.
+ (WebKit::UserMediaProcessManager::willCreateMediaStream): Call willEnableMediaStreamInPage.
+ * UIProcess/UserMediaProcessManager.h:
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::setMuted): If media streams in the page will be unmuted, call
+ willEnableMediaStreamInPage so streams in other pages are muted first.
+
2017-04-19 Brady Eidson <[email protected]>
REGRESSION (r213168): An extra Web Content process is spun up on launch and is never closed.
Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp (215536 => 215537)
--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp 2017-04-19 22:43:49 UTC (rev 215536)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp 2017-04-19 23:13:31 UTC (rev 215537)
@@ -341,16 +341,6 @@
#endif
}
-void UserMediaPermissionRequestManagerProxy::stopCapture()
-{
- if (!m_page.isValid())
- return;
-
-#if ENABLE(MEDIA_STREAM)
- m_page.setMuted(WebCore::MediaProducer::CaptureDevicesAreMuted);
-#endif
-}
-
void UserMediaPermissionRequestManagerProxy::startedCaptureSession()
{
if (!m_page.isValid())
Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.h (215536 => 215537)
--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.h 2017-04-19 22:43:49 UTC (rev 215536)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.h 2017-04-19 23:13:31 UTC (rev 215537)
@@ -73,7 +73,6 @@
void startedCaptureSession();
void endedCaptureSession();
- void stopCapture();
private:
Ref<UserMediaPermissionRequestProxy> createRequest(uint64_t userMediaID, uint64_t frameID, const String&userMediaDocumentOriginIdentifier, const String& topLevelDocumentOriginIdentifier, const Vector<String>& audioDeviceUIDs, const Vector<String>& videoDeviceUIDs);
Modified: trunk/Source/WebKit2/UIProcess/UserMediaProcessManager.cpp (215536 => 215537)
--- trunk/Source/WebKit2/UIProcess/UserMediaProcessManager.cpp 2017-04-19 22:43:49 UTC (rev 215536)
+++ trunk/Source/WebKit2/UIProcess/UserMediaProcessManager.cpp 2017-04-19 23:13:31 UTC (rev 215537)
@@ -109,12 +109,35 @@
}
}
+void UserMediaProcessManager::willEnableMediaStreamInPage(WebPageProxy& pageStartingCapture)
+{
+#if PLATFORM(COCOA)
+ for (auto& state : stateMap()) {
+ for (auto& manager : state.value->managers()) {
+
+#if !PLATFORM(IOS)
+ if (&manager->page() == &pageStartingCapture)
+ continue;
+#endif
+
+ manager->page().setMuted(WebCore::MediaProducer::CaptureDevicesAreMuted);
+ }
+ }
+#else
+ UNUSED_PARAM(pageStartingCapture);
+#endif
+}
+
void UserMediaProcessManager::willCreateMediaStream(UserMediaPermissionRequestManagerProxy& proxy, bool withAudio, bool withVideo)
{
#if ENABLE(SANDBOX_EXTENSIONS)
- ASSERT(stateMap().contains(&proxy.page().process()));
+ auto& processStartingCapture = proxy.page().process();
- auto& state = processState(proxy.page().process());
+ ASSERT(stateMap().contains(&processStartingCapture));
+
+ willEnableMediaStreamInPage(proxy.page());
+
+ auto& state = processState(processStartingCapture);
size_t extensionCount = 0;
unsigned requiredExtensions = ProcessState::SandboxExtensionsGranted::None;
@@ -131,7 +154,7 @@
#if ENABLE(WEB_RTC) && USE(LIBWEBRTC)
if (currentExtensions == ProcessState::SandboxExtensionsGranted::None && (withAudio || withVideo))
- proxy.page().process().send(Messages::WebPage::DisableICECandidateFiltering(), proxy.page().pageID());
+ processStartingCapture.send(Messages::WebPage::DisableICECandidateFiltering(), proxy.page().pageID());
#endif
if (!(requiredExtensions & currentExtensions)) {
@@ -156,7 +179,7 @@
}
state.setSandboxExtensionsGranted(currentExtensions);
- proxy.page().process().send(Messages::WebPage::GrantUserMediaDeviceSandboxExtensions(MediaDeviceSandboxExtensions(ids, WTFMove(handles))), proxy.page().pageID());
+ processStartingCapture.send(Messages::WebPage::GrantUserMediaDeviceSandboxExtensions(MediaDeviceSandboxExtensions(ids, WTFMove(handles))), proxy.page().pageID());
}
#endif
}
Modified: trunk/Source/WebKit2/UIProcess/UserMediaProcessManager.h (215536 => 215537)
--- trunk/Source/WebKit2/UIProcess/UserMediaProcessManager.h 2017-04-19 22:43:49 UTC (rev 215536)
+++ trunk/Source/WebKit2/UIProcess/UserMediaProcessManager.h 2017-04-19 23:13:31 UTC (rev 215537)
@@ -35,6 +35,7 @@
void removeUserMediaPermissionRequestManagerProxy(UserMediaPermissionRequestManagerProxy&);
void willCreateMediaStream(UserMediaPermissionRequestManagerProxy&, bool withAudio, bool withVideo);
+ void willEnableMediaStreamInPage(WebPageProxy&);
void startedCaptureSession(UserMediaPermissionRequestManagerProxy&);
void endedCaptureSession(UserMediaPermissionRequestManagerProxy&);
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (215536 => 215537)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2017-04-19 22:43:49 UTC (rev 215536)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2017-04-19 23:13:31 UTC (rev 215537)
@@ -74,6 +74,7 @@
#include "TextChecker.h"
#include "TextCheckerState.h"
#include "UserMediaPermissionRequestProxy.h"
+#include "UserMediaProcessManager.h"
#include "WKContextPrivate.h"
#include "WebAutomationSession.h"
#include "WebBackForwardList.h"
@@ -4193,6 +4194,11 @@
if (!isValid())
return;
+#if ENABLE(MEDIA_STREAM)
+ if (!(state & WebCore::MediaProducer::CaptureDevicesAreMuted))
+ UserMediaProcessManager::singleton().willEnableMediaStreamInPage(*this);
+#endif
+
m_process->send(Messages::WebPage::SetMuted(state), m_pageID);
activityStateDidChange(ActivityState::IsAudible);