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