blob: 449d377c4fa273d4b16b431a8a984573cc509d33 [file] [log] [blame]
[email protected]9f4f3322012-01-18 22:29:561// Copyright (c) 2012 The Chromium Authors. All rights reserved.
license.botbf09a502008-08-24 00:55:552// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
initial.commit09911bf2008-07-26 23:55:294
[email protected]2cff0052011-03-18 16:51:445#ifndef CONTENT_RENDERER_RENDER_WIDGET_H_
6#define CONTENT_RENDERER_RENDER_WIDGET_H_
initial.commit09911bf2008-07-26 23:55:297
avi1023d012015-12-25 02:39:148#include <stddef.h>
9#include <stdint.h>
10
[email protected]aa4117f2011-12-09 22:19:2111#include <deque>
[email protected]0e241b4b2012-08-18 09:06:2712#include <map>
dchengcedca5612016-04-09 01:40:1513#include <memory>
[email protected]010ea08a2009-10-11 20:21:3214
[email protected]586871b2014-07-22 17:05:1115#include "base/callback.h"
[email protected]f3112a52011-09-30 23:47:4916#include "base/compiler_specific.h"
avi1023d012015-12-25 02:39:1417#include "base/macros.h"
[email protected]3b63f8f42011-03-28 01:54:1518#include "base/memory/ref_counted.h"
[email protected]bffc8302014-01-23 20:52:1619#include "base/observer_list.h"
[email protected]abb522162013-06-28 01:54:1620#include "base/time/time.h"
avi1023d012015-12-25 02:39:1421#include "build/build_config.h"
[email protected]f3112a52011-09-30 23:47:4922#include "content/common/content_export.h"
[email protected]c2809346d2014-03-20 00:11:0323#include "content/common/cursors/webcursor.h"
[email protected]9017d7852013-11-21 17:47:3524#include "content/common/input/synthetic_gesture_params.h"
mfomitchev2600fd7c2016-02-17 20:53:3925#include "content/renderer/devtools/render_widget_screen_metrics_emulator_delegate.h"
fsamuel78f86e42016-01-20 04:10:2326#include "content/renderer/gpu/render_widget_compositor_delegate.h"
fsamuel72464894f2015-12-15 06:59:3127#include "content/renderer/input/render_widget_input_handler.h"
28#include "content/renderer/input/render_widget_input_handler_delegate.h"
[email protected]586871b2014-07-22 17:05:1129#include "content/renderer/message_delivery_policy.h"
lfgbee1e0a2016-06-08 21:24:2130#include "content/renderer/mouse_lock_dispatcher.h"
31#include "content/renderer/render_widget_mouse_lock_dispatcher.h"
[email protected]4f86bdb2012-11-10 19:11:1932#include "ipc/ipc_listener.h"
33#include "ipc/ipc_sender.h"
mikhail.pozdnyakovc0e251b2015-04-15 06:51:1234#include "third_party/WebKit/public/platform/WebDisplayMode.h"
[email protected]5c30b5e02013-05-30 03:46:0835#include "third_party/WebKit/public/platform/WebRect.h"
[email protected]2255a9332013-06-17 05:12:3136#include "third_party/WebKit/public/web/WebCompositionUnderline.h"
[email protected]c27dd4f2014-05-22 18:05:1937#include "third_party/WebKit/public/web/WebInputEvent.h"
[email protected]2255a9332013-06-17 05:12:3138#include "third_party/WebKit/public/web/WebPopupType.h"
39#include "third_party/WebKit/public/web/WebTextDirection.h"
40#include "third_party/WebKit/public/web/WebTextInputInfo.h"
[email protected]5d0bbdfa92013-12-10 00:35:5141#include "third_party/WebKit/public/web/WebTouchAction.h"
[email protected]0e45bd02013-07-12 20:20:0242#include "third_party/WebKit/public/web/WebWidget.h"
[email protected]2255a9332013-06-17 05:12:3143#include "third_party/WebKit/public/web/WebWidgetClient.h"
[email protected]b256eca2013-07-11 10:57:4044#include "ui/base/ime/text_input_mode.h"
[email protected]ad26ef42011-06-17 07:59:4545#include "ui/base/ime/text_input_type.h"
[email protected]a09d53ce2014-01-31 00:46:4246#include "ui/base/ui_base_types.h"
tfarina93bfa912014-12-05 14:23:1547#include "ui/gfx/geometry/rect.h"
tfarina93bfa912014-12-05 14:23:1548#include "ui/gfx/geometry/vector2d_f.h"
[email protected]08397d52011-02-05 01:53:3849#include "ui/gfx/native_widget_types.h"
[email protected]db4fc1e2013-09-06 20:01:5150#include "ui/gfx/range/range.h"
[email protected]d353541f2012-05-03 22:45:4151#include "ui/surface/transport_dib.h"
initial.commit09911bf2008-07-26 23:55:2952
danakj870925d2016-05-03 20:07:3853class GURL;
54
[email protected]484955942010-08-19 16:13:1855namespace IPC {
56class SyncMessage;
[email protected]586871b2014-07-22 17:05:1157class SyncMessageFilter;
[email protected]484955942010-08-19 16:13:1858}
59
[email protected]180ef242013-11-07 06:50:4660namespace blink {
skyostil529caa292016-08-10 17:44:5161namespace scheduler {
62class RenderWidgetSchedulingState;
63}
[email protected]19193682014-04-03 15:01:4364struct WebDeviceEmulationParams;
lfgcaab5142016-02-26 19:06:5265class WebFrameWidget;
[email protected]41d86852012-11-07 12:23:2466class WebGestureEvent;
kenrba7199832015-01-22 23:44:5967class WebLocalFrame;
[email protected]6a8ddba52010-09-05 04:38:0668class WebMouseEvent;
donnda070f3c2015-01-16 19:54:1169class WebNode;
70struct WebPoint;
[email protected]526476902011-10-06 20:34:0671}
72
[email protected]586871b2014-07-22 17:05:1173namespace cc {
74class OutputSurface;
75class SwapPromise;
76}
[email protected]ba91a792013-02-06 09:48:2877
[email protected]db4fc1e2013-09-06 20:01:5178namespace gfx {
[email protected]4de6d1692011-10-12 08:45:4479class Range;
80}
81
[email protected]e9ff79c2012-10-19 21:31:2682namespace content {
danakj6e3bf8012014-12-16 18:27:5383class CompositorDependencies;
[email protected]b2e4c70132013-10-03 02:07:5184class ExternalPopupMenu;
[email protected]586871b2014-07-22 17:05:1185class FrameSwapMessageQueue;
changwanf2a707b2015-10-30 08:22:1686class ImeEventGuard;
ekaramad2a46d632016-07-19 13:33:0987class PepperPluginInstanceImpl;
[email protected]bffc8302014-01-23 20:52:1688class RenderFrameImpl;
[email protected]e3244ed2014-06-20 20:04:2789class RenderFrameProxy;
[email protected]ba91a792013-02-06 09:48:2890class RenderWidgetCompositor;
avi40b5be7a2016-03-03 21:13:4491class RenderWidgetOwnerDelegate;
mfomitchev2600fd7c2016-02-17 20:53:3992class RenderWidgetScreenMetricsEmulator;
[email protected]5b45ad42013-10-25 00:42:0493class ResizingModeSelector;
[email protected]b2e4c70132013-10-03 02:07:5194struct ContextMenuParams;
jddukec05612b2015-06-25 23:13:1895struct DidOverscrollParams;
fsamuel664e8b62016-01-20 19:54:0196struct ResizeParams;
[email protected]e9ff79c2012-10-19 21:31:2697
initial.commit09911bf2008-07-26 23:55:2998// RenderWidget provides a communication bridge between a WebWidget and
99// a RenderWidgetHost, the latter of which lives in a different process.
dchengd96a27a2015-07-24 20:17:32100//
101// RenderWidget is used to implement:
102// - RenderViewImpl (deprecated)
103// - Fullscreen mode (RenderWidgetFullScreen)
104// - Popup "menus" (like the color chooser and date picker)
105// - Widgets for frames (for out-of-process iframe support)
[email protected]f3112a52011-09-30 23:47:49106class CONTENT_EXPORT RenderWidget
[email protected]c47317e2012-06-20 22:35:31107 : public IPC::Listener,
108 public IPC::Sender,
[email protected]180ef242013-11-07 06:50:46109 NON_EXPORTED_BASE(virtual public blink::WebWidgetClient),
fsamuel78f86e42016-01-20 04:10:23110 public RenderWidgetCompositorDelegate,
fsamuel72464894f2015-12-15 06:59:31111 public RenderWidgetInputHandlerDelegate,
mfomitchev2600fd7c2016-02-17 20:53:39112 public RenderWidgetScreenMetricsEmulatorDelegate,
[email protected]f3112a52011-09-30 23:47:49113 public base::RefCounted<RenderWidget> {
initial.commit09911bf2008-07-26 23:55:29114 public:
115 // Creates a new RenderWidget. The opener_id is the routing ID of the
[email protected]380244092011-10-07 17:26:27116 // RenderView that this widget lives inside.
avi1023d012015-12-25 02:39:14117 static RenderWidget* Create(int32_t opener_id,
danakj6e3bf8012014-12-16 18:27:53118 CompositorDependencies* compositor_deps,
[email protected]180ef242013-11-07 06:50:46119 blink::WebPopupType popup_type,
120 const blink::WebScreenInfo& screen_info);
initial.commit09911bf2008-07-26 23:55:29121
kenrba7199832015-01-22 23:44:59122 // Creates a new RenderWidget that will be attached to a RenderFrame.
123 static RenderWidget* CreateForFrame(int routing_id,
kenrba7199832015-01-22 23:44:59124 bool hidden,
125 const blink::WebScreenInfo& screen_info,
126 CompositorDependencies* compositor_deps,
127 blink::WebLocalFrame* frame);
128
dchengda9b4bb2015-07-20 20:58:08129 // Closes a RenderWidget that was created by |CreateForFrame|.
dcheng3ce04b62015-10-26 23:30:55130 // TODO(avi): De-virtualize this once RenderViewImpl has-a RenderWidget.
131 // https://crbug.com/545684
132 virtual void CloseForFrame();
[email protected]484955942010-08-19 16:13:18133
avi1023d012015-12-25 02:39:14134 int32_t routing_id() const { return routing_id_; }
fsamuele8326c742016-01-12 00:49:39135 void SetRoutingID(int32_t routing_id);
136
danakj6e3bf8012014-12-16 18:27:53137 CompositorDependencies* compositor_deps() const { return compositor_deps_; }
[email protected]180ef242013-11-07 06:50:46138 blink::WebWidget* webwidget() const { return webwidget_; }
mfomitchev2600fd7c2016-02-17 20:53:39139 const gfx::Size& size() const { return size_; }
mikhail.pozdnyakovf2c902a2015-04-14 08:09:12140 bool is_fullscreen_granted() const { return is_fullscreen_granted_; }
mikhail.pozdnyakovc0e251b2015-04-15 06:51:12141 blink::WebDisplayMode display_mode() const { return display_mode_; }
[email protected]204f1df2012-01-04 20:21:13142 bool is_hidden() const { return is_hidden_; }
[email protected]4ee64622014-03-21 22:34:15143 // Temporary for debugging purposes...
144 bool closing() const { return closing_; }
145 bool is_swapped_out() { return is_swapped_out_; }
[email protected]be1af0662014-07-29 19:55:51146 bool has_host_context_menu_location() {
147 return has_host_context_menu_location_;
148 }
149 gfx::Point host_context_menu_location() {
150 return host_context_menu_location_;
[email protected]4ee64622014-03-21 22:34:15151 }
[email protected]589621b2010-09-23 22:01:07152
avi40b5be7a2016-03-03 21:13:44153 void set_owner_delegate(RenderWidgetOwnerDelegate* owner_delegate) {
154 DCHECK(!owner_delegate_);
155 owner_delegate_ = owner_delegate;
156 }
157
158 RenderWidgetOwnerDelegate* owner_delegate() { return owner_delegate_; }
159
kenrba7199832015-01-22 23:44:59160 // ScreenInfo exposed so it can be passed to subframe RenderWidgets.
161 blink::WebScreenInfo screen_info() const { return screen_info_; }
162
[email protected]bffc8302014-01-23 20:52:16163 // Functions to track out-of-process frames for special notifications.
[email protected]e3244ed2014-06-20 20:04:27164 void RegisterRenderFrameProxy(RenderFrameProxy* proxy);
165 void UnregisterRenderFrameProxy(RenderFrameProxy* proxy);
[email protected]bffc8302014-01-23 20:52:16166
[email protected]de3c5d82014-05-28 22:12:59167 // Functions to track all RenderFrame objects associated with this
168 // RenderWidget.
169 void RegisterRenderFrame(RenderFrameImpl* frame);
170 void UnregisterRenderFrame(RenderFrameImpl* frame);
171
[email protected]a017938b2014-05-27 21:17:17172#if defined(VIDEO_HOLE)
173 void RegisterVideoHoleFrame(RenderFrameImpl* frame);
174 void UnregisterVideoHoleFrame(RenderFrameImpl* frame);
175#endif // defined(VIDEO_HOLE)
176
[email protected]c47317e2012-06-20 22:35:31177 // IPC::Listener
dcheng6d18e402014-10-21 12:32:52178 bool OnMessageReceived(const IPC::Message& msg) override;
initial.commit09911bf2008-07-26 23:55:29179
[email protected]c47317e2012-06-20 22:35:31180 // IPC::Sender
dcheng6d18e402014-10-21 12:32:52181 bool Send(IPC::Message* msg) override;
initial.commit09911bf2008-07-26 23:55:29182
fsamuel78f86e42016-01-20 04:10:23183 // RenderWidgetCompositorDelegate
184 void ApplyViewportDeltas(const gfx::Vector2dF& inner_delta,
185 const gfx::Vector2dF& outer_delta,
186 const gfx::Vector2dF& elastic_overscroll_delta,
187 float page_scale,
188 float top_controls_delta) override;
189 void BeginMainFrame(double frame_time_sec) override;
dchengcedca5612016-04-09 01:40:15190 std::unique_ptr<cc::OutputSurface> CreateOutputSurface(
191 bool fallback) override;
192 std::unique_ptr<cc::BeginFrameSource> CreateExternalBeginFrameSource()
193 override;
fsamuel78f86e42016-01-20 04:10:23194 void DidCommitAndDrawCompositorFrame() override;
195 void DidCommitCompositorFrame() override;
196 void DidCompletePageScaleAnimation() override;
197 void DidCompleteSwapBuffers() override;
fsamuel78f86e42016-01-20 04:10:23198 void ForwardCompositorProto(const std::vector<uint8_t>& proto) override;
199 bool IsClosing() const override;
200 void OnSwapBuffersAborted() override;
201 void OnSwapBuffersComplete() override;
202 void OnSwapBuffersPosted() override;
danakj53eccbc2016-03-02 22:51:07203 void RequestScheduleAnimation() override;
fsamuel78f86e42016-01-20 04:10:23204 void UpdateVisualState() override;
205 void WillBeginCompositorFrame() override;
jbroman6ccbc7d472016-07-27 04:45:41206 std::unique_ptr<cc::SwapPromise> RequestCopyOfOutputForLayoutTest(
207 std::unique_ptr<cc::CopyOutputRequest> request) override;
fsamuel78f86e42016-01-20 04:10:23208
fsamuel72464894f2015-12-15 06:59:31209 // RenderWidgetInputHandlerDelegate
210 void FocusChangeComplete() override;
211 bool HasTouchEventHandlersAt(const gfx::Point& point) const override;
dtapuska1827dd22016-03-11 15:24:59212 void ObserveGestureEventAndResult(const blink::WebGestureEvent& gesture_event,
213 const gfx::Vector2dF& unused_delta,
214 bool event_processed) override;
215
fsamuel72464894f2015-12-15 06:59:31216 void OnDidHandleKeyEvent() override;
217 void OnDidOverscroll(const DidOverscrollParams& params) override;
dchengcedca5612016-04-09 01:40:15218 void OnInputEventAck(std::unique_ptr<InputEventAck> input_event_ack) override;
dtapuskab08721e62016-06-29 03:35:07219 void NotifyInputEventHandled(blink::WebInputEvent::Type handled_type,
220 InputEventAckState ack_result) override;
fsamuele8326c742016-01-12 00:49:39221 void SetInputHandler(RenderWidgetInputHandler* input_handler) override;
fsamuel72464894f2015-12-15 06:59:31222 void UpdateTextInputState(ShowIme show_ime,
223 ChangeSource change_source) override;
224 bool WillHandleGestureEvent(const blink::WebGestureEvent& event) override;
225 bool WillHandleMouseEvent(const blink::WebMouseEvent& event) override;
226
mfomitchev2600fd7c2016-02-17 20:53:39227 // RenderWidgetScreenMetricsDelegate
228 void Redraw() override;
229 void Resize(const ResizeParams& resize_params) override;
230 void SetScreenMetricsEmulationParameters(
231 bool enabled,
232 const blink::WebDeviceEmulationParams& params) override;
233 void SetScreenRects(const gfx::Rect& view_screen_rect,
234 const gfx::Rect& window_screen_rect) override;
235
[email protected]180ef242013-11-07 06:50:46236 // blink::WebWidgetClient
avi5c77d212015-09-25 20:08:25237 void initializeLayerTreeView() override;
238 blink::WebLayerTreeView* layerTreeView() override;
dglazkovf0e1d6d2015-10-10 02:13:48239 void didMeaningfulLayout(blink::WebMeaningfulLayout layout_type) override;
avi5c77d212015-09-25 20:08:25240 void didChangeCursor(const blink::WebCursorInfo&) override;
241 void closeWidgetSoon() override;
242 void show(blink::WebNavigationPolicy) override;
243 blink::WebRect windowRect() override;
244 void setToolTipText(const blink::WebString& text,
245 blink::WebTextDirection hint) override;
246 void setWindowRect(const blink::WebRect&) override;
247 blink::WebRect windowResizerRect() override;
avi5c77d212015-09-25 20:08:25248 blink::WebScreenInfo screenInfo() override;
avi5c77d212015-09-25 20:08:25249 void resetInputMethod() override;
250 void didHandleGestureEvent(const blink::WebGestureEvent& event,
251 bool event_cancelled) override;
bokane53a10f2016-04-13 23:48:31252 void didOverscroll(const blink::WebFloatSize& overscrollDelta,
253 const blink::WebFloatSize& accumulatedOverscroll,
avi5c77d212015-09-25 20:08:25254 const blink::WebFloatPoint& position,
255 const blink::WebFloatSize& velocity) override;
256 void showImeIfNeeded() override;
oshima581cf3f62015-12-16 20:08:01257 void convertViewportToWindow(blink::WebRect* rect) override;
oshimaa6985b62016-01-27 08:58:30258 void convertWindowToViewport(blink::WebFloatRect* rect) override;
lfgbee1e0a2016-06-08 21:24:21259 bool requestPointerLock() override;
260 void requestPointerUnlock() override;
261 bool isPointerLocked() override;
[email protected]4873c7d2009-07-16 06:36:28262
fsamuel72464894f2015-12-15 06:59:31263 // Override point to obtain that the current input method state and caret
264 // position.
265 virtual ui::TextInputType GetTextInputType();
266 virtual ui::TextInputType WebKitToUiTextInputType(
267 blink::WebTextInputType type);
268
donnda070f3c2015-01-16 19:54:11269#if defined(OS_ANDROID)
270 // Notifies that a tap was not consumed, so showing a UI for the unhandled
271 // tap may be needed.
donnd57e54f52015-02-26 19:03:37272 // Performs various checks on the given WebNode to apply heuristics to
273 // determine if triggering is appropriate.
avi5c77d212015-09-25 20:08:25274 void showUnhandledTapUIIfNeeded(const blink::WebPoint& tapped_position,
275 const blink::WebNode& tapped_node,
276 bool page_changed) override;
donnda070f3c2015-01-16 19:54:11277#endif
278
[email protected]7912e822014-04-16 02:37:03279 // Begins the compositor's scheduler to start producing frames.
280 void StartCompositor();
281
[email protected]aeeedad2014-08-22 18:16:22282 // Stop compositing.
ennef3c58142014-12-09 21:44:38283 void WillCloseLayerTreeView();
[email protected]aeeedad2014-08-22 18:16:22284
[email protected]24ed0432013-04-24 07:50:31285 RenderWidgetCompositor* compositor() const;
286
fsamuel72464894f2015-12-15 06:59:31287 const RenderWidgetInputHandler& input_handler() const {
fsamuele8326c742016-01-12 00:49:39288 return *input_handler_;
fsamuel72464894f2015-12-15 06:59:31289 }
290
291 void SetHandlingInputEventForTesting(bool handling_input_event);
292
293 // When paused in debugger, we send ack for mouse event early. This ensures
294 // that we continue receiving mouse moves and pass them to debugger. Returns
295 // whether we are paused in mouse move event and have sent the ack.
296 bool SendAckForMouseMoveFromDebugger();
297
298 // When resumed from pause in debugger while handling mouse move,
299 // we should not send an extra ack (see SendAckForMouseMoveFromDebugger).
300 void IgnoreAckForMouseMoveFromDebugger();
301
[email protected]79fa22e2013-08-23 15:18:12302 // Callback for use with synthetic gestures (e.g. BeginSmoothScroll).
303 typedef base::Callback<void()> SyntheticGestureCompletionCallback;
[email protected]0e241b4b2012-08-18 09:06:27304
[email protected]9017d7852013-11-21 17:47:35305 // Send a synthetic gesture to the browser to be queued to the synthetic
306 // gesture controller.
307 void QueueSyntheticGesture(
dchengcedca5612016-04-09 01:40:15308 std::unique_ptr<SyntheticGestureParams> gesture_params,
[email protected]9017d7852013-11-21 17:47:35309 const SyntheticGestureCompletionCallback& callback);
[email protected]1e1dd182013-09-12 01:51:15310
[email protected]586871b2014-07-22 17:05:11311 // Deliveres |message| together with compositor state change updates. The
312 // exact behavior depends on |policy|.
313 // This mechanism is not a drop-in replacement for IPC: messages sent this way
314 // will not be automatically available to BrowserMessageFilter, for example.
315 // FIFO ordering is preserved between messages enqueued with the same
316 // |policy|, the ordering between messages enqueued for different policies is
317 // undefined.
318 //
319 // |msg| message to send, ownership of |msg| is transferred.
320 // |policy| see the comment on MessageDeliveryPolicy.
321 void QueueMessage(IPC::Message* msg, MessageDeliveryPolicy policy);
322
changwan8c342742016-02-26 00:53:39323 // Check whether IME thread is being used or not.
324 bool IsUsingImeThread();
325
changwanf2a707b2015-10-30 08:22:16326 // Handle start and finish of IME event guard.
327 void OnImeEventGuardStart(ImeEventGuard* guard);
328 void OnImeEventGuardFinish(ImeEventGuard* guard);
[email protected]66fca5bc2013-05-23 06:58:29329
[email protected]4ee64622014-03-21 22:34:15330 // Returns whether we currently should handle an IME event.
331 bool ShouldHandleImeEvent();
332
mfomitchev2600fd7c2016-02-17 20:53:39333 void SetPopupOriginAdjustmentsForEmulation(
334 RenderWidgetScreenMetricsEmulator* emulator);
[email protected]b2e4c70132013-10-03 02:07:51335
[email protected]2d6836f42014-07-02 17:25:31336 gfx::Rect AdjustValidationMessageAnchor(const gfx::Rect& anchor);
[email protected]b2e4c70132013-10-03 02:07:51337
jdduke491a3f0c2015-06-15 23:30:26338
339 void ScheduleComposite();
[email protected]7d08a9352013-10-15 08:24:56340 void ScheduleCompositeWithForcedRedraw();
341
[email protected]7a4e2532013-12-02 21:30:02342 // Checks if the selection bounds have been changed. If they are changed,
343 // the new value will be sent to the browser process.
344 void UpdateSelectionBounds();
345
[email protected]e5e438d62014-03-27 21:47:16346 virtual void GetSelectionBounds(gfx::Rect* start, gfx::Rect* end);
347
[email protected]a09d53ce2014-01-31 00:46:42348 void OnShowHostContextMenu(ContextMenuParams* params);
[email protected]7a4e2532013-12-02 21:30:02349
[email protected]7a4e2532013-12-02 21:30:02350 // Checks if the composition range or composition character bounds have been
351 // changed. If they are changed, the new value will be sent to the browser
yukawa5f21c6a2014-10-27 17:09:30352 // process. This method does nothing when the browser process is not able to
353 // handle composition range and composition character bounds.
nonafa291792016-08-10 02:36:18354 // If immediate_request is true, render sends the latest composition info to
355 // the browser even if the composition info is not changed.
356 void UpdateCompositionInfo(bool immediate_request);
[email protected]7a4e2532013-12-02 21:30:02357
avi40b5be7a2016-03-03 21:13:44358 // Change the device ICC color profile while running a layout test.
359 void SetDeviceColorProfileForTesting(const std::vector<char>& color_profile);
360 void ResetDeviceColorProfileForTesting();
361
lfgb00fcad2016-07-14 14:16:33362 // Called when the Widget has changed size as a result of an auto-resize.
363 void DidAutoResize(const gfx::Size& new_size);
364
lfg0140a452016-07-19 19:15:05365 // Called to get the position of the root window containing the widget in
366 // screen coordinates.
367 gfx::Rect RootWindowRect();
368
lfge0c2792ec2016-05-11 18:52:08369 // Indicates whether this widget has focus.
370 bool has_focus() const { return has_focus_; }
371
lfgbee1e0a2016-06-08 21:24:21372 MouseLockDispatcher* mouse_lock_dispatcher() {
373 return mouse_lock_dispatcher_.get();
374 }
375
ekaramad2a46d632016-07-19 13:33:09376 void set_focused_pepper_plugin(PepperPluginInstanceImpl* plugin) {
377 focused_pepper_plugin_ = plugin;
378 }
379
initial.commit09911bf2008-07-26 23:55:29380 protected:
[email protected]8085dbc82008-09-26 22:53:44381 // Friend RefCounted so that the dtor can be non-public. Using this class
382 // without ref-counting is an error.
383 friend class base::RefCounted<RenderWidget>;
fsamuele8326c742016-01-12 00:49:39384
[email protected]7339cd22010-10-27 00:11:20385 // For unit tests.
[email protected]e9ff79c2012-10-19 21:31:26386 friend class RenderWidgetTest;
[email protected]8085dbc82008-09-26 22:53:44387
[email protected]61e2b3cc2012-03-02 16:13:34388 enum ResizeAck {
389 SEND_RESIZE_ACK,
390 NO_RESIZE_ACK,
391 };
392
dcheng35d31c112015-07-22 00:17:36393 RenderWidget(CompositorDependencies* compositor_deps,
394 blink::WebPopupType popup_type,
[email protected]180ef242013-11-07 06:50:46395 const blink::WebScreenInfo& screen_info,
[email protected]1ac10dca2013-08-20 20:47:04396 bool swapped_out,
[email protected]7912e822014-04-16 02:37:03397 bool hidden,
398 bool never_visible);
[email protected]ce2b28e2012-08-09 15:53:57399
dcheng6d18e402014-10-21 12:32:52400 ~RenderWidget() override;
initial.commit09911bf2008-07-26 23:55:29401
lfgcaab5142016-02-26 19:06:52402 static blink::WebFrameWidget* CreateWebFrameWidget(
403 RenderWidget* render_widget,
404 blink::WebLocalFrame* frame);
dchengda9b4bb2015-07-20 20:58:08405
406 // Creates a WebWidget based on the popup type.
407 static blink::WebWidget* CreateWebWidget(RenderWidget* render_widget);
408
pimanc4af3072015-10-02 03:45:59409 // Initializes this view with the given opener.
avi1023d012015-12-25 02:39:14410 bool Init(int32_t opener_id);
initial.commit09911bf2008-07-26 23:55:29411
[email protected]484955942010-08-19 16:13:18412 // Called by Init and subclasses to perform initialization.
avi1023d012015-12-25 02:39:14413 bool DoInit(int32_t opener_id,
[email protected]180ef242013-11-07 06:50:46414 blink::WebWidget* web_widget,
[email protected]484955942010-08-19 16:13:18415 IPC::SyncMessage* create_widget_message);
416
[email protected]992db4c2011-05-12 15:37:15417 // Sets whether this RenderWidget has been swapped out to be displayed by
418 // a RenderWidget in a different process. If so, no new IPC messages will be
419 // sent (only ACKs) and the process is free to exit when there are no other
420 // active RenderWidgets.
421 void SetSwappedOut(bool is_swapped_out);
422
[email protected]949b6592014-08-20 13:17:52423 // Allows the process to exit once the unload handler has finished, if there
424 // are no other active RenderWidgets.
425 void WasSwappedOut();
426
[email protected]2533ce12009-05-09 00:02:24427 void DoDeferredClose();
dgozmancf9039cd2015-04-06 12:01:31428 void NotifyOnClose();
dchengda9b4bb2015-07-20 20:58:08429
bokanc63441c2016-04-27 15:49:12430 gfx::Size GetSizeForWebWidget() const;
431 virtual void ResizeWebWidget();
432
dchengda9b4bb2015-07-20 20:58:08433 // Close the underlying WebWidget.
434 virtual void Close();
initial.commit09911bf2008-07-26 23:55:29435
[email protected]92650162013-10-30 03:31:02436 // Used to force the size of a window when running layout tests.
bokanc007c3a2015-02-03 07:15:56437 void SetWindowRectSynchronously(const gfx::Rect& new_window_rect);
haibinluc643d33c2016-06-03 02:22:34438#if defined(USE_EXTERNAL_POPUP_MENU)
[email protected]b2e4c70132013-10-03 02:07:51439 void SetExternalPopupOriginAdjustmentsForEmulation(
mfomitchev2600fd7c2016-02-17 20:53:39440 ExternalPopupMenu* popup,
441 RenderWidgetScreenMetricsEmulator* emulator);
[email protected]53907862014-03-25 15:42:40442#endif
[email protected]61e2b3cc2012-03-02 16:13:34443
initial.commit09911bf2008-07-26 23:55:29444 // RenderWidget IPC message handlers
[email protected]180ef242013-11-07 06:50:46445 void OnHandleInputEvent(const blink::WebInputEvent* event,
dtapuska0bd451a2016-02-18 17:08:10446 const ui::LatencyInfo& latency_info,
447 InputEventDispatchType dispatch_type);
[email protected]34202de2013-05-06 23:36:22448 void OnCursorVisibilityChange(bool is_visible);
[email protected]c084330e02013-04-27 01:08:15449 void OnMouseCaptureLost();
450 virtual void OnSetFocus(bool enable);
naskoc288745f2015-05-01 22:54:21451 void OnClose();
[email protected]fc4404d2012-11-07 19:53:30452 void OnCreatingNewAck();
fsamuel664e8b62016-01-20 19:54:01453 virtual void OnResize(const ResizeParams& params);
dgozman9260b0a12015-03-16 13:45:20454 void OnEnableDeviceEmulation(const blink::WebDeviceEmulationParams& params);
455 void OnDisableDeviceEmulation();
[email protected]b5913d72012-02-07 22:26:54456 void OnChangeResizeRect(const gfx::Rect& resizer_rect);
[email protected]941e4552010-02-01 21:23:43457 virtual void OnWasHidden();
[email protected]3399dd822014-08-09 11:14:24458 virtual void OnWasShown(bool needs_repainting,
459 const ui::LatencyInfo& latency_info);
avi1023d012015-12-25 02:39:14460 void OnCreateVideoAck(int32_t video_id);
461 void OnUpdateVideoAck(int32_t video_id);
[email protected]2533ce12009-05-09 00:02:24462 void OnRequestMoveAck();
[email protected]56ea1a62011-05-30 07:05:57463 virtual void OnImeSetComposition(
[email protected]fcf75d42013-12-03 20:11:26464 const base::string16& text,
[email protected]180ef242013-11-07 06:50:46465 const std::vector<blink::WebCompositionUnderline>& underlines,
chongz7eb752802016-01-27 21:28:07466 const gfx::Range& replacement_range,
[email protected]fa7b1dc2010-06-23 17:53:04467 int selection_start,
468 int selection_end);
[email protected]fcf75d42013-12-03 20:11:26469 virtual void OnImeConfirmComposition(const base::string16& text,
[email protected]db4fc1e2013-09-06 20:01:51470 const gfx::Range& replacement_range,
[email protected]0e45bd02013-07-12 20:20:02471 bool keep_selection);
oshimad5279032015-12-16 18:22:33472 // Called when the device scale factor is changed, or the layer tree is
473 // initialized.
474 virtual void OnDeviceScaleFactorChanged();
475
[email protected]0bc1f572013-04-17 01:46:31476 void OnRepaint(gfx::Size size_to_paint);
[email protected]79fa22e2013-08-23 15:18:12477 void OnSyntheticGestureCompleted();
[email protected]180ef242013-11-07 06:50:46478 void OnSetTextDirection(blink::WebTextDirection direction);
[email protected]872ae5b2011-05-26 20:20:50479 void OnGetFPS();
[email protected]80ad8622012-11-07 16:33:03480 void OnUpdateScreenRects(const gfx::Rect& view_screen_rect,
481 const gfx::Rect& window_screen_rect);
lfgdb5c4ed2016-03-04 23:09:07482 void OnUpdateWindowScreenRect(const gfx::Rect& window_screen_rect);
[email protected]2384b6c2013-02-28 23:58:51483 void OnShowImeIfNeeded();
fsamuel278664272016-07-13 04:06:59484 void OnSetSurfaceClientId(uint32_t surface_id_namespace);
dtrainor5ef644e2015-11-19 00:12:47485 void OnHandleCompositorProto(const std::vector<uint8_t>& proto);
[email protected]0d1ebed12013-08-05 22:01:13486
[email protected]adb362312014-06-28 06:04:24487#if defined(OS_ANDROID)
changwan3a841162015-08-11 02:53:37488 // Called when we send IME event that expects an ACK.
489 void OnImeEventSentForAck(const blink::WebTextInputInfo& info);
[email protected]0d1ebed12013-08-05 22:01:13490
491 // Called by the browser process for every required IME acknowledgement.
492 void OnImeEventAck();
changwan8c342742016-02-26 00:53:39493
494 // Called by the browser process to update text input state.
495 void OnRequestTextInputStateUpdate();
[email protected]105dffb42013-02-20 03:46:21496#endif
[email protected]0d1ebed12013-08-05 22:01:13497
nonafa291792016-08-10 02:36:18498 // Called by the browser process to update the cursor and composition
499 // information.
500 void OnRequestCompositionUpdate(bool immediate_request, bool monitor_request);
501
[email protected]847a2582013-03-09 02:29:51502 // Notify the compositor about a change in viewport size. This should be
503 // used only with auto resize mode WebWidgets, as normal WebWidgets should
504 // go through OnResize.
[email protected]97e1bf72013-03-06 14:06:05505 void AutoResizeCompositor();
506
[email protected]468ac582012-11-20 00:53:19507 virtual void SetDeviceScaleFactor(float device_scale_factor);
avi40b5be7a2016-03-03 21:13:44508 bool SetDeviceColorProfile(const std::vector<char>& color_profile);
[email protected]468ac582012-11-20 00:53:19509
[email protected]fcdc5642014-05-09 14:32:24510 virtual void OnOrientationChange();
511
[email protected]29ed96a2012-02-04 18:12:16512 // Override points to notify derived classes that a paint has happened.
[email protected]0704ac32013-10-03 15:24:22513 // DidInitiatePaint happens when that has completed, and subsequent rendering
514 // won't affect the painted content. DidFlushPaint happens once we've received
515 // the ACK that the screen has been updated. For a given paint operation,
516 // these overrides will always be called in the order DidInitiatePaint,
517 // DidFlushPaint.
lfge0c2792ec2016-05-11 18:52:08518 virtual void DidInitiatePaint() {}
avib9dbd972016-03-08 18:19:32519 virtual void DidFlushPaint();
[email protected]a2f6bc112009-06-27 16:27:25520
[email protected]ed7defa2013-03-12 21:29:59521 virtual GURL GetURLForGraphicsContext3D();
[email protected]65225772011-05-12 21:10:24522
[email protected]bee16aab2009-08-26 15:55:03523 // Sets the "hidden" state of this widget. All accesses to is_hidden_ should
524 // use this method so that we can properly inform the RenderThread of our
525 // state.
526 void SetHidden(bool hidden);
527
[email protected]2b624c562011-10-27 22:58:26528 void DidToggleFullscreen();
529
[email protected]674741932009-02-04 23:44:46530 bool next_paint_is_resize_ack() const;
[email protected]674741932009-02-04 23:44:46531 void set_next_paint_is_resize_ack();
[email protected]674741932009-02-04 23:44:46532 void set_next_paint_is_repaint_ack();
[email protected]ec7dc112008-08-06 05:30:12533
[email protected]586871b2014-07-22 17:05:11534 // QueueMessage implementation extracted into a static method for easy
535 // testing.
dchengcedca5612016-04-09 01:40:15536 static std::unique_ptr<cc::SwapPromise> QueueMessageImpl(
[email protected]586871b2014-07-22 17:05:11537 IPC::Message* msg,
538 MessageDeliveryPolicy policy,
539 FrameSwapMessageQueue* frame_swap_message_queue,
540 scoped_refptr<IPC::SyncMessageFilter> sync_message_filter,
[email protected]586871b2014-07-22 17:05:11541 int source_frame_number);
542
[email protected]58b48a0d2012-06-13 07:01:35543 // Override point to obtain that the current composition character bounds.
544 // In the case of surrogate pairs, the character is treated as two characters:
545 // the bounds for first character is actual one, and the bounds for second
546 // character is zero width rectangle.
547 virtual void GetCompositionCharacterBounds(
548 std::vector<gfx::Rect>* character_bounds);
549
[email protected]88dbe32f2013-06-20 23:31:36550 // Returns the range of the text that is being composed or the selection if
551 // the composition does not exist.
[email protected]db4fc1e2013-09-06 20:01:51552 virtual void GetCompositionRange(gfx::Range* range);
[email protected]88dbe32f2013-06-20 23:31:36553
[email protected]58b48a0d2012-06-13 07:01:35554 // Returns true if the composition range or composition character bounds
555 // should be sent to the browser process.
556 bool ShouldUpdateCompositionInfo(
[email protected]db4fc1e2013-09-06 20:01:51557 const gfx::Range& range,
[email protected]58b48a0d2012-06-13 07:01:35558 const std::vector<gfx::Rect>& bounds);
559
[email protected]ad26ef42011-06-17 07:59:45560 // Override point to obtain that the current input method state about
561 // composition text.
562 virtual bool CanComposeInline();
[email protected]56ea1a62011-05-30 07:05:57563
[email protected]2533ce12009-05-09 00:02:24564 // Set the pending window rect.
565 // Because the real render_widget is hosted in another process, there is
566 // a time period where we may have set a new window rect which has not yet
567 // been processed by the browser. So we maintain a pending window rect
568 // size. If JS code sets the WindowRect, and then immediately calls
569 // GetWindowRect() we'll use this pending window rect as the size.
[email protected]180ef242013-11-07 06:50:46570 void SetPendingWindowRect(const blink::WebRect& r);
[email protected]2533ce12009-05-09 00:02:24571
[email protected]ce6689f2013-03-29 12:52:55572 // Check whether the WebWidget has any touch event handlers registered.
avi5c77d212015-09-25 20:08:25573 void hasTouchEventHandlers(bool has_handlers) override;
[email protected]ce6689f2013-03-29 12:52:55574
[email protected]5d0bbdfa92013-12-10 00:35:51575 // Tell the browser about the actions permitted for a new touch point.
avi5c77d212015-09-25 20:08:25576 void setTouchAction(blink::WebTouchAction touch_action) override;
[email protected]5d0bbdfa92013-12-10 00:35:51577
[email protected]90f24152014-04-09 12:41:36578 // Called when value of focused text field gets dirty, e.g. value is modified
579 // by script, not by user input.
avi5c77d212015-09-25 20:08:25580 void didUpdateTextOfFocusedElementByNonUserInput() override;
[email protected]90f24152014-04-09 12:41:36581
lfg43e08e62016-02-03 18:51:37582 // Sends an ACK to the browser process during the next compositor frame.
583 void OnWaitNextFrameForTests(int routing_id);
584
initial.commit09911bf2008-07-26 23:55:29585 // Routing ID that allows us to communicate to the parent browser process
586 // RenderWidgetHost. When MSG_ROUTING_NONE, no messages may be sent.
avi1023d012015-12-25 02:39:14587 int32_t routing_id_;
initial.commit09911bf2008-07-26 23:55:29588
danakj6e3bf8012014-12-16 18:27:53589 // Dependencies for initializing a compositor, including flags for optional
590 // features.
dcheng35d31c112015-07-22 00:17:36591 CompositorDependencies* const compositor_deps_;
danakj6e3bf8012014-12-16 18:27:53592
[email protected]c5b3b5e2009-02-13 06:41:11593 // We are responsible for destroying this object via its Close method.
[email protected]4ee64622014-03-21 22:34:15594 // May be NULL when the window is closing.
[email protected]180ef242013-11-07 06:50:46595 blink::WebWidget* webwidget_;
initial.commit09911bf2008-07-26 23:55:29596
avi40b5be7a2016-03-03 21:13:44597 // The delegate of the owner of this object.
598 RenderWidgetOwnerDelegate* owner_delegate_;
599
[email protected]8926c602013-01-23 05:32:06600 // This is lazily constructed and must not outlive webwidget_.
dchengcedca5612016-04-09 01:40:15601 std::unique_ptr<RenderWidgetCompositor> compositor_;
[email protected]8926c602013-01-23 05:32:06602
initial.commit09911bf2008-07-26 23:55:29603 // Set to the ID of the view that initiated creating this view, if any. When
604 // the view was initiated by the browser (the common case), this will be
605 // MSG_ROUTING_NONE. This is used in determining ownership when opening
606 // child tabs. See RenderWidget::createWebViewWithRequest.
607 //
608 // This ID may refer to an invalid view if that view is closed before this
609 // view is.
avi1023d012015-12-25 02:39:14610 int32_t opener_id_;
initial.commit09911bf2008-07-26 23:55:29611
bokanc007c3a2015-02-03 07:15:56612 // The rect where this view should be initially shown.
613 gfx::Rect initial_rect_;
initial.commit09911bf2008-07-26 23:55:29614
initial.commit09911bf2008-07-26 23:55:29615 // We store the current cursor object so we can avoid spamming SetCursor
616 // messages.
617 WebCursor current_cursor_;
[email protected]88efb7ec2009-07-14 16:32:59618
initial.commit09911bf2008-07-26 23:55:29619 // The size of the RenderWidget.
620 gfx::Size size_;
621
[email protected]60d47ac2013-03-01 23:42:44622 // The size of the view's backing surface in non-DPI-adjusted pixels.
623 gfx::Size physical_backing_size_;
624
[email protected]bb6378fe2014-04-28 21:19:44625 // The size of the visible viewport in DPI-adjusted pixels.
626 gfx::Size visible_viewport_size_;
627
[email protected]f21c613a2009-02-12 14:46:17628 // The area that must be reserved for drawing the resize corner.
629 gfx::Rect resizer_rect_;
630
[email protected]53d3f302009-12-21 04:42:05631 // Flags for the next ViewHostMsg_UpdateRect message.
initial.commit09911bf2008-07-26 23:55:29632 int next_paint_flags_;
633
[email protected]847a2582013-03-09 02:29:51634 // Whether the WebWidget is in auto resize mode, which is used for example
635 // by extension popups.
636 bool auto_resize_mode_;
637
[email protected]ea3ee0a2012-05-15 03:43:09638 // True if we need to send an UpdateRect message to notify the browser about
639 // an already-completed auto-resize.
640 bool need_update_rect_for_auto_resize_;
641
initial.commit09911bf2008-07-26 23:55:29642 // Set to true if we should ignore RenderWidget::Show calls.
643 bool did_show_;
644
645 // Indicates that we shouldn't bother generated paint events.
646 bool is_hidden_;
647
[email protected]7912e822014-04-16 02:37:03648 // Indicates that we are never visible, so never produce graphical output.
sievers71c62dd52015-10-07 01:44:39649 const bool compositor_never_visible_;
[email protected]7912e822014-04-16 02:37:03650
mikhail.pozdnyakovf2c902a2015-04-14 08:09:12651 // Indicates whether tab-initiated fullscreen was granted.
652 bool is_fullscreen_granted_;
[email protected]ee41e7d22011-10-14 19:34:09653
mikhail.pozdnyakovc0e251b2015-04-15 06:51:12654 // Indicates the display mode.
655 blink::WebDisplayMode display_mode_;
656
changwanf2a707b2015-10-30 08:22:16657 // It is possible that one ImeEventGuard is nested inside another
658 // ImeEventGuard. We keep track of the outermost one, and update it as needed.
659 ImeEventGuard* ime_event_guard_;
[email protected]e8f775f2013-02-14 21:00:50660
initial.commit09911bf2008-07-26 23:55:29661 // True if we have requested this widget be closed. No more messages will
662 // be sent, except for a Close.
663 bool closing_;
664
[email protected]aeeedad2014-08-22 18:16:22665 // True if it is known that the host is in the process of being shut down.
666 bool host_closing_;
667
[email protected]992db4c2011-05-12 15:37:15668 // Whether this RenderWidget is currently swapped out, such that the view is
669 // being rendered by another process. If all RenderWidgets in a process are
670 // swapped out, the process can exit.
671 bool is_swapped_out_;
672
simonhong628f9812015-04-27 23:13:20673 // Whether this RenderWidget is for an out-of-process iframe or not.
674 bool for_oopif_;
675
[email protected]5b739cb2012-08-21 20:35:21676 // Stores information about the current text input.
[email protected]180ef242013-11-07 06:50:46677 blink::WebTextInputInfo text_input_info_;
[email protected]5b739cb2012-08-21 20:35:21678
[email protected]fa7b1dc2010-06-23 17:53:04679 // Stores the current text input type of |webwidget_|.
[email protected]ad26ef42011-06-17 07:59:45680 ui::TextInputType text_input_type_;
681
[email protected]b256eca2013-07-11 10:57:40682 // Stores the current text input mode of |webwidget_|.
683 ui::TextInputMode text_input_mode_;
684
shuchen82ce8c52014-10-23 01:55:20685 // Stores the current text input flags of |webwidget_|.
686 int text_input_flags_;
687
[email protected]86ba5fcb2013-09-04 00:36:53688 // Stores the current type of composition text rendering of |webwidget_|.
689 bool can_compose_inline_;
690
[email protected]e99ef6f2011-10-16 01:13:00691 // Stores the current selection bounds.
[email protected]7c8873e2013-02-05 08:03:01692 gfx::Rect selection_focus_rect_;
693 gfx::Rect selection_anchor_rect_;
initial.commit09911bf2008-07-26 23:55:29694
[email protected]58b48a0d2012-06-13 07:01:35695 // Stores the current composition character bounds.
696 std::vector<gfx::Rect> composition_character_bounds_;
697
698 // Stores the current composition range.
[email protected]db4fc1e2013-09-06 20:01:51699 gfx::Range composition_range_;
[email protected]58b48a0d2012-06-13 07:01:35700
[email protected]3e2b375b2010-04-07 17:03:12701 // The kind of popup this widget represents, NONE if not a popup.
[email protected]180ef242013-11-07 06:50:46702 blink::WebPopupType popup_type_;
[email protected]0ebf3872008-11-07 21:35:03703
[email protected]80ad8622012-11-07 16:33:03704 // While we are waiting for the browser to update window sizes, we track the
705 // pending size temporarily.
[email protected]2533ce12009-05-09 00:02:24706 int pending_window_rect_count_;
lfg0140a452016-07-19 19:15:05707 gfx::Rect pending_window_rect_;
[email protected]2533ce12009-05-09 00:02:24708
[email protected]80ad8622012-11-07 16:33:03709 // The screen rects of the view and the window that contains it.
710 gfx::Rect view_screen_rect_;
711 gfx::Rect window_screen_rect_;
712
dchengcedca5612016-04-09 01:40:15713 std::unique_ptr<RenderWidgetInputHandler> input_handler_;
[email protected]12fbad812009-09-01 18:21:24714
[email protected]fd847792013-10-24 17:12:35715 // The time spent in input handlers this frame. Used to throttle input acks.
716 base::TimeDelta total_input_handling_time_this_frame_;
717
[email protected]842f10652012-06-06 01:54:04718 // Properties of the screen hosting this RenderWidget instance.
[email protected]180ef242013-11-07 06:50:46719 blink::WebScreenInfo screen_info_;
[email protected]842f10652012-06-06 01:54:04720
[email protected]f1cccb32012-06-06 18:29:59721 // The device scale factor. This value is computed from the DPI entries in
722 // |screen_info_| on some platforms, and defaults to 1 on other platforms.
[email protected]faec7b12012-06-19 14:42:13723 float device_scale_factor_;
[email protected]f1cccb32012-06-06 18:29:59724
[email protected]28ed6b32014-06-08 02:16:27725 // The device color profile on supported platforms.
726 std::vector<char> device_color_profile_;
727
[email protected]9017d7852013-11-21 17:47:35728 // State associated with synthetic gestures. Synthetic gestures are processed
729 // in-order, so a queue is sufficient to identify the correct state for a
730 // completed gesture.
731 std::queue<SyntheticGestureCompletionCallback>
732 pending_synthetic_gesture_callbacks_;
[email protected]0e241b4b2012-08-18 09:06:27733
[email protected]0d1ebed12013-08-05 22:01:13734#if defined(OS_ANDROID)
[email protected]90f24152014-04-09 12:41:36735 // Indicates value in the focused text field is in dirty state, i.e. modified
736 // by script etc., not by user input.
737 bool text_field_is_dirty_;
738
changwan3a841162015-08-11 02:53:37739 // Stores the history of text input infos from the last ACK'ed one from the
740 // current one. The size is the number of pending ACKs plus one, since we
741 // intentionally keep the last ack'd value to know what the browser is
742 // currently aware of.
743 std::deque<blink::WebTextInputInfo> text_input_info_history_;
[email protected]0d1ebed12013-08-05 22:01:13744#endif
745
nonafa291792016-08-10 02:36:18746 // True if the IME requests updated composition info.
747 bool monitor_composition_info_;
748
dchengcedca5612016-04-09 01:40:15749 std::unique_ptr<RenderWidgetScreenMetricsEmulator> screen_metrics_emulator_;
[email protected]b2e4c70132013-10-03 02:07:51750
751 // Popups may be displaced when screen metrics emulation is enabled.
752 // These values are used to properly adjust popup position.
danakj2ef31b82015-10-21 18:18:02753 gfx::Point popup_view_origin_for_emulation_;
754 gfx::Point popup_screen_origin_for_emulation_;
[email protected]b2e4c70132013-10-03 02:07:51755 float popup_origin_scale_for_emulation_;
756
[email protected]586871b2014-07-22 17:05:11757 scoped_refptr<FrameSwapMessageQueue> frame_swap_message_queue_;
dchengcedca5612016-04-09 01:40:15758 std::unique_ptr<ResizingModeSelector> resizing_mode_selector_;
[email protected]5b45ad42013-10-25 00:42:04759
[email protected]e3244ed2014-06-20 20:04:27760 // Lists of RenderFrameProxy objects that need to be notified of
761 // compositing-related events (e.g. DidCommitCompositorFrame).
brettw236d3172015-06-03 16:31:43762 base::ObserverList<RenderFrameProxy> render_frame_proxies_;
[email protected]a017938b2014-05-27 21:17:17763#if defined(VIDEO_HOLE)
brettw236d3172015-06-03 16:31:43764 base::ObserverList<RenderFrameImpl> video_hole_frames_;
[email protected]a017938b2014-05-27 21:17:17765#endif // defined(VIDEO_HOLE)
[email protected]bffc8302014-01-23 20:52:16766
[email protected]de3c5d82014-05-28 22:12:59767 // A list of RenderFrames associated with this RenderWidget. Notifications
768 // are sent to each frame in the list for events such as changing
769 // visibility state for example.
brettw236d3172015-06-03 16:31:43770 base::ObserverList<RenderFrameImpl> render_frames_;
[email protected]de3c5d82014-05-28 22:12:59771
[email protected]be1af0662014-07-29 19:55:51772 bool has_host_context_menu_location_;
773 gfx::Point host_context_menu_location_;
[email protected]a09d53ce2014-01-31 00:46:42774
skyostil529caa292016-08-10 17:44:51775 std::unique_ptr<blink::scheduler::RenderWidgetSchedulingState>
alexclarke7fa93942015-10-21 15:37:11776 render_widget_scheduling_state_;
777
lfgbee1e0a2016-06-08 21:24:21778 // Mouse Lock dispatcher attached to this view.
779 std::unique_ptr<RenderWidgetMouseLockDispatcher> mouse_lock_dispatcher_;
780
781 // Wraps the |webwidget_| as a MouseLockDispatcher::LockTarget interface.
782 std::unique_ptr<MouseLockDispatcher::LockTarget> webwidget_mouse_lock_target_;
783
oshima50872a72016-03-04 13:26:18784 private:
785 // When emulated, this returns original device scale factor.
786 float GetOriginalDeviceScaleFactor() const;
787
lfge0c2792ec2016-05-11 18:52:08788 // Indicates whether this widget has focus.
789 bool has_focus_;
790
ekaramad2a46d632016-07-19 13:33:09791 // This reference is set by the RenderFrame and is used to query the IME-
792 // related state from the plugin to later send to the browser.
793 PepperPluginInstanceImpl* focused_pepper_plugin_;
794
[email protected]05d478752009-04-08 23:38:16795 DISALLOW_COPY_AND_ASSIGN(RenderWidget);
initial.commit09911bf2008-07-26 23:55:29796};
797
[email protected]e9ff79c2012-10-19 21:31:26798} // namespace content
799
[email protected]2cff0052011-03-18 16:51:44800#endif // CONTENT_RENDERER_RENDER_WIDGET_H_