Modified: branches/safari-607-branch/Source/WebKit/ChangeLog (245934 => 245935)
--- branches/safari-607-branch/Source/WebKit/ChangeLog 2019-05-31 00:30:39 UTC (rev 245934)
+++ branches/safari-607-branch/Source/WebKit/ChangeLog 2019-05-31 00:33:35 UTC (rev 245935)
@@ -1,5 +1,35 @@
2019-05-30 Kocsen Chung <[email protected]>
+ Apply patch. rdar://problem/51264770
+
+ 2019-05-30 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
+
+ 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-30 Kocsen Chung <[email protected]>
+
Apply patch. rdar://problem/51264847
2019-05-30 Chris Dumez <[email protected]>
Modified: branches/safari-607-branch/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp (245934 => 245935)
--- branches/safari-607-branch/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp 2019-05-31 00:30:39 UTC (rev 245934)
+++ branches/safari-607-branch/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp 2019-05-31 00:33:35 UTC (rev 245935)
@@ -253,59 +253,59 @@
auto type = device.type() == CaptureDevice::DeviceType::Microphone ? WebCore::RealtimeMediaSource::Type::Audio : WebCore::RealtimeMediaSource::Type::Video;
auto source = adoptRef(*new Source(String::number(id), 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();
}
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();
}
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&&)
@@ -343,16 +343,14 @@
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, const String& failedConstraint, const String& message)
{
- ASSERT(m_sources.contains(id));
- auto& source = *m_sources.get(id);
- source.applyConstraintsFailed(failedConstraint, message);
+ if (auto source = m_sources.get(id))
+ source->applyConstraintsFailed(failedConstraint, message);
}
}