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

Unified Diff: content/public/browser/screen_orientation_provider.h

Issue 546453004: Centralize ScreenOrientationProvider logic, add platform delegates (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@screen_orientation_public_impl_split
Patch Set: Remove Factory Created 6 years, 2 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: content/public/browser/screen_orientation_provider.h
diff --git a/content/public/browser/screen_orientation_provider.h b/content/public/browser/screen_orientation_provider.h
index c94fbe7239219326d1810b7cc4bc8d095bfd1fda..18260c7b4915d8c08916812809cab674763ebfc3 100644
--- a/content/public/browser/screen_orientation_provider.h
+++ b/content/public/browser/screen_orientation_provider.h
@@ -6,53 +6,75 @@
#define CONTENT_PUBLIC_BROWSER_SCREEN_ORIENTATION_PROVIDER_H_
#include "base/macros.h"
+#include "base/memory/scoped_ptr.h"
#include "content/common/content_export.h"
+#include "content/public/browser/web_contents_observer.h"
#include "third_party/WebKit/public/platform/WebScreenOrientationLockType.h"
namespace content {
+class ScreenOrientationDelegate;
class ScreenOrientationDispatcherHost;
class WebContents;
-// Interface that needs to be implemented by any backend that wants to handle
-// screen orientation lock/unlock.
-class CONTENT_EXPORT ScreenOrientationProvider {
+// Handles screen orientation lock/unlock. Platforms which wish to provide
+// custom implementations can provide a factory for ScreenOrientationDelegate.
+class CONTENT_EXPORT ScreenOrientationProvider : public WebContentsObserver {
public:
+ ScreenOrientationProvider(ScreenOrientationDispatcherHost* dispatcher_host,
+ WebContents* web_contents);
+ virtual ~ScreenOrientationProvider();
+
// Lock the screen orientation to |orientations|.
- virtual void LockOrientation(
- int request_id,
- blink::WebScreenOrientationLockType orientations) = 0;
+ void LockOrientation(int request_id,
+ blink::WebScreenOrientationLockType lock_orientation);
// Unlock the screen orientation.
- virtual void UnlockOrientation() = 0;
+ void UnlockOrientation();
// Inform about a screen orientation update. It is called to let the provider
// know if a lock has been resolved.
- virtual void OnOrientationChange() = 0;
+ void OnOrientationChange();
+
+ // Provide a delegate which creates delegates for platform implementations.
+ // The delegate is not owned by ScreenOrientationProvider.
+ static void SetDelegate(ScreenOrientationDelegate* delegate_);
+
+ // WebContentsObserver
+ virtual void DidToggleFullscreenModeForTab(bool entered_fullscreen) OVERRIDE;
+
+ private:
+ struct LockInformation {
+ LockInformation(int request_id, blink::WebScreenOrientationLockType lock);
+ int request_id;
+ blink::WebScreenOrientationLockType lock;
+ };
- virtual ~ScreenOrientationProvider() {}
+ // Returns the lock type that should be associated with 'natural' lock.
+ // Returns WebScreenOrientationLockDefault if the natural lock type can't be
+ // found.
+ blink::WebScreenOrientationLockType GetNaturalLockType() const;
- protected:
- friend class ScreenOrientationDispatcherHostImpl;
+ // Whether the passed |lock| matches the current orientation. In other words,
+ // whether the orientation will need to change to match the |lock|.
+ bool LockMatchesCurrentOrientation(blink::WebScreenOrientationLockType lock);
- static ScreenOrientationProvider* Create(
- ScreenOrientationDispatcherHost* dispatcher_host,
- WebContents* web_contents);
+ // Not owned, responsible for platform implementations.
+ static ScreenOrientationDelegate* delegate_;
- ScreenOrientationProvider() {}
+ // ScreenOrientationDispatcherHost owns ScreenOrientationProvider.
+ ScreenOrientationDispatcherHost* dispatcher_;
+
+ // Whether the ScreenOrientationProvider currently has a lock applied.
+ bool lock_applied_;
+
+ // Locks that require orientation changes are not completed until
+ // OnOrientationChange.
+ scoped_ptr<LockInformation> pending_lock_;
DISALLOW_COPY_AND_ASSIGN(ScreenOrientationProvider);
};
-#if !defined(OS_ANDROID)
-// static
-ScreenOrientationProvider* ScreenOrientationProvider::Create(
- ScreenOrientationDispatcherHost* dispatcher_host,
- WebContents* web_contents) {
- return NULL;
-}
-#endif // !defined(OS_ANDROID)
-
} // namespace content
#endif // CONTENT_PUBLIC_BROWSER_SCREEN_ORIENTATION_PROVIDER_H_

Powered by Google App Engine
This is Rietveld 408576698