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

Unified Diff: Source/core/html/shadow/MediaControlElements.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 side-by-side diff with in-line comments
Download patch
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)
{

Powered by Google App Engine
This is Rietveld 408576698