Changeset 245859 in webkit


Ignore:
Timestamp:
May 29, 2019 11:51:25 AM (5 years ago)
Author:
youenn@apple.com
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):

Location:
trunk/Source/WebKit
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r245858 r245859  
     12019-05-29  Youenn Fablet  <youenn@apple.com>
     2
     3        UserMediaCaptureManager should remove a source from its map once the source is ended
     4        https://bugs.webkit.org/show_bug.cgi?id=198337
     5
     6        Reviewed by Eric Carlson.
     7
     8        When the source is stopped, for instance using MediaStreamTrack.stop,
     9        remove the source from UserMediaCaptureManager sources map.
     10        This makes sure the map will not grow over time.
     11        Add an if check to ensure that the source is still there before processing an incoming IPC call.
     12
     13        When UIProcess tells us the capture is finished (typically capture failed), remove the entry on WebProcess side as well.
     14
     15        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
     16        (WebKit::UserMediaCaptureManager::createCaptureSource):
     17        (WebKit::UserMediaCaptureManager::sourceStopped):
     18        (WebKit::UserMediaCaptureManager::captureFailed):
     19        (WebKit::UserMediaCaptureManager::sourceMutedChanged):
     20        (WebKit::UserMediaCaptureManager::sourceSettingsChanged):
     21        (WebKit::UserMediaCaptureManager::storageChanged):
     22        (WebKit::UserMediaCaptureManager::ringBufferFrameBoundsChanged):
     23        (WebKit::UserMediaCaptureManager::audioSamplesAvailable):
     24        (WebKit::UserMediaCaptureManager::remoteVideoSampleAvailable):
     25        (WebKit::UserMediaCaptureManager::sourceEnded):
     26        (WebKit::UserMediaCaptureManager::applyConstraintsSucceeded):
     27        (WebKit::UserMediaCaptureManager::applyConstraintsFailed):
     28
    1292019-05-29  Youenn Fablet  <youenn@apple.com>
    230
  • trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp

    r241145 r245859  
    257257    auto source = adoptRef(*new Source(String::number(id), type, device.type(), String { settings.label() }, WTFMove(hashSalt), id, *this));
    258258    source->setSettings(WTFMove(settings));
    259     m_sources.set(id, source.copyRef());
     259    m_sources.add(id, source.copyRef());
    260260    return WebCore::CaptureSourceOrError(WTFMove(source));
    261261}
     
    263263void UserMediaCaptureManager::sourceStopped(uint64_t id)
    264264{
    265     ASSERT(m_sources.contains(id));
    266     m_sources.get(id)->stop();
     265    if (auto source = m_sources.get(id)) {
     266        source->stop();
     267        sourceEnded(id);
     268    }
    267269}
    268270
    269271void UserMediaCaptureManager::captureFailed(uint64_t id)
    270272{
    271     ASSERT(m_sources.contains(id));
    272     m_sources.get(id)->captureFailed();
     273    if (auto source = m_sources.get(id)) {
     274        source->captureFailed();
     275        sourceEnded(id);
     276    }
    273277}
    274278
    275279void UserMediaCaptureManager::sourceMutedChanged(uint64_t id, bool muted)
    276280{
    277     ASSERT(m_sources.contains(id));
    278     m_sources.get(id)->setMuted(muted);
     281    if (auto source = m_sources.get(id))
     282        source->setMuted(muted);
    279283}
    280284
    281285void UserMediaCaptureManager::sourceSettingsChanged(uint64_t id, const RealtimeMediaSourceSettings& settings)
    282286{
    283     ASSERT(m_sources.contains(id));
    284     m_sources.get(id)->setSettings(RealtimeMediaSourceSettings(settings));
     287    if (auto source = m_sources.get(id))
     288        source->setSettings(RealtimeMediaSourceSettings(settings));
    285289}
    286290
    287291void UserMediaCaptureManager::storageChanged(uint64_t id, const SharedMemory::Handle& handle, const WebCore::CAAudioStreamDescription& description, uint64_t numberOfFrames)
    288292{
    289     ASSERT(m_sources.contains(id));
    290     m_sources.get(id)->setStorage(handle, description, numberOfFrames);
     293    if (auto source = m_sources.get(id))
     294        source->setStorage(handle, description, numberOfFrames);
    291295}
    292296
    293297void UserMediaCaptureManager::ringBufferFrameBoundsChanged(uint64_t id, uint64_t startFrame, uint64_t endFrame)
    294298{
    295     ASSERT(m_sources.contains(id));
    296     m_sources.get(id)->setRingBufferFrameBounds(startFrame, endFrame);
     299    if (auto source = m_sources.get(id))
     300        source->setRingBufferFrameBounds(startFrame, endFrame);
    297301}
    298302
    299303void UserMediaCaptureManager::audioSamplesAvailable(uint64_t id, MediaTime time, uint64_t numberOfFrames, uint64_t startFrame, uint64_t endFrame)
    300304{
    301     ASSERT(m_sources.contains(id));
    302     auto& source = *m_sources.get(id);
    303     source.setRingBufferFrameBounds(startFrame, endFrame);
    304     source.audioSamplesAvailable(time, numberOfFrames);
     305    if (auto source = m_sources.get(id)) {
     306        source->setRingBufferFrameBounds(startFrame, endFrame);
     307        source->audioSamplesAvailable(time, numberOfFrames);
     308    }
    305309}
    306310
     
    308312void UserMediaCaptureManager::remoteVideoSampleAvailable(uint64_t id, RemoteVideoSample&& sample)
    309313{
    310     ASSERT(m_sources.contains(id));
    311     m_sources.get(id)->remoteVideoSampleAvailable(WTFMove(sample));
     314    if (auto source = m_sources.get(id))
     315        source->remoteVideoSampleAvailable(WTFMove(sample));
    312316}
    313317#else
     
    348352{
    349353    m_process.send(Messages::UserMediaCaptureManagerProxy::End(id), 0);
     354    m_sources.remove(id);
    350355}
    351356
    352357void UserMediaCaptureManager::applyConstraintsSucceeded(uint64_t id, const WebCore::RealtimeMediaSourceSettings& settings)
    353358{
    354     ASSERT(m_sources.contains(id));
    355     auto& source = *m_sources.get(id);
    356     source.applyConstraintsSucceeded(settings);
     359    if (auto source = m_sources.get(id))
     360        source->applyConstraintsSucceeded(settings);
    357361}
    358362
    359363void UserMediaCaptureManager::applyConstraintsFailed(uint64_t id, String&& failedConstraint, String&& message)
    360364{
    361     ASSERT(m_sources.contains(id));
    362     auto& source = *m_sources.get(id);
    363     source.applyConstraintsFailed(WTFMove(failedConstraint), WTFMove(message));
     365    if (auto source = m_sources.get(id))
     366        source->applyConstraintsFailed(WTFMove(failedConstraint), WTFMove(message));
    364367}
    365368
Note: See TracChangeset for help on using the changeset viewer.