Title: [234312] trunk/Source/WebCore
Revision
234312
Author
[email protected]
Date
2018-07-27 09:58:20 -0700 (Fri, 27 Jul 2018)

Log Message

[Media] Avoid unnecessarily constructing *TrackList objects
https://bugs.webkit.org/show_bug.cgi?id=188094

Reviewed by Eric Carlson.

Avoid unnecessarily constructing *TrackList objects as this is preventing us from making them
ActiveDOMObjects.

* Modules/mediasource/MediaSource.cpp:
(WebCore::MediaSource::removeSourceBuffer):
* Modules/mediasource/SourceBuffer.cpp:
(WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::addAudioTrack):
(WebCore::HTMLMediaElement::addTextTrack):
(WebCore::HTMLMediaElement::addVideoTrack):
(WebCore::HTMLMediaElement::ensureAudioTracks):
(WebCore::HTMLMediaElement::ensureTextTracks):
(WebCore::HTMLMediaElement::ensureVideoTracks):
(WebCore::HTMLMediaElement::setSelectedTextTrack):
(WebCore::HTMLMediaElement::audioTracks): Deleted.
(WebCore::HTMLMediaElement::textTracks): Deleted.
(WebCore::HTMLMediaElement::videoTracks): Deleted.
* html/HTMLMediaElement.h:
(WebCore::HTMLMediaElement::audioTracks const):
(WebCore::HTMLMediaElement::textTracks const):
(WebCore::HTMLMediaElement::videoTracks const):
* html/HTMLMediaElement.idl:
* html/shadow/MediaControlElements.cpp:
(WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay):
(WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu):
(WebCore::MediaControlTextTrackContainerElement::updateTextStrokeStyle):
* html/track/TextTrack.cpp:
(WebCore::TextTrack::setKind):
(WebCore::TextTrack::trackIndex):
(WebCore::TextTrack::trackIndexRelativeToRenderedTracks):
(WebCore::TextTrack::setLanguage):
* html/track/VideoTrack.cpp:
(WebCore::VideoTrack::setKind):
(WebCore::VideoTrack::setLanguage):
* platform/cocoa/PlaybackSessionModelMediaElement.mm:
(WebCore::PlaybackSessionModelMediaElement::setMediaElement):
(WebCore::PlaybackSessionModelMediaElement::updateMediaSelectionOptions):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (234311 => 234312)


--- trunk/Source/WebCore/ChangeLog	2018-07-27 16:50:19 UTC (rev 234311)
+++ trunk/Source/WebCore/ChangeLog	2018-07-27 16:58:20 UTC (rev 234312)
@@ -1,3 +1,49 @@
+2018-07-27  Chris Dumez  <[email protected]>
+
+        [Media] Avoid unnecessarily constructing *TrackList objects
+        https://bugs.webkit.org/show_bug.cgi?id=188094
+
+        Reviewed by Eric Carlson.
+
+        Avoid unnecessarily constructing *TrackList objects as this is preventing us from making them
+        ActiveDOMObjects.
+
+        * Modules/mediasource/MediaSource.cpp:
+        (WebCore::MediaSource::removeSourceBuffer):
+        * Modules/mediasource/SourceBuffer.cpp:
+        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::addAudioTrack):
+        (WebCore::HTMLMediaElement::addTextTrack):
+        (WebCore::HTMLMediaElement::addVideoTrack):
+        (WebCore::HTMLMediaElement::ensureAudioTracks):
+        (WebCore::HTMLMediaElement::ensureTextTracks):
+        (WebCore::HTMLMediaElement::ensureVideoTracks):
+        (WebCore::HTMLMediaElement::setSelectedTextTrack):
+        (WebCore::HTMLMediaElement::audioTracks): Deleted.
+        (WebCore::HTMLMediaElement::textTracks): Deleted.
+        (WebCore::HTMLMediaElement::videoTracks): Deleted.
+        * html/HTMLMediaElement.h:
+        (WebCore::HTMLMediaElement::audioTracks const):
+        (WebCore::HTMLMediaElement::textTracks const):
+        (WebCore::HTMLMediaElement::videoTracks const):
+        * html/HTMLMediaElement.idl:
+        * html/shadow/MediaControlElements.cpp:
+        (WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay):
+        (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu):
+        (WebCore::MediaControlTextTrackContainerElement::updateTextStrokeStyle):
+        * html/track/TextTrack.cpp:
+        (WebCore::TextTrack::setKind):
+        (WebCore::TextTrack::trackIndex):
+        (WebCore::TextTrack::trackIndexRelativeToRenderedTracks):
+        (WebCore::TextTrack::setLanguage):
+        * html/track/VideoTrack.cpp:
+        (WebCore::VideoTrack::setKind):
+        (WebCore::VideoTrack::setLanguage):
+        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
+        (WebCore::PlaybackSessionModelMediaElement::setMediaElement):
+        (WebCore::PlaybackSessionModelMediaElement::updateMediaSelectionOptions):
+
 2018-07-27  Basuke Suzuki  <[email protected]>
 
         [Curl] Set correct source info to ResourceResponse.

