| Index: content/renderer/render_widget.h
|
| ===================================================================
|
| --- content/renderer/render_widget.h (revision 221161)
|
| +++ content/renderer/render_widget.h (working copy)
|
| @@ -22,6 +22,7 @@
|
| #include "content/renderer/paint_aggregator.h"
|
| #include "ipc/ipc_listener.h"
|
| #include "ipc/ipc_sender.h"
|
| +#include "skia/ext/platform_canvas.h"
|
| #include "third_party/WebKit/public/platform/WebRect.h"
|
| #include "third_party/WebKit/public/web/WebCompositionUnderline.h"
|
| #include "third_party/WebKit/public/web/WebPopupType.h"
|
| @@ -54,6 +55,7 @@
|
| class WebKeyboardEvent;
|
| class WebMouseEvent;
|
| class WebTouchEvent;
|
| +class WebTouchPoint;
|
| struct WebPoint;
|
| struct WebRenderingStatsImpl;
|
| }
|
| @@ -65,9 +67,11 @@
|
| }
|
|
|
| namespace content {
|
| +class DeviceEmulationEventRewriter;
|
| class PepperPluginInstanceImpl;
|
| class RenderWidgetCompositor;
|
| class RenderWidgetTest;
|
| +struct ContextMenuParams;
|
| struct GpuRenderingStats;
|
| struct WebPluginGeometry;
|
|
|
| @@ -282,6 +286,16 @@
|
| bool is_fullscreen,
|
| ResizeAck resize_ack);
|
|
|
| + // Emulates device and widget metrics. Supplied values override everything
|
| + // coming from host.
|
| + void EmulateDevice(bool enabled,
|
| + const gfx::Size& device_size,
|
| + const gfx::Rect& widget_rect,
|
| + float device_scale_factor,
|
| + bool fit_to_view);
|
| + // This sets a tranformation on root compositor layer.
|
| + virtual void SetDeviceEmulationScale(float scale);
|
| +
|
| // RenderWidget IPC message handlers
|
| void OnHandleInputEvent(const WebKit::WebInputEvent* event,
|
| const ui::LatencyInfo& latency_info,
|
| @@ -296,6 +310,7 @@
|
| virtual void OnWasHidden();
|
| virtual void OnWasShown(bool needs_repainting);
|
| virtual void OnWasSwappedOut();
|
| + void OnEmulateDeviceAck(bool enabled);
|
| void OnUpdateRectAck();
|
| void OnCreateVideoAck(int32 video_id);
|
| void OnUpdateVideoAck(int32 video_id);
|
| @@ -738,6 +753,77 @@
|
| int outstanding_ime_acks_;
|
| #endif
|
|
|
| + // Helper class which is managing device emulation. This includes resizing,
|
| + // placing view on the screen at desired position, changing device scale
|
| + // factor, and scaling down the whole widget if required to fit into the
|
| + // browser window.
|
| + class DeviceEmulationHelper {
|
| + public:
|
| + DeviceEmulationHelper(const gfx::Size& device_size,
|
| + const gfx::Rect& widget_rect,
|
| + float device_scale_factor,
|
| + bool fit_to_view);
|
| + virtual ~DeviceEmulationHelper();
|
| +
|
| + void BeginEmulation(RenderWidget* widget);
|
| + void ChangeEmulationParams(RenderWidget* widget,
|
| + DeviceEmulationHelper* params);
|
| + void EndEmulation(RenderWidget* widget);
|
| +
|
| + // The following methods alter handlers' behavior for messages related to
|
| + // widget size and position.
|
| + void OnResizeMessage(RenderWidget* widget,
|
| + const ViewMsg_Resize_Params& params);
|
| + void OnUpdateScreenRectsMessage(RenderWidget* widget,
|
| + const gfx::Rect view_screen_rect,
|
| + const gfx::Rect window_screen_rect);
|
| + void OnShowContextMenu(RenderWidget* widget, ContextMenuParams* params);
|
| +
|
| + WebKit::WebInputEvent* ConvertInputEventToEmulated(
|
| + RenderWidget* widget, const WebKit::WebInputEvent* event);
|
| +
|
| + // Created popups need to be repositioned.
|
| + void PopupCreated(RenderWidget* widget, RenderWidget* popup);
|
| + WebKit::WebRect ConvertPopupScreenRectFromEmulated(
|
| + RenderWidget* popup, const WebKit::WebRect& rect);
|
| +
|
| + private:
|
| + void Apply(RenderWidget* widget, float overdraw_bottom_height,
|
| + gfx::Rect resizer_rect, bool is_fullscreen);
|
| +
|
| + // Parameters as passed by WebViewClient::EmulateDevice.
|
| + gfx::Size device_size_;
|
| + gfx::Rect widget_rect_;
|
| + float device_scale_factor_;
|
| + bool fit_to_view_;
|
| +
|
| + // The computed scaled used to fit widget into browser window.
|
| + float scale_;
|
| +
|
| + // Original values to restore back after emulation ends.
|
| + gfx::Size original_size_;
|
| + gfx::Size original_physical_backing_size_;
|
| + WebKit::WebScreenInfo original_screen_info_;
|
| + gfx::Rect original_view_screen_rect_;
|
| + gfx::Rect original_window_screen_rect_;
|
| +
|
| + // This handles the rewriting of input events incoming to the widget and
|
| + // the compositor.
|
| + scoped_ptr<DeviceEmulationEventRewriter> input_event_rewriter_;
|
| +
|
| + base::WeakPtrFactory<DeviceEmulationHelper> weak_ptr_factory_;
|
| + };
|
| +
|
| + scoped_ptr<DeviceEmulationHelper> device_emulation_helper_;
|
| +
|
| + // Popup has a weak ptr to the device emulation helper of creator.
|
| + base::WeakPtr<DeviceEmulationHelper> popup_device_emulation_helper_;
|
| +
|
| + // While we send ViewMsg_EmulateDevice to the host, these store the requested
|
| + // emulation parameters.
|
| + scoped_ptr<DeviceEmulationHelper> pending_device_emulation_helper_;
|
| + bool pending_device_emulation_enabled_;
|
| +
|
| base::WeakPtrFactory<RenderWidget> weak_ptr_factory_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(RenderWidget);
|
|
|