Index: third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegate.cpp |
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegate.cpp b/third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegate.cpp |
deleted file mode 100644 |
index 71d89b35e4e776ac71a0738f96e19a9387791acd..0000000000000000000000000000000000000000 |
--- a/third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegate.cpp |
+++ /dev/null |
@@ -1,218 +0,0 @@ |
-// Copyright 2016 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 "MediaControlsOrientationLockDelegate.h" |
- |
-#include "core/events/Event.h" |
-#include "core/frame/ScreenOrientationController.h" |
-#include "core/html/HTMLVideoElement.h" |
-#include "core/page/ChromeClient.h" |
-#include "platform/Histogram.h" |
-#include "public/platform/WebScreenInfo.h" |
-#include "public/platform/modules/screen_orientation/WebLockOrientationCallback.h" |
- |
-namespace blink { |
- |
-namespace { |
- |
-// These values are used for histograms. Do not reorder. |
-enum class MetadataAvailabilityMetrics { |
- Available = 0, // Available when lock was attempted. |
- Missing = 1, // Missing when lock was attempted. |
- Received = 2, // Received after being missing in order to lock. |
- |
- // Keep at the end. |
- Max = 3 |
-}; |
- |
-// These values are used for histograms. Do not reorder. |
-enum class LockResultMetrics { |
- AlreadyLocked = 0, // Frame already has a lock. |
- Portrait = 1, // Locked to portrait. |
- Landscape = 2, // Locked to landscape. |
- |
- // Keep at the end. |
- Max = 3 |
-}; |
- |
-void recordMetadataAvailability(MetadataAvailabilityMetrics metrics) { |
- DEFINE_STATIC_LOCAL( |
- EnumerationHistogram, metadataHistogram, |
- ("Media.Video.FullscreenOrientationLock.MetadataAvailability", |
- static_cast<int>(MetadataAvailabilityMetrics::Max))); |
- metadataHistogram.count(static_cast<int>(metrics)); |
-} |
- |
-void recordLockResult(LockResultMetrics metrics) { |
- DEFINE_STATIC_LOCAL(EnumerationHistogram, lockResultHistogram, |
- ("Media.Video.FullscreenOrientationLock.LockResult", |
- static_cast<int>(LockResultMetrics::Max))); |
- lockResultHistogram.count(static_cast<int>(metrics)); |
-} |
- |
-// WebLockOrientationCallback implementation that will not react to a success |
-// nor a failure. |
-class DummyScreenOrientationCallback : public WebLockOrientationCallback { |
- public: |
- void onSuccess() override {} |
- void onError(WebLockOrientationError) override {} |
-}; |
- |
-} // anonymous namespace |
- |
-MediaControlsOrientationLockDelegate::MediaControlsOrientationLockDelegate( |
- HTMLVideoElement& video) |
- : EventListener(CPPEventListenerType), m_videoElement(video) { |
- if (videoElement().isConnected()) |
- attach(); |
-} |
- |
-void MediaControlsOrientationLockDelegate::attach() { |
- DCHECK(videoElement().isConnected()); |
- |
- document().addEventListener(EventTypeNames::fullscreenchange, this, true); |
- videoElement().addEventListener(EventTypeNames::webkitfullscreenchange, this, |
- true); |
- videoElement().addEventListener(EventTypeNames::loadedmetadata, this, true); |
-} |
- |
-void MediaControlsOrientationLockDelegate::detach() { |
- DCHECK(!videoElement().isConnected()); |
- |
- document().removeEventListener(EventTypeNames::fullscreenchange, this, true); |
- videoElement().removeEventListener(EventTypeNames::webkitfullscreenchange, |
- this, true); |
- videoElement().removeEventListener(EventTypeNames::loadedmetadata, this, |
- true); |
-} |
- |
-bool MediaControlsOrientationLockDelegate::operator==( |
- const EventListener& other) const { |
- return this == &other; |
-} |
- |
-void MediaControlsOrientationLockDelegate::maybeLockOrientation() { |
- DCHECK(m_state != State::MaybeLockedFullscreen); |
- |
- if (videoElement().getReadyState() == HTMLMediaElement::kHaveNothing) { |
- recordMetadataAvailability(MetadataAvailabilityMetrics::Missing); |
- m_state = State::PendingMetadata; |
- return; |
- } |
- |
- if (m_state == State::PendingMetadata) |
- recordMetadataAvailability(MetadataAvailabilityMetrics::Received); |
- else |
- recordMetadataAvailability(MetadataAvailabilityMetrics::Available); |
- |
- m_state = State::MaybeLockedFullscreen; |
- |
- if (!document().frame()) |
- return; |
- |
- auto controller = ScreenOrientationController::from(*document().frame()); |
- if (controller->maybeHasActiveLock()) { |
- recordLockResult(LockResultMetrics::AlreadyLocked); |
- return; |
- } |
- |
- WebScreenOrientationLockType orientationLock = computeOrientationLock(); |
- controller->lock(orientationLock, |
- WTF::wrapUnique(new DummyScreenOrientationCallback)); |
- m_shouldUnlockOrientation = true; |
- |
- if (orientationLock == WebScreenOrientationLockLandscape) |
- recordLockResult(LockResultMetrics::Landscape); |
- else |
- recordLockResult(LockResultMetrics::Portrait); |
-} |
- |
-void MediaControlsOrientationLockDelegate::maybeUnlockOrientation() { |
- DCHECK(m_state != State::PendingFullscreen); |
- |
- m_state = State::PendingFullscreen; |
- |
- if (!m_shouldUnlockOrientation) |
- return; |
- |
- ScreenOrientationController::from(*document().frame())->unlock(); |
- m_shouldUnlockOrientation = false; |
-} |
- |
-HTMLVideoElement& MediaControlsOrientationLockDelegate::videoElement() const { |
- return *m_videoElement; |
-} |
- |
-Document& MediaControlsOrientationLockDelegate::document() const { |
- return videoElement().document(); |
-} |
- |
-void MediaControlsOrientationLockDelegate::handleEvent( |
- ExecutionContext* executionContext, |
- Event* event) { |
- if (event->type() == EventTypeNames::fullscreenchange || |
- event->type() == EventTypeNames::webkitfullscreenchange) { |
- if (videoElement().isFullscreen()) { |
- if (m_state == State::PendingFullscreen) |
- maybeLockOrientation(); |
- } else { |
- if (m_state != State::PendingFullscreen) |
- maybeUnlockOrientation(); |
- } |
- |
- return; |
- } |
- |
- if (event->type() == EventTypeNames::loadedmetadata) { |
- if (m_state == State::PendingMetadata) |
- maybeLockOrientation(); |
- |
- return; |
- } |
- |
- NOTREACHED(); |
-} |
- |
-WebScreenOrientationLockType |
-MediaControlsOrientationLockDelegate::computeOrientationLock() const { |
- DCHECK(videoElement().getReadyState() != HTMLMediaElement::kHaveNothing); |
- |
- const unsigned width = videoElement().videoWidth(); |
- const unsigned height = videoElement().videoHeight(); |
- |
- if (width > height) |
- return WebScreenOrientationLockLandscape; |
- |
- if (height > width) |
- return WebScreenOrientationLockPortrait; |
- |
- // For square videos, try to lock to the current screen orientation for |
- // consistency. Use WebScreenOrientationLockLandscape as a fallback value. |
- // TODO(mlamouri): we could improve this by having direct access to |
- // `window.screen.orientation.type`. |
- Frame* frame = document().frame(); |
- if (!frame) |
- return WebScreenOrientationLockLandscape; |
- |
- switch (frame->chromeClient().screenInfo().orientationType) { |
- case WebScreenOrientationPortraitPrimary: |
- case WebScreenOrientationPortraitSecondary: |
- return WebScreenOrientationLockPortrait; |
- case WebScreenOrientationLandscapePrimary: |
- case WebScreenOrientationLandscapeSecondary: |
- return WebScreenOrientationLockLandscape; |
- case WebScreenOrientationUndefined: |
- return WebScreenOrientationLockLandscape; |
- } |
- |
- NOTREACHED(); |
- return WebScreenOrientationLockLandscape; |
-} |
- |
-DEFINE_TRACE(MediaControlsOrientationLockDelegate) { |
- EventListener::trace(visitor); |
- visitor->trace(m_videoElement); |
-} |
- |
-} // namespace blink |