Chromium Code Reviews| Index: Source/core/html/shadow/MediaControlElements.cpp |
| diff --git a/Source/core/html/shadow/MediaControlElements.cpp b/Source/core/html/shadow/MediaControlElements.cpp |
| index 5474fb758a3b82a88523b2f8b6babbdf3dd7b490..ad13797af3c1282e3fe16d96e13c16bf8f8f37ca 100644 |
| --- a/Source/core/html/shadow/MediaControlElements.cpp |
| +++ b/Source/core/html/shadow/MediaControlElements.cpp |
| @@ -217,6 +217,17 @@ const AtomicString& MediaControlOverlayEnclosureElement::shadowPseudoId() const |
| return id; |
| } |
| +void* MediaControlOverlayEnclosureElement::preDispatchEventHandler(Event* event) |
| +{ |
| + if (event && (event->type() == EventTypeNames::click || event->type() == EventTypeNames::touchstart)) { |
| + // When the media element is touched we want to make the controls visible even if JavaScript is doing its own handling of the event. |
| + // Doing it in preDispatchEventHandler prevents any interference from JavaScript. |
|
acolwell GONE FROM CHROMIUM
2014/08/05 19:36:34
This behavior won't prevent user controls from rec
aberent
2014/08/22 14:08:34
This particular code simply makes the overlay cast
|
| + mediaControls().mediaElementFocused(); |
| + } |
| + return MediaControlDivElement::preDispatchEventHandler(event); |
| +} |
| + |
| + |
| // ---------------------------- |
| MediaControlMuteButtonElement::MediaControlMuteButtonElement(MediaControls& mediaControls) |
| @@ -559,6 +570,88 @@ void MediaControlFullscreenButtonElement::setIsFullscreen(bool isFullscreen) |
| // ---------------------------- |
| +MediaControlCastButtonElement::MediaControlCastButtonElement(MediaControls& mediaControls) |
| + : MediaControlInputElement(mediaControls, MediaCastOnButton) |
| +{ |
| +} |
| + |
| +PassRefPtrWillBeRawPtr<MediaControlCastButtonElement> MediaControlCastButtonElement::create(MediaControls& mediaControls) |
| +{ |
| + RefPtrWillBeRawPtr<MediaControlCastButtonElement> button = adoptRefWillBeRefCountedGarbageCollected(new MediaControlCastButtonElement(mediaControls)); |
| + button->ensureUserAgentShadowRoot(); |
| + button->setType("button"); |
| + return button.release(); |
| +} |
| + |
| +void MediaControlCastButtonElement::defaultEventHandler(Event* event) |
| +{ |
| + if (event->type() == EventTypeNames::click) { |
| + if (mediaElement().isCasting()) { |
| + mediaElement().requestRemotePlaybackControl(); |
| + } else { |
| + mediaElement().requestRemotePlayback(); |
| + } |
| + } |
| + HTMLInputElement::defaultEventHandler(event); |
| +} |
| + |
| +const AtomicString& MediaControlCastButtonElement::shadowPseudoId() const |
| +{ |
| + DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-cast-button", AtomicString::ConstructFromLiteral)); |
| + return id; |
| +} |
| + |
| +void MediaControlCastButtonElement::setIsCasting(bool isCasting) |
| +{ |
| + setDisplayType(isCasting ? MediaCastOnButton : MediaCastOffButton); |
| +} |
| + |
| +// ---------------------------- |
| + |
| +MediaControlOverlayCastButtonElement::MediaControlOverlayCastButtonElement(MediaControls& mediaControls) |
| + : MediaControlInputElement(mediaControls, MediaCastOnButton) |
| +{ |
| + hide(); |
| +} |
| + |
| +PassRefPtrWillBeRawPtr<MediaControlOverlayCastButtonElement> MediaControlOverlayCastButtonElement::create(MediaControls& mediaControls) |
| +{ |
| + RefPtrWillBeRawPtr<MediaControlOverlayCastButtonElement> button = adoptRefWillBeRefCountedGarbageCollected(new MediaControlOverlayCastButtonElement(mediaControls)); |
| + button->ensureUserAgentShadowRoot(); |
| + button->setType("button"); |
| + return button.release(); |
| +} |
| + |
| +void MediaControlOverlayCastButtonElement::defaultEventHandler(Event* event) |
|
acolwell GONE FROM CHROMIUM
2014/08/05 19:36:34
Why do we need 2 classes here? The code looks iden
aberent
2014/08/22 14:08:34
Done.
|
| +{ |
| + if (event->type() == EventTypeNames::click) { |
| + if (mediaElement().isCasting()) { |
|
acolwell GONE FROM CHROMIUM
2014/08/05 19:36:34
Shouldn't there be a mediaElement().hasRemoteRoute
aberent
2014/08/22 14:08:34
The logic is such that the cast button can never b
|
| + mediaElement().requestRemotePlaybackControl(); |
| + } else { |
| + mediaElement().requestRemotePlayback(); |
| + } |
| + } |
| + HTMLInputElement::defaultEventHandler(event); |
| +} |
| + |
| +const AtomicString& MediaControlOverlayCastButtonElement::shadowPseudoId() const |
| +{ |
| + DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-overlay-cast-button", AtomicString::ConstructFromLiteral)); |
| + return id; |
| +} |
| + |
| +void MediaControlOverlayCastButtonElement::setIsCasting(bool isCasting) |
| +{ |
| + setDisplayType(isCasting ? MediaOverlayCastOnButton : MediaOverlayCastOffButton); |
| +} |
| + |
| +bool MediaControlOverlayCastButtonElement::keepEventInNode(Event* event) |
| +{ |
| + return isUserInteractionEvent(event); |
| +} |
| + |
| +// ---------------------------- |
| + |
| MediaControlTimeRemainingDisplayElement::MediaControlTimeRemainingDisplayElement(MediaControls& mediaControls) |
| : MediaControlTimeDisplayElement(mediaControls, MediaTimeRemainingDisplay) |
| { |