Index: third_party/WebKit/Source/core/html/MediaCustomControlsFullscreenDetector.cpp |
diff --git a/third_party/WebKit/Source/core/html/MediaCustomControlsFullscreenDetector.cpp b/third_party/WebKit/Source/core/html/MediaCustomControlsFullscreenDetector.cpp |
deleted file mode 100644 |
index 773adc5c85e49f4c2c131a068e5ba5d7ef603b63..0000000000000000000000000000000000000000 |
--- a/third_party/WebKit/Source/core/html/MediaCustomControlsFullscreenDetector.cpp |
+++ /dev/null |
@@ -1,159 +0,0 @@ |
-// 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/MediaCustomControlsFullscreenDetector.h" |
- |
-#include "core/dom/Fullscreen.h" |
-#include "core/dom/TaskRunnerHelper.h" |
-#include "core/events/Event.h" |
-#include "core/html/HTMLVideoElement.h" |
-#include "core/layout/IntersectionGeometry.h" |
- |
-namespace blink { |
- |
-namespace { |
- |
-constexpr double kCheckFullscreenIntervalSeconds = 1.0f; |
-constexpr float kMostlyFillViewportThresholdOfOccupationProportion = 0.85f; |
-constexpr float kMostlyFillViewportThresholdOfVisibleProportion = 0.75f; |
- |
-} // anonymous namespace |
- |
-MediaCustomControlsFullscreenDetector::MediaCustomControlsFullscreenDetector( |
- HTMLVideoElement& video) |
- : EventListener(CPPEventListenerType), |
- m_videoElement(video), |
- m_checkViewportIntersectionTimer( |
- TaskRunnerHelper::get(TaskType::Unthrottled, &video.document()), |
- this, |
- &MediaCustomControlsFullscreenDetector:: |
- onCheckViewportIntersectionTimerFired) { |
- if (videoElement().isConnected()) |
- attach(); |
-} |
- |
-bool MediaCustomControlsFullscreenDetector::operator==( |
- const EventListener& other) const { |
- return this == &other; |
-} |
- |
-void MediaCustomControlsFullscreenDetector::attach() { |
- videoElement().addEventListener(EventTypeNames::loadedmetadata, this, true); |
- videoElement().document().addEventListener( |
- EventTypeNames::webkitfullscreenchange, this, true); |
- videoElement().document().addEventListener(EventTypeNames::fullscreenchange, |
- this, true); |
-} |
- |
-void MediaCustomControlsFullscreenDetector::detach() { |
- videoElement().removeEventListener(EventTypeNames::loadedmetadata, this, |
- true); |
- videoElement().document().removeEventListener( |
- EventTypeNames::webkitfullscreenchange, this, true); |
- videoElement().document().removeEventListener( |
- EventTypeNames::fullscreenchange, this, true); |
- m_checkViewportIntersectionTimer.stop(); |
- |
- if (videoElement().webMediaPlayer()) |
- videoElement().webMediaPlayer()->setIsEffectivelyFullscreen(false); |
-} |
- |
-bool MediaCustomControlsFullscreenDetector::computeIsDominantVideoForTests( |
- const IntRect& targetRect, |
- const IntRect& rootRect, |
- const IntRect& intersectionRect) { |
- if (targetRect.isEmpty() || rootRect.isEmpty()) |
- return false; |
- |
- const float xOccupationProportion = |
- 1.0f * intersectionRect.width() / rootRect.width(); |
- const float yOccupationProportion = |
- 1.0f * intersectionRect.height() / rootRect.height(); |
- |
- // If the viewport is mostly occupied by the video, return true. |
- if (std::min(xOccupationProportion, yOccupationProportion) >= |
- kMostlyFillViewportThresholdOfOccupationProportion) { |
- return true; |
- } |
- |
- // If neither of the dimensions of the viewport is mostly occupied by the |
- // video, return false. |
- if (std::max(xOccupationProportion, yOccupationProportion) < |
- kMostlyFillViewportThresholdOfOccupationProportion) { |
- return false; |
- } |
- |
- // If the video is mostly visible in the indominant dimension, return true. |
- // Otherwise return false. |
- if (xOccupationProportion > yOccupationProportion) { |
- return targetRect.height() * |
- kMostlyFillViewportThresholdOfVisibleProportion < |
- intersectionRect.height(); |
- } |
- return targetRect.width() * kMostlyFillViewportThresholdOfVisibleProportion < |
- intersectionRect.width(); |
-} |
- |
-void MediaCustomControlsFullscreenDetector::handleEvent( |
- ExecutionContext* context, |
- Event* event) { |
- DCHECK(event->type() == EventTypeNames::loadedmetadata || |
- event->type() == EventTypeNames::webkitfullscreenchange || |
- event->type() == EventTypeNames::fullscreenchange); |
- |
- // Video is not loaded yet. |
- if (videoElement().getReadyState() < HTMLMediaElement::kHaveMetadata) |
- return; |
- |
- if (!videoElement().isConnected() || !isVideoOrParentFullscreen()) { |
- m_checkViewportIntersectionTimer.stop(); |
- |
- if (videoElement().webMediaPlayer()) |
- videoElement().webMediaPlayer()->setIsEffectivelyFullscreen(false); |
- |
- return; |
- } |
- |
- m_checkViewportIntersectionTimer.startOneShot(kCheckFullscreenIntervalSeconds, |
- BLINK_FROM_HERE); |
-} |
- |
-void MediaCustomControlsFullscreenDetector::contextDestroyed() { |
- // This method is called by HTMLVideoElement when it observes context destroy. |
- // The reason is that when HTMLMediaElement observes context destroy, it will |
- // destroy webMediaPlayer() thus the final setIsEffectivelyFullscreen(false) |
- // is not called. |
- detach(); |
-} |
- |
-void MediaCustomControlsFullscreenDetector:: |
- onCheckViewportIntersectionTimerFired(TimerBase*) { |
- DCHECK(isVideoOrParentFullscreen()); |
- IntersectionGeometry geometry(nullptr, videoElement(), Vector<Length>(), |
- true); |
- geometry.computeGeometry(); |
- |
- bool isDominant = computeIsDominantVideoForTests( |
- geometry.targetIntRect(), geometry.rootIntRect(), |
- geometry.intersectionIntRect()); |
- |
- if (videoElement().webMediaPlayer()) |
- videoElement().webMediaPlayer()->setIsEffectivelyFullscreen(isDominant); |
-} |
- |
-bool MediaCustomControlsFullscreenDetector::isVideoOrParentFullscreen() { |
- Element* fullscreenElement = |
- Fullscreen::currentFullScreenElementFrom(videoElement().document()); |
- if (!fullscreenElement) |
- return false; |
- |
- return fullscreenElement->contains(&videoElement()); |
-} |
- |
-DEFINE_TRACE(MediaCustomControlsFullscreenDetector) { |
- EventListener::trace(visitor); |
- visitor->trace(m_videoElement); |
-} |
- |
-} // namespace blink |