1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "third_party/blink/renderer/modules/media_controls/media_controls_text_track_manager.h"
6 
7 #include "third_party/blink/public/strings/grit/blink_strings.h"
8 #include "third_party/blink/renderer/core/html/media/html_media_element.h"
9 #include "third_party/blink/renderer/core/html/track/text_track.h"
10 #include "third_party/blink/renderer/core/html/track/text_track_list.h"
11 #include "third_party/blink/renderer/platform/text/platform_locale.h"
12 
13 namespace blink {
14 
MediaControlsTextTrackManager(HTMLMediaElement & media_element)15 MediaControlsTextTrackManager::MediaControlsTextTrackManager(
16     HTMLMediaElement& media_element)
17     : media_element_(&media_element) {}
18 
GetTextTrackLabel(TextTrack * track) const19 String MediaControlsTextTrackManager::GetTextTrackLabel(
20     TextTrack* track) const {
21   if (!track) {
22     return media_element_->GetLocale().QueryString(IDS_MEDIA_TRACKS_OFF);
23   }
24 
25   String track_label = track->label();
26 
27   if (track_label.IsEmpty())
28     track_label = track->language();
29 
30   if (track_label.IsEmpty()) {
31     track_label = String(media_element_->GetLocale().QueryString(
32         IDS_MEDIA_TRACKS_NO_LABEL, String::Number(track->TrackIndex() + 1)));
33   }
34 
35   return track_label;
36 }
37 
ShowTextTrackAtIndex(unsigned index_to_enable)38 void MediaControlsTextTrackManager::ShowTextTrackAtIndex(
39     unsigned index_to_enable) {
40   TextTrackList* track_list = media_element_->textTracks();
41   if (index_to_enable >= track_list->length())
42     return;
43   TextTrack* track = track_list->AnonymousIndexedGetter(index_to_enable);
44   if (track && track->CanBeRendered())
45     track->setMode(TextTrack::ShowingKeyword());
46 }
47 
DisableShowingTextTracks()48 void MediaControlsTextTrackManager::DisableShowingTextTracks() {
49   TextTrackList* track_list = media_element_->textTracks();
50   for (unsigned i = 0; i < track_list->length(); ++i) {
51     TextTrack* track = track_list->AnonymousIndexedGetter(i);
52     if (track->mode() == TextTrack::ShowingKeyword())
53       track->setMode(TextTrack::DisabledKeyword());
54   }
55 }
56 
Trace(Visitor * visitor) const57 void MediaControlsTextTrackManager::Trace(Visitor* visitor) const {
58   visitor->Trace(media_element_);
59 }
60 
61 }  // namespace blink
62