Title: [245859] trunk/Source/WebKit
Revision
245859
Author
[email protected]
Date
2019-05-29 11:51:25 -0700 (Wed, 29 May 2019)

Log Message

UserMediaCaptureManager should remove a source from its map once the source is ended
https://bugs.webkit.org/show_bug.cgi?id=198337

Reviewed by Eric Carlson.

When the source is stopped, for instance using MediaStreamTrack.stop,
remove the source from UserMediaCaptureManager sources map.
This makes sure the map will not grow over time.
Add an if check to ensure that the source is still there before processing an incoming IPC call.

When UIProcess tells us the capture is finished (typically capture failed), remove the entry on WebProcess side as well.

* WebProcess/cocoa/UserMediaCaptureManager.cpp:
(WebKit::UserMediaCaptureManager::createCaptureSource):
(WebKit::UserMediaCaptureManager::sourceStopped):
(WebKit::UserMediaCaptureManager::captureFailed):
(WebKit::UserMediaCaptureManager::sourceMutedChanged):
(WebKit::UserMediaCaptureManager::sourceSettingsChanged):
(WebKit::UserMediaCaptureManager::storageChanged):
(WebKit::UserMediaCaptureManager::ringBufferFrameBoundsChanged):
(WebKit::UserMediaCaptureManager::audioSamplesAvailable):
(WebKit::UserMediaCaptureManager::remoteVideoSampleAvailable):
(WebKit::UserMediaCaptureManager::sourceEnded):
(WebKit::UserMediaCaptureManager::applyConstraintsSucceeded):
(WebKit::UserMediaCaptureManager::applyConstraintsFailed):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (245858 => 245859)


--- trunk/Source/WebKit/ChangeLog	2019-05-29 18:36:06 UTC (rev 245858)
+++ trunk/Source/WebKit/ChangeLog	2019-05-29 18:51:25 UTC (rev 245859)
@@ -1,5 +1,33 @@
 2019-05-29  Youenn Fablet  <[email protected]>
 
+        UserMediaCaptureManager should remove a source from its map once the source is ended
+        https://bugs.webkit.org/show_bug.cgi?id=198337
+
+        Reviewed by Eric Carlson.
+
+        When the source is stopped, for instance using MediaStreamTrack.stop,
+        remove the source from UserMediaCaptureManager sources map.
+        This makes sure the map will not grow over time.
+        Add an if check to ensure that the source is still there before processing an incoming IPC call.
+
+        When UIProcess tells us the capture is finished (typically capture failed), remove the entry on WebProcess side as well.
+
+        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
+        (WebKit::UserMediaCaptureManager::createCaptureSource):
+        (WebKit::UserMediaCaptureManager::sourceStopped):
+        (WebKit::UserMediaCaptureManager::captureFailed):
+        (WebKit::UserMediaCaptureManager::sourceMutedChanged):
+        (WebKit::UserMediaCaptureManager::sourceSettingsChanged):
+        (WebKit::UserMediaCaptureManager::storageChanged):
+        (WebKit::UserMediaCaptureManager::ringBufferFrameBoundsChanged):
+        (WebKit::UserMediaCaptureManager::audioSamplesAvailable):
+        (WebKit::UserMediaCaptureManager::remoteVideoSampleAvailable):
+        (WebKit::UserMediaCaptureManager::sourceEnded):
+        (WebKit::UserMediaCaptureManager::applyConstraintsSucceeded):
+        (WebKit::UserMediaCaptureManager::applyConstraintsFailed):
+
+2019-05-29  Youenn Fablet  <[email protected]>
+
         UserMediaCaptureManagerProxy::SourceProxy should directly have access to its IPC connection
         https://bugs.webkit.org/show_bug.cgi?id=198335
 

Modified: trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp (245858 => 245859)


--- trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp	2019-05-29 18:36:06 UTC (rev 245858)
+++ trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp	2019-05-29 18:51:25 UTC (rev 245859)
@@ -256,59 +256,63 @@
     auto type = device.type() == CaptureDevice::DeviceType::Microphone ? WebCore::RealtimeMediaSource::Type::Audio : WebCore::RealtimeMediaSource::Type::Video;
     auto source = adoptRef(*new Source(String::number(id), type, device.type(), String { settings.label() }, WTFMove(hashSalt), id, *this));
     source->setSettings(WTFMove(settings));
