Chromium Code Reviews| Index: Source/core/html/track/AutomaticTrackSelection.cpp |
| diff --git a/Source/core/html/track/AutomaticTrackSelection.cpp b/Source/core/html/track/AutomaticTrackSelection.cpp |
| index 925a3bea2e6ab542bdcb36d668a97a59d13ab080..d5a29b9d4c5149a28db72a5b85ca8eede975d493 100644 |
| --- a/Source/core/html/track/AutomaticTrackSelection.cpp |
| +++ b/Source/core/html/track/AutomaticTrackSelection.cpp |
| @@ -71,7 +71,13 @@ void AutomaticTrackSelection::performAutomaticTextTrackSelection(const TrackGrou |
| RefPtrWillBeRawPtr<TextTrack> trackToEnable = nullptr; |
| RefPtrWillBeRawPtr<TextTrack> defaultTrack = nullptr; |
| RefPtrWillBeRawPtr<TextTrack> fallbackTrack = nullptr; |
| - int highestTrackScore = 0; |
| + RefPtrWillBeRawPtr<TextTrack> preferredCaptionTrack = nullptr; |
| + RefPtrWillBeRawPtr<TextTrack> preferredSubtitleTrack = nullptr; |
| + |
| + int highestCaptionTrackScore = 0; |
|
fs
2015/06/09 16:03:57
I'd think it would be possible to just use the val
srivats
2015/06/10 19:55:15
I had to split the scores for track kinds to handl
fs
2015/06/11 10:46:05
I'm a little uncomfortable with the increasing num
|
| + int highestSubtitleTrackScore = 0; |
| + int highestDefaultTrackScore = 0; |
| + |
| for (size_t i = 0; i < group.tracks.size(); ++i) { |
| RefPtrWillBeRawPtr<TextTrack> textTrack = group.tracks[i]; |
| @@ -80,24 +86,25 @@ void AutomaticTrackSelection::performAutomaticTextTrackSelection(const TrackGrou |
| int trackScore = textTrackSelectionScore(*textTrack); |
| if (trackScore) { |
| - // * If the text track kind is { [subtitles or captions] [descriptions] } and the user has indicated an interest in having a |
| + // * If the text track kind is subtitles or captions and the user has indicated an interest in having a |
| // track with this text track kind, text track language, and text track label enabled, and there is no |
| // other text track in the media element's list of text tracks with a text track kind of either subtitles |
| // or captions whose text track mode is showing |
| - // ... |
| - // * If the text track kind is chapters and the text track language is one that the user agent has reason |
| - // to believe is appropriate for the user, and there is no other text track in the media element's list of |
| - // text tracks with a text track kind of chapters whose text track mode is showing |
| // Let the text track mode be showing. |
| - if (trackScore > highestTrackScore) { |
| - highestTrackScore = trackScore; |
| - trackToEnable = textTrack; |
| + |
| + if (textTrack->kind() == TextTrack::subtitlesKeyword() && trackScore > highestSubtitleTrackScore) { |
| + preferredSubtitleTrack = textTrack; |
| + highestSubtitleTrackScore = trackScore; |
| + } else if (textTrack->kind() == TextTrack::captionsKeyword() && trackScore > highestCaptionTrackScore) { |
| + preferredCaptionTrack = textTrack; |
| + highestCaptionTrackScore = trackScore; |
| } |
| - if (!defaultTrack && textTrack->isDefault()) |
| + if (textTrack->isDefault() && trackScore > highestDefaultTrackScore) { |
| + highestDefaultTrackScore = trackScore; |
| defaultTrack = textTrack; |
| - if (!defaultTrack && !fallbackTrack) |
| - fallbackTrack = textTrack; |
| + } |
| + fallbackTrack = textTrack; |
| } else if (!group.visibleTrack && !defaultTrack && textTrack->isDefault()) { |
| // * If the track element has a default attribute specified, and there is no other text track in the media |
| // element's list of text tracks whose text track mode is showing or showing by default |
| @@ -106,16 +113,28 @@ void AutomaticTrackSelection::performAutomaticTextTrackSelection(const TrackGrou |
| } |
| } |
| + if (m_configuration.textTrackKindUserPreference == TextTrackKindUserPreference::Default && defaultTrack) { |
|
fs
2015/06/09 16:03:57
I think this might be better suited as a switch.
srivats
2015/06/10 19:55:15
Agreed. I'll change it.
|
| + trackToEnable = defaultTrack; |
| + } else if (m_configuration.textTrackKindUserPreference == TextTrackKindUserPreference::Subtitles && preferredSubtitleTrack) { |
| + trackToEnable = preferredSubtitleTrack; |
| + } else if (m_configuration.textTrackKindUserPreference == TextTrackKindUserPreference::Captions) { |
| + // When the user prefers captions, display a caption track if present in user's preferred language. |
| + // If no captions track exists in the user's preferred language or a subtitle track |
| + // exists in a language with a higher score, display the subtitle track. |
| + if (highestCaptionTrackScore >= highestSubtitleTrackScore && preferredCaptionTrack) |
| + trackToEnable = preferredCaptionTrack; |
| + else if (preferredSubtitleTrack) |
| + trackToEnable = preferredSubtitleTrack; |
| + } |
| + |
| if (!trackToEnable && defaultTrack) |
| trackToEnable = defaultTrack; |
| - // If no track matches the user's preferred language and non was marked 'default', enable the first track |
| + // If no track matches the user's preferred language and none was marked 'default', enable the first track |
| // because the user has explicitly stated a preference for this kind of track. |
| - if (!fallbackTrack && m_configuration.forceEnableSubtitleOrCaptionTrack && group.kind == TrackGroup::CaptionsAndSubtitles) |
| - fallbackTrack = group.tracks[0]; |
| - |
| - if (!trackToEnable && fallbackTrack) |
| - trackToEnable = fallbackTrack; |
| + if (!trackToEnable && m_configuration.forceEnableSubtitleOrCaptionTrack && group.kind == TrackGroup::CaptionsAndSubtitles) { |
| + trackToEnable = fallbackTrack ? fallbackTrack : group.tracks[0]; |
| + } |
| if (currentlyEnabledTracks.size()) { |
| for (size_t i = 0; i < currentlyEnabledTracks.size(); ++i) { |