Title: [215537] trunk/Source
Revision
215537
Author
[email protected]
Date
2017-04-19 16:13:31 -0700 (Wed, 19 Apr 2017)

Log Message

[MediaStream] Limit capture to one tab at a time
https://bugs.webkit.org/show_bug.cgi?id=171009

Reviewed by Jon Lee.

Source/WebCore:

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.

Source/WebKit2:

* 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.

Modified Paths

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);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to