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_RENDERER_RENDER_WIDGET_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_RENDERER_RENDER_WIDGET_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <deque> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/auto_reset.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/observer_list.h" 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h" 19424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "cc/debug/rendering_stats_instrumentation.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/content_export.h" 2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "content/common/cursors/webcursor.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/common/input/synthetic_gesture_params.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_listener.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_sender.h" 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebRect.h" 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebCompositionUnderline.h" 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/web/WebInputEvent.h" 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebPopupType.h" 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebTextDirection.h" 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebTextInputInfo.h" 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "third_party/WebKit/public/web/WebTouchAction.h" 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "third_party/WebKit/public/web/WebWidget.h" 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebWidgetClient.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h" 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ui/base/ime/text_input_mode.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/ime/text_input_type.h" 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/base/ui_base_types.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h" 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/gfx/range/range.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h" 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/vector2d.h" 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ui/gfx/vector2d_f.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/surface/transport_dib.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ViewHostMsg_UpdateRect_Params; 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)struct ViewMsg_Resize_Params; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ViewHostMsg_UpdateRect; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace IPC { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SyncMessage; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 55c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochstruct WebDeviceEmulationParams; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebGestureEvent; 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class WebKeyboardEvent; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebMouseEvent; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebTouchEvent; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { class OutputSurface; } 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace gfx { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Range; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class ExternalPopupMenu; 7058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochclass PepperPluginInstanceImpl; 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class RenderFrameImpl; 726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)class RenderFrameProxy; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class RenderWidgetCompositor; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderWidgetTest; 751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class ResizingModeSelector; 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)struct ContextMenuParams; 77ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochstruct WebPluginGeometry; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RenderWidget provides a communication bridge between a WebWidget and 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a RenderWidgetHost, the latter of which lives in a different process. 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CONTENT_EXPORT RenderWidget 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public IPC::Listener, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public IPC::Sender, 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NON_EXPORTED_BASE(virtual public blink::WebWidgetClient), 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public base::RefCounted<RenderWidget> { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a new RenderWidget. The opener_id is the routing ID of the 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderView that this widget lives inside. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static RenderWidget* Create(int32 opener_id, 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebPopupType popup_type, 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebScreenInfo& screen_info); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a WebWidget based on the popup type. 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static blink::WebWidget* CreateWebWidget(RenderWidget* render_widget); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 96effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int32 routing_id() const { return routing_id_; } 97effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int32 surface_id() const { return surface_id_; } 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebWidget* webwidget() const { return webwidget_; } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size size() const { return size_; } 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_focus() const { return has_focus_; } 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_fullscreen() const { return is_fullscreen_; } 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_hidden() const { return is_hidden_; } 103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool handling_input_event() const { return handling_input_event_; } 104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Temporary for debugging purposes... 105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool closing() const { return closing_; } 106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool is_swapped_out() { return is_swapped_out_; } 107effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ui::MenuSourceType context_menu_source_type() { 108d7582f30d3b217d8144db8429955efdca442508fBo Liu return context_menu_source_type_; 109d7582f30d3b217d8144db8429955efdca442508fBo Liu } 110d7582f30d3b217d8144db8429955efdca442508fBo Liu bool has_host_context_menu_location() { 111d7582f30d3b217d8144db8429955efdca442508fBo Liu return has_host_context_menu_location_; 112d7582f30d3b217d8144db8429955efdca442508fBo Liu } 113d7582f30d3b217d8144db8429955efdca442508fBo Liu gfx::Point host_context_menu_location() { 114d7582f30d3b217d8144db8429955efdca442508fBo Liu return host_context_menu_location_; 115effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Functions to track out-of-process frames for special notifications. 1186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) void RegisterRenderFrameProxy(RenderFrameProxy* proxy); 1196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) void UnregisterRenderFrameProxy(RenderFrameProxy* proxy); 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Functions to track all RenderFrame objects associated with this 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // RenderWidget. 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void RegisterRenderFrame(RenderFrameImpl* frame); 124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void UnregisterRenderFrame(RenderFrameImpl* frame); 125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(VIDEO_HOLE) 127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void RegisterVideoHoleFrame(RenderFrameImpl* frame); 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void UnregisterVideoHoleFrame(RenderFrameImpl* frame); 129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // defined(VIDEO_HOLE) 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IPC::Listener 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IPC::Sender 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Send(IPC::Message* msg) OVERRIDE; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // blink::WebWidgetClient 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void suppressCompositorScheduling(bool enable); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void willBeginCompositorFrame(); 140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void didAutoResize(const blink::WebSize& new_size); 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void initializeLayerTreeView(); 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual blink::WebLayerTreeView* layerTreeView(); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void didBecomeReadyForAdditionalInput(); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void didCommitAndDrawCompositorFrame(); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void didCompleteSwapBuffers(); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void scheduleComposite(); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void didFocus(); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void didBlur(); 149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void didChangeCursor(const blink::WebCursorInfo&); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void closeWidgetSoon(); 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void show(blink::WebNavigationPolicy); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void runModal() {} 153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual blink::WebRect windowRect(); 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void setToolTipText(const blink::WebString& text, 155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebTextDirection hint); 156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void setWindowRect(const blink::WebRect&); 157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual blink::WebRect windowResizerRect(); 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual blink::WebRect rootWindowRect(); 159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual blink::WebScreenInfo screenInfo(); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual float deviceScaleFactor(); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void resetInputMethod(); 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void didHandleGestureEvent(const blink::WebGestureEvent& event, 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool event_cancelled); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Begins the compositor's scheduler to start producing frames. 1660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void StartCompositor(); 1670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when a plugin is moved. These events are queued up and sent with 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the next paint or scroll message to the host. 170ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void SchedulePluginMove(const WebPluginGeometry& move); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when a plugin window has been destroyed, to make sure the currently 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pending moves don't try to reference it. 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CleanupWindowInPluginMoves(gfx::PluginWindowHandle window); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RenderWidgetCompositor* compositor() const; 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const ui::LatencyInfo* current_event_latency_info() const { 179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return current_event_latency_info_; 180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 182a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface(bool fallback); 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 184424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Callback for use with synthetic gestures (e.g. BeginSmoothScroll). 185424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) typedef base::Callback<void()> SyntheticGestureCompletionCallback; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Send a synthetic gesture to the browser to be queued to the synthetic 188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // gesture controller. 189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void QueueSyntheticGesture( 190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<SyntheticGestureParams> gesture_params, 191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const SyntheticGestureCompletionCallback& callback); 19258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the underlying WebWidget. 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Close(); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notifies about a compositor frame commit operation having finished. 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidCommitCompositorFrame(); 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Handle common setup/teardown for handling IME events. 20090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void StartHandlingImeEvent(); 20190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void FinishHandlingImeEvent(); 20290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 203effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Returns whether we currently should handle an IME event. 204effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool ShouldHandleImeEvent(); 205effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void InstrumentWillBeginFrame(int frame_id) {} 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void InstrumentDidBeginFrame() {} 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void InstrumentDidCancelFrame() {} 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void InstrumentWillComposite() {} 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 211cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // When paused in debugger, we send ack for mouse event early. This ensures 212cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // that we continue receiving mouse moves and pass them to debugger. Returns 213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // whether we are paused in mouse move event and have sent the ack. 214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool SendAckForMouseMoveFromDebugger(); 215cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // When resumed from pause in debugger while handling mouse move, 217cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // we should not send an extra ack (see SendAckForMouseMoveFromDebugger). 218cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void IgnoreAckForMouseMoveFromDebugger(); 219cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // ScreenMetricsEmulator class manages screen emulation inside a render 2214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // widget. This includes resizing, placing view on the screen at desired 2224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // position, changing device scale factor, and scaling down the whole 2234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // widget if required to fit into the browser window. 2244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) class ScreenMetricsEmulator; 2254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Emulates screen and widget metrics. Supplied values override everything 2274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // coming from host. 2284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void EnableScreenMetricsEmulation( 229c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const blink::WebDeviceEmulationParams& params); 2304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void DisableScreenMetricsEmulation(); 2314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void SetPopupOriginAdjustmentsForEmulation(ScreenMetricsEmulator* emulator); 2324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void ScheduleCompositeWithForcedRedraw(); 2344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Called by the compositor in single-threaded mode when a swap is posted, 236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // completes or is aborted. 237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnSwapBuffersPosted(); 238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnSwapBuffersComplete(); 239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnSwapBuffersAborted(); 240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 241a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Checks if the selection bounds have been changed. If they are changed, 242a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // the new value will be sent to the browser process. 243a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void UpdateSelectionBounds(); 244a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 245effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void GetSelectionBounds(gfx::Rect* start, gfx::Rect* end); 246effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnShowHostContextMenu(ContextMenuParams* params); 248a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 249c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch enum ShowIme { 250c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SHOW_IME_IF_NEEDED, 251c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch NO_SHOW_IME, 252c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }; 253c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 254c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch enum ChangeSource { 255c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FROM_NON_IME, 256c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FROM_IME, 257c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }; 258c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 259c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // |show_ime| should be SHOW_IME_IF_NEEDED iff the update may cause the ime to 260c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // be displayed, e.g. after a tap on an input field on mobile. 261c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // |change_source| should be FROM_NON_IME when the renderer has to wait for 262c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // the browser to acknowledge the change before the renderer handles any more 263c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // IME events. This is when the text change did not originate from the IME in 264c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // the browser side, such as changes by JavaScript or autofill. 265c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void UpdateTextInputState(ShowIme show_ime, ChangeSource change_source); 266effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 267a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_MACOSX) || defined(USE_AURA) 268a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Checks if the composition range or composition character bounds have been 269a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // changed. If they are changed, the new value will be sent to the browser 270a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // process. 271a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void UpdateCompositionInfo(bool should_update_range); 272a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif 273a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 274010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if defined(OS_ANDROID) 275010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void DidChangeBodyBackgroundColor(SkColor bg_color); 276010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 277010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Friend RefCounted so that the dtor can be non-public. Using this class 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // without ref-counting is an error. 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::RefCounted<RenderWidget>; 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For unit tests. 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class RenderWidgetTest; 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum ResizeAck { 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SEND_RESIZE_ACK, 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NO_RESIZE_ACK, 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RenderWidget(blink::WebPopupType popup_type, 291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebScreenInfo& screen_info, 2923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool swapped_out, 2930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool hidden, 2940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool never_visible); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~RenderWidget(); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initializes this view with the given opener. CompleteInit must be called 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // later. 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool Init(int32 opener_id); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by Init and subclasses to perform initialization. 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool DoInit(int32 opener_id, 304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebWidget* web_widget, 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::SyncMessage* create_widget_message); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Finishes creation of a pending view started with Init. 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CompleteInit(); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets whether this RenderWidget has been swapped out to be displayed by 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a RenderWidget in a different process. If so, no new IPC messages will be 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // sent (only ACKs) and the process is free to exit when there are no other 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // active RenderWidgets. 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetSwappedOut(bool is_swapped_out); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void FlushPendingInputEventAck(); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DoDeferredClose(); 318f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DoDeferredSetWindowRect(const blink::WebRect& pos); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Resizes the render widget. 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Resize(const gfx::Size& new_size, 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Size& physical_backing_size, 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float overdraw_bottom_height, 3245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const gfx::Size& visible_viewport_size, 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& resizer_rect, 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_fullscreen, 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResizeAck resize_ack); 3281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Used to force the size of a window when running layout tests. 3291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void ResizeSynchronously(const gfx::Rect& new_position); 3304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void SetScreenMetricsEmulationParameters( 331f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) float device_scale_factor, 332f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const gfx::Point& root_layer_offset, 333f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) float root_layer_scale); 334effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OS_MACOSX) || defined(OS_ANDROID) 3354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void SetExternalPopupOriginAdjustmentsForEmulation( 3364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ExternalPopupMenu* popup, ScreenMetricsEmulator* emulator); 337effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderWidget IPC message handlers 340f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnHandleInputEvent(const blink::WebInputEvent* event, 34123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const ui::LatencyInfo& latency_info, 342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool keyboard_shortcut); 343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnCursorVisibilityChange(bool is_visible); 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnMouseCaptureLost(); 345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnSetFocus(bool enable); 34646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void OnClose(); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCreatingNewAck(); 34890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnResize(const ViewMsg_Resize_Params& params); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnChangeResizeRect(const gfx::Rect& resizer_rect); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnWasHidden(); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnWasShown(bool needs_repainting); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnWasSwappedOut(); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCreateVideoAck(int32 video_id); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnUpdateVideoAck(int32 video_id); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnRequestMoveAck(); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSetInputMethodActive(bool is_active); 357a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnCandidateWindowShown(); 358a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnCandidateWindowUpdated(); 359a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnCandidateWindowHidden(); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnImeSetComposition( 361a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& text, 362f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::vector<blink::WebCompositionUnderline>& underlines, 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int selection_start, 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int selection_end); 365a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void OnImeConfirmComposition(const base::string16& text, 36658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const gfx::Range& replacement_range, 3677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool keep_selection); 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnRepaint(gfx::Size size_to_paint); 369424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void OnSyntheticGestureCompleted(); 370f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnSetTextDirection(blink::WebTextDirection direction); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnGetFPS(); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnUpdateScreenRects(const gfx::Rect& view_screen_rect, 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& window_screen_rect); 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnShowImeIfNeeded(); 3762385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 3772385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // Whenever an IME event that needs an acknowledgement is sent to the browser, 3782385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // the number of outstanding IME events that needs acknowledgement should be 3792385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // incremented. All IME events will be dropped until we receive an ack from 3802385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // the browser. 3812385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch void IncrementOutstandingImeEventAcks(); 3822385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 3832385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // Called by the browser process for every required IME acknowledgement. 3842385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch void OnImeEventAck(); 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 3862385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify the compositor about a change in viewport size. This should be 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // used only with auto resize mode WebWidgets, as normal WebWidgets should 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // go through OnResize. 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AutoResizeCompositor(); 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetDeviceScaleFactor(float device_scale_factor); 393f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual bool SetDeviceColorProfile(const std::vector<char>& color_profile); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void OnOrientationChange(); 396010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Override points to notify derived classes that a paint has happened. 3984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // DidInitiatePaint happens when that has completed, and subsequent rendering 3994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // won't affect the painted content. DidFlushPaint happens once we've received 4004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // the ACK that the screen has been updated. For a given paint operation, 4014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // these overrides will always be called in the order DidInitiatePaint, 4024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // DidFlushPaint. 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidInitiatePaint() {} 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidFlushPaint() {} 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual GURL GetURLForGraphicsContext3D(); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets the scroll offset of this widget, if this widget has a notion of 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // scroll offset. 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Vector2d GetScrollOffset(); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the "hidden" state of this widget. All accesses to is_hidden_ should 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // use this method so that we can properly inform the RenderThread of our 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // state. 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetHidden(bool hidden); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WillToggleFullscreen(); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidToggleFullscreen(); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool next_paint_is_resize_ack() const; 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_next_paint_is_resize_ack(); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_next_paint_is_repaint_ack(); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Override point to obtain that the current input method state and caret 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // position. 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ui::TextInputType GetTextInputType(); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ui::TextInputType WebKitToUiTextInputType( 428f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebTextInputType type); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 430a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_MACOSX) || defined(USE_AURA) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Override point to obtain that the current composition character bounds. 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In the case of surrogate pairs, the character is treated as two characters: 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the bounds for first character is actual one, and the bounds for second 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // character is zero width rectangle. 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetCompositionCharacterBounds( 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<gfx::Rect>* character_bounds); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 438eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Returns the range of the text that is being composed or the selection if 439eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // the composition does not exist. 44058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void GetCompositionRange(gfx::Range* range); 441eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the composition range or composition character bounds 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should be sent to the browser process. 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ShouldUpdateCompositionInfo( 44558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const gfx::Range& range, 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<gfx::Rect>& bounds); 4477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Override point to obtain that the current input method state about 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // composition text. 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool CanComposeInline(); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tells the renderer it does not have focus. Used to prevent us from getting 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the focus on our own when the browser did not focus us. 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearFocus(); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the pending window rect. 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Because the real render_widget is hosted in another process, there is 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a time period where we may have set a new window rect which has not yet 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // been processed by the browser. So we maintain a pending window rect 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // size. If JS code sets the WindowRect, and then immediately calls 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // GetWindowRect() we'll use this pending window rect as the size. 463f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SetPendingWindowRect(const blink::WebRect& r); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by OnHandleInputEvent() to notify subclasses that a key event was 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // just handled. 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidHandleKeyEvent() {} 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by OnHandleInputEvent() to notify subclasses that a mouse event is 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // about to be handled. 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if no further handling is needed. In that case, the event 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // won't be sent to WebKit or trigger DidHandleMouseEvent(). 473f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual bool WillHandleMouseEvent(const blink::WebMouseEvent& event); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by OnHandleInputEvent() to notify subclasses that a gesture event is 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // about to be handled. 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if no further handling is needed. In that case, the event 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // won't be sent to WebKit. 479f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual bool WillHandleGestureEvent(const blink::WebGestureEvent& event); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by OnHandleInputEvent() to notify subclasses that a mouse event was 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // just handled. 483f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void DidHandleMouseEvent(const blink::WebMouseEvent& event) {} 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by OnHandleInputEvent() to notify subclasses that a touch event was 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // just handled. 487f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void DidHandleTouchEvent(const blink::WebTouchEvent& event) {} 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Check whether the WebWidget has any touch event handlers registered 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // at the given point. 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool HasTouchEventHandlersAt(const gfx::Point& point) const; 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 493c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check whether the WebWidget has any touch event handlers registered. 494c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void hasTouchEventHandlers(bool has_handlers); 495c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 496a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Tell the browser about the actions permitted for a new touch point. 497a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void setTouchAction(blink::WebTouchAction touch_action); 498a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 499c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Called when value of focused text field gets dirty, e.g. value is modified 500c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // by script, not by user input. 501c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void didUpdateTextOfFocusedElementByNonUserInput(); 502c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creates a 3D context associated with this view. 504e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch scoped_ptr<WebGraphicsContext3DCommandBufferImpl> CreateGraphicsContext3D(); 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Routing ID that allows us to communicate to the parent browser process 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderWidgetHost. When MSG_ROUTING_NONE, no messages may be sent. 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 routing_id_; 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 surface_id_; 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We are responsible for destroying this object via its Close method. 513effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // May be NULL when the window is closing. 514f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebWidget* webwidget_; 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This is lazily constructed and must not outlive webwidget_. 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<RenderWidgetCompositor> compositor_; 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set to the ID of the view that initiated creating this view, if any. When 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the view was initiated by the browser (the common case), this will be 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // MSG_ROUTING_NONE. This is used in determining ownership when opening 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // child tabs. See RenderWidget::createWebViewWithRequest. 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This ID may refer to an invalid view if that view is closed before this 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // view is. 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 opener_id_; 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The position where this view should be initially shown. 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect initial_pos_; 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool init_complete_; 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We store the current cursor object so we can avoid spamming SetCursor 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // messages. 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebCursor current_cursor_; 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The size of the RenderWidget. 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size size_; 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The size of the view's backing surface in non-DPI-adjusted pixels. 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size physical_backing_size_; 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The height of the physical backing surface that is overdrawn opaquely in 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the browser, for example by an on-screen-keyboard (in DPI-adjusted pixels). 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float overdraw_bottom_height_; 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // The size of the visible viewport in DPI-adjusted pixels. 5485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu gfx::Size visible_viewport_size_; 5495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The area that must be reserved for drawing the resize corner. 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect resizer_rect_; 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Flags for the next ViewHostMsg_UpdateRect message. 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int next_paint_flags_; 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Whether the WebWidget is in auto resize mode, which is used for example 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // by extension popups. 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool auto_resize_mode_; 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if we need to send an UpdateRect message to notify the browser about 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // an already-completed auto-resize. 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool need_update_rect_for_auto_resize_; 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set to true if we should ignore RenderWidget::Show calls. 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool did_show_; 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates that we shouldn't bother generated paint events. 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_hidden_; 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Indicates that we are never visible, so never produce graphical output. 5710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool never_visible_; 5720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates that we are in fullscreen mode. 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_fullscreen_; 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates whether we have been focused/unfocused by the browser. 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_focus_; 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Are we currently handling an input event? 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool handling_input_event_; 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Are we currently handling an ime event? 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool handling_ime_event_; 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 585cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Type of the input event we are currently handling. 586cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebInputEvent::Type handling_event_type_; 587cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 588cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Whether we should not send ack for the current mouse move. 589cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool ignore_ack_for_mouse_move_from_debugger_; 590a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if we have requested this widget be closed. No more messages will 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be sent, except for a Close. 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool closing_; 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether this RenderWidget is currently swapped out, such that the view is 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // being rendered by another process. If all RenderWidgets in a process are 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // swapped out, the process can exit. 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_swapped_out_; 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates if an input method is active in the browser process. 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool input_method_is_active_; 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores information about the current text input. 604f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebTextInputInfo text_input_info_; 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores the current text input type of |webwidget_|. 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::TextInputType text_input_type_; 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Stores the current text input mode of |webwidget_|. 6107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ui::TextInputMode text_input_mode_; 6117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 61258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Stores the current type of composition text rendering of |webwidget_|. 61358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool can_compose_inline_; 61458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores the current selection bounds. 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect selection_focus_rect_; 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect selection_anchor_rect_; 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores the current composition character bounds. 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<gfx::Rect> composition_character_bounds_; 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores the current composition range. 62358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) gfx::Range composition_range_; 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The kind of popup this widget represents, NONE if not a popup. 626f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebPopupType popup_type_; 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Holds all the needed plugin window moves for a scroll. 629ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch typedef std::vector<WebPluginGeometry> WebPluginGeometryVector; 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebPluginGeometryVector plugin_window_moves_; 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // While we are waiting for the browser to update window sizes, we track the 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pending size temporarily. 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int pending_window_rect_count_; 635f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebRect pending_window_rect_; 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The screen rects of the view and the window that contains it. 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect view_screen_rect_; 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_screen_rect_; 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<IPC::Message> pending_input_event_ack_; 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // The time spent in input handlers this frame. Used to throttle input acks. 6441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::TimeDelta total_input_handling_time_this_frame_; 6451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates if the next sequence of Char events should be suppressed or not. 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool suppress_next_char_events_; 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Properties of the screen hosting this RenderWidget instance. 650f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebScreenInfo screen_info_; 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The device scale factor. This value is computed from the DPI entries in 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |screen_info_| on some platforms, and defaults to 1 on other platforms. 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float device_scale_factor_; 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 656f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // The device color profile on supported platforms. 657f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::vector<char> device_color_profile_; 658f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 659f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // State associated with synthetic gestures. Synthetic gestures are processed 660f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // in-order, so a queue is sufficient to identify the correct state for a 661f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // completed gesture. 662f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::queue<SyntheticGestureCompletionCallback> 663f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) pending_synthetic_gesture_callbacks_; 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Specified whether the compositor will run in its own thread. 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_threaded_compositing_enabled_; 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 668cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const ui::LatencyInfo* current_event_latency_info_; 669cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 670ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch uint32 next_output_surface_id_; 671ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 6722385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#if defined(OS_ANDROID) 673c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Indicates value in the focused text field is in dirty state, i.e. modified 674c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // by script etc., not by user input. 675c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool text_field_is_dirty_; 676c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 6772385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // A counter for number of outstanding messages from the renderer to the 6782385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // browser regarding IME-type events that have not been acknowledged by the 6792385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // browser. If this value is not 0 IME events will be dropped. 6802385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch int outstanding_ime_acks_; 681010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 682010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // The background color of the document body element. This is used as the 683010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // default background color for filling the screen areas for which we don't 684010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // have the actual content. 685010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SkColor body_background_color_; 6862385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#endif 6872385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 6884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<ScreenMetricsEmulator> screen_metrics_emulator_; 6894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 6904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Popups may be displaced when screen metrics emulation is enabled. 6914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // These values are used to properly adjust popup position. 6924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Point popup_view_origin_for_emulation_; 6934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Point popup_screen_origin_for_emulation_; 6944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) float popup_origin_scale_for_emulation_; 6954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 6961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<ResizingModeSelector> resizing_mode_selector_; 6971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6986d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Lists of RenderFrameProxy objects that need to be notified of 6996d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // compositing-related events (e.g. DidCommitCompositorFrame). 7006d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ObserverList<RenderFrameProxy> render_frame_proxies_; 701cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(VIDEO_HOLE) 702cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ObserverList<RenderFrameImpl> video_hole_frames_; 703cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // defined(VIDEO_HOLE) 704cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 705cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // A list of RenderFrames associated with this RenderWidget. Notifications 706cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // are sent to each frame in the list for events such as changing 707cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // visibility state for example. 708cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ObserverList<RenderFrameImpl> render_frames_; 7095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::MenuSourceType context_menu_source_type_; 711d7582f30d3b217d8144db8429955efdca442508fBo Liu bool has_host_context_menu_location_; 712d7582f30d3b217d8144db8429955efdca442508fBo Liu gfx::Point host_context_menu_location_; 7135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(RenderWidget); 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_RENDERER_RENDER_WIDGET_H_ 720