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

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

Issue 291163004: Implement media cast buttons (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Tidy up button name Created 6 years, 4 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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 , m_textDisplayContainer(nullptr) 47 , m_textDisplayContainer(nullptr)
48 , m_overlayPlayButton(nullptr) 48 , m_overlayPlayButton(nullptr)
49 , m_overlayEnclosure(nullptr) 49 , m_overlayEnclosure(nullptr)
50 , m_playButton(nullptr) 50 , m_playButton(nullptr)
51 , m_currentTimeDisplay(nullptr) 51 , m_currentTimeDisplay(nullptr)
52 , m_timeline(nullptr) 52 , m_timeline(nullptr)
53 , m_muteButton(nullptr) 53 , m_muteButton(nullptr)
54 , m_volumeSlider(nullptr) 54 , m_volumeSlider(nullptr)
55 , m_toggleClosedCaptionsButton(nullptr) 55 , m_toggleClosedCaptionsButton(nullptr)
56 , m_fullScreenButton(nullptr) 56 , m_fullScreenButton(nullptr)
57 , m_castButton(nullptr)
58 , m_overlayCastButton(nullptr)
57 , m_durationDisplay(nullptr) 59 , m_durationDisplay(nullptr)
58 , m_enclosure(nullptr) 60 , m_enclosure(nullptr)
59 , m_hideMediaControlsTimer(this, &MediaControls::hideMediaControlsTimerFired ) 61 , m_hideMediaControlsTimer(this, &MediaControls::hideMediaControlsTimerFired )
60 , m_isMouseOverControls(false) 62 , m_isMouseOverControls(false)
61 , m_isPausedForScrubbing(false) 63 , m_isPausedForScrubbing(false)
62 { 64 {
63 } 65 }
64 66
65 PassRefPtrWillBeRawPtr<MediaControls> MediaControls::create(HTMLMediaElement& me diaElement) 67 PassRefPtrWillBeRawPtr<MediaControls> MediaControls::create(HTMLMediaElement& me diaElement)
66 { 68 {
67 RefPtrWillBeRawPtr<MediaControls> controls = adoptRefWillBeNoop(new MediaCon trols(mediaElement)); 69 RefPtrWillBeRawPtr<MediaControls> controls = adoptRefWillBeNoop(new MediaCon trols(mediaElement));
68 70
69 if (controls->initializeControls()) 71 if (controls->initializeControls())
70 return controls.release(); 72 return controls.release();
71 73
72 return nullptr; 74 return nullptr;
73 } 75 }
74 76
75 bool MediaControls::initializeControls() 77 bool MediaControls::initializeControls()
76 { 78 {
77 TrackExceptionState exceptionState; 79 TrackExceptionState exceptionState;
78 80
81 RefPtrWillBeRawPtr<MediaControlOverlayEnclosureElement> overlayEnclosure = M ediaControlOverlayEnclosureElement::create(*this);
82
79 if (document().settings() && document().settings()->mediaControlsOverlayPlay ButtonEnabled()) { 83 if (document().settings() && document().settings()->mediaControlsOverlayPlay ButtonEnabled()) {
80 RefPtrWillBeRawPtr<MediaControlOverlayEnclosureElement> overlayEnclosure = MediaControlOverlayEnclosureElement::create(*this);
81 RefPtrWillBeRawPtr<MediaControlOverlayPlayButtonElement> overlayPlayButt on = MediaControlOverlayPlayButtonElement::create(*this); 84 RefPtrWillBeRawPtr<MediaControlOverlayPlayButtonElement> overlayPlayButt on = MediaControlOverlayPlayButtonElement::create(*this);
82 m_overlayPlayButton = overlayPlayButton.get(); 85 m_overlayPlayButton = overlayPlayButton.get();
83 overlayEnclosure->appendChild(overlayPlayButton.release(), exceptionStat e); 86 overlayEnclosure->appendChild(overlayPlayButton.release(), exceptionStat e);
84 if (exceptionState.hadException()) 87 if (exceptionState.hadException())
85 return false; 88 return false;
89 }
86 90
87 m_overlayEnclosure = overlayEnclosure.get(); 91 RefPtrWillBeRawPtr<MediaControlOverlayCastButtonElement> overlayCastButton = MediaControlOverlayCastButtonElement::create(*this);
88 appendChild(overlayEnclosure.release(), exceptionState); 92 m_overlayCastButton = overlayCastButton.get();
89 if (exceptionState.hadException()) 93 overlayEnclosure->appendChild(overlayCastButton.release(), exceptionState);
90 return false; 94 if (exceptionState.hadException())
91 } 95 return false;
96
97 m_overlayEnclosure = overlayEnclosure.get();
98 appendChild(overlayEnclosure.release(), exceptionState);
99 if (exceptionState.hadException())
100 return false;
92 101
93 // Create an enclosing element for the panel so we can visually offset the c ontrols correctly. 102 // Create an enclosing element for the panel so we can visually offset the c ontrols correctly.
94 RefPtrWillBeRawPtr<MediaControlPanelEnclosureElement> enclosure = MediaContr olPanelEnclosureElement::create(*this); 103 RefPtrWillBeRawPtr<MediaControlPanelEnclosureElement> enclosure = MediaContr olPanelEnclosureElement::create(*this);
95 104
96 RefPtrWillBeRawPtr<MediaControlPanelElement> panel = MediaControlPanelElemen t::create(*this); 105 RefPtrWillBeRawPtr<MediaControlPanelElement> panel = MediaControlPanelElemen t::create(*this);
97 106
98 RefPtrWillBeRawPtr<MediaControlPlayButtonElement> playButton = MediaControlP layButtonElement::create(*this); 107 RefPtrWillBeRawPtr<MediaControlPlayButtonElement> playButton = MediaControlP layButtonElement::create(*this);
99 m_playButton = playButton.get(); 108 m_playButton = playButton.get();
100 panel->appendChild(playButton.release(), exceptionState); 109 panel->appendChild(playButton.release(), exceptionState);
101 if (exceptionState.hadException()) 110 if (exceptionState.hadException())
(...skipping 29 matching lines...) Expand all
131 panel->appendChild(slider.release(), exceptionState); 140 panel->appendChild(slider.release(), exceptionState);
132 if (exceptionState.hadException()) 141 if (exceptionState.hadException())
133 return false; 142 return false;
134 143
135 RefPtrWillBeRawPtr<MediaControlToggleClosedCaptionsButtonElement> toggleClos edCaptionsButton = MediaControlToggleClosedCaptionsButtonElement::create(*this); 144 RefPtrWillBeRawPtr<MediaControlToggleClosedCaptionsButtonElement> toggleClos edCaptionsButton = MediaControlToggleClosedCaptionsButtonElement::create(*this);
136 m_toggleClosedCaptionsButton = toggleClosedCaptionsButton.get(); 145 m_toggleClosedCaptionsButton = toggleClosedCaptionsButton.get();
137 panel->appendChild(toggleClosedCaptionsButton.release(), exceptionState); 146 panel->appendChild(toggleClosedCaptionsButton.release(), exceptionState);
138 if (exceptionState.hadException()) 147 if (exceptionState.hadException())
139 return false; 148 return false;
140 149
150 RefPtrWillBeRawPtr<MediaControlCastButtonElement> castButton = MediaControlC astButtonElement::create(*this);
151 m_castButton = castButton.get();
152 panel->appendChild(castButton.release(), exceptionState);
153 if (exceptionState.hadException())
154 return false;
155
141 RefPtrWillBeRawPtr<MediaControlFullscreenButtonElement> fullscreenButton = M ediaControlFullscreenButtonElement::create(*this); 156 RefPtrWillBeRawPtr<MediaControlFullscreenButtonElement> fullscreenButton = M ediaControlFullscreenButtonElement::create(*this);
142 m_fullScreenButton = fullscreenButton.get(); 157 m_fullScreenButton = fullscreenButton.get();
143 panel->appendChild(fullscreenButton.release(), exceptionState); 158 panel->appendChild(fullscreenButton.release(), exceptionState);
144 if (exceptionState.hadException()) 159 if (exceptionState.hadException())
145 return false; 160 return false;
146 161
147 m_panel = panel.get(); 162 m_panel = panel.get();
148 enclosure->appendChild(panel.release(), exceptionState); 163 enclosure->appendChild(panel.release(), exceptionState);
149 if (exceptionState.hadException()) 164 if (exceptionState.hadException())
150 return false; 165 return false;
(...skipping 25 matching lines...) Expand all
176 m_volumeSlider->show(); 191 m_volumeSlider->show();
177 updateVolume(); 192 updateVolume();
178 193
179 refreshClosedCaptionsButtonVisibility(); 194 refreshClosedCaptionsButtonVisibility();
180 195
181 if (mediaElement().hasVideo()) 196 if (mediaElement().hasVideo())
182 m_fullScreenButton->show(); 197 m_fullScreenButton->show();
183 else 198 else
184 m_fullScreenButton->hide(); 199 m_fullScreenButton->hide();
185 200
201 refreshCastButtonVisibility();
186 makeOpaque(); 202 makeOpaque();
187 } 203 }
188 204
189 void MediaControls::show() 205 void MediaControls::show()
190 { 206 {
191 makeOpaque(); 207 makeOpaque();
192 m_panel->setIsDisplayed(true); 208 m_panel->setIsDisplayed(true);
193 m_panel->show(); 209 m_panel->show();
194 if (m_overlayPlayButton) 210 if (m_overlayPlayButton)
195 m_overlayPlayButton->updateDisplayType(); 211 m_overlayPlayButton->updateDisplayType();
196 } 212 }
197 213
198 void MediaControls::mediaElementFocused() 214 void MediaControls::mediaElementFocused()
199 { 215 {
200 show(); 216 if (mediaElement().shouldShowControls()) {
acolwell GONE FROM CHROMIUM 2014/08/05 19:36:34 This doesn't seem right. It feels like you are add
aberent 2014/08/22 14:08:34 Done.
217 show();
218 } else if (mediaElement().hasRemoteRoutes()) {
219 m_overlayCastButton->show();
220 }
221
201 stopHideMediaControlsTimer(); 222 stopHideMediaControlsTimer();
223 if (!mediaElement().paused())
224 startHideMediaControlsTimer();
202 } 225 }
203 226
204 void MediaControls::hide() 227 void MediaControls::hide()
205 { 228 {
206 m_panel->setIsDisplayed(false); 229 m_panel->setIsDisplayed(false);
207 m_panel->hide(); 230 m_panel->hide();
208 if (m_overlayPlayButton) 231 if (m_overlayPlayButton)
209 m_overlayPlayButton->hide(); 232 m_overlayPlayButton->hide();
210 } 233 }
211 234
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 m_toggleClosedCaptionsButton->show(); 357 m_toggleClosedCaptionsButton->show();
335 else 358 else
336 m_toggleClosedCaptionsButton->hide(); 359 m_toggleClosedCaptionsButton->hide();
337 } 360 }
338 361
339 void MediaControls::closedCaptionTracksChanged() 362 void MediaControls::closedCaptionTracksChanged()
340 { 363 {
341 refreshClosedCaptionsButtonVisibility(); 364 refreshClosedCaptionsButtonVisibility();
342 } 365 }
343 366
367 void MediaControls::refreshCastButtonVisibility()
368 {
369 if (mediaElement().hasRemoteRoutes()) {
370 if (!mediaElement().shouldShowControls() && !mediaElement().autoplay() & & mediaElement().paused()) {
acolwell GONE FROM CHROMIUM 2014/08/05 19:36:34 Why does autoplay() matter here?
aberent 2014/08/22 14:08:34 Some pages (e.g. vimeo.com) have an autoplay backg
371 m_overlayCastButton->show();
372 } else if (mediaElement().shouldShowControls()) {
373 m_overlayCastButton->hide();
374 m_castButton->show();
375 }
376 } else {
377 m_castButton->hide();
378 m_overlayCastButton->hide();
379 }
380 }
381
344 void MediaControls::enteredFullscreen() 382 void MediaControls::enteredFullscreen()
345 { 383 {
346 m_fullScreenButton->setIsFullscreen(true); 384 m_fullScreenButton->setIsFullscreen(true);
347 stopHideMediaControlsTimer(); 385 stopHideMediaControlsTimer();
348 startHideMediaControlsTimer(); 386 startHideMediaControlsTimer();
349 } 387 }
350 388
351 void MediaControls::exitedFullscreen() 389 void MediaControls::exitedFullscreen()
352 { 390 {
353 m_fullScreenButton->setIsFullscreen(false); 391 m_fullScreenButton->setIsFullscreen(false);
354 stopHideMediaControlsTimer(); 392 stopHideMediaControlsTimer();
355 startHideMediaControlsTimer(); 393 startHideMediaControlsTimer();
356 } 394 }
357 395
396 void MediaControls::startedCasting()
397 {
398 m_castButton->setIsCasting(true);
399 m_overlayCastButton->setIsCasting(true);
400 }
401
402 void MediaControls::stoppedCasting()
403 {
404 m_castButton->setIsCasting(false);
405 m_overlayCastButton->setIsCasting(false);
406 }
407
358 void MediaControls::defaultEventHandler(Event* event) 408 void MediaControls::defaultEventHandler(Event* event)
359 { 409 {
360 HTMLDivElement::defaultEventHandler(event); 410 HTMLDivElement::defaultEventHandler(event);
361 411
362 if (event->type() == EventTypeNames::mouseover) { 412 if (event->type() == EventTypeNames::mouseover) {
363 if (!containsRelatedTarget(event)) { 413 if (!containsRelatedTarget(event)) {
364 m_isMouseOverControls = true; 414 m_isMouseOverControls = true;
365 if (!mediaElement().togglePlayStateWillPlay()) { 415 if (!mediaElement().togglePlayStateWillPlay()) {
366 makeOpaque(); 416 makeOpaque();
367 if (shouldHideMediaControls()) 417 if (shouldHideMediaControls())
(...skipping 23 matching lines...) Expand all
391 441
392 void MediaControls::hideMediaControlsTimerFired(Timer<MediaControls>*) 442 void MediaControls::hideMediaControlsTimerFired(Timer<MediaControls>*)
393 { 443 {
394 if (mediaElement().togglePlayStateWillPlay()) 444 if (mediaElement().togglePlayStateWillPlay())
395 return; 445 return;
396 446
397 if (!shouldHideMediaControls(IgnoreFocus | IgnoreVideoHover)) 447 if (!shouldHideMediaControls(IgnoreFocus | IgnoreVideoHover))
398 return; 448 return;
399 449
400 makeTransparent(); 450 makeTransparent();
451 m_overlayCastButton->hide();
401 } 452 }
402 453
403 void MediaControls::startHideMediaControlsTimer() 454 void MediaControls::startHideMediaControlsTimer()
404 { 455 {
405 m_hideMediaControlsTimer.startOneShot(timeWithoutMouseMovementBeforeHidingMe diaControls, FROM_HERE); 456 m_hideMediaControlsTimer.startOneShot(timeWithoutMouseMovementBeforeHidingMe diaControls, FROM_HERE);
406 } 457 }
407 458
408 void MediaControls::stopHideMediaControlsTimer() 459 void MediaControls::stopHideMediaControlsTimer()
409 { 460 {
410 m_hideMediaControlsTimer.stop(); 461 m_hideMediaControlsTimer.stop();
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 visitor->trace(m_muteButton); 527 visitor->trace(m_muteButton);
477 visitor->trace(m_volumeSlider); 528 visitor->trace(m_volumeSlider);
478 visitor->trace(m_toggleClosedCaptionsButton); 529 visitor->trace(m_toggleClosedCaptionsButton);
479 visitor->trace(m_fullScreenButton); 530 visitor->trace(m_fullScreenButton);
480 visitor->trace(m_durationDisplay); 531 visitor->trace(m_durationDisplay);
481 visitor->trace(m_enclosure); 532 visitor->trace(m_enclosure);
482 HTMLDivElement::trace(visitor); 533 HTMLDivElement::trace(visitor);
483 } 534 }
484 535
485 } 536 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698