Home | History | Annotate | Download | only in screen_orientation
      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