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

Side by Side Diff: third_party/WebKit/Source/core/html/shadow/MediaRemotingElements.cpp

Issue 2767823002: Media Remoting: Add interstitial elements to media element shadow dom. (Closed)
Patch Set: Updated with new UX design. Created 3 years, 8 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "core/html/shadow/MediaRemotingElements.h"
6
7 #include "core/InputTypeNames.h"
8 #include "core/dom/ClientRect.h"
9 #include "core/dom/Text.h"
10 #include "core/dom/shadow/ShadowRoot.h"
11 #include "core/events/MouseEvent.h"
12 #include "core/html/HTMLVideoElement.h"
13 #include "core/input/EventHandler.h"
14 #include "platform/text/PlatformLocale.h"
15 #include "public/platform/Platform.h"
16 #include "public/platform/WebLocalizedString.h"
17
18 namespace blink {
19
20 using namespace HTMLNames;
21
22 class MediaRemotingDisableButtonElement::MouseEventsListener final
23 : public EventListener {
24 public:
25 explicit MouseEventsListener(MediaRemotingDisableButtonElement& element)
26 : EventListener(kCPPEventListenerType), element_(element) {}
27
28 bool operator==(const EventListener& other) const override {
29 return this == &other;
30 }
31
32 void Trace(blink::Visitor* visitor) {
33 visitor->Trace(element_);
34 EventListener::Trace(visitor);
35 }
36
37 private:
38 void handleEvent(ExecutionContext* context, Event* event) override {
39 DCHECK(event->type() == EventTypeNames::click);
40
41 MouseEvent* mouse_event = ToMouseEvent(event);
42 ClientRect* client_rect = element_->getBoundingClientRect();
43 const double x = mouse_event->x();
44 const double y = mouse_event->y();
45 if (x < client_rect->left() || x > client_rect->right() ||
46 y < client_rect->top() || y > client_rect->bottom())
47 return;
48
49 element_->VideoElement().DisableMediaRemoting();
50 event->SetDefaultHandled();
51 event->stopPropagation();
52 element_->GetDocument().removeEventListener(EventTypeNames::click, this,
53 true);
54 }
55
56 Member<MediaRemotingDisableButtonElement> element_;
57 };
58
59 MediaRemotingDisableButtonElement::MediaRemotingDisableButtonElement(
60 MediaRemotingInterstitialElements& interstitial_elements)
61 : HTMLInputElement(interstitial_elements.GetDocument(), false),
62 interstitial_elements_(interstitial_elements) {
63 listener_ = new MouseEventsListener(*this);
64 EnsureUserAgentShadowRoot();
65 setType(InputTypeNames::text);
66 setValue(interstitial_elements.VideoElement().GetLocale().QueryString(
67 WebLocalizedString::kMediaRemotingDisableText));
68 SetShadowPseudoId(AtomicString("-internal-media-remoting-disable-button"));
69 }
70
71 void MediaRemotingDisableButtonElement::OnShown() {
72 GetDocument().addEventListener(EventTypeNames::click, listener_, true);
73 }
74
75 void MediaRemotingDisableButtonElement::OnHidden() {
76 GetDocument().removeEventListener(EventTypeNames::click, listener_, true);
77 }
78
79 HTMLVideoElement& MediaRemotingDisableButtonElement::VideoElement() const {
80 return interstitial_elements_->VideoElement();
81 }
82
83 DEFINE_TRACE(MediaRemotingDisableButtonElement) {
84 visitor->Trace(interstitial_elements_);
85 visitor->Trace(listener_);
86 HTMLInputElement::Trace(visitor);
87 }
88
89 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698