Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(309)

Side by Side Diff: third_party/WebKit/Source/core/html/shadow/MediaControls.cpp

Issue 1079323002: Support text track selection in video controls (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed UX comment on displaying icons only for duplicate labels and rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved.
3 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. 3 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 , m_overlayCastButton(nullptr) 106 , m_overlayCastButton(nullptr)
107 , m_enclosure(nullptr) 107 , m_enclosure(nullptr)
108 , m_panel(nullptr) 108 , m_panel(nullptr)
109 , m_playButton(nullptr) 109 , m_playButton(nullptr)
110 , m_timeline(nullptr) 110 , m_timeline(nullptr)
111 , m_currentTimeDisplay(nullptr) 111 , m_currentTimeDisplay(nullptr)
112 , m_durationDisplay(nullptr) 112 , m_durationDisplay(nullptr)
113 , m_muteButton(nullptr) 113 , m_muteButton(nullptr)
114 , m_volumeSlider(nullptr) 114 , m_volumeSlider(nullptr)
115 , m_toggleClosedCaptionsButton(nullptr) 115 , m_toggleClosedCaptionsButton(nullptr)
116 , m_textTrackList(nullptr)
116 , m_castButton(nullptr) 117 , m_castButton(nullptr)
117 , m_fullScreenButton(nullptr) 118 , m_fullScreenButton(nullptr)
118 , m_hideMediaControlsTimer(this, &MediaControls::hideMediaControlsTimerFired ) 119 , m_hideMediaControlsTimer(this, &MediaControls::hideMediaControlsTimerFired )
119 , m_hideTimerBehaviorFlags(IgnoreNone) 120 , m_hideTimerBehaviorFlags(IgnoreNone)
120 , m_isMouseOverControls(false) 121 , m_isMouseOverControls(false)
121 , m_isPausedForScrubbing(false) 122 , m_isPausedForScrubbing(false)
122 , m_panelWidthChangedTimer(this, &MediaControls::panelWidthChangedTimerFired ) 123 , m_panelWidthChangedTimer(this, &MediaControls::panelWidthChangedTimerFired )
123 , m_panelWidth(0) 124 , m_panelWidth(0)
124 , m_allowHiddenVolumeControls(RuntimeEnabledFeatures::newMediaPlaybackUiEnab led()) 125 , m_allowHiddenVolumeControls(RuntimeEnabledFeatures::newMediaPlaybackUiEnab led())
125 { 126 {
(...skipping 21 matching lines...) Expand all
147 // +-MediaControlTimelineElement (-webkit-media-controls-t imeline) 148 // +-MediaControlTimelineElement (-webkit-media-controls-t imeline)
148 // +-MediaControlCurrentTimeDisplayElement (-webkit-media-controls-c urrent-time-display) 149 // +-MediaControlCurrentTimeDisplayElement (-webkit-media-controls-c urrent-time-display)
149 // +-MediaControlTimeRemainingDisplayElement (-webkit-media-controls-t ime-remaining-display) 150 // +-MediaControlTimeRemainingDisplayElement (-webkit-media-controls-t ime-remaining-display)
150 // | {if RTE::newMediaPlaybackUi()} 151 // | {if RTE::newMediaPlaybackUi()}
151 // +-MediaControlTimelineElement (-webkit-media-controls-t imeline) 152 // +-MediaControlTimelineElement (-webkit-media-controls-t imeline)
152 // +-MediaControlMuteButtonElement (-webkit-media-controls-m ute-button) 153 // +-MediaControlMuteButtonElement (-webkit-media-controls-m ute-button)
153 // +-MediaControlVolumeSliderElement (-webkit-media-controls-v olume-slider) 154 // +-MediaControlVolumeSliderElement (-webkit-media-controls-v olume-slider)
154 // +-MediaControlToggleClosedCaptionsButtonElement (-webkit-media-controls-t oggle-closed-captions-button) 155 // +-MediaControlToggleClosedCaptionsButtonElement (-webkit-media-controls-t oggle-closed-captions-button)
155 // +-MediaControlCastButtonElement (-internal-media-controls -cast-button) 156 // +-MediaControlCastButtonElement (-internal-media-controls -cast-button)
156 // \-MediaControlFullscreenButtonElement (-webkit-media-controls-f ullscreen-button) 157 // \-MediaControlFullscreenButtonElement (-webkit-media-controls-f ullscreen-button)
158 // +-MediaControlTextTrackListElement (-internal-media-controls-t ext-track-list)
159 // | {for each renderable text track}
160 // \-MediaControlTextTrackListItem (-internal-media-controls-te xt-track-list-item)
161 // +-MediaControlTextTrackListItemInput (-internal-media-controls-te xt-track-list-item-input)
162 // +-MediaControlTextTrackListItemCaptions (-internal-media-controls-te xt-track-list-kind-captions)
163 // +-MediaControlTextTrackListItemSubtitles (-internal-media-controls-te xt-track-list-kind-subtitles)
157 void MediaControls::initializeControls() 164 void MediaControls::initializeControls()
158 { 165 {
159 const bool useNewUi = RuntimeEnabledFeatures::newMediaPlaybackUiEnabled(); 166 const bool useNewUi = RuntimeEnabledFeatures::newMediaPlaybackUiEnabled();
160 RawPtr<MediaControlOverlayEnclosureElement> overlayEnclosure = MediaControlO verlayEnclosureElement::create(*this); 167 RawPtr<MediaControlOverlayEnclosureElement> overlayEnclosure = MediaControlO verlayEnclosureElement::create(*this);
161 168
162 if (document().settings() && document().settings()->mediaControlsOverlayPlay ButtonEnabled()) { 169 if (document().settings() && document().settings()->mediaControlsOverlayPlay ButtonEnabled()) {
163 RawPtr<MediaControlOverlayPlayButtonElement> overlayPlayButton = MediaCo ntrolOverlayPlayButtonElement::create(*this); 170 RawPtr<MediaControlOverlayPlayButtonElement> overlayPlayButton = MediaCo ntrolOverlayPlayButtonElement::create(*this);
164 m_overlayPlayButton = overlayPlayButton.get(); 171 m_overlayPlayButton = overlayPlayButton.get();
165 overlayEnclosure->appendChild(overlayPlayButton.release()); 172 overlayEnclosure->appendChild(overlayPlayButton.release());
166 } 173 }
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 228
222 RawPtr<MediaControlFullscreenButtonElement> fullscreenButton = MediaControlF ullscreenButtonElement::create(*this); 229 RawPtr<MediaControlFullscreenButtonElement> fullscreenButton = MediaControlF ullscreenButtonElement::create(*this);
223 m_fullScreenButton = fullscreenButton.get(); 230 m_fullScreenButton = fullscreenButton.get();
224 panel->appendChild(fullscreenButton.release()); 231 panel->appendChild(fullscreenButton.release());
225 232
226 m_panel = panel.get(); 233 m_panel = panel.get();
227 enclosure->appendChild(panel.release()); 234 enclosure->appendChild(panel.release());
228 235
229 m_enclosure = enclosure.get(); 236 m_enclosure = enclosure.get();
230 appendChild(enclosure.release()); 237 appendChild(enclosure.release());
238
239 RawPtr<MediaControlTextTrackListElement> textTrackList = MediaControlTextTra ckListElement::create(*this);
240 m_textTrackList = textTrackList.get();
241 appendChild(textTrackList.release());
231 } 242 }
232 243
233 void MediaControls::reset() 244 void MediaControls::reset()
234 { 245 {
235 EventDispatchForbiddenScope::AllowUserAgentEvents allowEventsInShadow; 246 EventDispatchForbiddenScope::AllowUserAgentEvents allowEventsInShadow;
236 const bool useNewUi = RuntimeEnabledFeatures::newMediaPlaybackUiEnabled(); 247 const bool useNewUi = RuntimeEnabledFeatures::newMediaPlaybackUiEnabled();
237 BatchedControlUpdate batch(this); 248 BatchedControlUpdate batch(this);
238 249
239 m_allowHiddenVolumeControls = useNewUi; 250 m_allowHiddenVolumeControls = useNewUi;
240 251
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 // Don't hide if the mouse is over the video area. 335 // Don't hide if the mouse is over the video area.
325 const bool ignoreVideoHover = behaviorFlags & IgnoreVideoHover; 336 const bool ignoreVideoHover = behaviorFlags & IgnoreVideoHover;
326 if (!ignoreVideoHover && m_isMouseOverControls) 337 if (!ignoreVideoHover && m_isMouseOverControls)
327 return false; 338 return false;
328 // Don't hide if focus is on the HTMLMediaElement or within the 339 // Don't hide if focus is on the HTMLMediaElement or within the
329 // controls/shadow tree. (Perform the checks separately to avoid going 340 // controls/shadow tree. (Perform the checks separately to avoid going
330 // through all the potential ancestor hosts for the focused element.) 341 // through all the potential ancestor hosts for the focused element.)
331 const bool ignoreFocus = behaviorFlags & IgnoreFocus; 342 const bool ignoreFocus = behaviorFlags & IgnoreFocus;
332 if (!ignoreFocus && (mediaElement().focused() || contains(document().focused Element()))) 343 if (!ignoreFocus && (mediaElement().focused() || contains(document().focused Element())))
333 return false; 344 return false;
345 // Don't hide the media controls when the text track list is showing.
346 if (m_textTrackList->isWanted())
347 return false;
334 return true; 348 return true;
335 } 349 }
336 350
337 void MediaControls::playbackStarted() 351 void MediaControls::playbackStarted()
338 { 352 {
339 BatchedControlUpdate batch(this); 353 BatchedControlUpdate batch(this);
340 354
341 if (!RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) { 355 if (!RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) {
342 m_currentTimeDisplay->setIsWanted(true); 356 m_currentTimeDisplay->setIsWanted(true);
343 m_durationDisplay->setIsWanted(false); 357 m_durationDisplay->setIsWanted(false);
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 { 464 {
451 m_toggleClosedCaptionsButton->updateDisplayType(); 465 m_toggleClosedCaptionsButton->updateDisplayType();
452 } 466 }
453 467
454 void MediaControls::refreshClosedCaptionsButtonVisibility() 468 void MediaControls::refreshClosedCaptionsButtonVisibility()
455 { 469 {
456 m_toggleClosedCaptionsButton->setIsWanted(mediaElement().hasClosedCaptions() ); 470 m_toggleClosedCaptionsButton->setIsWanted(mediaElement().hasClosedCaptions() );
457 BatchedControlUpdate batch(this); 471 BatchedControlUpdate batch(this);
458 } 472 }
459 473
474 void MediaControls::toggleTextTrackList()
475 {
476 if (!mediaElement().hasClosedCaptions()) {
477 m_textTrackList->setVisible(false);
478 return;
479 }
480
481 m_textTrackList->setVisible(!m_textTrackList->isWanted());
482 }
483
460 void MediaControls::refreshCastButtonVisibility() 484 void MediaControls::refreshCastButtonVisibility()
461 { 485 {
462 refreshCastButtonVisibilityWithoutUpdate(); 486 refreshCastButtonVisibilityWithoutUpdate();
463 BatchedControlUpdate batch(this); 487 BatchedControlUpdate batch(this);
464 } 488 }
465 489
466 void MediaControls::refreshCastButtonVisibilityWithoutUpdate() 490 void MediaControls::refreshCastButtonVisibilityWithoutUpdate()
467 { 491 {
468 if (!shouldShowCastButton(mediaElement())) { 492 if (!shouldShowCastButton(mediaElement())) {
469 m_castButton->setIsWanted(false); 493 m_castButton->setIsWanted(false);
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
749 visitor->trace(m_overlayEnclosure); 773 visitor->trace(m_overlayEnclosure);
750 visitor->trace(m_playButton); 774 visitor->trace(m_playButton);
751 visitor->trace(m_currentTimeDisplay); 775 visitor->trace(m_currentTimeDisplay);
752 visitor->trace(m_timeline); 776 visitor->trace(m_timeline);
753 visitor->trace(m_muteButton); 777 visitor->trace(m_muteButton);
754 visitor->trace(m_volumeSlider); 778 visitor->trace(m_volumeSlider);
755 visitor->trace(m_toggleClosedCaptionsButton); 779 visitor->trace(m_toggleClosedCaptionsButton);
756 visitor->trace(m_fullScreenButton); 780 visitor->trace(m_fullScreenButton);
757 visitor->trace(m_durationDisplay); 781 visitor->trace(m_durationDisplay);
758 visitor->trace(m_enclosure); 782 visitor->trace(m_enclosure);
783 visitor->trace(m_textTrackList);
759 visitor->trace(m_castButton); 784 visitor->trace(m_castButton);
760 visitor->trace(m_overlayCastButton); 785 visitor->trace(m_overlayCastButton);
761 HTMLDivElement::trace(visitor); 786 HTMLDivElement::trace(visitor);
762 } 787 }
763 788
764 } // namespace blink 789 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698