Index: third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp |
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp b/third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp |
index 56f2ac372f8d6d4c522ac91ddad70933705e95f9..dcbca0e6343fa97d5edabb750479944da6bcf479 100644 |
--- a/third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp |
+++ b/third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp |
@@ -1104,4 +1104,135 @@ MediaControlCurrentTimeDisplayElement::create(MediaControls& mediaControls) { |
return element; |
} |
+// ---------------------------- |
+ |
+class MediaRemotingDisableButtonElement::MouseEventsListener final |
+ : public EventListener { |
+ public: |
+ explicit MouseEventsListener(MediaRemotingDisableButtonElement& element) |
+ : EventListener(CPPEventListenerType), m_element(element) {} |
+ |
+ bool operator==(const EventListener& other) const override { |
+ return this == &other; |
+ } |
+ |
+ void trace(blink::Visitor* visitor) { |
+ visitor->trace(m_element); |
+ EventListener::trace(visitor); |
+ } |
+ |
+ private: |
+ void handleEvent(ExecutionContext* context, Event* event) override { |
+ DCHECK(event->type() == EventTypeNames::click); |
+ |
+ MouseEvent* mouseEvent = toMouseEvent(event); |
+ ClientRect* clientRect = m_element->getBoundingClientRect(); |
+ const double x = mouseEvent->x(); |
+ const double y = mouseEvent->y(); |
+ if (x < clientRect->left() || x > clientRect->right() || |
+ y < clientRect->top() || y > clientRect->bottom()) |
+ return; |
+ |
+ m_element->mediaElement().disableMediaRemoting(); |
+ event->setDefaultHandled(); |
+ event->stopPropagation(); |
+ m_element->document().removeEventListener(EventTypeNames::click, this, |
+ true); |
+ } |
+ |
+ Member<MediaRemotingDisableButtonElement> m_element; |
+}; |
+ |
+MediaRemotingDisableButtonElement::MediaRemotingDisableButtonElement( |
+ MediaRemotingInterstitialElements& interstitialElements) |
+ : HTMLInputElement(interstitialElements.document(), false), |
+ m_interstitialElements(interstitialElements) { |
+ m_listener = new MouseEventsListener(*this); |
+ ensureUserAgentShadowRoot(); |
+ setType(InputTypeNames::text); |
+ setValue(interstitialElements.mediaElement().locale().queryString( |
+ WebLocalizedString::MediaRemotingDisableText)); |
+ setShadowPseudoId(AtomicString("-internal-media-remoting-disable-button")); |
+} |
+ |
+void MediaRemotingDisableButtonElement::show() { |
+ removeInlineStyleProperty(CSSPropertyDisplay); |
+ document().addEventListener(EventTypeNames::click, m_listener, true); |
+} |
+ |
+void MediaRemotingDisableButtonElement::hide() { |
+ setInlineStyleProperty(CSSPropertyDisplay, CSSValueNone); |
+ document().removeEventListener(EventTypeNames::click, m_listener, true); |
+} |
+ |
+DEFINE_TRACE(MediaRemotingDisableButtonElement) { |
+ visitor->trace(m_interstitialElements); |
+ visitor->trace(m_listener); |
+ HTMLInputElement::trace(visitor); |
+} |
+ |
+// ---------------------------- |
+ |
+MediaRemotingCastIconElement::MediaRemotingCastIconElement( |
+ MediaRemotingInterstitialElements& remotingInterstitial) |
+ : HTMLInputElement(remotingInterstitial.document(), false) { |
+ ensureUserAgentShadowRoot(); |
+ setType(InputTypeNames::button); |
+ setShadowPseudoId(AtomicString("-internal-media-remoting-cast-icon")); |
+} |
+ |
+void MediaRemotingCastIconElement::show() { |
+ removeInlineStyleProperty(CSSPropertyDisplay); |
+} |
+ |
+void MediaRemotingCastIconElement::hide() { |
+ setInlineStyleProperty(CSSPropertyDisplay, CSSValueNone); |
+} |
+ |
+// ---------------------------- |
+ |
+MediaRemotingCastMessageElement::MediaRemotingCastMessageElement( |
+ MediaRemotingInterstitialElements& remotingInterstitial) |
+ : HTMLInputElement(remotingInterstitial.document(), false) { |
+ ensureUserAgentShadowRoot(); |
+ setType(InputTypeNames::text); |
+ setValue(remotingInterstitial.mediaElement().locale().queryString( |
+ WebLocalizedString::MediaRemotingCastingVideoText)); |
+ setShadowPseudoId(AtomicString("-internal-media-remoting-cast-text")); |
+} |
+ |
+void MediaRemotingCastMessageElement::show() { |
+ removeInlineStyleProperty(CSSPropertyDisplay); |
+} |
+ |
+void MediaRemotingCastMessageElement::hide() { |
+ setInlineStyleProperty(CSSPropertyDisplay, CSSValueNone); |
+} |
+ |
+// ---------------------------- |
+ |
+MediaRemotingBackgroundImageElement::MediaRemotingBackgroundImageElement( |
+ MediaRemotingInterstitial& remotingInterstitial) |
+ : HTMLInputElement(remotingInterstitial.document(), false), |
+ m_interstitial(remotingInterstitial) { |
+ ensureUserAgentShadowRoot(); |
+ setType(InputTypeNames::image); |
+ setShadowPseudoId(AtomicString("-internal-media-remoting-background-image")); |
+} |
+ |
+void MediaRemotingBackgroundImageElement::show() { |
+ setAttribute(srcAttr, |
+ m_interstitial->mediaElement().getAttribute(posterAttr)); |
+ removeInlineStyleProperty(CSSPropertyDisplay); |
+} |
+ |
+void MediaRemotingBackgroundImageElement::hide() { |
+ setInlineStyleProperty(CSSPropertyDisplay, CSSValueNone); |
+} |
+ |
+DEFINE_TRACE(MediaRemotingBackgroundImageElement) { |
+ visitor->trace(m_interstitial); |
+ HTMLInputElement::trace(visitor); |
+} |
+ |
} // namespace blink |