Upstreaming browser/ui/uikit_ui_util from iOS.
[chromium-blink-merge.git] / content / renderer / screen_orientation / screen_orientation_dispatcher.h
blobe195f5fecf5cef4646a387d84f757d0e002a9949
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.
5 #ifndef CONTENT_RENDERER_SCREEN_ORIENTATION_SCREEN_ORIENTATION_DISPATCHER_H_
6 #define CONTENT_RENDERER_SCREEN_ORIENTATION_SCREEN_ORIENTATION_DISPATCHER_H_
8 #include "base/compiler_specific.h"
9 #include "base/id_map.h"
10 #include "base/macros.h"
11 #include "content/public/renderer/render_frame_observer.h"
12 #include "third_party/WebKit/public/platform/modules/screen_orientation/WebLockOrientationCallback.h"
13 #include "third_party/WebKit/public/platform/modules/screen_orientation/WebScreenOrientationClient.h"
14 #include "third_party/WebKit/public/platform/modules/screen_orientation/WebScreenOrientationLockType.h"
15 #include "third_party/WebKit/public/platform/modules/screen_orientation/WebScreenOrientationType.h"
17 namespace content {
19 class RenderFrame;
21 // ScreenOrientationDispatcher implements the WebScreenOrientationClient API
22 // which handles screen lock. It sends lock (or unlock) requests to the browser
23 // process and listens for responses and let Blink know about the result of the
24 // request via WebLockOrientationCallback.
25 class CONTENT_EXPORT ScreenOrientationDispatcher :
26 public RenderFrameObserver,
27 NON_EXPORTED_BASE(public blink::WebScreenOrientationClient) {
28 public:
29 explicit ScreenOrientationDispatcher(RenderFrame* render_frame);
30 virtual ~ScreenOrientationDispatcher();
32 private:
33 friend class ScreenOrientationDispatcherTest;
35 // RenderFrameObserver implementation.
36 bool OnMessageReceived(const IPC::Message& message) override;
38 // blink::WebScreenOrientationClient implementation.
39 virtual void lockOrientation(
40 blink::WebScreenOrientationLockType orientation,
41 blink::WebLockOrientationCallback* callback) override;
42 virtual void unlockOrientation() override;
44 void OnLockSuccess(int request_id);
45 void OnLockError(int request_id,
46 blink::WebLockOrientationError error);
48 void CancelPendingLocks();
50 // The pending_callbacks_ map is mostly meant to have a unique ID to associate
51 // with every callback going trough the dispatcher. The map will own the
52 // pointer in the sense that it will destroy it when Remove() will be called.
53 // Furthermore, we only expect to have one callback at a time in this map,
54 // which is what IDMap was designed for.
55 typedef IDMap<blink::WebLockOrientationCallback, IDMapOwnPointer> CallbackMap;
56 CallbackMap pending_callbacks_;
58 DISALLOW_COPY_AND_ASSIGN(ScreenOrientationDispatcher);
61 } // namespace content
63 #endif // CONTENT_RENDERER_SCREEN_ORIENTATION_SCREEN_ORIENTATION_DISPATCHER_H_