• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_RENDERER_SCREEN_ORIENTATION_SCREEN_ORIENTATION_DISPATCHER_H_
6 #define CONTENT_RENDERER_SCREEN_ORIENTATION_SCREEN_ORIENTATION_DISPATCHER_H_
7 
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/WebLockOrientationCallback.h"
13 #include "third_party/WebKit/public/platform/WebScreenOrientationClient.h"
14 #include "third_party/WebKit/public/platform/WebScreenOrientationLockType.h"
15 #include "third_party/WebKit/public/platform/WebScreenOrientationType.h"
16 
17 namespace content {
18 
19 class RenderFrame;
20 
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();
31 
32  private:
33   friend class ScreenOrientationDispatcherTest;
34 
35   // RenderFrameObserver implementation.
36   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
37 
38   // blink::WebScreenOrientationClient implementation.
39   virtual void lockOrientation(
40       blink::WebScreenOrientationLockType orientation,
41       blink::WebLockOrientationCallback* callback) OVERRIDE;
42   virtual void unlockOrientation() OVERRIDE;
43 
44   void OnLockSuccess(int request_id);
45   void OnLockError(int request_id,
46                    blink::WebLockOrientationError error);
47 
48   void CancelPendingLocks();
49 
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_;
57 
58   DISALLOW_COPY_AND_ASSIGN(ScreenOrientationDispatcher);
59 };
60 
61 }  // namespace content
62 
63 #endif // CONTENT_RENDERER_SCREEN_ORIENTATION_SCREEN_ORIENTATION_DISPATCHER_H_
64