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