15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_BASE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_BASE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <OpenGL/OpenGL.h>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback_forward.h"
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/process/kill.h"
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/timer/timer.h"
19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "cc/output/compositor_frame.h"
20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/browser/renderer_host/event_with_latency_info.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/content_export.h"
22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/common/input/input_event_ack_state.h"
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/public/browser/render_widget_host_view.h"
24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ipc/ipc_listener.h"
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "third_party/WebKit/public/platform/WebScreenOrientationType.h"
26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "third_party/WebKit/public/web/WebPopupType.h"
27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "third_party/WebKit/public/web/WebTextDirection.h"
28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/base/ime/text_input_mode.h"
29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/base/ime/text_input_type.h"
30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/gfx/display.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h"
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/gfx/range/range.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h"
34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/surface/transport_dib.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class SkBitmap;
37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)struct AccessibilityHostMsg_EventParams;
39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)struct GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params;
40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)struct GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params;
41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)struct ViewHostMsg_SelectionBounds_Params;
42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace media {
44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class VideoFrame;
45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace blink {
48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)struct WebScreenInfo;
49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace content {
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass BrowserAccessibilityDelegate;
53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class BrowserAccessibilityManager;
54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class SyntheticGesture;
55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class SyntheticGestureTarget;
56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class WebCursor;
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)struct DidOverscrollParams;
58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)struct NativeWebKeyboardEvent;
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)struct WebPluginGeometry;
60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TODO(Sikugu): Though we have the return status of the result here,
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// we should add the reason for failure as a new parameter to handle cases
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// efficiently.
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitypedef const base::Callback<void(bool, const SkBitmap&)>
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    CopyFromCompositingSurfaceCallback;
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Basic implementation shared by concrete RenderWidgetHostView subclasses.
68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class CONTENT_EXPORT RenderWidgetHostViewBase : public RenderWidgetHostView,
69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                                public IPC::Listener {
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~RenderWidgetHostViewBase();
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // RenderWidgetHostView implementation.
74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void SetBackgroundOpaque(bool opaque) OVERRIDE;
75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool GetBackgroundOpaque() OVERRIDE;
76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual ui::TextInputClient* GetTextInputClient() OVERRIDE;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsShowingContextMenu() const OVERRIDE;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetShowingContextMenu(bool showing_menu) OVERRIDE;
79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetSelectedText() const OVERRIDE;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsMouseLocked() OVERRIDE;
81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual gfx::Size GetVisibleViewportSize() const OVERRIDE;
82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void SetInsets(const gfx::Insets& insets) OVERRIDE;
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void BeginFrameSubscription(
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<RenderWidgetHostViewFrameSubscriber> subscriber) OVERRIDE;
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void EndFrameSubscription() OVERRIDE;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // IPC::Listener implementation:
88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
89a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Called by the host when the input flush has completed.
91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  void OnDidFlushInput();
92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  void SetPopupType(blink::WebPopupType popup_type);
94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  blink::WebPopupType GetPopupType();
96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Return a value that is incremented each time the renderer swaps a new frame
98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // to the view.
99010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  uint32 RendererFrameNumber();
100010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Called each time the RenderWidgetHost receives a new frame for display from
102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // the renderer.
103010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  void DidReceiveRendererFrame();
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notification that a resize or move session ended on the native widget.
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateScreenInfo(gfx::NativeView view);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
108a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  // Tells if the display property (work area/scale factor) has
109a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  // changed since the last time.
110a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  bool HasDisplayPropertyChanged(gfx::NativeView view);
111a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::WeakPtr<RenderWidgetHostViewBase> GetWeakPtr();
1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
114010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  //----------------------------------------------------------------------------
115010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // The following methods can be overridden by derived classes.
116010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
117010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Notifies the View that the renderer text selection has changed.
118010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void SelectionChanged(const base::string16& text,
119010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                size_t offset,
120010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                const gfx::Range& range);
121010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // The requested size of the renderer. May differ from GetViewBounds().size()
123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // when the view requires additional throttling.
124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual gfx::Size GetRequestedRendererSize() const;
125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
126010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // The size of the view's backing surface in non-DPI-adjusted pixels.
127010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual gfx::Size GetPhysicalBackingSize() const;
128010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
12903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // The amount that the viewport size given to Blink is shrunk by the URL-bar.
13003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual float GetTopControlsLayoutHeight() const;
131010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
132010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Called prior to forwarding input event messages to the renderer, giving
133010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // the view a chance to perform in-process event filtering or processing.
134010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Return values of |NOT_CONSUMED| or |UNKNOWN| will result in |input_event|
135010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // being forwarded.
136010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual InputEventAckState FilterInputEvent(
137010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const blink::WebInputEvent& input_event);
138010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
139010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Called by the host when it requires an input flush; the flush call should
140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // by synchronized with BeginFrame.
141010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void OnSetNeedsFlushInput();
142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
14346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void WheelEventAck(const blink::WebMouseWheelEvent& event,
14446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                             InputEventAckState ack_result);
14546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
146010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void GestureEventAck(const blink::WebGestureEvent& event,
147010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                               InputEventAckState ack_result);
148010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Create a platform specific SyntheticGestureTarget implementation that will
150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // be used to inject synthetic input events.
151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual scoped_ptr<SyntheticGestureTarget> CreateSyntheticGestureTarget();
152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Return true if frame subscription is supported on this platform.
154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool CanSubscribeFrame() const;
155010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Create a BrowserAccessibilityManager for this view.
157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual BrowserAccessibilityManager* CreateBrowserAccessibilityManager(
158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      BrowserAccessibilityDelegate* delegate);
159010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void AccessibilityShowMenu(const gfx::Point& point);
161010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual gfx::Point AccessibilityOriginInScreen(const gfx::Rect& bounds);
1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual gfx::AcceleratedWidget AccessibilityGetAcceleratedWidget();
1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual gfx::NativeViewAccessible AccessibilityGetNativeViewAccessible();
164010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual SkColorType PreferredReadbackFormat();
166010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
167010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Informs that the focused DOM node has changed.
168010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void FocusedNodeChanged(bool is_editable_node) {}
169010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
170010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void OnSwapCompositorFrame(uint32 output_surface_id,
171010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                     scoped_ptr<cc::CompositorFrame> frame) {}
172010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
173010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Because the associated remote WebKit instance can asynchronously
174010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // prevent-default on a dispatched touch event, the touch events are queued in
175010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // the GestureRecognizer until invocation of ProcessAckedTouchEvent releases
176010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // it to be consumed (when |ack_result| is NOT_CONSUMED OR NO_CONSUMER_EXISTS)
177010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // or ignored (when |ack_result| is CONSUMED).
178010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void ProcessAckedTouchEvent(const TouchEventWithLatencyInfo& touch,
179010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                      InputEventAckState ack_result) {}
180010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void DidOverscroll(const DidOverscrollParams& params) {}
182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
183010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void DidStopFlinging() {}
184010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
185010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  //----------------------------------------------------------------------------
186010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // The following static methods are implemented by each platform.
187010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
188010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  static void GetDefaultScreenInfo(blink::WebScreenInfo* results);
189010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
190010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  //----------------------------------------------------------------------------
191010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // The following pure virtual methods are implemented by derived classes.
192010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
193010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Perform all the initialization steps necessary for this object to represent
194010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // a popup (such as a <select> dropdown), then shows the popup at |pos|.
195010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void InitAsPopup(RenderWidgetHostView* parent_host_view,
196010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                           const gfx::Rect& pos) = 0;
197010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
198010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Perform all the initialization steps necessary for this object to represent
199010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // a full screen window.
200010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // |reference_host_view| is the view associated with the creating page that
201010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // helps to position the full screen widget on the correct monitor.
202010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void InitAsFullscreen(RenderWidgetHostView* reference_host_view) = 0;
203010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
204010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Notifies the View that it has become visible.
205010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void WasShown() = 0;
206010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
207010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Notifies the View that it has been hidden.
208010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void WasHidden() = 0;
209010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
210010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Moves all plugin windows as described in the given list.
211010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // |scroll_offset| is the scroll offset of the render view.
212010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void MovePluginWindows(
213010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const std::vector<WebPluginGeometry>& moves) = 0;
214010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
215010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Take focus from the associated View component.
216010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void Blur() = 0;
217010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
218010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Sets the cursor to the one associated with the specified cursor_type
219010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void UpdateCursor(const WebCursor& cursor) = 0;
220010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
221010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Indicates whether the page has finished loading.
222010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void SetIsLoading(bool is_loading) = 0;
223010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
224010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Updates the type of the input method attached to the view.
2251675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  virtual void TextInputTypeChanged(ui::TextInputType type,
2261675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch                                    ui::TextInputMode mode,
2271675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch                                    bool can_compose_inline) = 0;
228010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
229010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Cancel the ongoing composition of the input method attached to the view.
230010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void ImeCancelComposition() = 0;
231010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
232010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Notifies the View that the renderer has ceased to exist.
233010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void RenderProcessGone(base::TerminationStatus status,
234010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                 int error_code) = 0;
235010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Notifies the View that the renderer's host has ceased to exist.
2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // The default implementation of this is a no-op. This hack exists to fix
2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // a crash on the branch.
2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // TODO(ccameron): Clean this up.
2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // http://crbug.com/404828
2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void RenderWidgetHostGone() {}
2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
243010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Tells the View to destroy itself.
244010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void Destroy() = 0;
245010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
246010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Tells the View that the tooltip text for the current mouse position over
247010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // the page has changed.
248010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void SetTooltipText(const base::string16& tooltip_text) = 0;
249010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
250010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Notifies the View that the renderer selection bounds has changed.
251010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // |start_rect| and |end_rect| are the bounds end of the selection in the
252010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // coordinate system of the render view. |start_direction| and |end_direction|
253010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // indicates the direction at which the selection was made on touch devices.
254010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void SelectionBoundsChanged(
255010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const ViewHostMsg_SelectionBounds_Params& params) = 0;
256010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
2576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Copies the contents of the compositing surface, providing a new SkBitmap
2586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // result via an asynchronously-run |callback|. |src_subrect| is specified in
2596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // layer space coordinates for the current platform (e.g., DIP for Aura/Mac,
2606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // physical for Android), and is the region to be copied from this view. The
2616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // copy is then scaled to a SkBitmap of size |dst_size|. |callback| is run
2626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // with true on success, false otherwise. A smaller region than |src_subrect|
2636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // may be copied if the underlying surface is smaller than |src_subrect|.
264010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void CopyFromCompositingSurface(
265010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const gfx::Rect& src_subrect,
266010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const gfx::Size& dst_size,
2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      CopyFromCompositingSurfaceCallback& callback,
268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const SkColorType color_type) = 0;
269010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
2706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Copies the contents of the compositing surface, populating the given
2716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // |target| with YV12 image data. |src_subrect| is specified in layer space
2726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // coordinates for the current platform (e.g., DIP for Aura/Mac, physical for
2736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Android), and is the region to be copied from this view. The copy is then
2746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // scaled and letterboxed with black borders to fit |target|. Finally,
2756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // |callback| is asynchronously run with true/false for
2766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // success/failure. |target| must point to an allocated, YV12 video frame of
2776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // the intended size. This operation will fail if there is no available
278010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // compositing surface.
279010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void CopyFromCompositingSurfaceToVideoFrame(
280010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const gfx::Rect& src_subrect,
281010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const scoped_refptr<media::VideoFrame>& target,
282010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const base::Callback<void(bool)>& callback) = 0;
283010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
284010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Returns true if CopyFromCompositingSurfaceToVideoFrame() is likely to
285010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // succeed.
286010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  //
287010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // TODO(nick): When VideoFrame copies are broadly implemented, this method
288010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // should be renamed to HasCompositingSurface(), or unified with
289010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // IsSurfaceAvailableForCopy() and HasAcceleratedSurface().
290010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool CanCopyToVideoFrame() const = 0;
291010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
292010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Called when an accelerated compositing surface is initialized.
293010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void AcceleratedSurfaceInitialized(int host_id, int route_id) = 0;
294010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // |params.window| and |params.surface_id| indicate which accelerated
295010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // surface's buffers swapped. |params.renderer_id| and |params.route_id|
296010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // are used to formulate a reply to the GPU process to prevent it from getting
297010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // too far ahead. They may all be zero, in which case no flow control is
298010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // enforced; this case is currently used for accelerated plugins.
299010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void AcceleratedSurfaceBuffersSwapped(
300010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params_in_pixel,
301010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      int gpu_host_id) = 0;
302010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Similar to above, except |params.(x|y|width|height)| define the region
303010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // of the surface that changed.
304010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void AcceleratedSurfacePostSubBuffer(
305010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params_in_pixel,
306010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      int gpu_host_id) = 0;
307010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
308010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Release the accelerated surface temporarily. It will be recreated on the
309010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // next swap buffers or post sub buffer.
310010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void AcceleratedSurfaceSuspend() = 0;
311010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
312010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void AcceleratedSurfaceRelease() = 0;
313010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
314010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Return true if the view has an accelerated surface that contains the last
315010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // presented frame for the view. If |desired_size| is non-empty, true is
316010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // returned only if the accelerated surface size matches.
317010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool HasAcceleratedSurface(const gfx::Size& desired_size) = 0;
318010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Compute the orientation type of the display assuming it is a mobile device.
320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static blink::WebScreenOrientationType GetOrientationTypeForMobile(
321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const gfx::Display& display);
322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Compute the orientation type of the display assuming it is a desktop.
324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static blink::WebScreenOrientationType GetOrientationTypeForDesktop(
325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const gfx::Display& display);
326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
327010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void GetScreenInfo(blink::WebScreenInfo* results) = 0;
328010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
329010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Gets the bounds of the window, in screen coordinates.
330010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual gfx::Rect GetBoundsInRootWindow() = 0;
331010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
332010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual gfx::GLSurfaceHandle GetCompositingSurface() = 0;
333010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
334f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void OnTextSurroundingSelectionResponse(const base::string16& content,
335f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                                  size_t start_offset,
336f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                                  size_t end_offset) {};
337010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
3381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_ANDROID) || defined(TOOLKIT_VIEWS) || defined(USE_AURA)
3391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ShowDisambiguationPopup(const gfx::Rect& rect_pixels,
340010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                       const SkBitmap& zoomed_bitmap) = 0;
3411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif
342010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
3431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_ANDROID)
344010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Instructs the view to not drop the surface even when the view is hidden.
345010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void LockCompositingSurface() = 0;
346010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void UnlockCompositingSurface() = 0;
347010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif
348010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
349010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if defined(OS_MACOSX)
350010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Does any event handling necessary for plugin IME; should be called after
351010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // the plugin has already had a chance to process the event. If plugin IME is
352010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // not enabled, this is a no-op, so it is always safe to call.
353010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Returns true if the event was handled by IME.
354010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool PostProcessEventForPluginIme(
355010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const NativeWebKeyboardEvent& event) = 0;
356010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif
357010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
358010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if defined(OS_MACOSX) || defined(USE_AURA)
359010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Updates the range of the marked text in an IME composition.
360010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void ImeCompositionRangeChanged(
361010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const gfx::Range& range,
362010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const std::vector<gfx::Rect>& character_bounds) = 0;
363010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif
364010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
366010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void SetParentNativeViewAccessible(
367010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      gfx::NativeViewAccessible accessible_parent) = 0;
368010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
369010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Returns an HWND that's given as the parent window for windowless Flash to
370010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // workaround crbug.com/301548.
371010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual gfx::NativeViewId GetParentForWindowlessPlugin() const = 0;
372010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The callback that DetachPluginsHelper calls for each child window. Call
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // this directly if you want to do custom filtering on plugin windows first.
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void DetachPluginWindowsCallback(HWND window);
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Interface class only, do not construct.
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RenderWidgetHostViewBase();
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shared implementation of MovePluginWindows for use by win and aura/wina.
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void MovePluginWindowsHelper(
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      HWND parent,
386ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      const std::vector<WebPluginGeometry>& moves);
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void PaintPluginWindowsHelper(
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      HWND parent,
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const gfx::Rect& damaged_screen_rect);
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Needs to be called before the HWND backing the view goes away to avoid
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // crashes in Windowed plugins.
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void DetachPluginsHelper(HWND parent);
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether this view is a popup and what kind of popup it is (select,
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // autofill...).
399f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  blink::WebPopupType popup_type_;
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
401cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // When false, the background of the web content is not fully opaque.
402cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool background_opaque_;
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // While the mouse is locked, the cursor is hidden from the user. Mouse events
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // are still generated. However, the position they report is the last known
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // mouse position just as mouse lock was entered; the movement they report
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // indicates what the change in position of the mouse would be had it not been
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // locked.
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool mouse_locked_;
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether we are showing a context menu.
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool showing_context_menu_;
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A buffer containing the text inside and around the current selection range.
415a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::string16 selection_text_;
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The offset of the text stored in |selection_text_| relative to the start of
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the web page.
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  size_t selection_text_offset_;
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The current selection range relative to the start of the web page.
42258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  gfx::Range selection_range_;
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)protected:
4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The scale factor of the display the renderer is currently on.
4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float current_device_scale_factor_;
4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
428010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // The orientation of the display the renderer is currently on.
429010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  gfx::Display::Rotation current_display_rotation_;
430010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
4315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Whether pinch-to-zoom should be enabled and pinch events forwarded to the
4325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // renderer.
4335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool pinch_zoom_enabled_;
4345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
436f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void FlushInput();
437f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect current_display_area_;
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  uint32 renderer_frame_number_;
4417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
442f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  base::OneShotTimer<RenderWidgetHostViewBase> flush_input_timer_;
443f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
4441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::WeakPtrFactory<RenderWidgetHostViewBase> weak_factory_;
4451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewBase);
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_BASE_H_
452