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_IMPL_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_IMPL_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <deque> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <list> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <queue> 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utility> 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/gtest_prod_util.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/observer_list.h" 21a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "base/process/kill.h" 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "cc/resources/shared_bitmap.h" 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/browser/renderer_host/event_with_latency_info.h" 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/browser/renderer_host/input/input_ack_handler.h" 29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/browser/renderer_host/input/input_router_client.h" 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/browser/renderer_host/input/synthetic_gesture.h" 31a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "content/browser/renderer_host/input/touch_emulator_client.h" 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/common/input/input_event_ack_state.h" 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/common/input/synthetic_gesture_packet.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/view_message_enums.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_widget_host.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/page_zoom.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_listener.h" 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ui/base/ime/text_input_mode.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/ime/text_input_type.h" 4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ui/events/latency_info.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct AcceleratedSurfaceMsg_BufferPresented_Params; 44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochstruct ViewHostMsg_BeginSmoothScroll_Params; 45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochstruct ViewHostMsg_SelectionBounds_Params; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ViewHostMsg_TextInputState_Params; 47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochstruct ViewHostMsg_UpdateRect_Params; 48e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosibastruct ViewMsg_Resize_Params; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TimeTicks; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CompositorFrame; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CompositorFrameAck; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace gfx { 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class Range; 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class KeyEvent; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebInputEvent; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebMouseEvent; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct WebCompositionUnderline; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct WebScreenInfo; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebLayer; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass BrowserAccessibilityManager; 82ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass InputRouter; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockRenderWidgetHost; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderWidgetHostDelegate; 85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class RenderWidgetHostViewBase; 86424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class SyntheticGestureController; 87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class TimeoutMonitor; 88a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass TouchEmulator; 8923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class WebCursor; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct EditCommand; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This implements the RenderWidgetHost interface that is exposed to 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// embedders of content, and adds things only visible to content. 945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass CONTENT_EXPORT RenderWidgetHostImpl 955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : virtual public RenderWidgetHost, 965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public InputRouterClient, 975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public InputAckHandler, 985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public TouchEmulatorClient, 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public IPC::Listener { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // routing_id can be MSG_ROUTING_NONE, in which case the next available 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // routing id is taken from the RenderProcessHost. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If this object outlives |delegate|, DetachDelegate() must be called when 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |delegate| goes away. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostImpl(RenderWidgetHostDelegate* delegate, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderProcessHost* process, 1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) int routing_id, 1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool hidden); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~RenderWidgetHostImpl(); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Similar to RenderWidgetHost::FromID, but returning the Impl object. 112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static RenderWidgetHostImpl* FromID(int32 process_id, int32 routing_id); 113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Returns all RenderWidgetHosts including swapped out ones for 1157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // internal use. The public interface 1167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // RendgerWidgetHost::GetRenderWidgetHosts only returns active ones. 11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static scoped_ptr<RenderWidgetHostIterator> GetAllRenderWidgetHosts(); 1187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use RenderWidgetHostImpl::From(rwh) to downcast a 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderWidgetHost to a RenderWidgetHostImpl. Internally, this 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // uses RenderWidgetHost::AsRenderWidgetHostImpl(). 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static RenderWidgetHostImpl* From(RenderWidgetHost* rwh); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_hung_renderer_delay_ms(const base::TimeDelta& timeout) { 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) hung_renderer_delay_ms_ = timeout.InMilliseconds(); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderWidgetHost implementation. 129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void UpdateTextDirection(blink::WebTextDirection direction) OVERRIDE; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void NotifyTextDirection() OVERRIDE; 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Focus() OVERRIDE; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Blur() OVERRIDE; 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetActive(bool active) OVERRIDE; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CopyFromBackingStore( 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& src_rect, 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Size& accelerated_dst_size, 137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::Callback<void(bool, const SkBitmap&)>& callback, 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const SkColorType color_type) OVERRIDE; 13923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual bool CanCopyFromBackingStore() OVERRIDE; 14023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(OS_ANDROID) 14123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void LockBackingStore() OVERRIDE; 14223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void UnlockBackingStore() OVERRIDE; 14323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ForwardMouseEvent( 145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebMouseEvent& mouse_event) OVERRIDE; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ForwardWheelEvent( 147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebMouseWheelEvent& wheel_event) OVERRIDE; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ForwardKeyboardEvent( 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NativeWebKeyboardEvent& key_event) OVERRIDE; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual RenderProcessHost* GetProcess() const OVERRIDE; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetRoutingID() const OVERRIDE; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual RenderWidgetHostView* GetView() const OVERRIDE; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsLoading() const OVERRIDE; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsRenderView() const OVERRIDE; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ResizeRectChanged(const gfx::Rect& new_rect) OVERRIDE; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RestartHangMonitorTimeout() OVERRIDE; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetIgnoreInputEvents(bool ignore_input_events) OVERRIDE; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void WasResized() OVERRIDE; 159424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void AddKeyPressEventCallback( 160424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const KeyPressEventCallback& callback) OVERRIDE; 161424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void RemoveKeyPressEventCallback( 162424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const KeyPressEventCallback& callback) OVERRIDE; 163424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void AddMouseEventCallback( 164424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const MouseEventCallback& callback) OVERRIDE; 165424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void RemoveMouseEventCallback( 166424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const MouseEventCallback& callback) OVERRIDE; 167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void GetWebScreenInfo(blink::WebScreenInfo* result) OVERRIDE; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual SkColorType PreferredReadbackFormat() OVERRIDE; 170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Forces redraw in the renderer and when the update reaches the browser 172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // grabs snapshot from the compositor. Returns PNG-encoded snapshot. 173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void GetSnapshotFromBrowser( 174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::Callback<void(const unsigned char*,size_t)> callback); 175c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const NativeWebKeyboardEvent* GetLastKeyboardEvent() const; 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notification that the screen info has changed. 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NotifyScreenInfoChanged(); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 181a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // Invalidates the cached screen info so that next resize request 182a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // will carry the up to date screen info. Unlike 183a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // |NotifyScreenInfoChanged|, this doesn't send a message to the renderer. 184a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch void InvalidateScreenInfo(); 185a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the View of this RenderWidgetHost. 187010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void SetView(RenderWidgetHostViewBase* view); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int surface_id() const { return surface_id_; } 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool empty() const { return current_size_.IsEmpty(); } 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when a renderer object already been created for this host, and we 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // just need to be attached to it. Used for window.open, <select> dropdown 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // menus, and other times when the renderer initiates creating an object. 196424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void Init(); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tells the renderer to die and then calls Destroy(). 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Shutdown(); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IPC::Listener 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sends a message to the corresponding object in the renderer. 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Send(IPC::Message* msg) OVERRIDE; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Indicates if the page has finished loading. 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void SetIsLoading(bool is_loading); 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called to notify the RenderWidget that it has been hidden or restored from 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // having been hidden. 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void WasHidden(); 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void WasShown(const ui::LatencyInfo& latency_info); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the RenderWidget is hidden. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_hidden() const { return is_hidden_; } 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called to notify the RenderWidget that its associated native window 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // got/lost focused. 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GotFocus(); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void LostCapture(); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called to notify the RenderWidget that it has lost the mouse lock. 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void LostMouseLock(); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Noifies the RenderWidget of the current mouse cursor visibility state. 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SendCursorVisibilityState(bool is_visible); 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifies the RenderWidgetHost that the View was destroyed. 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ViewDestroyed(); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_MACOSX) 23323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Pause for a moment to wait for pending repaint or resize messages sent to 23423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // the renderer to arrive. If pending resize messages are for an old window 23523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // size, then also pump through a new resize message if there is time. 23623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) void PauseForPendingResizeOrRepaints(); 23723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 238c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Whether pausing may be useful. 239c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool CanPauseForPendingResizeOrRepaints(); 240c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 2410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Wait for a surface matching the size of the widget's view, possibly 2420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // blocking until the renderer sends a new frame. 2430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void WaitForSurface(); 244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool resize_ack_pending_for_testing() { return resize_ack_pending_; } 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // GPU accelerated version of GetBackingStore function. This will 2493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // trigger a re-composite to the view. It may fail if a resize is pending, or 2503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // if a composite has already been requested and not acked yet. 2513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool ScheduleComposite(); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Starts a hang monitor timeout. If there's already a hang monitor timeout 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the new one will only fire if it has a shorter delay than the time 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // left on the existing timeouts. 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartHangMonitorTimeout(base::TimeDelta delay); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stops all existing hang monitor timeouts and assumes the renderer is 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // responsive. 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StopHangMonitorTimeout(); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Forwards the given message to the renderer. These are called by the view 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when it has received a message. 264eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void ForwardGestureEventWithLatencyInfo( 265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebGestureEvent& gesture_event, 266eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const ui::LatencyInfo& ui_latency); 267ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void ForwardTouchEventWithLatencyInfo( 268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebTouchEvent& touch_event, 2697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const ui::LatencyInfo& ui_latency); 270ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void ForwardMouseEventWithLatencyInfo( 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const blink::WebMouseEvent& mouse_event, 2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ui::LatencyInfo& ui_latency); 273ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void ForwardWheelEventWithLatencyInfo( 2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const blink::WebMouseWheelEvent& wheel_event, 2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ui::LatencyInfo& ui_latency); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Enables/disables touch emulation using mouse event. See TouchEmulator. 27803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void SetTouchEventEmulationEnabled(bool enabled); 2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // TouchEmulatorClient implementation. 281a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void ForwardGestureEvent( 282a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const blink::WebGestureEvent& gesture_event) OVERRIDE; 2835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void ForwardEmulatedTouchEvent( 284a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const blink::WebTouchEvent& touch_event) OVERRIDE; 285a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void SetCursor(const WebCursor& cursor) OVERRIDE; 2865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void ShowContextMenuAtPoint(const gfx::Point& point) OVERRIDE; 287a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 288a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Queues a synthetic gesture for testing purposes. Invokes the on_complete 289a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // callback when the gesture is finished running. 290a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void QueueSyntheticGesture( 291a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<SyntheticGesture> synthetic_gesture, 292a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::Callback<void(SyntheticGesture::Result)>& on_complete); 293a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CancelUpdateTextDirection(); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when a mouse click/gesture tap activates the renderer. 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnPointerEventActivate(); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifies the renderer whether or not the input method attached to this 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // process is activated. 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When the input method is activated, a renderer process sends IPC messages 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to notify the status of its composition node. (This message is mainly used 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for notifying the position of the input cursor so that the browser can 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // display input method windows under the cursor.) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetInputMethodActive(bool activate); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 307a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Notifies the renderer changes of IME candidate window state. 308a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void CandidateWindowShown(); 309a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void CandidateWindowUpdated(); 310a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void CandidateWindowHidden(); 311a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update the composition node of the renderer (or WebKit). 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebKit has a special node (a composition node) for input method to change 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // its text without affecting any other DOM nodes. When the input method 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (attached to the browser) updates its text, the browser sends IPC messages 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to update the composition node of the renderer. 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (Read the comments of each function for its detail.) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the text of the composition node. 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This function can also update the cursor position and mark the specified 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // range in the composition node. 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A browser should call this function: 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // * when it receives a WM_IME_COMPOSITION message with a GCS_COMPSTR flag 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (on Windows); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // * when it receives a "preedit_changed" signal of GtkIMContext (on Linux); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // * when markedText of NSTextInput is called (on Mac). 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ImeSetComposition( 328a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& text, 329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::vector<blink::WebCompositionUnderline>& underlines, 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int selection_start, 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int selection_end); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Finishes an ongoing composition with the specified text. 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A browser should call this function: 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // * when it receives a WM_IME_COMPOSITION message with a GCS_RESULTSTR flag 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (on Windows); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // * when it receives a "commit" signal of GtkIMContext (on Linux); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // * when insertText of NSTextInput is called (on Mac). 339a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void ImeConfirmComposition(const base::string16& text, 34058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const gfx::Range& replacement_range, 3417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool keep_selection); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cancels an ongoing composition. 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ImeCancelComposition(); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is for derived classes to give us access to the resizer rect. 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And to also expose it to the RenderWidgetHostView. 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Rect GetRootWindowResizerRect() const; 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ignore_input_events() const { 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ignore_input_events_; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool input_method_active() const { 3557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return input_method_active_; 3567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 3577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 358ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Whether forwarded WebInputEvents should be ignored. True if either 359ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // |ignore_input_events_| or |process_->IgnoreInputEvents()| is true. 360ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool IgnoreInputEvents() const; 361ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 362ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Event queries delegated to the |input_router_|. 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ShouldForwardTouchEvent() const; 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_touch_handler() const { return has_touch_handler_; } 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notification that the user has made some kind of input that could 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // perform an action. See OnUserGesture for more details. 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartUserGesture(); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 371cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Set the RenderView background transparency. 372cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void SetBackgroundOpaque(bool opaque); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifies the renderer that the next key event is bound to one or more 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pre-defined edit commands 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetEditCommandsForNextKeyEvent( 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<EditCommand>& commands); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Executes the edit command on the RenderView. 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ExecuteEditCommand(const std::string& command, 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tells the renderer to scroll the currently focused node into rect only if 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the currently focused node is a Text node (textfield, text area or content 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // editable divs). 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ScrollFocusedEditableNodeIntoRect(const gfx::Rect& rect); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Requests the renderer to move the caret selection towards the point. 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void MoveCaret(const gfx::Point& point); 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when the reponse to a pending mouse lock request has arrived. 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if |allowed| is true and the mouse has been successfully 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // locked. 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GotResponseToLockMouseRequest(bool allowed); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tells the RenderWidget about the latest vsync parameters. 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: Make sure the timebase was obtained using 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // base::TimeTicks::HighResNow. Using the non-high res timer will result in 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // incorrect synchronization across processes. 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void UpdateVSyncParameters(base::TimeTicks timebase, 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta interval); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by the view in response to AcceleratedSurfaceBuffersSwapped or 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AcceleratedSurfacePostSubBuffer. 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void AcknowledgeBufferPresent( 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 route_id, 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int gpu_host_id, 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const AcceleratedSurfaceMsg_BufferPresented_Params& params); 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called by the view in response to OnSwapCompositorFrame. 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static void SendSwapCompositorFrameAck( 412ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int32 route_id, 413ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch uint32 output_surface_id, 414ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int renderer_host_id, 415ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const cc::CompositorFrameAck& ack); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 417d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Called by the view to return resources to the compositor. 418d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) static void SendReclaimCompositorResources(int32 route_id, 419d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) uint32 output_surface_id, 420d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int renderer_host_id, 421d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const cc::CompositorFrameAck& ack); 422d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_allow_privileged_mouse_lock(bool allow) { 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allow_privileged_mouse_lock_ = allow; 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Resets state variables related to tracking pending size and painting. 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We need to reset these flags when we want to repaint the contents of 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // browser plugin in this RWH. Resetting these flags will ensure we ignore 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // any previous pending acks that are not relevant upon repaint. 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ResetSizeAndRepaintPendingFlags(); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DetachDelegate(); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update the renderer's cache of the screen rect of the view and window. 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SendScreenRects(); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Suppreses future char events until a keydown. See 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // suppress_next_char_events_. 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SuppressNextCharEvents(); 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 44368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Called by RenderWidgetHostView in response to OnSetNeedsFlushInput. 44468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void FlushInput(); 44568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 446f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // InputRouterClient 447f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void SetNeedsFlush() OVERRIDE; 448f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 449b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Indicates whether the renderer drives the RenderWidgetHosts's size or the 450b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // other way around. 451e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba bool auto_resize_enabled() { return auto_resize_enabled_; } 452e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba 453e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba // The minimum size of this renderer when auto-resize is enabled. 454e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba const gfx::Size& min_size_for_auto_resize() const { 455e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba return min_size_for_auto_resize_; 456e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba } 457e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba 458e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba // The maximum size of this renderer when auto-resize is enabled. 459e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba const gfx::Size& max_size_for_auto_resize() const { 460e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba return max_size_for_auto_resize_; 461e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba } 462b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 463eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void ComputeTouchLatency(const ui::LatencyInfo& latency_info); 46490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void FrameSwapped(const ui::LatencyInfo& latency_info); 4657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void DidReceiveRendererFrame(); 466b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 467b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Returns the ID that uniquely describes this component to the latency 468b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // subsystem. 469b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) int64 GetLatencyComponentId(); 470b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 4715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static void CompositorFrameDrawn( 4725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<ui::LatencyInfo>& latency_info); 473868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 474868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Don't check whether we expected a resize ack during layout tests. 475868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) static void DisableResizeAckCheckForTesting(); 476868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 4775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void WindowSnapshotAsyncCallback( 4785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int routing_id, 4795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int snapshot_id, 4805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Size snapshot_size, 4815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_refptr<base::RefCountedBytes> png_data); 4825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // LatencyComponents generated in the renderer must have component IDs 4845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // provided to them by the browser process. This function adds the correct 4855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // component ID where necessary. 4865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void AddLatencyInfoComponentIds(ui::LatencyInfo* latency_info); 4875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 488effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch InputRouter* input_router() { return input_router_.get(); } 489effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Get the BrowserAccessibilityManager for the root of the frame tree, 491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BrowserAccessibilityManager* GetRootBrowserAccessibilityManager(); 492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Get the BrowserAccessibilityManager for the root of the frame tree, 494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // or create it if it doesn't already exist. 495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BrowserAccessibilityManager* GetOrCreateRootBrowserAccessibilityManager(); 496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) 498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gfx::NativeViewAccessible GetParentNativeViewAccessible(); 499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual RenderWidgetHostImpl* AsRenderWidgetHostImpl() OVERRIDE; 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Create a LatencyInfo struct with INPUT_EVENT_LATENCY_RWH_COMPONENT 5057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // component if it is not already in |original|. And if |original| is 5067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // not NULL, it is also merged into the resulting LatencyInfo. 5077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ui::LatencyInfo CreateRWHLatencyInfoIfNotExist( 5081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ui::LatencyInfo* original, 5091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebInputEvent::Type type, 5101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ui::LatencyInfo::InputCoordinate* logical_coordinates, 5111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size_t logical_coordinates_size); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when we receive a notification indicating that the renderer 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // process has gone. This will reset our state so that our state will be 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // consistent if a new renderer is created. 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RendererExited(base::TerminationStatus status, int exit_code); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieves an id the renderer can use to refer to its view. 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is used for various IPC messages, including plugins. 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::NativeViewId GetNativeViewId() const; 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieves an id for the surface that the renderer can draw to 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when accelerated compositing is enabled. 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::GLSurfaceHandle GetCompositingSurface(); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // --------------------------------------------------------------------------- 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The following methods are overridden by RenderViewHost to send upwards to 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // its delegate. 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when a mousewheel event was not processed by the renderer. 531f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void UnhandledWheelEvent(const blink::WebMouseWheelEvent& event) {} 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notification that the user has made some kind of input that could 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // perform an action. The gestures that count are 1) any mouse down 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // event and 2) enter or space key presses. 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnUserGesture() {} 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Callbacks for notification when the renderer becomes unresponsive to user 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // input events, and subsequently responsive again. 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void NotifyRendererUnresponsive() {} 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void NotifyRendererResponsive() {} 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when auto-resize resulted in the renderer size changing. 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnRenderAutoResized(const gfx::Size& new_size) {} 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // --------------------------------------------------------------------------- 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewHost overrides this method to impose further restrictions on when 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to allow mouse lock. 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Once the request is approved or rejected, GotResponseToLockMouseRequest() 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will be called. 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RequestToLockMouse(bool user_gesture, 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool last_unlocked_by_target); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RejectMouseLockOrUnlockIfNecessary(); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsMouseLocked() const; 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewHost overrides this method to report when in fullscreen mode. 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsFullscreen() const; 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates if the render widget host should track the render widget's size 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // as opposed to visa versa. 563e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba void SetAutoResize(bool enable, 564e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba const gfx::Size& min_size, 565e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba const gfx::Size& max_size); 566e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba 567e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba // Fills in the |resize_params| struct. 568e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba void GetResizeParams(ViewMsg_Resize_Params* resize_params); 569e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba 570e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba // Sets the |resize_params| that were sent to the renderer bundled with the 571e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba // request to create a new RenderWidget. 572e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba void SetInitialRenderSizeParams(const ViewMsg_Resize_Params& resize_params); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expose increment/decrement of the in-flight event count, so 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewHostImpl can account for in-flight beforeunload/unload events. 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int increment_in_flight_event_count() { return ++in_flight_event_count_; } 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int decrement_in_flight_event_count() { return --in_flight_event_count_; } 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The View associated with the RenderViewHost. The lifetime of this object 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is associated with the lifetime of the Render process. If the Renderer 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // crashes, its View is destroyed and this pointer becomes NULL, even though 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // render_view_host_ lives on to load another URL (creating a new View while 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // doing so). 584010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) RenderWidgetHostViewBase* view_; 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // A weak pointer to the view. The above pointer should be weak, but changing 5871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // that to be weak causes crashes on Android. 5881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(ccameron): Fix this. 5891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // http://crbug.com/404828 5901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::WeakPtr<RenderWidgetHostViewBase> view_weak_; 5911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // true if a renderer has once been valid. We use this flag to display a sad 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // tab only when we lose our renderer and not if a paint occurs during 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // initialization. 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool renderer_initialized_; 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This value indicates how long to wait before we consider a renderer hung. 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int hung_renderer_delay_ms_; 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class MockRenderWidgetHost; 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell this object to destroy itself. 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Destroy(); 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 606a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Called by |hang_timeout_monitor_| on delayed response from the renderer. 607a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void RendererIsUnresponsive(); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called if we know the renderer is responsive. When we currently think the 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // renderer is unresponsive, this will clear that state and call 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NotifyRendererResponsive. 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RendererIsResponsive(); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IPC message handlers 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnRenderViewReady(); 6167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void OnRenderProcessGone(int status, int error_code); 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnClose(); 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnUpdateScreenRectsAck(); 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnRequestMove(const gfx::Rect& pos); 620a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnSetTooltipText(const base::string16& tooltip_text, 621f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebTextDirection text_direction_hint); 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool OnSwapCompositorFrame(const IPC::Message& message); 6235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnFlingingStopped(); 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnUpdateRect(const ViewHostMsg_UpdateRect_Params& params); 625f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnQueueSyntheticGesture(const SyntheticGesturePacket& gesture_packet); 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnFocus(); 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnBlur(); 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSetCursor(const WebCursor& cursor); 6291675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch void OnTextInputTypeChanged(ui::TextInputType type, 6301675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch ui::TextInputMode input_mode, 6311675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch bool can_compose_inline); 632f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 633a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_MACOSX) || defined(USE_AURA) 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnImeCompositionRangeChanged( 63558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const gfx::Range& range, 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<gfx::Rect>& character_bounds); 6377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnImeCancelComposition(); 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnLockMouse(bool user_gesture, 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool last_unlocked_by_target, 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool privileged); 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnUnlockMouse(); 6431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnShowDisambiguationPopup(const gfx::Rect& rect_pixels, 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Size& size, 6450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const cc::SharedBitmapId& id); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnWindowlessPluginDummyWindowCreated( 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::NativeViewId dummy_activation_window); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnWindowlessPluginDummyWindowDestroyed( 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::NativeViewId dummy_activation_window); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 652effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void OnSelectionChanged(const base::string16& text, 653effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch size_t offset, 654effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const gfx::Range& range); 655effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void OnSelectionBoundsChanged( 656effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const ViewHostMsg_SelectionBounds_Params& params); 6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSnapshot(bool success, const SkBitmap& bitmap); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called (either immediately or asynchronously) after we're done with our 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BackingStore and can send an ACK to the renderer so it can paint onto it 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // again. 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidUpdateBackingStore(const ViewHostMsg_UpdateRect_Params& params, 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::TimeTicks& paint_start); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Give key press listeners a chance to handle this key press. This allow 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // widgets that don't have focus to still handle key presses. 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool KeyPressListenersHandleEvent(const NativeWebKeyboardEvent& event); 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 669ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // InputRouterClient 670ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual InputEventAckState FilterInputEvent( 671f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebInputEvent& event, 672ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const ui::LatencyInfo& latency_info) OVERRIDE; 673ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual void IncrementInFlightEventCount() OVERRIDE; 674ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual void DecrementInFlightEventCount() OVERRIDE; 675ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual void OnHasTouchEventHandlers(bool has_handlers) OVERRIDE; 67658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void DidFlush() OVERRIDE; 677cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void DidOverscroll(const DidOverscrollParams& params) OVERRIDE; 67858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 67958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // InputAckHandler 680ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual void OnKeyboardEventAck(const NativeWebKeyboardEvent& event, 681ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch InputEventAckState ack_result) OVERRIDE; 6824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void OnWheelEventAck(const MouseWheelEventWithLatencyInfo& event, 683ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch InputEventAckState ack_result) OVERRIDE; 684ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual void OnTouchEventAck(const TouchEventWithLatencyInfo& event, 685ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch InputEventAckState ack_result) OVERRIDE; 6864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void OnGestureEventAck(const GestureEventWithLatencyInfo& event, 687ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch InputEventAckState ack_result) OVERRIDE; 68858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void OnUnexpectedEventAck(UnexpectedEventAckType type) OVERRIDE; 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 690a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void OnSyntheticGestureCompleted(SyntheticGesture::Result result); 691a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when there is a new auto resize (using a post to avoid a stack 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // which may get in recursive loops). 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DelayedAutoResized(); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 696116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void WindowOldSnapshotReachedScreen(int snapshot_id); 697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 6984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void WindowSnapshotReachedScreen(int snapshot_id); 69968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 700116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void OnSnapshotDataReceived(int snapshot_id, 701116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const unsigned char* png, 702116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t size); 703116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 704116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void OnSnapshotDataReceivedAsync( 705116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int snapshot_id, 706116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<base::RefCountedBytes> png_data); 7075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Our delegate, which wants to know mainly about keyboard events. 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It will remain non-NULL until DetachDelegate() is called. 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostDelegate* delegate_; 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Created during construction but initialized during Init*(). Therefore, it 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is guaranteed never to be NULL, but its channel may be NULL if the 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // renderer crashed, so you must always check that. 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderProcessHost* process_; 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The ID of the corresponding object in the Renderer Instance. 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int routing_id_; 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The ID of the surface corresponding to this render widget. 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int surface_id_; 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates whether a page is loading or not. 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_loading_; 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Indicates whether a page is hidden or not. It has to stay in sync with the 7276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // most recent call to process_->WidgetRestored() / WidgetHidden(). 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_hidden_; 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set if we are waiting for a repaint ack for the view. 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool repaint_ack_pending_; 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True when waiting for RESIZE_ACK. 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool resize_ack_pending_; 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 73690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Cached copy of the screen info so that it doesn't need to be updated every 73790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // time the window is resized. 738f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<blink::WebScreenInfo> screen_info_; 73990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 74090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Set if screen_info_ may have changed and should be recomputed and force a 74190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // resize message. 74290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool screen_info_out_of_date_; 74390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The current size of the RenderWidget. 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size current_size_; 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 747e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba // Resize information that was previously sent to the renderer. 748e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba scoped_ptr<ViewMsg_Resize_Params> old_resize_params_; 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The next auto resize to send. 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size new_auto_size_; 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if the render widget host should track the render widget's size as 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // opposed to visa versa. 755e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba bool auto_resize_enabled_; 756e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba 757e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba // The minimum size for the render widget if auto-resize is enabled. 758e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba gfx::Size min_size_for_auto_resize_; 759e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba 760e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba // The maximum size for the render widget if auto-resize is enabled. 761e578b2d213c837aab9cea5407d30f5c84065cd0eMarcin Kosiba gfx::Size max_size_for_auto_resize_; 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool waiting_for_screen_rects_ack_; 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect last_view_screen_rect_; 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect last_window_screen_rect_; 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Keyboard event listeners. 768424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::vector<KeyPressEventCallback> key_press_event_callbacks_; 769424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 770424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Mouse event callbacks. 771424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::vector<MouseEventCallback> mouse_event_callbacks_; 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If true, then we should repaint when restoring even if we have a 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // backingstore. This flag is set to true if we receive a paint message 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // while is_hidden_ to true. Even though we tell the render widget to hide 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // itself, a paint message could already be in flight at that point. 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool needs_repainting_on_restore_; 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is true if the renderer is currently unresponsive. 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_unresponsive_; 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The following value indicates a time in the future when we would consider 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the renderer hung if it does not generate an appropriate response message. 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time time_when_considered_hung_; 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This value denotes the number of input events yet to be acknowledged 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // by the renderer. 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int in_flight_event_count_; 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This timer runs to check if time_when_considered_hung_ has past. 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::OneShotTimer<RenderWidgetHostImpl> hung_renderer_timer_; 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Flag to detect recursive calls to GetBackingStore(). 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool in_get_backing_store_; 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used for UMA histogram logging to measure the time for a repaint view 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // operation to finish. 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeTicks repaint_start_time_; 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set to true if we shouldn't send input events from the render widget. 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ignore_input_events_; 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Indicates whether IME is active. 8047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool input_method_active_; 8057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set when we update the text direction of the selected input element. 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool text_direction_updated_; 808f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebTextDirection text_direction_; 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set when we cancel updating the text direction. 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This flag also ignores succeeding update requests until we call 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NotifyTextDirection(). 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool text_direction_canceled_; 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates if the next sequence of Char events should be suppressed or not. 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // System may translate a RawKeyDown event into zero or more Char events, 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // usually we send them to the renderer directly in sequence. However, If a 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RawKeyDown event was not handled by the renderer but was handled by 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // our UnhandledKeyboardEvent() method, e.g. as an accelerator key, then we 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // shall not send the following sequence of Char events, which was generated 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // by this RawKeyDown event, to the renderer. Otherwise the renderer may 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // handle the Char events and cause unexpected behavior. 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For example, pressing alt-2 may let the browser switch to the second tab, 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // but the Char event generated by alt-2 may also activate a HTML element 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if its accesskey happens to be "2", then the user may get confused when 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // switching back to the original tab, because the content may already be 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // changed. 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool suppress_next_char_events_; 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool pending_mouse_lock_request_; 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow_privileged_mouse_lock_; 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Keeps track of whether the webpage has any touch event handler. If it does, 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // then touch events are sent to the renderer. Otherwise, the touch events are 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not sent to the renderer. 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_touch_handler_; 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 838f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<SyntheticGestureController> synthetic_gesture_controller_; 839ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 840a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_ptr<TouchEmulator> touch_emulator_; 841a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 842ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Receives and handles all input events. 843ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<InputRouter> input_router_; 844ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 845a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<TimeoutMonitor> hang_monitor_timeout_; 846a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::list<HWND> dummy_windows_for_activation_; 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 851b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) int64 last_input_number_; 852b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int next_browser_snapshot_id_; 854116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch typedef std::map<int, 855116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Callback<void(const unsigned char*, size_t)> > PendingSnapshotMap; 856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch PendingSnapshotMap pending_browser_snapshots_; 857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 8581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::WeakPtrFactory<RenderWidgetHostImpl> weak_factory_; 8591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostImpl); 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_IMPL_H_ 866