Modified: trunk/Source/WebCore/Modules/mediasource/MediaSource.cpp (234311 => 234312)


--- trunk/Source/WebCore/Modules/mediasource/MediaSource.cpp	2018-07-27 16:50:19 UTC (rev 234311)
+++ trunk/Source/WebCore/Modules/mediasource/MediaSource.cpp	2018-07-27 16:58:20 UTC (rev 234312)
@@ -729,7 +729,7 @@
         // 5.4 If the removed enabled audio track flag equals true, then queue a task to fire a simple event
         // named change at the HTMLMediaElement audioTracks list.
         if (removedEnabledAudioTrack)
-            mediaElement()->audioTracks().scheduleChangeEvent();
+            mediaElement()->ensureAudioTracks().scheduleChangeEvent();
     }
 
     // 6. Let SourceBuffer videoTracks list equal the VideoTrackList object returned by sourceBuffer.videoTracks.
@@ -769,7 +769,7 @@
         // 7.4 If the removed selected video track flag equals true, then queue a task to fire a simple event
         // named change at the HTMLMediaElement videoTracks list.
         if (removedSelectedVideoTrack)
-            mediaElement()->videoTracks().scheduleChangeEvent();
+            mediaElement()->ensureVideoTracks().scheduleChangeEvent();
     }
 
     // 8. Let SourceBuffer textTracks list equal the TextTrackList object returned by sourceBuffer.textTracks.
@@ -809,7 +809,7 @@
         // 9.4 If the removed enabled text track flag equals true, then queue a task to fire a simple event
         // named change at the HTMLMediaElement textTracks list.
         if (removedEnabledTextTrack)
-            mediaElement()->textTracks().scheduleChangeEvent();
+            mediaElement()->ensureTextTracks().scheduleChangeEvent();
     }
 
     // 10. If sourceBuffer is in activeSourceBuffers, then remove sourceBuffer from activeSourceBuffers ...

Modified: trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp (234311 => 234312)


--- trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp	2018-07-27 16:50:19 UTC (rev 234311)
+++ trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp	2018-07-27 16:58:20 UTC (rev 234312)
@@ -1088,7 +1088,7 @@
             // 5.2.7 Queue a task to fire a trusted event named addtrack, that does not bubble and is
             // not cancelable, and that uses the TrackEvent interface, at the AudioTrackList object
             // referenced by the audioTracks attribute on the HTMLMediaElement.
-            m_source->mediaElement()->audioTracks().append(newAudioTrack.copyRef());
+            m_source->mediaElement()->ensureAudioTracks().append(newAudioTrack.copyRef());
 
             // 5.2.8 Create a new track buffer to store coded frames for this track.
             ASSERT(!m_trackBufferMap.contains(newAudioTrack->id()));
@@ -1127,7 +1127,7 @@
             // 5.3.7 Queue a task to fire a trusted event named addtrack, that does not bubble and is
             // not cancelable, and that uses the TrackEvent interface, at the VideoTrackList object
             // referenced by the videoTracks attribute on the HTMLMediaElement.
-            m_source->mediaElement()->videoTracks().append(newVideoTrack.copyRef());
+            m_source->mediaElement()->ensureVideoTracks().append(newVideoTrack.copyRef());
 
             // 5.3.8 Create a new track buffer to store coded frames for this track.
             ASSERT(!m_trackBufferMap.contains(newVideoTrack->id()));
