WebKit Bugzilla
Attachment 370854 Details for
Bug 198335
: UserMediaCaptureManagerProxy::SourceProxy should directly have access to its IPC connection
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-198335-20190529092124.patch (text/plain), 5.36 KB, created by
youenn fablet
on 2019-05-29 09:21:24 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2019-05-29 09:21:24 PDT
Size:
5.36 KB
patch
obsolete
>Subversion Revision: 245849 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 8e14552018c270ad12cfdec52a0b66f038cd89bc..1ae3deb1e1b787add15db66a21ef0372378f279a 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,17 @@ >+2019-05-29 Youenn Fablet <youenn@apple.com> >+ >+ UserMediaCaptureManagerProxy::SourceProxy should directly have access to its IPC connection >+ https://bugs.webkit.org/show_bug.cgi?id=198335 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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): >+ > 2019-05-29 Youenn Fablet <youenn@apple.com> > > Reestablish WebSWClientConnection in case of network process crash >diff --git a/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp b/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp >index 12e93ff289e5a160f737569ca3fbcfec985ce8cf..47ff4e910f76c70105ac244012038bb70b8bd247 100644 >--- a/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp >+++ b/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp >@@ -46,9 +46,9 @@ using namespace WebCore; > > class UserMediaCaptureManagerProxy::SourceProxy : public RealtimeMediaSource::Observer, public SharedRingBufferStorage::Client { > public: >- SourceProxy(uint64_t id, UserMediaCaptureManagerProxy& manager, Ref<RealtimeMediaSource>&& source) >+ SourceProxy(uint64_t id, Ref<IPC::Connection>&& connection, Ref<RealtimeMediaSource>&& source) > : m_id(id) >- , m_manager(manager) >+ , m_connection(WTFMove(connection)) > , m_source(WTFMove(source)) > , m_ringBuffer(makeUniqueRef<SharedRingBufferStorage>(makeUniqueRef<SharedRingBufferStorage>(this))) > { >@@ -68,18 +68,18 @@ public: > > void sourceStopped() final { > if (m_source->captureDidFail()) { >- m_manager.process().send(Messages::UserMediaCaptureManager::CaptureFailed(m_id), 0); >+ m_connection->send(Messages::UserMediaCaptureManager::CaptureFailed(m_id), 0); > return; > } >- m_manager.process().send(Messages::UserMediaCaptureManager::SourceStopped(m_id), 0); >+ m_connection->send(Messages::UserMediaCaptureManager::SourceStopped(m_id), 0); > } > > void sourceMutedChanged() final { >- m_manager.process().send(Messages::UserMediaCaptureManager::SourceMutedChanged(m_id, m_source->muted()), 0); >+ m_connection->send(Messages::UserMediaCaptureManager::SourceMutedChanged(m_id, m_source->muted()), 0); > } > > void sourceSettingsChanged() final { >- m_manager.process().send(Messages::UserMediaCaptureManager::SourceSettingsChanged(m_id, m_source->settings()), 0); >+ m_connection->send(Messages::UserMediaCaptureManager::SourceSettingsChanged(m_id, m_source->settings()), 0); > } > > // May get called on a background thread. >@@ -98,7 +98,7 @@ public: > uint64_t startFrame; > uint64_t endFrame; > m_ringBuffer.getCurrentFrameBounds(startFrame, endFrame); >- m_manager.process().send(Messages::UserMediaCaptureManager::AudioSamplesAvailable(m_id, time, numberOfFrames, startFrame, endFrame), 0); >+ m_connection->send(Messages::UserMediaCaptureManager::AudioSamplesAvailable(m_id, time, numberOfFrames, startFrame, endFrame), 0); > } > > void videoSampleAvailable(MediaSample& sample) final >@@ -106,7 +106,7 @@ public: > #if HAVE(IOSURFACE) > auto remoteSample = RemoteVideoSample::create(WTFMove(sample)); > if (remoteSample) >- m_manager.process().send(Messages::UserMediaCaptureManager::RemoteVideoSampleAvailable(m_id, WTFMove(*remoteSample)), 0); >+ m_connection->send(Messages::UserMediaCaptureManager::RemoteVideoSampleAvailable(m_id, WTFMove(*remoteSample)), 0); > #else > ASSERT_NOT_REACHED(); > #endif >@@ -116,12 +116,12 @@ public: > SharedMemory::Handle handle; > if (storage) > storage->createHandle(handle, SharedMemory::Protection::ReadOnly); >- m_manager.process().send(Messages::UserMediaCaptureManager::StorageChanged(m_id, handle, m_description, m_numberOfFrames), 0); >+ m_connection->send(Messages::UserMediaCaptureManager::StorageChanged(m_id, handle, m_description, m_numberOfFrames), 0); > } > > protected: > uint64_t m_id; >- UserMediaCaptureManagerProxy& m_manager; >+ Ref<IPC::Connection> m_connection; > Ref<RealtimeMediaSource> m_source; > CARingBuffer m_ringBuffer; > CAAudioStreamDescription m_description { }; >@@ -168,7 +168,7 @@ void UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstrai > source->setIsRemote(true); > settings = source->settings(); > ASSERT(!m_proxies.contains(id)); >- m_proxies.add(id, std::make_unique<SourceProxy>(id, *this, WTFMove(source))); >+ m_proxies.add(id, std::make_unique<SourceProxy>(id, *m_process.connection(), WTFMove(source))); > } else > invalidConstraints = WTFMove(sourceOrError.errorMessage); > completionHandler(succeeded, invalidConstraints, WTFMove(settings));
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 198335
: 370854