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"
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
) {
29 explicit ScreenOrientationDispatcher(RenderFrame
* render_frame
);
30 virtual ~ScreenOrientationDispatcher();
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_