@@ -1163,7 +1163,7 @@
             // 5.4.6 Queue a task to fire a trusted event named addtrack, that does not bubble and is
             // not cancelable, and that uses the TrackEvent interface, at the TextTrackList object
             // referenced by the textTracks attribute on the HTMLMediaElement.
-            m_source->mediaElement()->textTracks().append(WTFMove(newTextTrack));
+            m_source->mediaElement()->ensureTextTracks().append(WTFMove(newTextTrack));
 
             // 5.4.7 Create a new track buffer to store coded frames for this track.
             ASSERT(!m_trackBufferMap.contains(textTrackPrivate.id()));

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (234311 => 234312)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2018-07-27 16:50:19 UTC (rev 234311)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2018-07-27 16:58:20 UTC (rev 234312)
@@ -4012,7 +4012,7 @@
 
 void HTMLMediaElement::addAudioTrack(Ref<AudioTrack>&& track)
 {
-    audioTracks().append(WTFMove(track));
+    ensureAudioTracks().append(WTFMove(track));
 }
 
 void HTMLMediaElement::addTextTrack(Ref<TextTrack>&& track)
@@ -4025,7 +4025,7 @@
             m_captionDisplayMode = page->group().captionPreferences().captionDisplayMode();
     }
 
-    textTracks().append(WTFMove(track));
+    ensureTextTracks().append(WTFMove(track));
 
     closeCaptionTracksChanged();
 }
@@ -4032,7 +4032,7 @@
 
 void HTMLMediaElement::addVideoTrack(Ref<VideoTrack>&& track)
 {
-    videoTracks().append(WTFMove(track));
+    ensureVideoTracks().append(WTFMove(track));
 }
 
 void HTMLMediaElement::removeAudioTrack(Ref<AudioTrack>&& track)
@@ -4110,7 +4110,7 @@
     return trackReference;
 }
 
-AudioTrackList& HTMLMediaElement::audioTracks()
+AudioTrackList& HTMLMediaElement::ensureAudioTracks()
 {
     if (!m_audioTracks)
         m_audioTracks = AudioTrackList::create(this, ActiveDOMObject::scriptExecutionContext());
@@ -4118,7 +4118,7 @@
     return *m_audioTracks;
 }
 
-TextTrackList& HTMLMediaElement::textTracks()
+TextTrackList& HTMLMediaElement::ensureTextTracks()
 {
     if (!m_textTracks)
         m_textTracks = TextTrackList::create(this, ActiveDOMObject::scriptExecutionContext());
@@ -4126,7 +4126,7 @@
     return *m_textTracks;
 }
 
