| 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..4374a7af5482acb3d0bd9e741d4d7b5fffd7a77d
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/core/html/shadow/MediaRemotingElements.cpp
|
| @@ -0,0 +1,89 @@
|
| +// 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/InputTypeNames.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
|
| + : 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);
|
| +
|
| + 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);
|
| + }
|
| +
|
| + Member<MediaRemotingDisableButtonElement> element_;
|
| +};
|
| +
|
| +MediaRemotingDisableButtonElement::MediaRemotingDisableButtonElement(
|
| + MediaRemotingInterstitialElements& interstitial_elements)
|
| + : HTMLInputElement(interstitial_elements.GetDocument(), false),
|
| + interstitial_elements_(interstitial_elements) {
|
| + listener_ = new MouseEventsListener(*this);
|
| + EnsureUserAgentShadowRoot();
|
| + setType(InputTypeNames::text);
|
| + setValue(interstitial_elements.VideoElement().GetLocale().QueryString(
|
| + WebLocalizedString::kMediaRemotingDisableText));
|
| + SetShadowPseudoId(AtomicString("-internal-media-remoting-disable-button"));
|
| +}
|
| +
|
| +void MediaRemotingDisableButtonElement::OnShown() {
|
| + GetDocument().addEventListener(EventTypeNames::click, listener_, true);
|
| +}
|
| +
|
| +void MediaRemotingDisableButtonElement::OnHidden() {
|
| + GetDocument().removeEventListener(EventTypeNames::click, listener_, true);
|
| +}
|
| +
|
| +HTMLVideoElement& MediaRemotingDisableButtonElement::VideoElement() const {
|
| + return interstitial_elements_->VideoElement();
|
| +}
|
| +
|
| +DEFINE_TRACE(MediaRemotingDisableButtonElement) {
|
| + visitor->Trace(interstitial_elements_);
|
| + visitor->Trace(listener_);
|
| + HTMLInputElement::Trace(visitor);
|
| +}
|
| +
|
| +} // namespace blink
|
|
|