WebKit Bugzilla
Attachment 372082 Details for
Bug 198844
: Cloning a MediaStreamTrack does not clone the logger
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-198844-20190613164959.patch (text/plain), 34.50 KB, created by
youenn fablet
on 2019-06-13 16:50:01 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2019-06-13 16:50:01 PDT
Size:
34.50 KB
patch
obsolete
>Subversion Revision: 246347 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index c5b025afd9dca949c3d798e66cae20283d12b9d2..15ae7425dffb54c3c7d5b88c1357c65ffd563869 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,55 @@ >+2019-06-13 Youenn Fablet <youenn@apple.com> >+ >+ Cloning a MediaStreamTrack does not clone the logger >+ https://bugs.webkit.org/show_bug.cgi?id=198844 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Make MediaStream and MediaStreamTrack rely on their private versions for logging. >+ Move from a RefPtr version to a Ref so as to forbid nullptr crashes. >+ Make sure that RealtimeIncomingAudioSource and RealtimeIncomingVideoSource check for their logger before logging. >+ Covered by existing tests and updated test. >+ >+ * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: >+ (WebCore::loggerFromContext): >+ (WebCore::CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack): >+ * Modules/mediastream/MediaStream.cpp: >+ (WebCore::loggerFromContext): >+ (WebCore::MediaStream::create): >+ (WebCore::MediaStream::MediaStream): >+ * Modules/mediastream/MediaStream.h: >+ * Modules/mediastream/MediaStreamTrack.cpp: >+ (WebCore::MediaStreamTrack::MediaStreamTrack): >+ * Modules/mediastream/MediaStreamTrack.h: >+ * Modules/mediastream/UserMediaRequest.cpp: >+ (WebCore::UserMediaRequest::allow): >+ * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: >+ (WebCore::LibWebRTCMediaEndpoint::mediaStreamFromRTCStream): >+ * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: >+ (WebCore::LibWebRTCPeerConnectionBackend::createReceiverForSource): >+ * Modules/webaudio/MediaStreamAudioDestinationNode.cpp: >+ (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): >+ * platform/mediastream/MediaStreamPrivate.cpp: >+ (WebCore::MediaStreamPrivate::create): >+ (WebCore::MediaStreamPrivate::MediaStreamPrivate): >+ (WebCore::MediaStreamPrivate::setLogger): Deleted. >+ * platform/mediastream/MediaStreamPrivate.h: >+ * platform/mediastream/MediaStreamTrackPrivate.cpp: >+ (WebCore::MediaStreamTrackPrivate::create): >+ (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): >+ (WebCore::MediaStreamTrackPrivate::clone): >+ (WebCore::MediaStreamTrackPrivate::setLogger): Deleted. >+ * platform/mediastream/MediaStreamTrackPrivate.h: >+ * platform/mediastream/RealtimeMediaSourceCenter.cpp: >+ (WebCore::RealtimeMediaSourceCenter::createMediaStream): >+ * platform/mediastream/RealtimeMediaSourceCenter.h: >+ * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp: >+ (WebCore::RealtimeIncomingAudioSourceCocoa::OnData): >+ * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm: >+ (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferPool): >+ (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferFromVideoFrame): >+ (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame): >+ > 2019-06-12 Youenn Fablet <youenn@apple.com> > > Use NSURLSession for WebSocket >diff --git a/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp b/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp >index 27a9a53387f9d441e465c03bdb3246f212a9cb09..3b66aefa6305a650b4e753f7a9c2e6164f960ba2 100644 >--- a/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp >+++ b/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp >@@ -42,8 +42,13 @@ Ref<CanvasCaptureMediaStreamTrack> CanvasCaptureMediaStreamTrack::create(ScriptE > return adoptRef(*new CanvasCaptureMediaStreamTrack(context, WTFMove(canvas), WTFMove(source))); > } > >+static inline Ref<const Logger> loggerFromContext(ScriptExecutionContext& context) >+{ >+ return downcast<Document>(context).logger(); >+} >+ > CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack(ScriptExecutionContext& context, Ref<HTMLCanvasElement>&& canvas, Ref<CanvasCaptureMediaStreamTrack::Source>&& source) >- : MediaStreamTrack(context, MediaStreamTrackPrivate::create(source.copyRef())) >+ : MediaStreamTrack(context, MediaStreamTrackPrivate::create(loggerFromContext(context), source.copyRef())) > , m_canvas(WTFMove(canvas)) > { > } >diff --git a/Source/WebCore/Modules/mediastream/MediaStream.cpp b/Source/WebCore/Modules/mediastream/MediaStream.cpp >index 6f3965ded222bca00f289dbd6f346309bdbb613f..45d805045afe4969e4725734f88ef7d4a29e2f8c 100644 >--- a/Source/WebCore/Modules/mediastream/MediaStream.cpp >+++ b/Source/WebCore/Modules/mediastream/MediaStream.cpp >@@ -48,9 +48,14 @@ namespace WebCore { > > WTF_MAKE_ISO_ALLOCATED_IMPL(MediaStream); > >+static inline Ref<const Logger> loggerFromContext(ScriptExecutionContext& context) >+{ >+ return downcast<Document>(context).logger(); >+} >+ > Ref<MediaStream> MediaStream::create(ScriptExecutionContext& context) > { >- return MediaStream::create(context, MediaStreamPrivate::create({ })); >+ return MediaStream::create(context, MediaStreamPrivate::create(loggerFromContext(context), { })); > } > > Ref<MediaStream> MediaStream::create(ScriptExecutionContext& context, MediaStream& stream) >@@ -79,21 +84,12 @@ static inline MediaStreamTrackPrivateVector createTrackPrivateVector(const Media > > MediaStream::MediaStream(ScriptExecutionContext& context, const MediaStreamTrackVector& tracks) > : ActiveDOMObject(&context) >- , m_private(MediaStreamPrivate::create(createTrackPrivateVector(tracks))) >+ , m_private(MediaStreamPrivate::create(document()->logger(), createTrackPrivateVector(tracks))) > , m_mediaSession(PlatformMediaSession::create(*this)) >-#if !RELEASE_LOG_DISABLED >- , m_logger(document()->logger()) >- , m_logIdentifier(uniqueLogIdentifier()) >-#endif > { > // This constructor preserves MediaStreamTrack instances and must be used by calls originating > // from the JavaScript MediaStream constructor. > >-#if !RELEASE_LOG_DISABLED >- ALWAYS_LOG(LOGIDENTIFIER); >- m_private->setLogger(logger(), logIdentifier()); >-#endif >- > for (auto& track : tracks) { > track->addObserver(*this); > m_trackSet.add(track->id(), track); >@@ -109,15 +105,9 @@ MediaStream::MediaStream(ScriptExecutionContext& context, Ref<MediaStreamPrivate > : ActiveDOMObject(&context) > , m_private(WTFMove(streamPrivate)) > , m_mediaSession(PlatformMediaSession::create(*this)) >-#if !RELEASE_LOG_DISABLED >- , m_logger(document()->logger()) >- , m_logIdentifier(uniqueLogIdentifier()) >-#endif > { >-#if !RELEASE_LOG_DISABLED > ALWAYS_LOG(LOGIDENTIFIER); >- m_private->setLogger(logger(), logIdentifier()); >-#endif >+ > setIsActive(m_private->active()); > m_private->addObserver(*this); > MediaStreamRegistry::shared().registerStream(*this); >diff --git a/Source/WebCore/Modules/mediastream/MediaStream.h b/Source/WebCore/Modules/mediastream/MediaStream.h >index ffd1c82f6a17943de71e0d5aa4b200f90e2e3bc7..5db3bd74ae077e5098788ea6eedda66e47be42a4 100644 >--- a/Source/WebCore/Modules/mediastream/MediaStream.h >+++ b/Source/WebCore/Modules/mediastream/MediaStream.h >@@ -125,8 +125,8 @@ protected: > MediaStream(ScriptExecutionContext&, Ref<MediaStreamPrivate>&&); > > #if !RELEASE_LOG_DISABLED >- const Logger& logger() const final { return m_logger.get(); } >- const void* logIdentifier() const final { return m_logIdentifier; } >+ const Logger& logger() const final { return m_private->logger(); } >+ const void* logIdentifier() const final { return m_private->logIdentifier(); } > WTFLogChannel& logChannel() const final; > const char* logClassName() const final { return "MediaStream"; } > #endif >@@ -187,11 +187,6 @@ private: > > MediaProducer::MediaStateFlags m_state { MediaProducer::IsNotPlaying }; > >-#if !RELEASE_LOG_DISABLED >- Ref<Logger> m_logger; >- const void* m_logIdentifier; >-#endif >- > bool m_isActive { false }; > bool m_isProducingData { false }; > bool m_isWaitingUntilMediaCanStart { false }; >diff --git a/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp b/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp >index 9bc3cbf788922bbd4e5df265d0d6a5e795291e4c..e7a090f07af5aed60c7a4e1e8bcca909692a3c9e 100644 >--- a/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp >+++ b/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp >@@ -58,19 +58,12 @@ Ref<MediaStreamTrack> MediaStreamTrack::create(ScriptExecutionContext& context, > MediaStreamTrack::MediaStreamTrack(ScriptExecutionContext& context, Ref<MediaStreamTrackPrivate>&& privateTrack) > : ActiveDOMObject(&context) > , m_private(WTFMove(privateTrack)) >-#if !RELEASE_LOG_DISABLED >- , m_logger(document()->logger()) >- , m_logIdentifier(uniqueLogIdentifier()) >-#endif > , m_taskQueue(context) > , m_isCaptureTrack(m_private->isCaptureTrack()) > { > ALWAYS_LOG(LOGIDENTIFIER); > suspendIfNeeded(); > >-#if !RELEASE_LOG_DISABLED >- m_private->setLogger(logger(), logIdentifier()); >-#endif > m_private->addObserver(*this); > > if (auto document = this->document()) { >diff --git a/Source/WebCore/Modules/mediastream/MediaStreamTrack.h b/Source/WebCore/Modules/mediastream/MediaStreamTrack.h >index 155c723bdc9c9bd2360ba16232b2c34af593e985..02f1e794da58fa92b7793d4083974d22e48dbe16 100644 >--- a/Source/WebCore/Modules/mediastream/MediaStreamTrack.h >+++ b/Source/WebCore/Modules/mediastream/MediaStreamTrack.h >@@ -151,8 +151,8 @@ public: > void setIdForTesting(String&& id) { m_private->setIdForTesting(WTFMove(id)); } > > #if !RELEASE_LOG_DISABLED >- const Logger& logger() const final { return m_logger.get(); } >- const void* logIdentifier() const final { return m_logIdentifier; } >+ const Logger& logger() const final { return m_private->logger(); } >+ const void* logIdentifier() const final { return m_private->logIdentifier(); } > #endif > > protected: >@@ -189,9 +189,6 @@ private: > #if !RELEASE_LOG_DISABLED > const char* logClassName() const final { return "MediaStreamTrack"; } > WTFLogChannel& logChannel() const final; >- >- Ref<const Logger> m_logger; >- const void* m_logIdentifier; > #endif > > Vector<Observer*> m_observers; >diff --git a/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp b/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp >index f061bc7eb104eb3e277f01272ce5ed4ed39a0e7e..8e136c0785ef2ca30e0097b52ce5e6278abd86be 100644 >--- a/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp >+++ b/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp >@@ -246,7 +246,7 @@ void UserMediaRequest::allow(CaptureDevice&& audioDevice, CaptureDevice&& videoD > auto& document = downcast<Document>(*scriptExecutionContext()); > document.setDeviceIDHashSalt(deviceIdentifierHashSalt); > >- RealtimeMediaSourceCenter::singleton().createMediaStream(WTFMove(callback), WTFMove(deviceIdentifierHashSalt), WTFMove(audioDevice), WTFMove(videoDevice), m_request); >+ RealtimeMediaSourceCenter::singleton().createMediaStream(document.logger(), WTFMove(callback), WTFMove(deviceIdentifierHashSalt), WTFMove(audioDevice), WTFMove(videoDevice), m_request); > > if (!m_scriptExecutionContext) > return; >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp >index c7749db54fa8142332e90ef372fdc0aedc33f8ea..45bf4a93d2500fe89a3ebe77ec1cd8ede105a2f9 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp >@@ -354,7 +354,8 @@ MediaStream& LibWebRTCMediaEndpoint::mediaStreamFromRTCStream(webrtc::MediaStrea > { > auto label = fromStdString(rtcStream.id()); > auto mediaStream = m_remoteStreamsById.ensure(label, [label, this]() mutable { >- return MediaStream::create(*m_peerConnectionBackend.connection().scriptExecutionContext(), MediaStreamPrivate::create({ }, WTFMove(label))); >+ auto& document = downcast<Document>(*m_peerConnectionBackend.connection().scriptExecutionContext()); >+ return MediaStream::create(document, MediaStreamPrivate::create(document.logger(), { }, WTFMove(label))); > }); > return *mediaStream.iterator->value; > } >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >index c44e1bc9f2e9029793ebb6bc82d52397485770e3..851fddead4ce95b5a70e015be9c44a06cb7dc774 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >@@ -269,9 +269,10 @@ void LibWebRTCPeerConnectionBackend::doAddIceCandidate(RTCIceCandidate& candidat > > Ref<RTCRtpReceiver> LibWebRTCPeerConnectionBackend::createReceiverForSource(Ref<RealtimeMediaSource>&& source, std::unique_ptr<RTCRtpReceiverBackend>&& backend) > { >- String trackID = source->persistentID(); >- auto remoteTrackPrivate = MediaStreamTrackPrivate::create(WTFMove(source), WTFMove(trackID)); >- auto remoteTrack = MediaStreamTrack::create(*m_peerConnection.scriptExecutionContext(), WTFMove(remoteTrackPrivate)); >+ auto& document = downcast<Document>(*m_peerConnection.scriptExecutionContext()); >+ auto trackID = source->persistentID(); >+ auto remoteTrackPrivate = MediaStreamTrackPrivate::create(document.logger(), WTFMove(source), WTFMove(trackID)); >+ auto remoteTrack = MediaStreamTrack::create(document, WTFMove(remoteTrackPrivate)); > > return RTCRtpReceiver::create(*this, WTFMove(remoteTrack), WTFMove(backend)); > } >diff --git a/Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp b/Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp >index c0bb38ed2dcbd6d28020f4a4a0daeaf544ab75db..d7662930308a746a46ae00868a5d6341b82ff73b 100644 >--- a/Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp >+++ b/Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp >@@ -47,7 +47,7 @@ Ref<MediaStreamAudioDestinationNode> MediaStreamAudioDestinationNode::create(Aud > MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode(AudioContext& context, size_t numberOfChannels) > : AudioBasicInspectorNode(context, context.sampleRate(), numberOfChannels) > , m_source(MediaStreamAudioSource::create(context.sampleRate())) >- , m_stream(MediaStream::create(*context.document(), MediaStreamPrivate::create(m_source.copyRef()))) >+ , m_stream(MediaStream::create(*context.document(), MediaStreamPrivate::create(context.document()->logger(), m_source.copyRef()))) > { > setNodeType(NodeTypeMediaStreamAudioDestination); > initialize(); >diff --git a/Source/WebCore/platform/mediastream/MediaStreamPrivate.cpp b/Source/WebCore/platform/mediastream/MediaStreamPrivate.cpp >index c956f11067149f710b50c0feefaa6370add58739..ff5abaaa039ca29b65281fe564448b070a03fb89 100644 >--- a/Source/WebCore/platform/mediastream/MediaStreamPrivate.cpp >+++ b/Source/WebCore/platform/mediastream/MediaStreamPrivate.cpp >@@ -45,28 +45,34 @@ > > namespace WebCore { > >-Ref<MediaStreamPrivate> MediaStreamPrivate::create(Ref<RealtimeMediaSource>&& source) >+Ref<MediaStreamPrivate> MediaStreamPrivate::create(Ref<const Logger>&& logger, Ref<RealtimeMediaSource>&& source) > { >- return MediaStreamPrivate::create(MediaStreamTrackPrivateVector::from(MediaStreamTrackPrivate::create(WTFMove(source)))); >+ auto loggerCopy = logger.copyRef(); >+ return MediaStreamPrivate::create(WTFMove(logger), MediaStreamTrackPrivateVector::from(MediaStreamTrackPrivate::create(WTFMove(loggerCopy), WTFMove(source)))); > } > >-Ref<MediaStreamPrivate> MediaStreamPrivate::create(const Vector<Ref<RealtimeMediaSource>>& audioSources, const Vector<Ref<RealtimeMediaSource>>& videoSources) >+Ref<MediaStreamPrivate> MediaStreamPrivate::create(Ref<const Logger>&& logger, const Vector<Ref<RealtimeMediaSource>>& audioSources, const Vector<Ref<RealtimeMediaSource>>& videoSources) > { > MediaStreamTrackPrivateVector tracks; > tracks.reserveInitialCapacity(audioSources.size() + videoSources.size()); > > for (auto& source : audioSources) >- tracks.uncheckedAppend(MediaStreamTrackPrivate::create(source.copyRef())); >+ tracks.uncheckedAppend(MediaStreamTrackPrivate::create(logger.copyRef(), source.copyRef())); > > for (auto& source : videoSources) >- tracks.uncheckedAppend(MediaStreamTrackPrivate::create(source.copyRef())); >+ tracks.uncheckedAppend(MediaStreamTrackPrivate::create(logger.copyRef(), source.copyRef())); > >- return MediaStreamPrivate::create(tracks); >+ return MediaStreamPrivate::create(WTFMove(logger), tracks); > } > >-MediaStreamPrivate::MediaStreamPrivate(const MediaStreamTrackPrivateVector& tracks, String&& id) >+MediaStreamPrivate::MediaStreamPrivate(Ref<const Logger>&& logger, const MediaStreamTrackPrivateVector& tracks, String&& id) > : m_id(WTFMove(id)) >+#if !RELEASE_LOG_DISABLED >+ , m_logger(WTFMove(logger)) >+ , m_logIdentifier(uniqueLogIdentifier()) >+#endif > { >+ UNUSED_PARAM(logger); > ASSERT(!m_id.isEmpty()); > > for (auto& track : tracks) { >@@ -345,13 +351,6 @@ void MediaStreamPrivate::monitorOrientation(OrientationNotifier& notifier) > } > > #if !RELEASE_LOG_DISABLED >-void MediaStreamPrivate::setLogger(const Logger& newLogger, const void* newLogIdentifier) >-{ >- m_logger = &newLogger; >- m_logIdentifier = newLogIdentifier; >- ALWAYS_LOG(LOGIDENTIFIER); >-} >- > WTFLogChannel& MediaStreamPrivate::logChannel() const > { > return LogWebRTC; >diff --git a/Source/WebCore/platform/mediastream/MediaStreamPrivate.h b/Source/WebCore/platform/mediastream/MediaStreamPrivate.h >index 76b4679ad50fcf98fdbba17213563f019a6cdfc3..9696de2167b132e043985196cbb43be97e3e3046 100644 >--- a/Source/WebCore/platform/mediastream/MediaStreamPrivate.h >+++ b/Source/WebCore/platform/mediastream/MediaStreamPrivate.h >@@ -73,9 +73,9 @@ public: > virtual void didRemoveTrack(MediaStreamTrackPrivate&) { } > }; > >- static Ref<MediaStreamPrivate> create(Ref<RealtimeMediaSource>&&); >- static Ref<MediaStreamPrivate> create(const Vector<Ref<RealtimeMediaSource>>& audioSources, const Vector<Ref<RealtimeMediaSource>>& videoSources); >- static Ref<MediaStreamPrivate> create(const MediaStreamTrackPrivateVector& tracks, String&& id = createCanonicalUUIDString()) { return adoptRef(*new MediaStreamPrivate(tracks, WTFMove(id))); } >+ static Ref<MediaStreamPrivate> create(Ref<const Logger>&&, Ref<RealtimeMediaSource>&&); >+ static Ref<MediaStreamPrivate> create(Ref<const Logger>&&, const Vector<Ref<RealtimeMediaSource>>& audioSources, const Vector<Ref<RealtimeMediaSource>>& videoSources); >+ static Ref<MediaStreamPrivate> create(Ref<const Logger>&& logger, const MediaStreamTrackPrivateVector& tracks, String&& id = createCanonicalUUIDString()) { return adoptRef(*new MediaStreamPrivate(WTFMove(logger), tracks, WTFMove(id))); } > > virtual ~MediaStreamPrivate(); > >@@ -111,11 +111,12 @@ public: > void monitorOrientation(OrientationNotifier&); > > #if !RELEASE_LOG_DISABLED >- void setLogger(const Logger&, const void*); >+ const Logger& logger() const final { return m_logger; } >+ const void* logIdentifier() const final { return m_logIdentifier; } > #endif > > private: >- MediaStreamPrivate(const MediaStreamTrackPrivateVector&, String&&); >+ MediaStreamPrivate(Ref<const Logger>&&, const MediaStreamTrackPrivateVector&, String&&); > > // MediaStreamTrackPrivate::Observer > void trackStarted(MediaStreamTrackPrivate&) override; >@@ -131,13 +132,8 @@ private: > void forEachObserver(const WTF::Function<void(Observer&)>&) const; > > #if !RELEASE_LOG_DISABLED >- const Logger& logger() const final { ASSERT(m_logger); return *m_logger.get(); } >- const void* logIdentifier() const final { return m_logIdentifier; } > const char* logClassName() const final { return "MediaStreamPrivate"; } > WTFLogChannel& logChannel() const final; >- >- RefPtr<const Logger> m_logger; >- const void* m_logIdentifier; > #endif > > HashSet<Observer*> m_observers; >@@ -145,6 +141,10 @@ private: > MediaStreamTrackPrivate* m_activeVideoTrack { nullptr }; > HashMap<String, RefPtr<MediaStreamTrackPrivate>> m_trackSet; > bool m_isActive { false }; >+#if !RELEASE_LOG_DISABLED >+ Ref<const Logger> m_logger; >+ const void* m_logIdentifier; >+#endif > }; > > typedef Vector<RefPtr<MediaStreamPrivate>> MediaStreamPrivateVector; >diff --git a/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp b/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp >index 4943da370aa98a512ae143cd358238936f44e817..3c330b95e105c9649883a8a42f96ca2fa4ae4e18 100644 >--- a/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp >+++ b/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp >@@ -44,20 +44,28 @@ > > namespace WebCore { > >-Ref<MediaStreamTrackPrivate> MediaStreamTrackPrivate::create(Ref<RealtimeMediaSource>&& source) >+Ref<MediaStreamTrackPrivate> MediaStreamTrackPrivate::create(Ref<const Logger>&& logger, Ref<RealtimeMediaSource>&& source) > { >- return create(WTFMove(source), createCanonicalUUIDString()); >+ return create(WTFMove(logger), WTFMove(source), createCanonicalUUIDString()); > } > >-Ref<MediaStreamTrackPrivate> MediaStreamTrackPrivate::create(Ref<RealtimeMediaSource>&& source, String&& id) >+Ref<MediaStreamTrackPrivate> MediaStreamTrackPrivate::create(Ref<const Logger>&& logger, Ref<RealtimeMediaSource>&& source, String&& id) > { >- return adoptRef(*new MediaStreamTrackPrivate(WTFMove(source), WTFMove(id))); >+ return adoptRef(*new MediaStreamTrackPrivate(WTFMove(logger), WTFMove(source), WTFMove(id))); > } > >-MediaStreamTrackPrivate::MediaStreamTrackPrivate(Ref<RealtimeMediaSource>&& source, String&& id) >+MediaStreamTrackPrivate::MediaStreamTrackPrivate(Ref<const Logger>&& logger, Ref<RealtimeMediaSource>&& source, String&& id) > : m_source(WTFMove(source)) > , m_id(WTFMove(id)) >+ , m_logger(WTFMove(logger)) >+#if !RELEASE_LOG_DISABLED >+ , m_logIdentifier(uniqueLogIdentifier()) >+#endif > { >+ UNUSED_PARAM(logger); >+#if !RELEASE_LOG_DISABLED >+ m_source->setLogger(m_logger.copyRef(), m_logIdentifier); >+#endif > m_source->addObserver(*this); > } > >@@ -147,7 +155,8 @@ void MediaStreamTrackPrivate::endTrack() > > Ref<MediaStreamTrackPrivate> MediaStreamTrackPrivate::clone() > { >- auto clonedMediaStreamTrackPrivate = create(m_source.copyRef()); >+ auto clonedMediaStreamTrackPrivate = create(m_logger.copyRef(), m_source.copyRef()); >+ > clonedMediaStreamTrackPrivate->m_isEnabled = this->m_isEnabled; > clonedMediaStreamTrackPrivate->m_isEnded = this->m_isEnded; > clonedMediaStreamTrackPrivate->m_contentHint = this->m_contentHint; >@@ -279,14 +288,6 @@ void MediaStreamTrackPrivate::updateReadyState() > } > > #if !RELEASE_LOG_DISABLED >-void MediaStreamTrackPrivate::setLogger(const Logger& newLogger, const void* newLogIdentifier) >-{ >- m_logger = &newLogger; >- m_logIdentifier = newLogIdentifier; >- ALWAYS_LOG(LOGIDENTIFIER); >- m_source->setLogger(newLogger, newLogIdentifier); >-} >- > WTFLogChannel& MediaStreamTrackPrivate::logChannel() const > { > return LogWebRTC; >diff --git a/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h b/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h >index 5967d452cc3d2543291e498b553c239a929ac221..efa673cf09ac0bfc95868b6d3a4d872e49194caf 100644 >--- a/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h >+++ b/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h >@@ -64,8 +64,8 @@ public: > virtual void audioSamplesAvailable(MediaStreamTrackPrivate&, const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t) { }; > }; > >- static Ref<MediaStreamTrackPrivate> create(Ref<RealtimeMediaSource>&&); >- static Ref<MediaStreamTrackPrivate> create(Ref<RealtimeMediaSource>&&, String&& id); >+ static Ref<MediaStreamTrackPrivate> create(Ref<const Logger>&&, Ref<RealtimeMediaSource>&&); >+ static Ref<MediaStreamTrackPrivate> create(Ref<const Logger>&&, Ref<RealtimeMediaSource>&&, String&& id); > > virtual ~MediaStreamTrackPrivate(); > >@@ -117,13 +117,12 @@ public: > void setIdForTesting(String&& id) { m_id = WTFMove(id); } > > #if !RELEASE_LOG_DISABLED >- void setLogger(const Logger&, const void*); >- const Logger& logger() const final { ASSERT(m_logger); return *m_logger.get(); } >+ const Logger& logger() const final { return m_logger; } > const void* logIdentifier() const final { return m_logIdentifier; } > #endif >- >+ > private: >- MediaStreamTrackPrivate(Ref<RealtimeMediaSource>&&, String&& id); >+ MediaStreamTrackPrivate(Ref<const Logger>&&, Ref<RealtimeMediaSource>&&, String&& id); > > // RealtimeMediaSourceObserver > void sourceStarted() final; >@@ -141,9 +140,6 @@ private: > #if !RELEASE_LOG_DISABLED > const char* logClassName() const final { return "MediaStreamTrackPrivate"; } > WTFLogChannel& logChannel() const final; >- >- RefPtr<const Logger> m_logger; >- const void* m_logIdentifier; > #endif > > mutable RecursiveLock m_observersLock; >@@ -157,6 +153,10 @@ private: > bool m_haveProducedData { false }; > HintValue m_contentHint { HintValue::Empty }; > RefPtr<WebAudioSourceProvider> m_audioSourceProvider; >+ Ref<const Logger> m_logger; >+#if !RELEASE_LOG_DISABLED >+ const void* m_logIdentifier; >+#endif > }; > > typedef Vector<RefPtr<MediaStreamTrackPrivate>> MediaStreamTrackPrivateVector; >diff --git a/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp b/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp >index b53f1f7d76385a5fc4cd3f31ad89ab3c69dc32e1..cc96cff126ab55ad03884f760db6fab02f4048d9 100644 >--- a/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp >+++ b/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp >@@ -63,7 +63,7 @@ RealtimeMediaSourceCenter::RealtimeMediaSourceCenter() > > RealtimeMediaSourceCenter::~RealtimeMediaSourceCenter() = default; > >-void RealtimeMediaSourceCenter::createMediaStream(NewMediaStreamHandler&& completionHandler, String&& hashSalt, CaptureDevice&& audioDevice, CaptureDevice&& videoDevice, const MediaStreamRequest& request) >+void RealtimeMediaSourceCenter::createMediaStream(Ref<const Logger>&& logger, NewMediaStreamHandler&& completionHandler, String&& hashSalt, CaptureDevice&& audioDevice, CaptureDevice&& videoDevice, const MediaStreamRequest& request) > { > Vector<Ref<RealtimeMediaSource>> audioSources; > Vector<Ref<RealtimeMediaSource>> videoSources; >@@ -102,7 +102,7 @@ void RealtimeMediaSourceCenter::createMediaStream(NewMediaStreamHandler&& comple > } > } > >- completionHandler(MediaStreamPrivate::create(audioSources, videoSources)); >+ completionHandler(MediaStreamPrivate::create(WTFMove(logger), audioSources, videoSources)); > } > > Vector<CaptureDevice> RealtimeMediaSourceCenter::getMediaStreamDevices() >diff --git a/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h b/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h >index 37387684a512ee67f622c38838cd6f1a2119c057..5d19ccbcbe0151a6ce496015ffcba4621ae431bb 100644 >--- a/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h >+++ b/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h >@@ -59,12 +59,12 @@ public: > > WEBCORE_EXPORT static RealtimeMediaSourceCenter& singleton(); > >- using ValidConstraintsHandler = WTF::Function<void(Vector<CaptureDevice>&& audioDeviceUIDs, Vector<CaptureDevice>&& videoDeviceUIDs, String&&)>; >- using InvalidConstraintsHandler = WTF::Function<void(const String& invalidConstraint)>; >+ using ValidConstraintsHandler = Function<void(Vector<CaptureDevice>&& audioDeviceUIDs, Vector<CaptureDevice>&& videoDeviceUIDs, String&&)>; >+ using InvalidConstraintsHandler = Function<void(const String& invalidConstraint)>; > WEBCORE_EXPORT void validateRequestConstraints(ValidConstraintsHandler&&, InvalidConstraintsHandler&&, const MediaStreamRequest&, String&&); > >- using NewMediaStreamHandler = WTF::Function<void(RefPtr<MediaStreamPrivate>&&)>; >- void createMediaStream(NewMediaStreamHandler&&, String&&, CaptureDevice&& audioDevice, CaptureDevice&& videoDevice, const MediaStreamRequest&); >+ using NewMediaStreamHandler = Function<void(RefPtr<MediaStreamPrivate>&&)>; >+ void createMediaStream(Ref<const Logger>&&, NewMediaStreamHandler&&, String&&, CaptureDevice&& audioDevice, CaptureDevice&& videoDevice, const MediaStreamRequest&); > > WEBCORE_EXPORT Vector<CaptureDevice> getMediaStreamDevices(); > >diff --git a/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp b/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp >index 632ef0bc114a216680a55ffc18cdedd4a3963a89..af152348d639a010fe336e1c25389885b0d99316 100644 >--- a/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp >+++ b/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp >@@ -88,7 +88,7 @@ void RealtimeIncomingAudioSourceCocoa::OnData(const void* audioData, int bitsPer > > #if !RELEASE_LOG_DISABLED > if (!(++m_chunksReceived % 200)) >- ALWAYS_LOG(LOGIDENTIFIER, "chunk ", m_chunksReceived); >+ ALWAYS_LOG_IF(loggerPtr(), LOGIDENTIFIER, "chunk ", m_chunksReceived); > #endif > > audioSamplesAvailable(mediaTime, audioBufferList, CAAudioStreamDescription(newDescription), numberOfFrames); >diff --git a/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm b/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm >index fe5ebd6cb115ba2784f35f48883b60a5fb49ffa4..e46d075279d980b8d21f0da3ba6adf55263df730 100644 >--- a/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm >+++ b/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm >@@ -113,7 +113,7 @@ CVPixelBufferPoolRef RealtimeIncomingVideoSourceCocoa::pixelBufferPool(size_t wi > auto status = CVPixelBufferPoolCreate(kCFAllocatorDefault, nullptr, (__bridge CFDictionaryRef)pixelAttributes, &pool); > > if (status != kCVReturnSuccess) { >- ERROR_LOG(LOGIDENTIFIER, "Failed creating a pixel buffer pool with error ", status); >+ ERROR_LOG_IF(loggerPtr(), LOGIDENTIFIER, "Failed creating a pixel buffer pool with error ", status); > return nullptr; > } > m_pixelBufferPool = adoptCF(pool); >@@ -144,7 +144,7 @@ RetainPtr<CVPixelBufferRef> RealtimeIncomingVideoSourceCocoa::pixelBufferFromVid > auto status = CVPixelBufferPoolCreatePixelBuffer(kCFAllocatorDefault, m_pixelBufferPool.get(), &pixelBuffer); > > if (status != kCVReturnSuccess) { >- ERROR_LOG(LOGIDENTIFIER, "Failed creating a pixel buffer with error ", status); >+ ERROR_LOG_IF(loggerPtr(), LOGIDENTIFIER, "Failed creating a pixel buffer with error ", status); > return nullptr; > } > newPixelBuffer = adoptCF(pixelBuffer); >@@ -159,12 +159,12 @@ void RealtimeIncomingVideoSourceCocoa::OnFrame(const webrtc::VideoFrame& frame) > > #if !RELEASE_LOG_DISABLED > if (!(++m_numberOfFrames % 60)) >- ALWAYS_LOG(LOGIDENTIFIER, "frame ", m_numberOfFrames); >+ ALWAYS_LOG_IF(loggerPtr(), LOGIDENTIFIER, "frame ", m_numberOfFrames); > #endif > > auto pixelBuffer = pixelBufferFromVideoFrame(frame); > if (!pixelBuffer) { >- ERROR_LOG(LOGIDENTIFIER, "Failed to get a pixel buffer from a frame"); >+ ERROR_LOG_IF(loggerPtr(), LOGIDENTIFIER, "Failed to get a pixel buffer from a frame"); > return; > } > >@@ -178,7 +178,7 @@ void RealtimeIncomingVideoSourceCocoa::OnFrame(const webrtc::VideoFrame& frame) > CMVideoFormatDescriptionRef formatDescription; > OSStatus ostatus = CMVideoFormatDescriptionCreateForImageBuffer(kCFAllocatorDefault, (CVImageBufferRef)pixelBuffer, &formatDescription); > if (ostatus != noErr) { >- ERROR_LOG(LOGIDENTIFIER, "Failed to initialize CMVideoFormatDescription with error ", static_cast<int>(ostatus)); >+ ERROR_LOG_IF(loggerPtr(), LOGIDENTIFIER, "Failed to initialize CMVideoFormatDescription with error ", static_cast<int>(ostatus)); > return; > } > >@@ -186,7 +186,7 @@ void RealtimeIncomingVideoSourceCocoa::OnFrame(const webrtc::VideoFrame& frame) > ostatus = CMSampleBufferCreateReadyWithImageBuffer(kCFAllocatorDefault, (CVImageBufferRef)pixelBuffer, formatDescription, &timingInfo, &sampleBuffer); > CFRelease(formatDescription); > if (ostatus != noErr) { >- ERROR_LOG(LOGIDENTIFIER, "Failed to create the sample buffer with error ", static_cast<int>(ostatus)); >+ ERROR_LOG_IF(loggerPtr(), LOGIDENTIFIER, "Failed to create the sample buffer with error ", static_cast<int>(ostatus)); > return; > } > >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 10485d7a7e3d32e3d693f353b40bded224669fd5..b90255d075c53ae2966323c04c49bc282294f5a8 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,13 @@ >+2019-06-13 Youenn Fablet <youenn@apple.com> >+ >+ Cloning a MediaStreamTrack does not clone the logger >+ https://bugs.webkit.org/show_bug.cgi?id=198844 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * fast/mediastream/MediaStreamTrack-clone-expected.txt: >+ * fast/mediastream/MediaStreamTrack-clone.html: >+ > 2019-06-12 Youenn Fablet <youenn@apple.com> > > Update service worker test and expectation after revision 246363 >diff --git a/LayoutTests/fast/mediastream/MediaStreamTrack-clone-expected.txt b/LayoutTests/fast/mediastream/MediaStreamTrack-clone-expected.txt >index 9ef68ded544746587c043d2553a3b8416bc05c10..7102c658237d9488ccc9dca3b8059fcea78f7a61 100644 >--- a/LayoutTests/fast/mediastream/MediaStreamTrack-clone-expected.txt >+++ b/LayoutTests/fast/mediastream/MediaStreamTrack-clone-expected.txt >@@ -20,6 +20,7 @@ PASS videoTrack.onunmute is not videoTrack2.onunmute > PASS videoTrack.onended is not videoTrack2.onended > PASS videoTrack.onoverconstrained is not videoTrack2.onoverconstrained > PASS videoTrack.readyState is not videoTrack2.readyState >+PASS videoTrack.readyState is videoTrack3.readyState > PASS successfullyParsed is true > > TEST COMPLETE >diff --git a/LayoutTests/fast/mediastream/MediaStreamTrack-clone.html b/LayoutTests/fast/mediastream/MediaStreamTrack-clone.html >index 17c6f1d1495fee6369a7956f81a8672782bdb83f..63e87752647ec228cbc8a65ae47aab468ee2adb4 100644 >--- a/LayoutTests/fast/mediastream/MediaStreamTrack-clone.html >+++ b/LayoutTests/fast/mediastream/MediaStreamTrack-clone.html >@@ -7,6 +7,7 @@ > var mediaStream; > var videoTrack; > var videoTrack2; >+ var videoTrack3; > var audioTrack; > > function gotStream(stream) { >@@ -40,6 +41,9 @@ > videoTrack.stop(); > shouldNotBe('videoTrack.readyState', 'videoTrack2.readyState'); > >+ videoTrack3 = videoTrack.clone(); >+ shouldBe('videoTrack.readyState', 'videoTrack3.readyState'); >+ > finishJSTest(); > } >
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 198844
: 372082