tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 25444573d2df2cddc360965214168c00b640262e
parent 83871a1e560aa0aca7664d05635dc38d6306cc85
Author: Andreas Pehrson <apehrson@mozilla.com>
Date:   Tue, 11 Nov 2025 08:20:21 +0000

Bug 1771789 - Implement MediaStreamTrack::CloneInternal in a single place with templates. r=jib

Differential Revision: https://phabricator.services.mozilla.com/D266380

Diffstat:
Mdom/media/AudioStreamTrack.cpp | 5++---
Mdom/media/AudioStreamTrack.h | 5++---
Mdom/media/MediaStreamTrack.cpp | 7-------
Mdom/media/MediaStreamTrack.h | 12++++++++++--
Mdom/media/VideoStreamTrack.cpp | 5++---
Mdom/media/VideoStreamTrack.h | 5++---
6 files changed, 18 insertions(+), 21 deletions(-)

diff --git a/dom/media/AudioStreamTrack.cpp b/dom/media/AudioStreamTrack.cpp @@ -40,9 +40,8 @@ void AudioStreamTrack::GetLabel(nsAString& aLabel, CallerType aCallerType) { MediaStreamTrack::GetLabel(aLabel, aCallerType); } -already_AddRefed<MediaStreamTrack> AudioStreamTrack::CloneInternal() { - return do_AddRef(new AudioStreamTrack(mWindow, mInputTrack, mSource, - ReadyState(), Muted(), mConstraints)); +already_AddRefed<MediaStreamTrack> AudioStreamTrack::Clone() { + return MediaStreamTrack::CloneInternal<AudioStreamTrack>(); } } // namespace mozilla::dom diff --git a/dom/media/AudioStreamTrack.h b/dom/media/AudioStreamTrack.h @@ -24,6 +24,8 @@ class AudioStreamTrack : public MediaStreamTrack { : MediaStreamTrack(aWindow, aInputTrack, aSource, aReadyState, aMuted, aConstraints) {} + already_AddRefed<MediaStreamTrack> Clone() override; + AudioStreamTrack* AsAudioStreamTrack() override { return this; } const AudioStreamTrack* AsAudioStreamTrack() const override { return this; } @@ -38,9 +40,6 @@ class AudioStreamTrack : public MediaStreamTrack { void GetKind(nsAString& aKind) override { aKind.AssignLiteral("audio"); } void GetLabel(nsAString& aLabel, CallerType aCallerType) override; - - protected: - already_AddRefed<MediaStreamTrack> CloneInternal() override; }; } // namespace mozilla::dom diff --git a/dom/media/MediaStreamTrack.cpp b/dom/media/MediaStreamTrack.cpp @@ -539,13 +539,6 @@ void MediaStreamTrack::RemoveConsumer(MediaStreamTrackConsumer* aConsumer) { } } -already_AddRefed<MediaStreamTrack> MediaStreamTrack::Clone() { - RefPtr<MediaStreamTrack> newTrack = CloneInternal(); - newTrack->SetEnabled(Enabled()); - newTrack->SetMuted(Muted()); - return newTrack.forget(); -} - void MediaStreamTrack::SetReadyState(MediaStreamTrackState aState) { MOZ_ASSERT(!(mReadyState == MediaStreamTrackState::Ended && aState == MediaStreamTrackState::Live), diff --git a/dom/media/MediaStreamTrack.h b/dom/media/MediaStreamTrack.h @@ -469,7 +469,7 @@ class MediaStreamTrack : public DOMEventTargetHelper, public SupportsWeakPtr { already_AddRefed<Promise> ApplyConstraints( const dom::MediaTrackConstraints& aConstraints, CallerType aCallerType, ErrorResult& aRv); - already_AddRefed<MediaStreamTrack> Clone(); + virtual already_AddRefed<MediaStreamTrack> Clone() = 0; MediaStreamTrackState ReadyState() { return mReadyState; } IMPL_EVENT_HANDLER(mute) @@ -642,7 +642,15 @@ class MediaStreamTrack : public DOMEventTargetHelper, public SupportsWeakPtr { * Creates a new MediaStreamTrack with the same kind, input track, input * track ID and source as this MediaStreamTrack. */ - virtual already_AddRefed<MediaStreamTrack> CloneInternal() = 0; + + template <typename TrackType> + already_AddRefed<MediaStreamTrack> CloneInternal() { + auto newTrack = MakeRefPtr<TrackType>(mWindow, mInputTrack, mSource, + ReadyState(), Muted(), mConstraints); + newTrack->SetEnabled(Enabled()); + newTrack->SetMuted(Muted()); + return newTrack.forget(); + } nsTArray<PrincipalChangeObserver<MediaStreamTrack>*> mPrincipalChangeObservers; diff --git a/dom/media/VideoStreamTrack.cpp b/dom/media/VideoStreamTrack.cpp @@ -74,9 +74,8 @@ void VideoStreamTrack::GetLabel(nsAString& aLabel, CallerType aCallerType) { MediaStreamTrack::GetLabel(aLabel, aCallerType); } -already_AddRefed<MediaStreamTrack> VideoStreamTrack::CloneInternal() { - return do_AddRef(new VideoStreamTrack(mWindow, mInputTrack, mSource, - ReadyState(), Muted(), mConstraints)); +already_AddRefed<MediaStreamTrack> VideoStreamTrack::Clone() { + return MediaStreamTrack::CloneInternal<VideoStreamTrack>(); } } // namespace mozilla::dom diff --git a/dom/media/VideoStreamTrack.h b/dom/media/VideoStreamTrack.h @@ -25,6 +25,8 @@ class VideoStreamTrack : public MediaStreamTrack { bool aMuted = false, const MediaTrackConstraints& aConstraints = MediaTrackConstraints()); + already_AddRefed<MediaStreamTrack> Clone() override; + void Destroy() override; VideoStreamTrack* AsVideoStreamTrack() override { return this; } @@ -45,9 +47,6 @@ class VideoStreamTrack : public MediaStreamTrack { void GetLabel(nsAString& aLabel, CallerType aCallerType) override; - protected: - already_AddRefed<MediaStreamTrack> CloneInternal() override; - private: nsTArray<RefPtr<VideoOutput>> mVideoOutputs; };