-    m_sources.set(id, source.copyRef());
+    m_sources.add(id, source.copyRef());
     return WebCore::CaptureSourceOrError(WTFMove(source));
 }
 
 void UserMediaCaptureManager::sourceStopped(uint64_t id)
 {
-    ASSERT(m_sources.contains(id));
-    m_sources.get(id)->stop();
+    if (auto source = m_sources.get(id)) {
+        source->stop();
+        sourceEnded(id);
+    }
 }
 
 void UserMediaCaptureManager::captureFailed(uint64_t id)
 {
-    ASSERT(m_sources.contains(id));
-    m_sources.get(id)->captureFailed();
+    if (auto source = m_sources.get(id)) {
+        source->captureFailed();
+        sourceEnded(id);
+    }
 }
 
 void UserMediaCaptureManager::sourceMutedChanged(uint64_t id, bool muted)
 {
-    ASSERT(m_sources.contains(id));
-    m_sources.get(id)->setMuted(muted);
+    if (auto source = m_sources.get(id))
+        source->setMuted(muted);
 }
 
 void UserMediaCaptureManager::sourceSettingsChanged(uint64_t id, const RealtimeMediaSourceSettings& settings)
 {
-    ASSERT(m_sources.contains(id));
-    m_sources.get(id)->setSettings(RealtimeMediaSourceSettings(settings));
+    if (auto source = m_sources.get(id))
+        source->setSettings(RealtimeMediaSourceSettings(settings));
 }
 
 void UserMediaCaptureManager::storageChanged(uint64_t id, const SharedMemory::Handle& handle, const WebCore::CAAudioStreamDescription& description, uint64_t numberOfFrames)
 {
-    ASSERT(m_sources.contains(id));
-    m_sources.get(id)->setStorage(handle, description, numberOfFrames);
+    if (auto source = m_sources.get(id))
+        source->setStorage(handle, description, numberOfFrames);
 }
 
 void UserMediaCaptureManager::ringBufferFrameBoundsChanged(uint64_t id, uint64_t startFrame, uint64_t endFrame)
 {
-    ASSERT(m_sources.contains(id));
-    m_sources.get(id)->setRingBufferFrameBounds(startFrame, endFrame);
+    if (auto source = m_sources.get(id))
+        source->setRingBufferFrameBounds(startFrame, endFrame);
 }
 
 void UserMediaCaptureManager::audioSamplesAvailable(uint64_t id, MediaTime time, uint64_t numberOfFrames, uint64_t startFrame, uint64_t endFrame)
 {
-    ASSERT(m_sources.contains(id));
-    auto& source = *m_sources.get(id);
-    source.setRingBufferFrameBounds(startFrame, endFrame);
-    source.audioSamplesAvailable(time, numberOfFrames);
+    if (auto source = m_sources.get(id)) {
+        source->setRingBufferFrameBounds(startFrame, endFrame);
+        source->audioSamplesAvailable(time, numberOfFrames);
+    }
 }
 
 #if HAVE(IOSURFACE)
 void UserMediaCaptureManager::remoteVideoSampleAvailable(uint64_t id, RemoteVideoSample&& sample)
 {
-    ASSERT(m_sources.contains(id));
-    m_sources.get(id)->remoteVideoSampleAvailable(WTFMove(sample));
+    if (auto source = m_sources.get(id))
+        source->remoteVideoSampleAvailable(WTFMove(sample));
 }
 #else
 NO_RETURN_DUE_TO_ASSERT void UserMediaCaptureManager::remoteVideoSampleAvailable(uint64_t, RemoteVideoSample&&)
@@ -347,20 +351,19 @@
 void UserMediaCaptureManager::sourceEnded(uint64_t id)
 {
     m_process.send(Messages::UserMediaCaptureManagerProxy::End(id), 0);
+    m_sources.remove(id);
 }
 
 void UserMediaCaptureManager::applyConstraintsSucceeded(uint64_t id, const WebCore::RealtimeMediaSourceSettings& settings)
 {
-    ASSERT(m_sources.contains(id));
-    auto& source = *m_sources.get(id);
-    source.applyConstraintsSucceeded(settings);
+    if (auto source = m_sources.get(id))
+        source->applyConstraintsSucceeded(settings);
 }
 
 void UserMediaCaptureManager::applyConstraintsFailed(uint64_t id, String&& failedConstraint, String&& message)
 {
-    ASSERT(m_sources.contains(id));
-    auto& source = *m_sources.get(id);
-    source.applyConstraintsFailed(WTFMove(failedConstraint), WTFMove(message));
+    if (auto source = m_sources.get(id))
+        source->applyConstraintsFailed(WTFMove(failedConstraint), WTFMove(message));
 }
 
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to