1d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// found in the LICENSE file. 4d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 5d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#ifndef ScreenOrientationController_h 6d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#define ScreenOrientationController_h 7d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 87242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/frame/FrameDestructionObserver.h" 9c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "core/frame/PlatformEventController.h" 10f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#include "platform/Supplementable.h" 11c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "platform/Timer.h" 12f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#include "public/platform/WebLockOrientationCallback.h" 13f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#include "public/platform/WebScreenOrientationLockType.h" 146f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch#include "public/platform/WebScreenOrientationType.h" 15d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 16f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)namespace blink { 17d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 18d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)class FrameView; 19197021e6b966cfb06891637935ef33fff06433d1Ben Murdochclass ScreenOrientation; 20e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)class WebScreenOrientationClient; 21d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 22c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)class ScreenOrientationController FINAL 23c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) : public NoBaseWillBeGarbageCollectedFinalized<ScreenOrientationController> 24c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) , public WillBeHeapSupplement<LocalFrame> 257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci , public FrameDestructionObserver 26c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) , public PlatformEventController { 27f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(ScreenOrientationController); 285d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WTF_MAKE_NONCOPYABLE(ScreenOrientationController); 29d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)public: 30f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) virtual ~ScreenOrientationController(); 31f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 32197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch void setOrientation(ScreenOrientation*); 33197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch void notifyOrientationChanged(); 34197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 35e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) void lock(WebScreenOrientationLockType, WebLockOrientationCallback*); 36197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch void unlock(); 37197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 38e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) static void provideTo(LocalFrame&, WebScreenOrientationClient*); 39197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch static ScreenOrientationController* from(LocalFrame&); 40d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char* supplementName(); 41d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void trace(Visitor*) OVERRIDE; 43f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 44d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)private: 45e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) explicit ScreenOrientationController(LocalFrame&, WebScreenOrientationClient*); 46e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) static WebScreenOrientationType computeOrientation(FrameView*); 47d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 48c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) // Inherited from PlatformEventController. 49c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void didUpdateData() OVERRIDE; 50c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void registerWithDispatcher() OVERRIDE; 51c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void unregisterWithDispatcher() OVERRIDE; 52c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual bool hasLastData() OVERRIDE; 53f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) virtual void pageVisibilityChanged() OVERRIDE; 54f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 55fdbb120d0a4a87db74bcb608de226c85a7d1c920Ben Murdoch // Inherited from FrameDestructionObserver. 56fdbb120d0a4a87db74bcb608de226c85a7d1c920Ben Murdoch virtual void willDetachFrameHost() override; 57fdbb120d0a4a87db74bcb608de226c85a7d1c920Ben Murdoch 58c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) void notifyDispatcher(); 59c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 60197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch void updateOrientation(); 61197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 62c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) void dispatchEventTimerFired(Timer<ScreenOrientationController>*); 63c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bool isActiveAndVisible() const; 657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 66197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch PersistentWillBeMember<ScreenOrientation> m_orientation; 67e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebScreenOrientationClient* m_client; 68c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) Timer<ScreenOrientationController> m_dispatchEventTimer; 69d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}; 70d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 71c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 72d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 73d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#endif // ScreenOrientationController_h 74