OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights
reserved. | 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights
reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 918 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
929 | 929 |
930 // 12 - Further sort tasks in events that have the same time by the | 930 // 12 - Further sort tasks in events that have the same time by the |
931 // relative text track cue order of the text track cues associated | 931 // relative text track cue order of the text track cues associated |
932 // with these tasks. | 932 // with these tasks. |
933 return a.second->cueIndex() - b.second->cueIndex() < 0; | 933 return a.second->cueIndex() - b.second->cueIndex() < 0; |
934 } | 934 } |
935 | 935 |
936 | 936 |
937 void HTMLMediaElement::updateActiveTextTrackCues(double movieTime) | 937 void HTMLMediaElement::updateActiveTextTrackCues(double movieTime) |
938 { | 938 { |
939 LOG(Media, "HTMLMediaElement::updateActiveTextTracks"); | 939 LOG(Media, "HTMLMediaElement::updateActiveTextTrackCues"); |
940 | 940 |
941 // 4.8.10.8 Playing the media resource | 941 // 4.8.10.8 Playing the media resource |
942 | 942 |
943 // If the current playback position changes while the steps are running, | 943 // If the current playback position changes while the steps are running, |
944 // then the user agent must wait for the steps to complete, and then must | 944 // then the user agent must wait for the steps to complete, and then must |
945 // immediately rerun the steps. | 945 // immediately rerun the steps. |
946 if (ignoreTrackDisplayUpdateRequests()) | 946 if (ignoreTrackDisplayUpdateRequests()) |
947 return; | 947 return; |
948 | 948 |
949 // 1 - Let current cues be a list of cues, initialized to contain all the | 949 // 1 - Let current cues be a list of cues, initialized to contain all the |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1145 | 1145 |
1146 m_asyncEventQueue->enqueueEvent(event.release()); | 1146 m_asyncEventQueue->enqueueEvent(event.release()); |
1147 | 1147 |
1148 // ... if the text track has a corresponding track element, to then fire
a | 1148 // ... if the text track has a corresponding track element, to then fire
a |
1149 // simple event named cuechange at the track element as well. | 1149 // simple event named cuechange at the track element as well. |
1150 if (affectedTracks[i]->trackType() == TextTrack::TrackElement) { | 1150 if (affectedTracks[i]->trackType() == TextTrack::TrackElement) { |
1151 RefPtr<Event> event = Event::create(eventNames().cuechangeEvent, fal
se, false); | 1151 RefPtr<Event> event = Event::create(eventNames().cuechangeEvent, fal
se, false); |
1152 HTMLTrackElement* trackElement = static_cast<LoadableTextTrack*>(aff
ectedTracks[i])->trackElement(); | 1152 HTMLTrackElement* trackElement = static_cast<LoadableTextTrack*>(aff
ectedTracks[i])->trackElement(); |
1153 ASSERT(trackElement); | 1153 ASSERT(trackElement); |
1154 event->setTarget(trackElement); | 1154 event->setTarget(trackElement); |
1155 | 1155 |
1156 m_asyncEventQueue->enqueueEvent(event.release()); | 1156 m_asyncEventQueue->enqueueEvent(event.release()); |
1157 } | 1157 } |
1158 } | 1158 } |
1159 | 1159 |
1160 // 16 - Set the text track cue active flag of all the cues in the current | 1160 // 16 - Set the text track cue active flag of all the cues in the current |
1161 // cues, and unset the text track cue active flag of all the cues in the | 1161 // cues, and unset the text track cue active flag of all the cues in the |
1162 // other cues. | 1162 // other cues. |
1163 for (size_t i = 0; i < currentCuesSize; ++i) | 1163 for (size_t i = 0; i < currentCuesSize; ++i) |
1164 currentCues[i].data()->setIsActive(true); | 1164 currentCues[i].data()->setIsActive(true); |
1165 | 1165 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1225 if (track->mode() != TextTrack::disabledKeyword()) { | 1225 if (track->mode() != TextTrack::disabledKeyword()) { |
1226 if (trackElement->readyState() == HTMLTrackElement::LOADED) | 1226 if (trackElement->readyState() == HTMLTrackElement::LOADED) |
1227 textTrackAddCues(track, track->cues()); | 1227 textTrackAddCues(track, track->cues()); |
1228 | 1228 |
1229 // If this is the first added track, create the list of text tra
cks. | 1229 // If this is the first added track, create the list of text tra
cks. |
1230 if (!m_textTracks) | 1230 if (!m_textTracks) |
1231 m_textTracks = TextTrackList::create(this, ActiveDOMObject::sc
riptExecutionContext()); | 1231 m_textTracks = TextTrackList::create(this, ActiveDOMObject::sc
riptExecutionContext()); |
1232 } | 1232 } |
1233 break; | 1233 break; |
1234 } | 1234 } |
1235 } | 1235 } else if (track->trackType() == TextTrack::AddTrack && track->mode() != Tex
tTrack::disabledKeyword()) |
| 1236 textTrackAddCues(track, track->cues()); |
1236 | 1237 |
1237 #if USE(PLATFORM_TEXT_TRACK_MENU) | 1238 #if USE(PLATFORM_TEXT_TRACK_MENU) |
1238 if (platformTextTrackMenu()) | 1239 if (platformTextTrackMenu()) |
1239 platformTextTrackMenu()->trackWasSelected(track->platformTextTrack()); | 1240 platformTextTrackMenu()->trackWasSelected(track->platformTextTrack()); |
1240 #endif | 1241 #endif |
1241 | 1242 |
1242 configureTextTrackDisplay(); | 1243 configureTextTrackDisplay(); |
1243 updateActiveTextTrackCues(currentTime()); | 1244 updateActiveTextTrackCues(currentTime()); |
1244 } | 1245 } |
1245 | 1246 |
1246 void HTMLMediaElement::textTrackKindChanged(TextTrack* track) | 1247 void HTMLMediaElement::textTrackKindChanged(TextTrack* track) |
1247 { | 1248 { |
1248 if (track->kind() != TextTrack::captionsKeyword() && track->kind() != TextTr
ack::subtitlesKeyword() && track->mode() == TextTrack::showingKeyword()) | 1249 if (track->kind() != TextTrack::captionsKeyword() && track->kind() != TextTr
ack::subtitlesKeyword() && track->mode() == TextTrack::showingKeyword()) |
1249 track->setMode(TextTrack::hiddenKeyword()); | 1250 track->setMode(TextTrack::hiddenKeyword()); |
1250 } | 1251 } |
1251 | 1252 |
1252 void HTMLMediaElement::beginIgnoringTrackDisplayUpdateRequests() | 1253 void HTMLMediaElement::beginIgnoringTrackDisplayUpdateRequests() |
1253 { | 1254 { |
1254 ++m_ignoreTrackDisplayUpdate; | 1255 ++m_ignoreTrackDisplayUpdate; |
1255 } | 1256 } |
1256 | 1257 |
1257 void HTMLMediaElement::endIgnoringTrackDisplayUpdateRequests() | 1258 void HTMLMediaElement::endIgnoringTrackDisplayUpdateRequests() |
1258 { | 1259 { |
1259 ASSERT(m_ignoreTrackDisplayUpdate); | 1260 ASSERT(m_ignoreTrackDisplayUpdate); |
1260 --m_ignoreTrackDisplayUpdate; | 1261 --m_ignoreTrackDisplayUpdate; |
1261 if (!m_ignoreTrackDisplayUpdate && m_inActiveDocument) | 1262 if (!m_ignoreTrackDisplayUpdate && m_inActiveDocument) |
1262 updateActiveTextTrackCues(currentTime()); | 1263 updateActiveTextTrackCues(currentTime()); |
1263 } | 1264 } |
1264 | 1265 |
1265 void HTMLMediaElement::textTrackAddCues(TextTrack*, const TextTrackCueList* cues
) | 1266 void HTMLMediaElement::textTrackAddCues(TextTrack*, const TextTrackCueList* cues
) |
1266 { | 1267 { |
| 1268 LOG(Media, "HTMLMediaElement::textTrackAddCues"); |
| 1269 |
1267 TrackDisplayUpdateScope scope(this); | 1270 TrackDisplayUpdateScope scope(this); |
1268 for (size_t i = 0; i < cues->length(); ++i) | 1271 for (size_t i = 0; i < cues->length(); ++i) |
1269 textTrackAddCue(cues->item(i)->track(), cues->item(i)); | 1272 textTrackAddCue(cues->item(i)->track(), cues->item(i)); |
1270 } | 1273 } |
1271 | 1274 |
1272 void HTMLMediaElement::textTrackRemoveCues(TextTrack*, const TextTrackCueList* c
ues) | 1275 void HTMLMediaElement::textTrackRemoveCues(TextTrack*, const TextTrackCueList* c
ues) |
1273 { | 1276 { |
| 1277 LOG(Media, "HTMLMediaElement::textTrackRemoveCues"); |
| 1278 |
1274 TrackDisplayUpdateScope scope(this); | 1279 TrackDisplayUpdateScope scope(this); |
1275 for (size_t i = 0; i < cues->length(); ++i) | 1280 for (size_t i = 0; i < cues->length(); ++i) |
1276 textTrackRemoveCue(cues->item(i)->track(), cues->item(i)); | 1281 textTrackRemoveCue(cues->item(i)->track(), cues->item(i)); |
1277 } | 1282 } |
1278 | 1283 |
1279 void HTMLMediaElement::textTrackAddCue(TextTrack*, PassRefPtr<TextTrackCue> cue) | 1284 void HTMLMediaElement::textTrackAddCue(TextTrack*, PassRefPtr<TextTrackCue> cue) |
1280 { | 1285 { |
1281 // Negative duration cues need be treated in the interval tree as | 1286 // Negative duration cues need be treated in the interval tree as |
1282 // zero-length cues. | 1287 // zero-length cues. |
1283 double endTime = max(cue->startTime(), cue->endTime()); | 1288 double endTime = max(cue->startTime(), cue->endTime()); |
1284 | 1289 |
1285 CueInterval interval = m_cueTree.createInterval(cue->startTime(), endTime, c
ue.get()); | 1290 CueInterval interval = m_cueTree.createInterval(cue->startTime(), endTime, c
ue.get()); |
1286 if (!m_cueTree.contains(interval)) | 1291 if (!m_cueTree.contains(interval)) |
1287 m_cueTree.add(interval); | 1292 m_cueTree.add(interval); |
1288 updateActiveTextTrackCues(currentTime()); | 1293 updateActiveTextTrackCues(currentTime()); |
1289 } | 1294 } |
1290 | 1295 |
1291 void HTMLMediaElement::textTrackRemoveCue(TextTrack*, PassRefPtr<TextTrackCue> c
ue) | 1296 void HTMLMediaElement::textTrackRemoveCue(TextTrack*, PassRefPtr<TextTrackCue> c
ue) |
1292 { | 1297 { |
1293 // Negative duration cues need to be treated in the interval tree as | 1298 // Negative duration cues need to be treated in the interval tree as |
1294 // zero-length cues. | 1299 // zero-length cues. |
1295 double endTime = max(cue->startTime(), cue->endTime()); | 1300 double endTime = max(cue->startTime(), cue->endTime()); |
1296 | 1301 |
1297 CueInterval interval = m_cueTree.createInterval(cue->startTime(), endTime, c
ue.get()); | 1302 CueInterval interval = m_cueTree.createInterval(cue->startTime(), endTime, c
ue.get()); |
1298 m_cueTree.remove(interval); | 1303 m_cueTree.remove(interval); |
1299 | 1304 |
1300 size_t index = m_currentlyActiveCues.find(interval); | 1305 size_t index = m_currentlyActiveCues.find(interval); |
1301 if (index != notFound) | 1306 if (index != notFound) { |
1302 m_currentlyActiveCues.remove(index); | 1307 m_currentlyActiveCues.remove(index); |
| 1308 cue->setIsActive(false); |
| 1309 } |
1303 | 1310 |
1304 cue->removeDisplayTree(); | 1311 cue->removeDisplayTree(); |
1305 updateActiveTextTrackCues(currentTime()); | 1312 updateActiveTextTrackCues(currentTime()); |
1306 } | 1313 } |
1307 | 1314 |
1308 | 1315 |
1309 bool HTMLMediaElement::isSafeToLoadURL(const KURL& url, InvalidURLAction actionI
fInvalid) | 1316 bool HTMLMediaElement::isSafeToLoadURL(const KURL& url, InvalidURLAction actionI
fInvalid) |
1310 { | 1317 { |
1311 if (!url.isValid()) { | 1318 if (!url.isValid()) { |
1312 LOG(Media, "HTMLMediaElement::isSafeToLoadURL(%s) -> FALSE because url i
s invalid", urlForLoggingMedia(url).utf8().data()); | 1319 LOG(Media, "HTMLMediaElement::isSafeToLoadURL(%s) -> FALSE because url i
s invalid", urlForLoggingMedia(url).utf8().data()); |
(...skipping 1539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2852 return false; | 2859 return false; |
2853 | 2860 |
2854 CaptionUserPreferences* captionPreferences = page->group().captionPreference
s(); | 2861 CaptionUserPreferences* captionPreferences = page->group().captionPreference
s(); |
2855 return captionPreferences->userHasCaptionPreferences() && captionPreferences
->shouldShowCaptions(); | 2862 return captionPreferences->userHasCaptionPreferences() && captionPreferences
->shouldShowCaptions(); |
2856 } | 2863 } |
2857 | 2864 |
2858 void HTMLMediaElement::configureTextTrackGroup(const TrackGroup& group) | 2865 void HTMLMediaElement::configureTextTrackGroup(const TrackGroup& group) |
2859 { | 2866 { |
2860 ASSERT(group.tracks.size()); | 2867 ASSERT(group.tracks.size()); |
2861 | 2868 |
| 2869 LOG(Media, "HTMLMediaElement::configureTextTrackGroup(%d)", group.kind); |
| 2870 |
2862 Page* page = document()->page(); | 2871 Page* page = document()->page(); |
2863 CaptionUserPreferences* captionPreferences = page? page->group().captionPref
erences() : 0; | 2872 CaptionUserPreferences* captionPreferences = page? page->group().captionPref
erences() : 0; |
2864 | 2873 |
2865 // First, find the track in the group that should be enabled (if any). | 2874 // First, find the track in the group that should be enabled (if any). |
2866 Vector<RefPtr<TextTrack> > currentlyEnabledTracks; | 2875 Vector<RefPtr<TextTrack> > currentlyEnabledTracks; |
2867 RefPtr<TextTrack> trackToEnable; | 2876 RefPtr<TextTrack> trackToEnable; |
2868 RefPtr<TextTrack> defaultTrack; | 2877 RefPtr<TextTrack> defaultTrack; |
2869 RefPtr<TextTrack> fallbackTrack; | 2878 RefPtr<TextTrack> fallbackTrack; |
2870 int highestTrackScore = 0; | 2879 int highestTrackScore = 0; |
2871 for (size_t i = 0; i < group.tracks.size(); ++i) { | 2880 for (size_t i = 0; i < group.tracks.size(); ++i) { |
(...skipping 28 matching lines...) Expand all Loading... |
2900 // Let the text track mode be showing by default. | 2909 // Let the text track mode be showing by default. |
2901 defaultTrack = textTrack; | 2910 defaultTrack = textTrack; |
2902 } | 2911 } |
2903 } | 2912 } |
2904 | 2913 |
2905 if (!trackToEnable && defaultTrack) | 2914 if (!trackToEnable && defaultTrack) |
2906 trackToEnable = defaultTrack; | 2915 trackToEnable = defaultTrack; |
2907 | 2916 |
2908 // If no track matches the user's preferred language and non was marked 'def
ault', enable the first track | 2917 // If no track matches the user's preferred language and non was marked 'def
ault', enable the first track |
2909 // because the user has explicitly stated a preference for this kind of trac
k. | 2918 // because the user has explicitly stated a preference for this kind of trac
k. |
| 2919 if (!fallbackTrack && m_closedCaptionsVisible && group.kind == TrackGroup::C
aptionsAndSubtitles) |
| 2920 fallbackTrack = group.tracks[0]; |
| 2921 |
2910 if (!trackToEnable && fallbackTrack) | 2922 if (!trackToEnable && fallbackTrack) |
2911 trackToEnable = fallbackTrack; | 2923 trackToEnable = fallbackTrack; |
2912 | 2924 |
2913 if (currentlyEnabledTracks.size()) { | 2925 if (currentlyEnabledTracks.size()) { |
2914 for (size_t i = 0; i < currentlyEnabledTracks.size(); ++i) { | 2926 for (size_t i = 0; i < currentlyEnabledTracks.size(); ++i) { |
2915 RefPtr<TextTrack> textTrack = currentlyEnabledTracks[i]; | 2927 RefPtr<TextTrack> textTrack = currentlyEnabledTracks[i]; |
2916 if (textTrack != trackToEnable) | 2928 if (textTrack != trackToEnable) |
2917 textTrack->setMode(TextTrack::disabledKeyword()); | 2929 textTrack->setMode(TextTrack::disabledKeyword()); |
2918 } | 2930 } |
2919 } | 2931 } |
2920 | 2932 |
2921 if (trackToEnable) | 2933 if (trackToEnable) |
2922 trackToEnable->setMode(TextTrack::showingKeyword()); | 2934 trackToEnable->setMode(TextTrack::showingKeyword()); |
2923 | |
2924 m_processingPreferenceChange = false; | |
2925 } | 2935 } |
2926 | 2936 |
2927 void HTMLMediaElement::setSelectedTextTrack(TextTrack* trackToSelect) | 2937 void HTMLMediaElement::setSelectedTextTrack(TextTrack* trackToSelect) |
2928 { | 2938 { |
2929 TextTrackList* trackList = textTracks(); | 2939 TextTrackList* trackList = textTracks(); |
2930 if (!trackList || !trackList->length()) | 2940 if (!trackList || !trackList->length()) |
2931 return; | 2941 return; |
2932 if (trackToSelect && !trackList->contains(trackToSelect)) | 2942 if (trackToSelect && !trackList->contains(trackToSelect)) |
2933 return; | 2943 return; |
2934 | 2944 |
(...skipping 940 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3875 return false; | 3885 return false; |
3876 } | 3886 } |
3877 | 3887 |
3878 bool HTMLMediaElement::closedCaptionsVisible() const | 3888 bool HTMLMediaElement::closedCaptionsVisible() const |
3879 { | 3889 { |
3880 return m_closedCaptionsVisible; | 3890 return m_closedCaptionsVisible; |
3881 } | 3891 } |
3882 | 3892 |
3883 void HTMLMediaElement::updateTextTrackDisplay() | 3893 void HTMLMediaElement::updateTextTrackDisplay() |
3884 { | 3894 { |
| 3895 LOG(Media, "HTMLMediaElement::updateTextTrackDisplay"); |
| 3896 |
3885 if (!hasMediaControls() && !createMediaControls()) | 3897 if (!hasMediaControls() && !createMediaControls()) |
3886 return; | 3898 return; |
3887 | 3899 |
3888 mediaControls()->updateTextTrackDisplay(); | 3900 mediaControls()->updateTextTrackDisplay(); |
3889 } | 3901 } |
3890 | 3902 |
3891 void HTMLMediaElement::setClosedCaptionsVisible(bool closedCaptionVisible) | 3903 void HTMLMediaElement::setClosedCaptionsVisible(bool closedCaptionVisible) |
3892 { | 3904 { |
3893 LOG(Media, "HTMLMediaElement::setClosedCaptionsVisible(%s)", boolString(clos
edCaptionVisible)); | 3905 LOG(Media, "HTMLMediaElement::setClosedCaptionsVisible(%s)", boolString(clos
edCaptionVisible)); |
3894 | 3906 |
3895 if (!m_player || !hasClosedCaptions()) | 3907 if (!m_player || !hasClosedCaptions()) |
3896 return; | 3908 return; |
3897 | 3909 |
3898 m_closedCaptionsVisible = closedCaptionVisible; | 3910 m_closedCaptionsVisible = closedCaptionVisible; |
3899 m_player->setClosedCaptionsVisible(closedCaptionVisible); | 3911 m_player->setClosedCaptionsVisible(closedCaptionVisible); |
3900 | 3912 |
3901 if (RuntimeEnabledFeatures::webkitVideoTrackEnabled()) { | 3913 if (RuntimeEnabledFeatures::webkitVideoTrackEnabled()) { |
3902 m_processingPreferenceChange = true; | 3914 m_processingPreferenceChange = true; |
3903 markCaptionAndSubtitleTracksAsUnconfigured(); | 3915 markCaptionAndSubtitleTracksAsUnconfigured(); |
| 3916 m_processingPreferenceChange = false; |
| 3917 |
3904 updateTextTrackDisplay(); | 3918 updateTextTrackDisplay(); |
3905 } | 3919 } |
3906 } | 3920 } |
3907 | 3921 |
3908 void HTMLMediaElement::setWebkitClosedCaptionsVisible(bool visible) | 3922 void HTMLMediaElement::setWebkitClosedCaptionsVisible(bool visible) |
3909 { | 3923 { |
3910 setClosedCaptionsVisible(visible); | 3924 setClosedCaptionsVisible(visible); |
3911 } | 3925 } |
3912 | 3926 |
3913 bool HTMLMediaElement::webkitClosedCaptionsVisible() const | 3927 bool HTMLMediaElement::webkitClosedCaptionsVisible() const |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4032 | 4046 |
4033 if (!hasMediaControls() && !createMediaControls()) | 4047 if (!hasMediaControls() && !createMediaControls()) |
4034 return; | 4048 return; |
4035 | 4049 |
4036 mediaControls()->show(); | 4050 mediaControls()->show(); |
4037 } | 4051 } |
4038 | 4052 |
4039 void HTMLMediaElement::configureTextTrackDisplay() | 4053 void HTMLMediaElement::configureTextTrackDisplay() |
4040 { | 4054 { |
4041 ASSERT(m_textTracks); | 4055 ASSERT(m_textTracks); |
| 4056 LOG(Media, "HTMLMediaElement::configureTextTrackDisplay"); |
4042 | 4057 |
4043 if (m_processingPreferenceChange) | 4058 if (m_processingPreferenceChange) |
4044 return; | 4059 return; |
4045 | 4060 |
4046 bool haveVisibleTextTrack = false; | 4061 bool haveVisibleTextTrack = false; |
4047 for (unsigned i = 0; i < m_textTracks->length(); ++i) { | 4062 for (unsigned i = 0; i < m_textTracks->length(); ++i) { |
4048 if (m_textTracks->item(i)->mode() == TextTrack::showingKeyword()) { | 4063 if (m_textTracks->item(i)->mode() == TextTrack::showingKeyword()) { |
4049 haveVisibleTextTrack = true; | 4064 haveVisibleTextTrack = true; |
4050 break; | 4065 break; |
4051 } | 4066 } |
4052 } | 4067 } |
4053 | 4068 |
4054 if (m_haveVisibleTextTrack == haveVisibleTextTrack) | 4069 if (m_haveVisibleTextTrack == haveVisibleTextTrack) |
4055 return; | 4070 return; |
4056 m_haveVisibleTextTrack = haveVisibleTextTrack; | 4071 m_haveVisibleTextTrack = haveVisibleTextTrack; |
4057 m_closedCaptionsVisible = m_haveVisibleTextTrack; | 4072 m_closedCaptionsVisible = m_haveVisibleTextTrack; |
4058 | 4073 |
4059 if (!m_haveVisibleTextTrack && !hasMediaControls()) | 4074 if (!m_haveVisibleTextTrack && !hasMediaControls()) |
4060 return; | 4075 return; |
4061 if (!hasMediaControls() && !createMediaControls()) | 4076 if (!hasMediaControls() && !createMediaControls()) |
4062 return; | 4077 return; |
4063 | 4078 |
4064 mediaControls()->changedClosedCaptionsVisibility(); | 4079 mediaControls()->changedClosedCaptionsVisibility(); |
4065 | 4080 |
4066 if (RuntimeEnabledFeatures::webkitVideoTrackEnabled()) | 4081 if (RuntimeEnabledFeatures::webkitVideoTrackEnabled()) |
4067 updateTextTrackDisplay(); | 4082 updateTextTrackDisplay(); |
4068 } | 4083 } |
4069 | 4084 |
4070 void HTMLMediaElement::captionPreferencesChanged() | 4085 void HTMLMediaElement::captionPreferencesChanged() |
4071 { | 4086 { |
4072 if (!isVideo()) | 4087 if (!isVideo()) |
4073 return; | 4088 return; |
4074 | 4089 |
4075 if (hasMediaControls()) | 4090 if (hasMediaControls()) |
4076 mediaControls()->textTrackPreferencesChanged(); | 4091 mediaControls()->textTrackPreferencesChanged(); |
4077 | 4092 |
4078 setClosedCaptionsVisible(userPrefersCaptions()); | 4093 setClosedCaptionsVisible(userPrefersCaptions()); |
4079 } | 4094 } |
4080 | 4095 |
4081 void HTMLMediaElement::markCaptionAndSubtitleTracksAsUnconfigured() | 4096 void HTMLMediaElement::markCaptionAndSubtitleTracksAsUnconfigured() |
4082 { | 4097 { |
4083 if (!m_textTracks) | 4098 if (!m_textTracks) |
4084 return; | 4099 return; |
4085 | 4100 |
4086 // Mark all tracks as not "configured" so that configureTextTracks() | 4101 // Mark all tracks as not "configured" so that configureTextTracks() |
4087 // will reconsider which tracks to display in light of new user preferences | 4102 // will reconsider which tracks to display in light of new user preferences |
4088 // (e.g. default tracks should not be displayed if the user has turned off | 4103 // (e.g. default tracks should not be displayed if the user has turned off |
4089 // captions and non-default tracks should be displayed based on language | 4104 // captions and non-default tracks should be displayed based on language |
4090 // preferences if the user has turned captions on). | 4105 // preferences if the user has turned captions on). |
4091 for (unsigned i = 0; i < m_textTracks->length(); ++i) { | 4106 for (unsigned i = 0; i < m_textTracks->length(); ++i) { |
4092 | |
4093 RefPtr<TextTrack> textTrack = m_textTracks->item(i); | 4107 RefPtr<TextTrack> textTrack = m_textTracks->item(i); |
4094 String kind = textTrack->kind(); | 4108 String kind = textTrack->kind(); |
4095 | 4109 |
4096 if (kind == TextTrack::subtitlesKeyword() || kind == TextTrack::captions
Keyword()) | 4110 if (kind == TextTrack::subtitlesKeyword() || kind == TextTrack::captions
Keyword()) |
4097 textTrack->setHasBeenConfigured(false); | 4111 textTrack->setHasBeenConfigured(false); |
4098 } | 4112 } |
4099 configureTextTracks(); | 4113 configureTextTracks(); |
4100 } | 4114 } |
4101 | 4115 |
4102 | 4116 |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4438 info.addMember(m_mediaController, "mediaController"); | 4452 info.addMember(m_mediaController, "mediaController"); |
4439 | 4453 |
4440 #if ENABLE(WEB_AUDIO) | 4454 #if ENABLE(WEB_AUDIO) |
4441 info.addMember(m_audioSourceNode, "audioSourceNode"); | 4455 info.addMember(m_audioSourceNode, "audioSourceNode"); |
4442 #endif | 4456 #endif |
4443 | 4457 |
4444 } | 4458 } |
4445 | 4459 |
4446 } | 4460 } |
4447 #endif | 4461 #endif |
OLD | NEW |