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) |
{ |