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..3467351539da1997faae370fbba54def2d2c9301 100644 |
--- a/third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp |
+++ b/third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp |
@@ -1104,4 +1104,70 @@ MediaControlCurrentTimeDisplayElement::create(MediaControls& mediaControls) { |
return element; |
} |
+// ---------------------------- |
+ |
+class MediaRemotingDisableButtonElement::MouseEventsListener final |
+ : public EventListener { |
+ public: |
+ MouseEventsListener(MediaRemotingDisableButtonElement& element) |
miu
2017/03/22 21:26:48
nit: explicit
xjz
2017/03/22 22:25:09
Done.
|
+ : 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(); |
+ double x = mouseEvent->x(); |
+ double y = mouseEvent->y(); |
+ if (x < clientRect->left() || y < clientRect->top() || |
+ x > clientRect->left() + clientRect->width() || |
miu
2017/03/22 21:26:48
nit: x > clientRect->right()
xjz
2017/03/22 22:25:09
Done.
|
+ y > clientRect->top() + clientRect->height()) |
miu
2017/03/22 21:26:48
nit: y > clientRect->bottom()
xjz
2017/03/22 22:25:09
Done.
|
+ return; |
+ |
+ m_element->mediaElement().disableMediaRemoting(); |
+ event->setDefaultHandled(); |
+ event->stopPropagation(); |
+ m_element->document().removeEventListener(EventTypeNames::click, this, |
+ true); |
+ } |
+ |
+ Member<MediaRemotingDisableButtonElement> m_element; |
+}; |
+ |
+MediaRemotingDisableButtonElement::MediaRemotingDisableButtonElement( |
+ MediaRemotingInterstitial& remotingInterstitial) |
+ : HTMLInputElement(remotingInterstitial.document(), false), |
+ m_interstitial(remotingInterstitial) { |
+ m_listener = new MouseEventsListener(*this); |
+ ensureUserAgentShadowRoot(); |
+ setType(InputTypeNames::button); |
+ setShadowPseudoId(AtomicString("-webkit-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_interstitial); |
+ visitor->trace(m_listener); |
+ HTMLInputElement::trace(visitor); |
+} |
+ |
} // namespace blink |