1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file.
4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef CONTENT_BROWSER_SCREEN_ORIENTATION_SCREEN_ORIENTATION_DISPATCHER_HOST_IMPL_H_
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define CONTENT_BROWSER_SCREEN_ORIENTATION_SCREEN_ORIENTATION_DISPATCHER_HOST_IMPL_H_
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/screen_orientation_dispatcher_host.h"
9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "content/public/browser/web_contents_observer.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "third_party/WebKit/public/platform/WebLockOrientationError.h"
110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "third_party/WebKit/public/platform/WebScreenOrientationLockType.h"
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace content {
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class RenderFrameHost;
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class ScreenOrientationProvider;
17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class WebContents;
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// ScreenOrientationDispatcherHost receives lock and unlock requests from the
20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// RenderFrames and dispatch them to the ScreenOrientationProvider. It also
21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// make sure that the right RenderFrame get replied for each lock request.
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass CONTENT_EXPORT ScreenOrientationDispatcherHostImpl
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : public ScreenOrientationDispatcherHost,
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      public WebContentsObserver {
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public:
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  explicit ScreenOrientationDispatcherHostImpl(WebContents* web_contents);
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~ScreenOrientationDispatcherHostImpl();
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // ScreenOrientationDispatcherHost:
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void NotifyLockSuccess(int request_id) OVERRIDE;
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void NotifyLockError(int request_id,
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                               blink::WebLockOrientationError error) OVERRIDE;
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void OnOrientationChange() OVERRIDE;
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // WebContentsObserver:
36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message&,
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                 RenderFrameHost* render_frame_host) OVERRIDE;
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void DidNavigateMainFrame(const LoadCommittedDetails& details,
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                    const FrameNavigateParams& params) OVERRIDE;
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private:
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  void OnLockRequest(RenderFrameHost* render_frame_host,
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                     blink::WebScreenOrientationLockType orientation,
4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                     int request_id);
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  void OnUnlockRequest(RenderFrameHost* render_frame_host);
46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns a RenderFrameHost if the request_id is still valid and the
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // associated RenderFrameHost still exists. Returns NULL otherwise.
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  RenderFrameHost* GetRenderFrameHostForRequestID(int request_id);
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void ResetCurrentLock();
526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void NotifyLockError(int request_id,
536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                       RenderFrameHost* render_frame_host,
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                       blink::WebLockOrientationError error);
55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_ptr<ScreenOrientationProvider> provider_;
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  struct LockInformation {
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    LockInformation(int request_id, int process_id, int routing_id);
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    int request_id;
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    int process_id;
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    int routing_id;
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  };
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // current_lock_ will be NULL if there are no current lock.
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  LockInformation* current_lock_;
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DISALLOW_COPY_AND_ASSIGN(ScreenOrientationDispatcherHostImpl);
68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  // namespace content
71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // CONTENT_BROWSER_SCREEN_ORIENTATION_SCREEN_ORIENTATION_DISPATCHER_HOST_IMPL_H_
73