1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_BROWSER_SCREEN_ORIENTATION_SCREEN_ORIENTATION_PROVIDER_ANDROID_H_ 6 #define CONTENT_BROWSER_SCREEN_ORIENTATION_SCREEN_ORIENTATION_PROVIDER_ANDROID_H_ 7 8 #include <jni.h> 9 10 #include "base/compiler_specific.h" 11 #include "content/public/browser/screen_orientation_provider.h" 12 #include "content/public/browser/web_contents_observer.h" 13 14 namespace content { 15 16 class ScreenOrientationDispatcherHost; 17 class WebContentsImpl; 18 19 class ScreenOrientationProviderAndroid : public ScreenOrientationProvider, 20 public WebContentsObserver { 21 public: 22 explicit ScreenOrientationProviderAndroid( 23 ScreenOrientationDispatcherHost* dispatcher, 24 WebContents* web_contents); 25 26 static bool Register(JNIEnv* env); 27 28 // ScreenOrientationProvider 29 virtual void LockOrientation(int request_id, 30 blink::WebScreenOrientationLockType) OVERRIDE; 31 virtual void UnlockOrientation() OVERRIDE; 32 virtual void OnOrientationChange() OVERRIDE; 33 34 // WebContentsObserver 35 virtual void DidToggleFullscreenModeForTab(bool entered_fullscreen) OVERRIDE; 36 37 // Ask the ScreenOrientationListener (Java) to start accurately listening to 38 // the screen orientation. It keep track of the number of start request if it 39 // is already running an accurate listening. 40 static void StartAccurateListening(); 41 42 // Ask the ScreenOrientationListener (Java) to stop accurately listening to 43 // the screen orientation. It will actually stop only if the number of stop 44 // requests matches the number of start requests. 45 static void StopAccurateListening(); 46 47 private: 48 WebContentsImpl* web_contents_impl(); 49 50 // Whether the passed |lock| matches the current orientation. In other words, 51 // whether the orientation will need to change to match the |lock|. 52 bool LockMatchesCurrentOrientation(blink::WebScreenOrientationLockType lock); 53 54 // Returns the lock type that should be associated with 'natural' lock. 55 // Returns WebScreenOrientationLockDefault if the natural lock type can't be 56 // found. 57 blink::WebScreenOrientationLockType GetNaturalLockType() const; 58 59 virtual ~ScreenOrientationProviderAndroid(); 60 61 // ScreenOrientationDispatcherHost owns ScreenOrientationProvider so 62 // dispatcher_ should not point to an invalid memory. 63 ScreenOrientationDispatcherHost* dispatcher_; 64 65 // Whether the ScreenOrientationProvider currently has a lock applied. 66 bool lock_applied_; 67 68 struct LockInformation { 69 LockInformation(int request_id, blink::WebScreenOrientationLockType lock); 70 int request_id; 71 blink::WebScreenOrientationLockType lock; 72 }; 73 LockInformation* pending_lock_; 74 75 DISALLOW_COPY_AND_ASSIGN(ScreenOrientationProviderAndroid); 76 }; 77 78 } // namespace content 79 80 #endif // CONTENT_BROWSER_SCREEN_ORIENTATION_SCREEN_ORIENTATION_PROVIDER_ANDROID_H_ 81