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

Unified Diff: third_party/WebKit/Source/modules/media_controls/MediaControlsOrientationLockDelegate.h

Issue 2890423003: [Media controls] Integrate rotate-to-fullscreen with orientation lock (Closed)
Patch Set: #undef atan2,fmod Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/media_controls/MediaControlsOrientationLockDelegate.h
diff --git a/third_party/WebKit/Source/modules/media_controls/MediaControlsOrientationLockDelegate.h b/third_party/WebKit/Source/modules/media_controls/MediaControlsOrientationLockDelegate.h
index b4d77675ee0812f9f27915e01fcf752571e7c2ba..a41b2eb7c943c2c82a280e1ab8b014ef5bb4c86f 100644
--- a/third_party/WebKit/Source/modules/media_controls/MediaControlsOrientationLockDelegate.h
+++ b/third_party/WebKit/Source/modules/media_controls/MediaControlsOrientationLockDelegate.h
@@ -6,11 +6,13 @@
#define MediaControlsOrientationLockDelegate_h
#include "core/events/EventListener.h"
+#include "device/screen_orientation/public/interfaces/screen_orientation.mojom-blink.h"
#include "modules/ModulesExport.h"
#include "public/platform/modules/screen_orientation/WebScreenOrientationLockType.h"
namespace blink {
+class DeviceOrientationEvent;
class Document;
class HTMLVideoElement;
@@ -19,14 +21,22 @@ class HTMLVideoElement;
// `MediaControlsImpl` when the feature applies. Once created, it will use
// events to change state.
//
+// The behavior depends on whether MediaControlsRotateToFullscreenDelegate is
+// enabled. If it is enabled and the user has not locked the screen orientation
+// at the OS level, then the orientation lock is only held until the user
+// rotates their device to match the orientation of the video; otherwise it is
+// held until fullscreen is exited.
+//
// The different states of the class are:
-// - PendingFullscreen: the object is created and is waiting for the associated
-// <video> to go fullscreen in order to apply an orientation lock;
+// - PendingFullscreen: the object is created and it is either waiting for the
+// associated <video> to go fullscreen in order to apply an orientation lock,
+// or it already went fullscreen then the lock was unlocked since the user
+// rotated their device, and now it is waiting until fullscreen is re-entered;
// - PendingMetadata: the <video> is fullscreen but the metadata have not been
// downloaded yet. It can happen because of network latency or because the
// <video> went fullscreen before playback and download started;
// - MaybeLockedFullscreen: the <video> is fullscreen and a screen orientation
-// lock was applied.
+// lock is applied.
//
// The possible state transitions are:
// - PendingFullscreen => PendingMetadata: on fullscreenchange event (entering
@@ -34,10 +44,11 @@ class HTMLVideoElement;
// - PendingFullscreen => MaybeLockedFullscreen: on fullscreenchange event
// (entering fullscreen) when metadata are available;
// - PendingMetadata => MaybeLockedFullscreen: on loadedmetadata;
-// - PendingMetadata => PendingFullscreen: on fullscreenchange event (leaving
+// - PendingMetadata => PendingFullscreen: on fullscreenchange event (exiting
// fullscreen);
// - MaybeLockedFullscreen => PendingFullscreen: on fullscreenchange event
-// (leaving fullscreen).
+// (exiting fullscreen) or on deviceorientation event (rotated to match the
+// orientation of the video).
class MediaControlsOrientationLockDelegate final : public EventListener {
public:
explicit MediaControlsOrientationLockDelegate(HTMLVideoElement&);
@@ -84,13 +95,20 @@ class MediaControlsOrientationLockDelegate final : public EventListener {
// locked.
void MaybeUnlockOrientation();
+ void MaybeListenToDeviceOrientation();
+ void GotIsAutoRotateEnabledByUser(bool enabled);
+
+ void MaybeUnlockIfDeviceOrientationMatchesVideo(DeviceOrientationEvent*);
+
// Current state of the object. See comment at the top of the file for a
// detailed description.
State state_ = State::kPendingFullscreen;
- // Whether the controls should unlock the screen orientation when possible.
- // In other words, whether the orientation was locked.
- bool should_unlock_orientation_ = false;
+ // Which lock is currently applied by this delegate.
+ WebScreenOrientationLockType locked_orientation_ =
+ kWebScreenOrientationLockDefault /* unlocked */;
+
+ device::mojom::blink::ScreenOrientationListenerPtr monitor_;
// `video_element_` owns MediaControlsImpl that owns |this|.
Member<HTMLVideoElement> video_element_;

Powered by Google App Engine
This is Rietveld 408576698