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

Unified Diff: third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp

Issue 2767823002: Media Remoting: Add interstitial elements to media element shadow dom. (Closed)
Patch Set: Created 3 years, 9 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: 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

Powered by Google App Engine
This is Rietveld 408576698