⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 245858 in webkit


Ignore:
Timestamp:
May 29, 2019, 11:36:06 AM (7 years ago)
Author:
youenn@apple.com
Message:

UserMediaCaptureManagerProxy::SourceProxy should directly have access to its IPC connection
https://bugs.webkit.org/show_bug.cgi?id=198335

Reviewed by Eric Carlson.

Previously, SourceProxy was getting its IPC connection by going through its manager, then its process proxy.
As some calls can be done from a background thread, it is safer to directly make SourceProxy own a Ref of its IPC connection.

  • UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:

(WebKit::UserMediaCaptureManagerProxy::SourceProxy::SourceProxy):
(WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):

Location:
trunk/Source/WebKit
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r245857 r245858  
     12019-05-29  Youenn Fablet  <youenn@apple.com>
     2
     3        UserMediaCaptureManagerProxy::SourceProxy should directly have access to its IPC connection
     4        https://bugs.webkit.org/show_bug.cgi?id=198335
     5
     6        Reviewed by Eric Carlson.
     7
     8        Previously, SourceProxy was getting its IPC connection by going through its manager, then its process proxy.
     9        As some calls can be done from a background thread, it is safer to directly make SourceProxy own a Ref of its IPC connection.
     10
     11        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
     12        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::SourceProxy):
     13        (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
     14
    1152019-05-28  Geoffrey Garen  <ggaren@apple.com>
    216
  • trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp

    r245856 r245858  
    4747class UserMediaCaptureManagerProxy::SourceProxy : public RealtimeMediaSource::Observer, public SharedRingBufferStorage::Client {
    4848public:
    49     SourceProxy(uint64_t id, UserMediaCaptureManagerProxy& manager, Ref<RealtimeMediaSource>&& source)
     49    SourceProxy(uint64_t id, Ref<IPC::Connection>&& connection, Ref<RealtimeMediaSource>&& source)
    5050        : m_id(id)
    51         , m_manager(manager)
     51        , m_connection(WTFMove(connection))
    5252        , m_source(WTFMove(source))
    5353        , m_ringBuffer(makeUniqueRef<SharedRingBufferStorage>(makeUniqueRef<SharedRingBufferStorage>(this)))
     
    6969    void sourceStopped() final {
    7070        if (m_source->captureDidFail()) {
    71             m_manager.process().send(Messages::UserMediaCaptureManager::CaptureFailed(m_id), 0);
     71            m_connection->send(Messages::UserMediaCaptureManager::CaptureFailed(m_id), 0);
    7272            return;
    7373        }
    74         m_manager.process().send(Messages::UserMediaCaptureManager::SourceStopped(m_id), 0);
     74        m_connection->send(Messages::UserMediaCaptureManager::SourceStopped(m_id), 0);
    7575    }
    7676
    7777    void sourceMutedChanged() final {
    78         m_manager.process().send(Messages::UserMediaCaptureManager::SourceMutedChanged(m_id, m_source->muted()), 0);
     78        m_connection->send(Messages::UserMediaCaptureManager::SourceMutedChanged(m_id, m_source->muted()), 0);
    7979    }
    8080
    8181    void sourceSettingsChanged() final {
    82         m_manager.process().send(Messages::UserMediaCaptureManager::SourceSettingsChanged(m_id, m_source->settings()), 0);
     82        m_connection->send(Messages::UserMediaCaptureManager::SourceSettingsChanged(m_id, m_source->settings()), 0);
    8383    }
    8484
     
    9999        uint64_t endFrame;
    100100        m_ringBuffer.getCurrentFrameBounds(startFrame, endFrame);
    101         m_manager.process().send(Messages::UserMediaCaptureManager::AudioSamplesAvailable(m_id, time, numberOfFrames, startFrame, endFrame), 0);
     101        m_connection->send(Messages::UserMediaCaptureManager::AudioSamplesAvailable(m_id, time, numberOfFrames, startFrame, endFrame), 0);
    102102    }
    103103
     
    107107        auto remoteSample = RemoteVideoSample::create(WTFMove(sample));
    108108        if (remoteSample)
    109             m_manager.process().send(Messages::UserMediaCaptureManager::RemoteVideoSampleAvailable(m_id, WTFMove(*remoteSample)), 0);
     109            m_connection->send(Messages::UserMediaCaptureManager::RemoteVideoSampleAvailable(m_id, WTFMove(*remoteSample)), 0);
    110110#else
    111111        ASSERT_NOT_REACHED();
     
    117117        if (storage)
    118118            storage->createHandle(handle, SharedMemory::Protection::ReadOnly);
    119         m_manager.process().send(Messages::UserMediaCaptureManager::StorageChanged(m_id, handle, m_description, m_numberOfFrames), 0);
     119        m_connection->send(Messages::UserMediaCaptureManager::StorageChanged(m_id, handle, m_description, m_numberOfFrames), 0);
    120120    }
    121121
    122122protected:
    123123    uint64_t m_id;
    124     UserMediaCaptureManagerProxy& m_manager;
     124    Ref<IPC::Connection> m_connection;
    125125    Ref<RealtimeMediaSource> m_source;
    126126    CARingBuffer m_ringBuffer;
     
    169169        settings = source->settings();
    170170        ASSERT(!m_proxies.contains(id));
    171         m_proxies.add(id, std::make_unique<SourceProxy>(id, *this, WTFMove(source)));
     171        m_proxies.add(id, std::make_unique<SourceProxy>(id, *m_process.connection(), WTFMove(source)));
    172172    } else
    173173        invalidConstraints = WTFMove(sourceOrError.errorMessage);
Note: See TracChangeset for help on using the changeset viewer.