Index: third_party/WebKit/Source/core/html/shadow/MediaRemotingElements.cpp |
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaRemotingElements.cpp b/third_party/WebKit/Source/core/html/shadow/MediaRemotingElements.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..698db3bfb68641f1b178fd2319486c66dce74831 |
--- /dev/null |
+++ b/third_party/WebKit/Source/core/html/shadow/MediaRemotingElements.cpp |
@@ -0,0 +1,115 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "core/html/shadow/MediaRemotingElements.h" |
+ |
+#include "core/dom/ClientRect.h" |
+#include "core/dom/Text.h" |
+#include "core/dom/shadow/ShadowRoot.h" |
+#include "core/events/MouseEvent.h" |
+#include "core/html/HTMLVideoElement.h" |
+#include "core/input/EventHandler.h" |
+#include "platform/text/PlatformLocale.h" |
+#include "public/platform/Platform.h" |
+#include "public/platform/WebLocalizedString.h" |
+ |
+namespace blink { |
+ |
+using namespace HTMLNames; |
+ |
+// ---------------------------- |
+ |
+class MediaRemotingDisableButtonElement::MouseEventsListener final |
mlamouri (slow - plz ping)
2017/04/13 17:20:51
I looked more into this. The reason why you are no
xjz
2017/04/13 19:12:11
This approach seems not work with vimeo videos. It
|
+ : public EventListener { |
+ public: |
+ explicit MouseEventsListener(MediaRemotingDisableButtonElement& element) |
+ : EventListener(kCPPEventListenerType), element_(element) {} |
+ |
+ bool operator==(const EventListener& other) const override { |
+ return this == &other; |
+ } |
+ |
+ void Trace(blink::Visitor* visitor) { |
+ visitor->Trace(element_); |
+ EventListener::Trace(visitor); |
+ } |
+ |
+ private: |
+ void handleEvent(ExecutionContext* context, Event* event) override { |
+ DCHECK(event->type() == EventTypeNames::click); |
mlamouri (slow - plz ping)
2017/04/13 17:20:51
DCHECK_EQ()?
xjz
2017/04/13 19:12:12
Done.
|
+ |
+ MouseEvent* mouse_event = ToMouseEvent(event); |
+ ClientRect* client_rect = element_->getBoundingClientRect(); |
+ const double x = mouse_event->x(); |
+ const double y = mouse_event->y(); |
+ if (x < client_rect->left() || x > client_rect->right() || |
+ y < client_rect->top() || y > client_rect->bottom()) |
+ return; |
+ |
+ element_->VideoElement().DisableMediaRemoting(); |
+ event->SetDefaultHandled(); |
+ event->stopPropagation(); |
+ element_->GetDocument().removeEventListener(EventTypeNames::click, this, |
+ true); |
mlamouri (slow - plz ping)
2017/04/13 17:20:51
Why call removeEventListener()? Wouldn't this be c
xjz
2017/04/13 19:12:12
Done. Removed the call.
|
+ } |
+ |
+ Member<MediaRemotingDisableButtonElement> element_; |
+}; |
+ |
+MediaRemotingDisableButtonElement::MediaRemotingDisableButtonElement( |
+ MediaRemotingInterstitial& interstitial) |
+ : HTMLDivElement(interstitial.GetDocument()), interstitial_(interstitial) { |
+ listener_ = new MouseEventsListener(*this); |
+ SetShadowPseudoId(AtomicString("-internal-media-remoting-disable-button")); |
+ text_ = GetDocument().createTextNode( |
+ interstitial.VideoElement().GetLocale().QueryString( |
+ WebLocalizedString::kMediaRemotingDisableText)); |
+ AppendChild(text_); |
mlamouri (slow - plz ping)
2017/04/13 17:20:51
Why not using setInnerText() and drop the Member<T
xjz
2017/04/13 19:12:11
Done.
|
+} |
+ |
+void MediaRemotingDisableButtonElement::OnShown() { |
+ GetDocument().addEventListener(EventTypeNames::click, listener_, true); |
+} |
+ |
+void MediaRemotingDisableButtonElement::OnHidden() { |
+ GetDocument().removeEventListener(EventTypeNames::click, listener_, true); |
+} |
+ |
+HTMLVideoElement& MediaRemotingDisableButtonElement::VideoElement() const { |
+ return interstitial_->VideoElement(); |
+} |
+ |
+DEFINE_TRACE(MediaRemotingDisableButtonElement) { |
+ visitor->Trace(interstitial_); |
+ visitor->Trace(listener_); |
+ visitor->Trace(text_); |
+ HTMLDivElement::Trace(visitor); |
+} |
+ |
+// ---------------------------- |
+ |
+MediaRemotingCastMessageElement::MediaRemotingCastMessageElement( |
+ MediaRemotingInterstitial& interstitial) |
+ : HTMLDivElement(interstitial.GetDocument()) { |
+ SetShadowPseudoId(AtomicString("-internal-media-remoting-cast-text-message")); |
+ text_ = GetDocument().createTextNode( |
+ interstitial.VideoElement().GetLocale().QueryString( |
+ WebLocalizedString::kMediaRemotingCastText)); |
+ AppendChild(text_); |
mlamouri (slow - plz ping)
2017/04/13 17:20:51
Same as above.
xjz
2017/04/13 19:12:11
Done.
|
+} |
+ |
+DEFINE_TRACE(MediaRemotingCastMessageElement) { |
+ visitor->Trace(text_); |
+ HTMLDivElement::Trace(visitor); |
+} |
+ |
+// ---------------------------- |
+ |
+MediaRemotingCastIconElement::MediaRemotingCastIconElement( |
+ MediaRemotingInterstitial& interstitial) |
+ : HTMLDivElement(interstitial.GetDocument()) { |
+ SetShadowPseudoId(AtomicString("-internal-media-remoting-cast-icon")); |
+} |
+ |
+} // namespace blink |