OLD | NEW |
---|---|
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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
52 , m_textDisplayContainer(nullptr) | 52 , m_textDisplayContainer(nullptr) |
53 , m_overlayPlayButton(nullptr) | 53 , m_overlayPlayButton(nullptr) |
54 , m_overlayEnclosure(nullptr) | 54 , m_overlayEnclosure(nullptr) |
55 , m_playButton(nullptr) | 55 , m_playButton(nullptr) |
56 , m_currentTimeDisplay(nullptr) | 56 , m_currentTimeDisplay(nullptr) |
57 , m_timeline(nullptr) | 57 , m_timeline(nullptr) |
58 , m_muteButton(nullptr) | 58 , m_muteButton(nullptr) |
59 , m_volumeSlider(nullptr) | 59 , m_volumeSlider(nullptr) |
60 , m_toggleClosedCaptionsButton(nullptr) | 60 , m_toggleClosedCaptionsButton(nullptr) |
61 , m_fullScreenButton(nullptr) | 61 , m_fullScreenButton(nullptr) |
62 , m_castButton(nullptr) | |
63 , m_overlayCastButton(nullptr) | |
62 , m_durationDisplay(nullptr) | 64 , m_durationDisplay(nullptr) |
63 , m_enclosure(nullptr) | 65 , m_enclosure(nullptr) |
64 , m_hideMediaControlsTimer(this, &MediaControls::hideMediaControlsTimerFired ) | 66 , m_hideMediaControlsTimer(this, &MediaControls::hideMediaControlsTimerFired ) |
65 , m_isMouseOverControls(false) | 67 , m_isMouseOverControls(false) |
66 , m_isPausedForScrubbing(false) | 68 , m_isPausedForScrubbing(false) |
67 , m_wasLastEventTouch(false) | 69 , m_wasLastEventTouch(false) |
68 { | 70 { |
69 } | 71 } |
70 | 72 |
71 PassRefPtrWillBeRawPtr<MediaControls> MediaControls::create(HTMLMediaElement& me diaElement) | 73 PassRefPtrWillBeRawPtr<MediaControls> MediaControls::create(HTMLMediaElement& me diaElement) |
72 { | 74 { |
73 RefPtrWillBeRawPtr<MediaControls> controls = adoptRefWillBeNoop(new MediaCon trols(mediaElement)); | 75 RefPtrWillBeRawPtr<MediaControls> controls = adoptRefWillBeNoop(new MediaCon trols(mediaElement)); |
74 | 76 |
75 if (controls->initializeControls()) | 77 if (controls->initializeControls()) |
76 return controls.release(); | 78 return controls.release(); |
77 | 79 |
78 return nullptr; | 80 return nullptr; |
79 } | 81 } |
80 | 82 |
81 bool MediaControls::initializeControls() | 83 bool MediaControls::initializeControls() |
82 { | 84 { |
83 TrackExceptionState exceptionState; | 85 TrackExceptionState exceptionState; |
84 | 86 |
87 RefPtrWillBeRawPtr<MediaControlOverlayEnclosureElement> overlayEnclosure = M ediaControlOverlayEnclosureElement::create(*this); | |
88 | |
85 if (document().settings() && document().settings()->mediaControlsOverlayPlay ButtonEnabled()) { | 89 if (document().settings() && document().settings()->mediaControlsOverlayPlay ButtonEnabled()) { |
86 RefPtrWillBeRawPtr<MediaControlOverlayEnclosureElement> overlayEnclosure = MediaControlOverlayEnclosureElement::create(*this); | |
87 RefPtrWillBeRawPtr<MediaControlOverlayPlayButtonElement> overlayPlayButt on = MediaControlOverlayPlayButtonElement::create(*this); | 90 RefPtrWillBeRawPtr<MediaControlOverlayPlayButtonElement> overlayPlayButt on = MediaControlOverlayPlayButtonElement::create(*this); |
88 m_overlayPlayButton = overlayPlayButton.get(); | 91 m_overlayPlayButton = overlayPlayButton.get(); |
89 overlayEnclosure->appendChild(overlayPlayButton.release(), exceptionStat e); | 92 overlayEnclosure->appendChild(overlayPlayButton.release(), exceptionStat e); |
90 if (exceptionState.hadException()) | 93 if (exceptionState.hadException()) |
91 return false; | 94 return false; |
95 } | |
92 | 96 |
93 m_overlayEnclosure = overlayEnclosure.get(); | 97 RefPtrWillBeRawPtr<MediaControlCastButtonElement> overlayCastButton = MediaC ontrolCastButtonElement::create(*this, true); |
94 appendChild(overlayEnclosure.release(), exceptionState); | 98 m_overlayCastButton = overlayCastButton.get(); |
95 if (exceptionState.hadException()) | 99 overlayEnclosure->appendChild(overlayCastButton.release(), exceptionState); |
96 return false; | 100 if (exceptionState.hadException()) |
97 } | 101 return false; |
102 | |
103 m_overlayEnclosure = overlayEnclosure.get(); | |
104 appendChild(overlayEnclosure.release(), exceptionState); | |
105 if (exceptionState.hadException()) | |
106 return false; | |
98 | 107 |
99 // Create an enclosing element for the panel so we can visually offset the c ontrols correctly. | 108 // Create an enclosing element for the panel so we can visually offset the c ontrols correctly. |
100 RefPtrWillBeRawPtr<MediaControlPanelEnclosureElement> enclosure = MediaContr olPanelEnclosureElement::create(*this); | 109 RefPtrWillBeRawPtr<MediaControlPanelEnclosureElement> enclosure = MediaContr olPanelEnclosureElement::create(*this); |
101 | 110 |
102 RefPtrWillBeRawPtr<MediaControlPanelElement> panel = MediaControlPanelElemen t::create(*this); | 111 RefPtrWillBeRawPtr<MediaControlPanelElement> panel = MediaControlPanelElemen t::create(*this); |
103 | 112 |
104 RefPtrWillBeRawPtr<MediaControlPlayButtonElement> playButton = MediaControlP layButtonElement::create(*this); | 113 RefPtrWillBeRawPtr<MediaControlPlayButtonElement> playButton = MediaControlP layButtonElement::create(*this); |
105 m_playButton = playButton.get(); | 114 m_playButton = playButton.get(); |
106 panel->appendChild(playButton.release(), exceptionState); | 115 panel->appendChild(playButton.release(), exceptionState); |
107 if (exceptionState.hadException()) | 116 if (exceptionState.hadException()) |
(...skipping 29 matching lines...) Expand all Loading... | |
137 panel->appendChild(slider.release(), exceptionState); | 146 panel->appendChild(slider.release(), exceptionState); |
138 if (exceptionState.hadException()) | 147 if (exceptionState.hadException()) |
139 return false; | 148 return false; |
140 | 149 |
141 RefPtrWillBeRawPtr<MediaControlToggleClosedCaptionsButtonElement> toggleClos edCaptionsButton = MediaControlToggleClosedCaptionsButtonElement::create(*this); | 150 RefPtrWillBeRawPtr<MediaControlToggleClosedCaptionsButtonElement> toggleClos edCaptionsButton = MediaControlToggleClosedCaptionsButtonElement::create(*this); |
142 m_toggleClosedCaptionsButton = toggleClosedCaptionsButton.get(); | 151 m_toggleClosedCaptionsButton = toggleClosedCaptionsButton.get(); |
143 panel->appendChild(toggleClosedCaptionsButton.release(), exceptionState); | 152 panel->appendChild(toggleClosedCaptionsButton.release(), exceptionState); |
144 if (exceptionState.hadException()) | 153 if (exceptionState.hadException()) |
145 return false; | 154 return false; |
146 | 155 |
156 RefPtrWillBeRawPtr<MediaControlCastButtonElement> castButton = MediaControlC astButtonElement::create(*this, false); | |
157 m_castButton = castButton.get(); | |
158 panel->appendChild(castButton.release(), exceptionState); | |
159 if (exceptionState.hadException()) | |
160 return false; | |
161 | |
147 RefPtrWillBeRawPtr<MediaControlFullscreenButtonElement> fullscreenButton = M ediaControlFullscreenButtonElement::create(*this); | 162 RefPtrWillBeRawPtr<MediaControlFullscreenButtonElement> fullscreenButton = M ediaControlFullscreenButtonElement::create(*this); |
148 m_fullScreenButton = fullscreenButton.get(); | 163 m_fullScreenButton = fullscreenButton.get(); |
149 panel->appendChild(fullscreenButton.release(), exceptionState); | 164 panel->appendChild(fullscreenButton.release(), exceptionState); |
150 if (exceptionState.hadException()) | 165 if (exceptionState.hadException()) |
151 return false; | 166 return false; |
152 | 167 |
153 m_panel = panel.get(); | 168 m_panel = panel.get(); |
154 enclosure->appendChild(panel.release(), exceptionState); | 169 enclosure->appendChild(panel.release(), exceptionState); |
155 if (exceptionState.hadException()) | 170 if (exceptionState.hadException()) |
156 return false; | 171 return false; |
(...skipping 25 matching lines...) Expand all Loading... | |
182 m_volumeSlider->show(); | 197 m_volumeSlider->show(); |
183 updateVolume(); | 198 updateVolume(); |
184 | 199 |
185 refreshClosedCaptionsButtonVisibility(); | 200 refreshClosedCaptionsButtonVisibility(); |
186 | 201 |
187 if (mediaElement().hasVideo() && fullscreenIsSupported(document())) | 202 if (mediaElement().hasVideo() && fullscreenIsSupported(document())) |
188 m_fullScreenButton->show(); | 203 m_fullScreenButton->show(); |
189 else | 204 else |
190 m_fullScreenButton->hide(); | 205 m_fullScreenButton->hide(); |
191 | 206 |
207 refreshCastButtonVisibility(); | |
192 makeOpaque(); | 208 makeOpaque(); |
193 } | 209 } |
194 | 210 |
195 void MediaControls::show() | 211 void MediaControls::show() |
196 { | 212 { |
197 makeOpaque(); | 213 makeOpaque(); |
198 m_panel->setIsDisplayed(true); | 214 m_panel->setIsDisplayed(true); |
199 m_panel->show(); | 215 m_panel->show(); |
200 if (m_overlayPlayButton) | 216 if (m_overlayPlayButton) |
201 m_overlayPlayButton->updateDisplayType(); | 217 m_overlayPlayButton->updateDisplayType(); |
202 } | 218 } |
203 | 219 |
204 void MediaControls::mediaElementFocused() | 220 void MediaControls::mediaElementFocused() |
205 { | 221 { |
206 show(); | 222 show(); |
207 stopHideMediaControlsTimer(); | 223 resetHideMediaControlsTimer(); |
208 } | 224 } |
209 | 225 |
210 void MediaControls::hide() | 226 void MediaControls::hide() |
211 { | 227 { |
212 m_panel->setIsDisplayed(false); | 228 m_panel->setIsDisplayed(false); |
213 m_panel->hide(); | 229 m_panel->hide(); |
214 if (m_overlayPlayButton) | 230 if (m_overlayPlayButton) |
215 m_overlayPlayButton->hide(); | 231 m_overlayPlayButton->hide(); |
216 } | 232 } |
217 | 233 |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
344 m_toggleClosedCaptionsButton->show(); | 360 m_toggleClosedCaptionsButton->show(); |
345 else | 361 else |
346 m_toggleClosedCaptionsButton->hide(); | 362 m_toggleClosedCaptionsButton->hide(); |
347 } | 363 } |
348 | 364 |
349 void MediaControls::textTracksChanged() | 365 void MediaControls::textTracksChanged() |
350 { | 366 { |
351 refreshClosedCaptionsButtonVisibility(); | 367 refreshClosedCaptionsButtonVisibility(); |
352 } | 368 } |
353 | 369 |
370 void MediaControls::refreshCastButtonVisibility() | |
371 { | |
372 if (mediaElement().hasRemoteRoutes()) { | |
373 if (!mediaElement().shouldShowControls() && !mediaElement().autoplay() & & mediaElement().paused()) { | |
acolwell GONE FROM CHROMIUM
2014/09/10 23:35:23
nit: Please add a comment about why the autoplay c
aberent
2014/09/11 16:38:19
Done.
| |
374 showOverlayCastButton(); | |
375 } else if (mediaElement().shouldShowControls()) { | |
376 m_overlayCastButton->hide(); | |
377 m_castButton->show(); | |
378 } | |
379 } else { | |
380 m_castButton->hide(); | |
381 m_overlayCastButton->hide(); | |
382 } | |
383 } | |
384 | |
385 void MediaControls::showOverlayCastButton() | |
386 { | |
387 m_overlayCastButton->show(); | |
388 resetHideMediaControlsTimer(); | |
389 } | |
390 | |
354 void MediaControls::enteredFullscreen() | 391 void MediaControls::enteredFullscreen() |
355 { | 392 { |
356 m_fullScreenButton->setIsFullscreen(true); | 393 m_fullScreenButton->setIsFullscreen(true); |
357 stopHideMediaControlsTimer(); | 394 stopHideMediaControlsTimer(); |
358 startHideMediaControlsTimer(); | 395 startHideMediaControlsTimer(); |
359 } | 396 } |
360 | 397 |
361 void MediaControls::exitedFullscreen() | 398 void MediaControls::exitedFullscreen() |
362 { | 399 { |
363 m_fullScreenButton->setIsFullscreen(false); | 400 m_fullScreenButton->setIsFullscreen(false); |
364 stopHideMediaControlsTimer(); | 401 stopHideMediaControlsTimer(); |
365 startHideMediaControlsTimer(); | 402 startHideMediaControlsTimer(); |
366 } | 403 } |
367 | 404 |
405 void MediaControls::startedCasting() | |
406 { | |
407 m_castButton->setIsPlayingRemotely(true); | |
408 m_overlayCastButton->setIsPlayingRemotely(true); | |
409 } | |
410 | |
411 void MediaControls::stoppedCasting() | |
412 { | |
413 m_castButton->setIsPlayingRemotely(false); | |
414 m_overlayCastButton->setIsPlayingRemotely(false); | |
415 } | |
416 | |
368 void MediaControls::defaultEventHandler(Event* event) | 417 void MediaControls::defaultEventHandler(Event* event) |
369 { | 418 { |
370 HTMLDivElement::defaultEventHandler(event); | 419 HTMLDivElement::defaultEventHandler(event); |
371 m_wasLastEventTouch = event->isTouchEvent() || event->isGestureEvent() | 420 m_wasLastEventTouch = event->isTouchEvent() || event->isGestureEvent() |
372 || (event->isMouseEvent() && toMouseEvent(event)->fromTouch()); | 421 || (event->isMouseEvent() && toMouseEvent(event)->fromTouch()); |
373 | 422 |
374 if (event->type() == EventTypeNames::mouseover) { | 423 if (event->type() == EventTypeNames::mouseover) { |
375 if (!containsRelatedTarget(event)) { | 424 if (!containsRelatedTarget(event)) { |
376 m_isMouseOverControls = true; | 425 m_isMouseOverControls = true; |
377 if (!mediaElement().togglePlayStateWillPlay()) { | 426 if (!mediaElement().togglePlayStateWillPlay()) { |
(...skipping 29 matching lines...) Expand all Loading... | |
407 return; | 456 return; |
408 | 457 |
409 unsigned behaviorFlags = IgnoreFocus | IgnoreVideoHover; | 458 unsigned behaviorFlags = IgnoreFocus | IgnoreVideoHover; |
410 if (m_wasLastEventTouch) { | 459 if (m_wasLastEventTouch) { |
411 behaviorFlags |= IgnoreControlsHover; | 460 behaviorFlags |= IgnoreControlsHover; |
412 } | 461 } |
413 if (!shouldHideMediaControls(behaviorFlags)) | 462 if (!shouldHideMediaControls(behaviorFlags)) |
414 return; | 463 return; |
415 | 464 |
416 makeTransparent(); | 465 makeTransparent(); |
466 m_overlayCastButton->hide(); | |
417 } | 467 } |
418 | 468 |
419 void MediaControls::startHideMediaControlsTimer() | 469 void MediaControls::startHideMediaControlsTimer() |
420 { | 470 { |
421 m_hideMediaControlsTimer.startOneShot(timeWithoutMouseMovementBeforeHidingMe diaControls, FROM_HERE); | 471 m_hideMediaControlsTimer.startOneShot(timeWithoutMouseMovementBeforeHidingMe diaControls, FROM_HERE); |
422 } | 472 } |
423 | 473 |
424 void MediaControls::stopHideMediaControlsTimer() | 474 void MediaControls::stopHideMediaControlsTimer() |
425 { | 475 { |
426 m_hideMediaControlsTimer.stop(); | 476 m_hideMediaControlsTimer.stop(); |
427 } | 477 } |
428 | 478 |
479 void MediaControls::resetHideMediaControlsTimer() | |
480 { | |
481 stopHideMediaControlsTimer(); | |
482 if (!mediaElement().paused()) | |
483 startHideMediaControlsTimer(); | |
484 } | |
485 | |
486 | |
429 const AtomicString& MediaControls::shadowPseudoId() const | 487 const AtomicString& MediaControls::shadowPseudoId() const |
430 { | 488 { |
431 DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls")); | 489 DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls")); |
432 return id; | 490 return id; |
433 } | 491 } |
434 | 492 |
435 bool MediaControls::containsRelatedTarget(Event* event) | 493 bool MediaControls::containsRelatedTarget(Event* event) |
436 { | 494 { |
437 if (!event->isMouseEvent()) | 495 if (!event->isMouseEvent()) |
438 return false; | 496 return false; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
492 visitor->trace(m_muteButton); | 550 visitor->trace(m_muteButton); |
493 visitor->trace(m_volumeSlider); | 551 visitor->trace(m_volumeSlider); |
494 visitor->trace(m_toggleClosedCaptionsButton); | 552 visitor->trace(m_toggleClosedCaptionsButton); |
495 visitor->trace(m_fullScreenButton); | 553 visitor->trace(m_fullScreenButton); |
496 visitor->trace(m_durationDisplay); | 554 visitor->trace(m_durationDisplay); |
497 visitor->trace(m_enclosure); | 555 visitor->trace(m_enclosure); |
498 HTMLDivElement::trace(visitor); | 556 HTMLDivElement::trace(visitor); |
499 } | 557 } |
500 | 558 |
501 } | 559 } |
OLD | NEW |