| 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 15 matching lines...) Expand all Loading... |
| 26 | 26 |
| 27 #include "config.h" | 27 #include "config.h" |
| 28 #include "core/html/shadow/MediaControls.h" | 28 #include "core/html/shadow/MediaControls.h" |
| 29 | 29 |
| 30 #include "bindings/core/v8/ExceptionStatePlaceholder.h" | 30 #include "bindings/core/v8/ExceptionStatePlaceholder.h" |
| 31 #include "core/dom/ClientRect.h" | 31 #include "core/dom/ClientRect.h" |
| 32 #include "core/events/MouseEvent.h" | 32 #include "core/events/MouseEvent.h" |
| 33 #include "core/frame/Settings.h" | 33 #include "core/frame/Settings.h" |
| 34 #include "core/html/HTMLMediaElement.h" | 34 #include "core/html/HTMLMediaElement.h" |
| 35 #include "core/html/MediaController.h" | 35 #include "core/html/MediaController.h" |
| 36 #include "core/html/track/TextTrackContainer.h" |
| 36 #include "core/layout/LayoutTheme.h" | 37 #include "core/layout/LayoutTheme.h" |
| 37 | 38 |
| 38 namespace blink { | 39 namespace blink { |
| 39 | 40 |
| 40 // If you change this value, then also update the corresponding value in | 41 // If you change this value, then also update the corresponding value in |
| 41 // LayoutTests/media/media-controls.js. | 42 // LayoutTests/media/media-controls.js. |
| 42 static const double timeWithoutMouseMovementBeforeHidingMediaControls = 3; | 43 static const double timeWithoutMouseMovementBeforeHidingMediaControls = 3; |
| 43 | 44 |
| 44 static bool fullscreenIsSupported(const Document& document) | 45 static bool fullscreenIsSupported(const Document& document) |
| 45 { | 46 { |
| 46 return !document.settings() || document.settings()->fullscreenSupported(); | 47 return !document.settings() || document.settings()->fullscreenSupported(); |
| 47 } | 48 } |
| 48 | 49 |
| 49 MediaControls::MediaControls(HTMLMediaElement& mediaElement) | 50 MediaControls::MediaControls(HTMLMediaElement& mediaElement) |
| 50 : HTMLDivElement(mediaElement.document()) | 51 : HTMLDivElement(mediaElement.document()) |
| 51 , m_mediaElement(&mediaElement) | 52 , m_mediaElement(&mediaElement) |
| 52 , m_panel(nullptr) | 53 , m_panel(nullptr) |
| 53 , m_textDisplayContainer(nullptr) | 54 , m_textTrackContainer(nullptr) |
| 54 , m_overlayPlayButton(nullptr) | 55 , m_overlayPlayButton(nullptr) |
| 55 , m_overlayEnclosure(nullptr) | 56 , m_overlayEnclosure(nullptr) |
| 56 , m_playButton(nullptr) | 57 , m_playButton(nullptr) |
| 57 , m_currentTimeDisplay(nullptr) | 58 , m_currentTimeDisplay(nullptr) |
| 58 , m_timeline(nullptr) | 59 , m_timeline(nullptr) |
| 59 , m_muteButton(nullptr) | 60 , m_muteButton(nullptr) |
| 60 , m_volumeSlider(nullptr) | 61 , m_volumeSlider(nullptr) |
| 61 , m_toggleClosedCaptionsButton(nullptr) | 62 , m_toggleClosedCaptionsButton(nullptr) |
| 62 , m_fullScreenButton(nullptr) | 63 , m_fullScreenButton(nullptr) |
| 63 , m_castButton(nullptr) | 64 , m_castButton(nullptr) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 76 RefPtrWillBeRawPtr<MediaControls> controls = adoptRefWillBeNoop(new MediaCon
trols(mediaElement)); | 77 RefPtrWillBeRawPtr<MediaControls> controls = adoptRefWillBeNoop(new MediaCon
trols(mediaElement)); |
| 77 controls->setShadowPseudoId(AtomicString("-webkit-media-controls", AtomicStr
ing::ConstructFromLiteral)); | 78 controls->setShadowPseudoId(AtomicString("-webkit-media-controls", AtomicStr
ing::ConstructFromLiteral)); |
| 78 controls->initializeControls(); | 79 controls->initializeControls(); |
| 79 return controls.release(); | 80 return controls.release(); |
| 80 } | 81 } |
| 81 | 82 |
| 82 // The media controls DOM structure looks like: | 83 // The media controls DOM structure looks like: |
| 83 // | 84 // |
| 84 // MediaControls (-webkit-media-controls) | 85 // MediaControls (-webkit-media-controls) |
| 85 // +-MediaControlOverlayEnclosureElement (-webkit-media-controls-o
verlay-enclosure) | 86 // +-MediaControlOverlayEnclosureElement (-webkit-media-controls-o
verlay-enclosure) |
| 86 // | +-MediaControlTextTrackContainerElement (-webkit-media-text-track
-container) | 87 // | +-TextTrackContainer (-webkit-media-text-track
-container) |
| 87 // | | {when text tracks are enabled} | 88 // | | {when text tracks are enabled} |
| 88 // | +-MediaControlOverlayPlayButtonElement (-webkit-media-controls-o
verlay-play-button) | 89 // | +-MediaControlOverlayPlayButtonElement (-webkit-media-controls-o
verlay-play-button) |
| 89 // | | {if mediaControlsOverlayPlayButtonEnabled} | 90 // | | {if mediaControlsOverlayPlayButtonEnabled} |
| 90 // | \-MediaControlCastButtonElement (-internal-media-controls
-overlay-cast-button) | 91 // | \-MediaControlCastButtonElement (-internal-media-controls
-overlay-cast-button) |
| 91 // \-MediaControlPanelEnclosureElement (-webkit-media-controls-e
nclosure) | 92 // \-MediaControlPanelEnclosureElement (-webkit-media-controls-e
nclosure) |
| 92 // \-MediaControlPanelElement (-webkit-media-controls-p
anel) | 93 // \-MediaControlPanelElement (-webkit-media-controls-p
anel) |
| 93 // +-MediaControlPlayButtonElement (-webkit-media-controls-p
lay-button) | 94 // +-MediaControlPlayButtonElement (-webkit-media-controls-p
lay-button) |
| 94 // +-MediaControlTimelineElement (-webkit-media-controls-t
imeline) | 95 // +-MediaControlTimelineElement (-webkit-media-controls-t
imeline) |
| 95 // +-MediaControlCurrentTimeDisplayElement (-webkit-media-controls-c
urrent-time-display) | 96 // +-MediaControlCurrentTimeDisplayElement (-webkit-media-controls-c
urrent-time-display) |
| 96 // +-MediaControlTimeRemainingDisplayElement (-webkit-media-controls-t
ime-remaining-display) | 97 // +-MediaControlTimeRemainingDisplayElement (-webkit-media-controls-t
ime-remaining-display) |
| 97 // +-MediaControlMuteButtonElement (-webkit-media-controls-m
ute-button) | 98 // +-MediaControlMuteButtonElement (-webkit-media-controls-m
ute-button) |
| 98 // +-MediaControlVolumeSliderElement (-webkit-media-controls-v
olume-slider) | 99 // +-MediaControlVolumeSliderElement (-webkit-media-controls-v
olume-slider) |
| 99 // +-MediaControlToggleClosedCaptionsButtonElement (-webkit-media-controls-t
oggle-closed-captions-button) | 100 // +-MediaControlToggleClosedCaptionsButtonElement (-webkit-media-controls-t
oggle-closed-captions-button) |
| 100 // +-MediaControlCastButtonElement (-internal-media-controls
-cast-button) | 101 // +-MediaControlCastButtonElement (-internal-media-controls
-cast-button) |
| 101 // \-MediaControlFullscreenButtonElement (-webkit-media-controls-f
ullscreen-button) | 102 // \-MediaControlFullscreenButtonElement (-webkit-media-controls-f
ullscreen-button) |
| 102 // | 103 // |
| 103 // Most of the structure is built by MediaControls::initializeControls() - the | 104 // Most of the structure is built by MediaControls::initializeControls() - the |
| 104 // exception being MediaControlTextTrackContainerElement which is added | 105 // exception being TextTrackContainer which is added on-demand by |
| 105 // on-demand by MediaControls::createTextTrackDisplay(). | 106 // MediaControls::textTrackContainer(). |
| 106 void MediaControls::initializeControls() | 107 void MediaControls::initializeControls() |
| 107 { | 108 { |
| 108 RefPtrWillBeRawPtr<MediaControlOverlayEnclosureElement> overlayEnclosure = M
ediaControlOverlayEnclosureElement::create(*this); | 109 RefPtrWillBeRawPtr<MediaControlOverlayEnclosureElement> overlayEnclosure = M
ediaControlOverlayEnclosureElement::create(*this); |
| 109 | 110 |
| 110 if (document().settings() && document().settings()->mediaControlsOverlayPlay
ButtonEnabled()) { | 111 if (document().settings() && document().settings()->mediaControlsOverlayPlay
ButtonEnabled()) { |
| 111 RefPtrWillBeRawPtr<MediaControlOverlayPlayButtonElement> overlayPlayButt
on = MediaControlOverlayPlayButtonElement::create(*this); | 112 RefPtrWillBeRawPtr<MediaControlOverlayPlayButtonElement> overlayPlayButt
on = MediaControlOverlayPlayButtonElement::create(*this); |
| 112 m_overlayPlayButton = overlayPlayButton.get(); | 113 m_overlayPlayButton = overlayPlayButton.get(); |
| 113 overlayEnclosure->appendChild(overlayPlayButton.release()); | 114 overlayEnclosure->appendChild(overlayPlayButton.release()); |
| 114 } | 115 } |
| 115 | 116 |
| (...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 509 bool MediaControls::containsRelatedTarget(Event* event) | 510 bool MediaControls::containsRelatedTarget(Event* event) |
| 510 { | 511 { |
| 511 if (!event->isMouseEvent()) | 512 if (!event->isMouseEvent()) |
| 512 return false; | 513 return false; |
| 513 EventTarget* relatedTarget = toMouseEvent(event)->relatedTarget(); | 514 EventTarget* relatedTarget = toMouseEvent(event)->relatedTarget(); |
| 514 if (!relatedTarget) | 515 if (!relatedTarget) |
| 515 return false; | 516 return false; |
| 516 return contains(relatedTarget->toNode()); | 517 return contains(relatedTarget->toNode()); |
| 517 } | 518 } |
| 518 | 519 |
| 519 void MediaControls::createTextTrackDisplay() | 520 TextTrackContainer* MediaControls::textTrackContainer() |
| 520 { | 521 { |
| 521 if (m_textDisplayContainer) | 522 if (!m_textTrackContainer) { |
| 522 return; | 523 RefPtrWillBeRawPtr<TextTrackContainer> textTrackContainer = TextTrackCon
tainer::create(mediaElement().document()); |
| 524 m_textTrackContainer = textTrackContainer.get(); |
| 523 | 525 |
| 524 RefPtrWillBeRawPtr<MediaControlTextTrackContainerElement> textDisplayContain
er = MediaControlTextTrackContainerElement::create(*this); | 526 // Insert it before (behind) all other control elements. |
| 525 m_textDisplayContainer = textDisplayContainer.get(); | 527 m_overlayEnclosure->insertBefore(textTrackContainer.release(), m_overlay
Enclosure->firstChild()); |
| 526 | 528 } |
| 527 // Insert it before (behind) all other control elements. | 529 return m_textTrackContainer.get(); |
| 528 m_overlayEnclosure->insertBefore(textDisplayContainer.release(), m_overlayEn
closure->firstChild()); | |
| 529 } | |
| 530 | |
| 531 void MediaControls::updateTextTrackDisplay() | |
| 532 { | |
| 533 if (!m_textDisplayContainer) | |
| 534 createTextTrackDisplay(); | |
| 535 | |
| 536 m_textDisplayContainer->updateDisplay(); | |
| 537 } | 530 } |
| 538 | 531 |
| 539 DEFINE_TRACE(MediaControls) | 532 DEFINE_TRACE(MediaControls) |
| 540 { | 533 { |
| 541 visitor->trace(m_mediaElement); | 534 visitor->trace(m_mediaElement); |
| 542 visitor->trace(m_panel); | 535 visitor->trace(m_panel); |
| 543 visitor->trace(m_textDisplayContainer); | 536 visitor->trace(m_textTrackContainer); |
| 544 visitor->trace(m_overlayPlayButton); | 537 visitor->trace(m_overlayPlayButton); |
| 545 visitor->trace(m_overlayEnclosure); | 538 visitor->trace(m_overlayEnclosure); |
| 546 visitor->trace(m_playButton); | 539 visitor->trace(m_playButton); |
| 547 visitor->trace(m_currentTimeDisplay); | 540 visitor->trace(m_currentTimeDisplay); |
| 548 visitor->trace(m_timeline); | 541 visitor->trace(m_timeline); |
| 549 visitor->trace(m_muteButton); | 542 visitor->trace(m_muteButton); |
| 550 visitor->trace(m_volumeSlider); | 543 visitor->trace(m_volumeSlider); |
| 551 visitor->trace(m_toggleClosedCaptionsButton); | 544 visitor->trace(m_toggleClosedCaptionsButton); |
| 552 visitor->trace(m_fullScreenButton); | 545 visitor->trace(m_fullScreenButton); |
| 553 visitor->trace(m_durationDisplay); | 546 visitor->trace(m_durationDisplay); |
| 554 visitor->trace(m_enclosure); | 547 visitor->trace(m_enclosure); |
| 555 visitor->trace(m_castButton); | 548 visitor->trace(m_castButton); |
| 556 visitor->trace(m_overlayCastButton); | 549 visitor->trace(m_overlayCastButton); |
| 557 HTMLDivElement::trace(visitor); | 550 HTMLDivElement::trace(visitor); |
| 558 } | 551 } |
| 559 | 552 |
| 560 } | 553 } |
| OLD | NEW |