-VideoTrackList& HTMLMediaElement::videoTracks()
+VideoTrackList& HTMLMediaElement::ensureVideoTracks()
 {
     if (!m_videoTracks)
         m_videoTracks = VideoTrackList::create(this, ActiveDOMObject::scriptExecutionContext());
@@ -4407,8 +4407,8 @@
 
 void HTMLMediaElement::setSelectedTextTrack(TextTrack* trackToSelect)
 {
-    TextTrackList& trackList = textTracks();
-    if (!trackList.length())
+    auto* trackList = textTracks();
+    if (!trackList || !trackList->length())
         return;
 
     if (trackToSelect == TextTrack::captionMenuAutomaticItem()) {
@@ -4415,17 +4415,17 @@
         if (captionDisplayMode() != CaptionUserPreferences::Automatic)
             m_textTracks->scheduleChangeEvent();
     } else if (trackToSelect == TextTrack::captionMenuOffItem()) {
-        for (int i = 0, length = trackList.length(); i < length; ++i)
-            trackList.item(i)->setMode(TextTrack::Mode::Disabled);
+        for (int i = 0, length = trackList->length(); i < length; ++i)
+            trackList->item(i)->setMode(TextTrack::Mode::Disabled);
 
-        if (captionDisplayMode() != CaptionUserPreferences::ForcedOnly && !trackList.isChangeEventScheduled())
+        if (captionDisplayMode() != CaptionUserPreferences::ForcedOnly && !trackList->isChangeEventScheduled())
             m_textTracks->scheduleChangeEvent();
     } else {
-        if (!trackToSelect || !trackList.contains(*trackToSelect))
+        if (!trackToSelect || !trackList->contains(*trackToSelect))
             return;
 
-        for (int i = 0, length = trackList.length(); i < length; ++i) {
-            auto& track = *trackList.item(i);
+        for (int i = 0, length = trackList->length(); i < length; ++i) {
+            auto& track = *trackList->item(i);
             if (&track != trackToSelect)
                 track.setMode(TextTrack::Mode::Disabled);
             else

Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (234311 => 234312)


--- trunk/Source/WebCore/html/HTMLMediaElement.h	2018-07-27 16:50:19 UTC (rev 234311)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h	2018-07-27 16:58:20 UTC (rev 234312)
@@ -330,9 +330,12 @@
 #if ENABLE(VIDEO_TRACK)
     ExceptionOr<TextTrack&> addTextTrack(const String& kind, const String& label, const String& language);
 
-    AudioTrackList& audioTracks();
-    TextTrackList& textTracks();
-    VideoTrackList& videoTracks();
+    AudioTrackList& ensureAudioTracks();
+    TextTrackList& ensureTextTracks();
+    VideoTrackList& ensureVideoTracks();
+    AudioTrackList* audioTracks() const { return m_audioTracks.get(); }
+    TextTrackList* textTracks() const { return m_textTracks.get(); }
+    VideoTrackList* videoTracks() const { return m_videoTracks.get(); }
 
     CueList currentlyActiveCues() const { return m_currentlyActiveCues; }
 

Modified: trunk/Source/WebCore/html/HTMLMediaElement.idl (234311 => 234312)


--- trunk/Source/WebCore/html/HTMLMediaElement.idl	2018-07-27 16:50:19 UTC (rev 234311)
+++ trunk/Source/WebCore/html/HTMLMediaElement.idl	2018-07-27 16:58:20 UTC (rev 234312)
@@ -110,9 +110,9 @@
     [Conditional=ENCRYPTED_MEDIA, EnabledAtRuntime=EncryptedMediaAPI] Promise<void> setMediaKeys(MediaKeys? mediaKeys);
 
     [Conditional=VIDEO_TRACK, MayThrowException] TextTrack addTextTrack(DOMString kind, optional DOMString label = "", optional DOMString language = "");
-    [Conditional=VIDEO_TRACK] readonly attribute AudioTrackList audioTracks;
-    [Conditional=VIDEO_TRACK] readonly attribute TextTrackList textTracks;
-    [Conditional=VIDEO_TRACK] readonly attribute VideoTrackList videoTracks;
+    [Conditional=VIDEO_TRACK, ImplementedAs=ensureAudioTracks] readonly attribute AudioTrackList audioTracks;
+    [Conditional=VIDEO_TRACK, ImplementedAs=ensureTextTracks] readonly attribute TextTrackList textTracks;
+    [Conditional=VIDEO_TRACK, ImplementedAs=ensureVideoTracks] readonly attribute VideoTrackList videoTracks;
 
     [Reflect] attribute DOMString mediaGroup;
 

Modified: trunk/Source/WebCore/html/shadow/MediaControlElements.cpp (234311 => 234312)


--- trunk/Source/WebCore/html/shadow/MediaControlElements.cpp	2018-07-27 16:50:19 UTC (rev 234311)
+++ trunk/Source/WebCore/html/shadow/MediaControlElements.cpp	2018-07-27 16:58:20 UTC (rev 234312)
@@ -760,7 +760,7 @@
     if (!mediaElement)
         return;
 
-    if (!mediaElement->textTracks().length())
+    if (!mediaElement->textTracks() || !mediaElement->textTracks()->length())
         return;
 
     rebuildTrackListMenu();
@@ -821,14 +821,14 @@
     if (!mediaElement)
         return;
 
-    TextTrackList& trackList = mediaElement->textTracks();
-    if (!trackList.length())
+    auto* trackList = mediaElement->textTracks();
+    if (!trackList || !trackList->length())
         return;
 
     if (!document().page())
         return;
     auto& captionPreferences = document().page()->group().captionPreferences();
-    Vector<RefPtr<TextTrack>> tracksForMenu = captionPreferences.sortedTrackListForMenu(&trackList);
+    Vector<RefPtr<TextTrack>> tracksForMenu = captionPreferences.sortedTrackListForMenu(trackList);
 
     auto captionsHeader = HTMLHeadingElement::create(h3Tag, document());
     captionsHeader->appendChild(document().createTextNode(textTrackSubtitlesText()));
@@ -1269,12 +1269,13 @@
     // FIXME: Since it is possible to have more than one text track enabled, the following code may not find the correct language.
     // The default UI only allows a user to enable one track at a time, so it should be OK for now, but we should consider doing
     // this differently, see <https://bugs.webkit.org/show_bug.cgi?id=169875>.
-    auto& tracks = mediaElement->textTracks();
-    for (unsigned i = 0; i < tracks.length(); ++i) {
-        auto track = tracks.item(i);
-        if (track && track->mode() == TextTrack::Mode::Showing) {
-            language = track->validBCP47Language();
-            break;
+    if (auto* tracks = mediaElement->textTracks()) {
+        for (unsigned i = 0; i < tracks->length(); ++i) {
+            auto track = tracks->item(i);
+            if (track && track->mode() == TextTrack::Mode::Showing) {
+                language = track->validBCP47Language();
+                break;
+            }
         }
     }
 

Modified: trunk/Source/WebCore/html/track/TextTrack.cpp (234311 => 234312)


--- trunk/Source/WebCore/html/track/TextTrack.cpp	2018-07-27 16:50:19 UTC (rev 234311)
+++ trunk/Source/WebCore/html/track/TextTrack.cpp	2018-07-27 16:58:20 UTC (rev 234312)
@@ -189,7 +189,7 @@
     // 4. Queue a task to fire a simple event named change at the TextTrackList object referenced by
     // the textTracks attribute on the HTMLMediaElement.
     if (mediaElement())
-        mediaElement()->textTracks().scheduleChangeEvent();
+        mediaElement()->ensureTextTracks().scheduleChangeEvent();
 #endif
 
     if (m_client && oldKind != m_kind)
@@ -440,7 +440,7 @@
 {
     ASSERT(m_mediaElement);
     if (!m_trackIndex)
-        m_trackIndex = m_mediaElement->textTracks().getTrackIndex(*this);
+        m_trackIndex = m_mediaElement->ensureTextTracks().getTrackIndex(*this);
     return m_trackIndex.value();
 }
 
@@ -467,7 +467,7 @@
 {
     ASSERT(m_mediaElement);
     if (!m_renderedTrackIndex)
-        m_renderedTrackIndex = m_mediaElement->textTracks().getTrackIndexRelativeToRenderedTracks(*this);
+        m_renderedTrackIndex = m_mediaElement->ensureTextTracks().getTrackIndexRelativeToRenderedTracks(*this);
     return m_renderedTrackIndex.value();
 }
 
@@ -564,7 +564,7 @@
     // 4. Queue a task to fire a simple event named change at the TextTrackList object referenced by
     // the textTracks attribute on the HTMLMediaElement.
     if (mediaElement())
-        mediaElement()->textTracks().scheduleChangeEvent();
+        mediaElement()->ensureTextTracks().scheduleChangeEvent();
 }
 #endif
 

Modified: trunk/Source/WebCore/html/track/VideoTrack.cpp (234311 => 234312)


--- trunk/Source/WebCore/html/track/VideoTrack.cpp	2018-07-27 16:50:19 UTC (rev 234311)
+++ trunk/Source/WebCore/html/track/VideoTrack.cpp	2018-07-27 16:58:20 UTC (rev 234312)
@@ -189,7 +189,7 @@
 
     // 4. Queue a task to fire a simple event named change at the VideoTrackList object referenced by
     // the videoTracks attribute on the HTMLMediaElement.
-    mediaElement()->videoTracks().scheduleChangeEvent();
+    mediaElement()->ensureVideoTracks().scheduleChangeEvent();
 }
 
 void VideoTrack::setLanguage(const AtomicString& language)
@@ -211,7 +211,7 @@
     // 4. Queue a task to fire a simple event named change at the VideoTrackList object referenced by
     // the videoTracks attribute on the HTMLMediaElement.
     if (mediaElement())
-        mediaElement()->videoTracks().scheduleChangeEvent();
+        mediaElement()->ensureVideoTracks().scheduleChangeEvent();
 }
 
 #endif

Modified: trunk/Source/WebCore/platform/cocoa/PlaybackSessionModelMediaElement.mm (234311 => 234312)


--- trunk/Source/WebCore/platform/cocoa/PlaybackSessionModelMediaElement.mm	2018-07-27 16:50:19 UTC (rev 234311)
+++ trunk/Source/WebCore/platform/cocoa/PlaybackSessionModelMediaElement.mm	2018-07-27 16:58:20 UTC (rev 234312)
@@ -66,15 +66,17 @@
     if (m_mediaElement && m_isListening) {
         for (auto& eventName : observedEventNames())
             m_mediaElement->removeEventListener(eventName, *this, false);
-        auto& audioTracks = m_mediaElement->audioTracks();
-        audioTracks.removeEventListener(events.addtrackEvent, *this, false);
-        audioTracks.removeEventListener(events.changeEvent, *this, false);
-        audioTracks.removeEventListener(events.removetrackEvent, *this, false);
+        if (auto* audioTracks = m_mediaElement->audioTracks()) {
+            audioTracks->removeEventListener(events.addtrackEvent, *this, false);
+            audioTracks->removeEventListener(events.changeEvent, *this, false);
+            audioTracks->removeEventListener(events.removetrackEvent, *this, false);
+        }
 
-        auto& textTracks = m_mediaElement->audioTracks();
-        textTracks.removeEventListener(events.addtrackEvent, *this, false);
-        textTracks.removeEventListener(events.changeEvent, *this, false);
-        textTracks.removeEventListener(events.removetrackEvent, *this, false);
+        if (auto* textTracks = m_mediaElement->audioTracks()) {
+            textTracks->removeEventListener(events.addtrackEvent, *this, false);
+            textTracks->removeEventListener(events.changeEvent, *this, false);
+            textTracks->removeEventListener(events.removetrackEvent, *this, false);
+        }
     }
     m_isListening = false;
 
@@ -87,12 +89,12 @@
         for (auto& eventName : observedEventNames())
             m_mediaElement->addEventListener(eventName, *this, false);
 
-        auto& audioTracks = m_mediaElement->audioTracks();
+        auto& audioTracks = m_mediaElement->ensureAudioTracks();
         audioTracks.addEventListener(events.addtrackEvent, *this, false);
         audioTracks.addEventListener(events.changeEvent, *this, false);
         audioTracks.addEventListener(events.removetrackEvent, *this, false);
 
-        auto& textTracks = m_mediaElement->audioTracks();
+        auto& textTracks = m_mediaElement->ensureTextTracks();
         textTracks.addEventListener(events.addtrackEvent, *this, false);
         textTracks.addEventListener(events.changeEvent, *this, false);
         textTracks.addEventListener(events.removetrackEvent, *this, false);
@@ -332,15 +334,15 @@
         return;
 
     auto& captionPreferences = m_mediaElement->document().page()->group().captionPreferences();
-    auto& textTracks = m_mediaElement->textTracks();
-    if (textTracks.length())
-        m_legibleTracksForMenu = captionPreferences.sortedTrackListForMenu(&textTracks);
+    auto* textTracks = m_mediaElement->textTracks();
+    if (textTracks && textTracks->length())
+        m_legibleTracksForMenu = captionPreferences.sortedTrackListForMenu(textTracks);
     else
         m_legibleTracksForMenu.clear();
 
-    auto& audioTracks = m_mediaElement->audioTracks();
-    if (audioTracks.length() > 1)
-        m_audioTracksForMenu = captionPreferences.sortedTrackListForMenu(&audioTracks);
+    auto* audioTracks = m_mediaElement->audioTracks();
+    if (audioTracks && audioTracks->length() > 1)
+        m_audioTracksForMenu = captionPreferences.sortedTrackListForMenu(audioTracks);
     else
         m_audioTracksForMenu.clear();
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to