| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CONTENT_RENDERER_RENDER_WIDGET_H_ | 5 #ifndef CONTENT_RENDERER_RENDER_WIDGET_H_ |
| 6 #define CONTENT_RENDERER_RENDER_WIDGET_H_ | 6 #define CONTENT_RENDERER_RENDER_WIDGET_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| 11 #include <deque> | 11 #include <deque> |
| 12 #include <map> | 12 #include <map> |
| 13 #include <memory> |
| 13 | 14 |
| 14 #include "base/callback.h" | 15 #include "base/callback.h" |
| 15 #include "base/compiler_specific.h" | 16 #include "base/compiler_specific.h" |
| 16 #include "base/macros.h" | 17 #include "base/macros.h" |
| 17 #include "base/memory/ref_counted.h" | 18 #include "base/memory/ref_counted.h" |
| 18 #include "base/memory/scoped_ptr.h" | |
| 19 #include "base/observer_list.h" | 19 #include "base/observer_list.h" |
| 20 #include "base/time/time.h" | 20 #include "base/time/time.h" |
| 21 #include "build/build_config.h" | 21 #include "build/build_config.h" |
| 22 #include "content/common/content_export.h" | 22 #include "content/common/content_export.h" |
| 23 #include "content/common/cursors/webcursor.h" | 23 #include "content/common/cursors/webcursor.h" |
| 24 #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" | 24 #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" |
| 25 #include "content/common/input/synthetic_gesture_params.h" | 25 #include "content/common/input/synthetic_gesture_params.h" |
| 26 #include "content/renderer/devtools/render_widget_screen_metrics_emulator_delega
te.h" | 26 #include "content/renderer/devtools/render_widget_screen_metrics_emulator_delega
te.h" |
| 27 #include "content/renderer/gpu/render_widget_compositor_delegate.h" | 27 #include "content/renderer/gpu/render_widget_compositor_delegate.h" |
| 28 #include "content/renderer/input/render_widget_input_handler.h" | 28 #include "content/renderer/input/render_widget_input_handler.h" |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 // IPC::Sender | 178 // IPC::Sender |
| 179 bool Send(IPC::Message* msg) override; | 179 bool Send(IPC::Message* msg) override; |
| 180 | 180 |
| 181 // RenderWidgetCompositorDelegate | 181 // RenderWidgetCompositorDelegate |
| 182 void ApplyViewportDeltas(const gfx::Vector2dF& inner_delta, | 182 void ApplyViewportDeltas(const gfx::Vector2dF& inner_delta, |
| 183 const gfx::Vector2dF& outer_delta, | 183 const gfx::Vector2dF& outer_delta, |
| 184 const gfx::Vector2dF& elastic_overscroll_delta, | 184 const gfx::Vector2dF& elastic_overscroll_delta, |
| 185 float page_scale, | 185 float page_scale, |
| 186 float top_controls_delta) override; | 186 float top_controls_delta) override; |
| 187 void BeginMainFrame(double frame_time_sec) override; | 187 void BeginMainFrame(double frame_time_sec) override; |
| 188 scoped_ptr<cc::OutputSurface> CreateOutputSurface(bool fallback) override; | 188 std::unique_ptr<cc::OutputSurface> CreateOutputSurface( |
| 189 scoped_ptr<cc::BeginFrameSource> CreateExternalBeginFrameSource() override; | 189 bool fallback) override; |
| 190 std::unique_ptr<cc::BeginFrameSource> CreateExternalBeginFrameSource() |
| 191 override; |
| 190 void DidCommitAndDrawCompositorFrame() override; | 192 void DidCommitAndDrawCompositorFrame() override; |
| 191 void DidCommitCompositorFrame() override; | 193 void DidCommitCompositorFrame() override; |
| 192 void DidCompletePageScaleAnimation() override; | 194 void DidCompletePageScaleAnimation() override; |
| 193 void DidCompleteSwapBuffers() override; | 195 void DidCompleteSwapBuffers() override; |
| 194 bool ForOOPIF() const override; | 196 bool ForOOPIF() const override; |
| 195 void ForwardCompositorProto(const std::vector<uint8_t>& proto) override; | 197 void ForwardCompositorProto(const std::vector<uint8_t>& proto) override; |
| 196 bool IsClosing() const override; | 198 bool IsClosing() const override; |
| 197 void OnSwapBuffersAborted() override; | 199 void OnSwapBuffersAborted() override; |
| 198 void OnSwapBuffersComplete() override; | 200 void OnSwapBuffersComplete() override; |
| 199 void OnSwapBuffersPosted() override; | 201 void OnSwapBuffersPosted() override; |
| 200 void RecordFrameTimingEvents( | 202 void RecordFrameTimingEvents( |
| 201 scoped_ptr<cc::FrameTimingTracker::CompositeTimingSet> composite_events, | 203 std::unique_ptr<cc::FrameTimingTracker::CompositeTimingSet> |
| 202 scoped_ptr<cc::FrameTimingTracker::MainFrameTimingSet> main_frame_events) | 204 composite_events, |
| 203 override; | 205 std::unique_ptr<cc::FrameTimingTracker::MainFrameTimingSet> |
| 206 main_frame_events) override; |
| 204 void RequestScheduleAnimation() override; | 207 void RequestScheduleAnimation() override; |
| 205 void UpdateVisualState() override; | 208 void UpdateVisualState() override; |
| 206 void WillBeginCompositorFrame() override; | 209 void WillBeginCompositorFrame() override; |
| 207 | 210 |
| 208 // RenderWidgetInputHandlerDelegate | 211 // RenderWidgetInputHandlerDelegate |
| 209 void FocusChangeComplete() override; | 212 void FocusChangeComplete() override; |
| 210 bool HasTouchEventHandlersAt(const gfx::Point& point) const override; | 213 bool HasTouchEventHandlersAt(const gfx::Point& point) const override; |
| 211 void ObserveWheelEventAndResult(const blink::WebMouseWheelEvent& wheel_event, | 214 void ObserveWheelEventAndResult(const blink::WebMouseWheelEvent& wheel_event, |
| 212 const gfx::Vector2dF& wheel_unused_delta, | 215 const gfx::Vector2dF& wheel_unused_delta, |
| 213 bool event_processed) override; | 216 bool event_processed) override; |
| 214 void ObserveGestureEventAndResult(const blink::WebGestureEvent& gesture_event, | 217 void ObserveGestureEventAndResult(const blink::WebGestureEvent& gesture_event, |
| 215 const gfx::Vector2dF& unused_delta, | 218 const gfx::Vector2dF& unused_delta, |
| 216 bool event_processed) override; | 219 bool event_processed) override; |
| 217 | 220 |
| 218 void OnDidHandleKeyEvent() override; | 221 void OnDidHandleKeyEvent() override; |
| 219 void OnDidOverscroll(const DidOverscrollParams& params) override; | 222 void OnDidOverscroll(const DidOverscrollParams& params) override; |
| 220 void OnInputEventAck(scoped_ptr<InputEventAck> input_event_ack) override; | 223 void OnInputEventAck(std::unique_ptr<InputEventAck> input_event_ack) override; |
| 221 void NotifyInputEventHandled( | 224 void NotifyInputEventHandled( |
| 222 blink::WebInputEvent::Type handled_type) override; | 225 blink::WebInputEvent::Type handled_type) override; |
| 223 void SetInputHandler(RenderWidgetInputHandler* input_handler) override; | 226 void SetInputHandler(RenderWidgetInputHandler* input_handler) override; |
| 224 void UpdateTextInputState(ShowIme show_ime, | 227 void UpdateTextInputState(ShowIme show_ime, |
| 225 ChangeSource change_source) override; | 228 ChangeSource change_source) override; |
| 226 bool WillHandleGestureEvent(const blink::WebGestureEvent& event) override; | 229 bool WillHandleGestureEvent(const blink::WebGestureEvent& event) override; |
| 227 bool WillHandleMouseEvent(const blink::WebMouseEvent& event) override; | 230 bool WillHandleMouseEvent(const blink::WebMouseEvent& event) override; |
| 228 | 231 |
| 229 // RenderWidgetScreenMetricsDelegate | 232 // RenderWidgetScreenMetricsDelegate |
| 230 void Redraw() override; | 233 void Redraw() override; |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 // When resumed from pause in debugger while handling mouse move, | 303 // When resumed from pause in debugger while handling mouse move, |
| 301 // we should not send an extra ack (see SendAckForMouseMoveFromDebugger). | 304 // we should not send an extra ack (see SendAckForMouseMoveFromDebugger). |
| 302 void IgnoreAckForMouseMoveFromDebugger(); | 305 void IgnoreAckForMouseMoveFromDebugger(); |
| 303 | 306 |
| 304 // Callback for use with synthetic gestures (e.g. BeginSmoothScroll). | 307 // Callback for use with synthetic gestures (e.g. BeginSmoothScroll). |
| 305 typedef base::Callback<void()> SyntheticGestureCompletionCallback; | 308 typedef base::Callback<void()> SyntheticGestureCompletionCallback; |
| 306 | 309 |
| 307 // Send a synthetic gesture to the browser to be queued to the synthetic | 310 // Send a synthetic gesture to the browser to be queued to the synthetic |
| 308 // gesture controller. | 311 // gesture controller. |
| 309 void QueueSyntheticGesture( | 312 void QueueSyntheticGesture( |
| 310 scoped_ptr<SyntheticGestureParams> gesture_params, | 313 std::unique_ptr<SyntheticGestureParams> gesture_params, |
| 311 const SyntheticGestureCompletionCallback& callback); | 314 const SyntheticGestureCompletionCallback& callback); |
| 312 | 315 |
| 313 // Deliveres |message| together with compositor state change updates. The | 316 // Deliveres |message| together with compositor state change updates. The |
| 314 // exact behavior depends on |policy|. | 317 // exact behavior depends on |policy|. |
| 315 // This mechanism is not a drop-in replacement for IPC: messages sent this way | 318 // This mechanism is not a drop-in replacement for IPC: messages sent this way |
| 316 // will not be automatically available to BrowserMessageFilter, for example. | 319 // will not be automatically available to BrowserMessageFilter, for example. |
| 317 // FIFO ordering is preserved between messages enqueued with the same | 320 // FIFO ordering is preserved between messages enqueued with the same |
| 318 // |policy|, the ordering between messages enqueued for different policies is | 321 // |policy|, the ordering between messages enqueued for different policies is |
| 319 // undefined. | 322 // undefined. |
| 320 // | 323 // |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 void SetHidden(bool hidden); | 508 void SetHidden(bool hidden); |
| 506 | 509 |
| 507 void DidToggleFullscreen(); | 510 void DidToggleFullscreen(); |
| 508 | 511 |
| 509 bool next_paint_is_resize_ack() const; | 512 bool next_paint_is_resize_ack() const; |
| 510 void set_next_paint_is_resize_ack(); | 513 void set_next_paint_is_resize_ack(); |
| 511 void set_next_paint_is_repaint_ack(); | 514 void set_next_paint_is_repaint_ack(); |
| 512 | 515 |
| 513 // QueueMessage implementation extracted into a static method for easy | 516 // QueueMessage implementation extracted into a static method for easy |
| 514 // testing. | 517 // testing. |
| 515 static scoped_ptr<cc::SwapPromise> QueueMessageImpl( | 518 static std::unique_ptr<cc::SwapPromise> QueueMessageImpl( |
| 516 IPC::Message* msg, | 519 IPC::Message* msg, |
| 517 MessageDeliveryPolicy policy, | 520 MessageDeliveryPolicy policy, |
| 518 FrameSwapMessageQueue* frame_swap_message_queue, | 521 FrameSwapMessageQueue* frame_swap_message_queue, |
| 519 scoped_refptr<IPC::SyncMessageFilter> sync_message_filter, | 522 scoped_refptr<IPC::SyncMessageFilter> sync_message_filter, |
| 520 int source_frame_number); | 523 int source_frame_number); |
| 521 | 524 |
| 522 // Override point to obtain that the current composition character bounds. | 525 // Override point to obtain that the current composition character bounds. |
| 523 // In the case of surrogate pairs, the character is treated as two characters: | 526 // In the case of surrogate pairs, the character is treated as two characters: |
| 524 // the bounds for first character is actual one, and the bounds for second | 527 // the bounds for first character is actual one, and the bounds for second |
| 525 // character is zero width rectangle. | 528 // character is zero width rectangle. |
| (...skipping 26 matching lines...) Expand all Loading... |
| 552 void hasTouchEventHandlers(bool has_handlers) override; | 555 void hasTouchEventHandlers(bool has_handlers) override; |
| 553 | 556 |
| 554 // Tell the browser about the actions permitted for a new touch point. | 557 // Tell the browser about the actions permitted for a new touch point. |
| 555 void setTouchAction(blink::WebTouchAction touch_action) override; | 558 void setTouchAction(blink::WebTouchAction touch_action) override; |
| 556 | 559 |
| 557 // Called when value of focused text field gets dirty, e.g. value is modified | 560 // Called when value of focused text field gets dirty, e.g. value is modified |
| 558 // by script, not by user input. | 561 // by script, not by user input. |
| 559 void didUpdateTextOfFocusedElementByNonUserInput() override; | 562 void didUpdateTextOfFocusedElementByNonUserInput() override; |
| 560 | 563 |
| 561 // Creates a 3D context associated with this view. | 564 // Creates a 3D context associated with this view. |
| 562 scoped_ptr<WebGraphicsContext3DCommandBufferImpl> CreateGraphicsContext3D( | 565 std::unique_ptr<WebGraphicsContext3DCommandBufferImpl> |
| 563 gpu::GpuChannelHost* gpu_channel_host); | 566 CreateGraphicsContext3D(gpu::GpuChannelHost* gpu_channel_host); |
| 564 | 567 |
| 565 // Sends an ACK to the browser process during the next compositor frame. | 568 // Sends an ACK to the browser process during the next compositor frame. |
| 566 void OnWaitNextFrameForTests(int routing_id); | 569 void OnWaitNextFrameForTests(int routing_id); |
| 567 | 570 |
| 568 // Routing ID that allows us to communicate to the parent browser process | 571 // Routing ID that allows us to communicate to the parent browser process |
| 569 // RenderWidgetHost. When MSG_ROUTING_NONE, no messages may be sent. | 572 // RenderWidgetHost. When MSG_ROUTING_NONE, no messages may be sent. |
| 570 int32_t routing_id_; | 573 int32_t routing_id_; |
| 571 | 574 |
| 572 // Dependencies for initializing a compositor, including flags for optional | 575 // Dependencies for initializing a compositor, including flags for optional |
| 573 // features. | 576 // features. |
| 574 CompositorDependencies* const compositor_deps_; | 577 CompositorDependencies* const compositor_deps_; |
| 575 | 578 |
| 576 // We are responsible for destroying this object via its Close method. | 579 // We are responsible for destroying this object via its Close method. |
| 577 // May be NULL when the window is closing. | 580 // May be NULL when the window is closing. |
| 578 blink::WebWidget* webwidget_; | 581 blink::WebWidget* webwidget_; |
| 579 | 582 |
| 580 // The delegate of the owner of this object. | 583 // The delegate of the owner of this object. |
| 581 RenderWidgetOwnerDelegate* owner_delegate_; | 584 RenderWidgetOwnerDelegate* owner_delegate_; |
| 582 | 585 |
| 583 // This is lazily constructed and must not outlive webwidget_. | 586 // This is lazily constructed and must not outlive webwidget_. |
| 584 scoped_ptr<RenderWidgetCompositor> compositor_; | 587 std::unique_ptr<RenderWidgetCompositor> compositor_; |
| 585 | 588 |
| 586 // Set to the ID of the view that initiated creating this view, if any. When | 589 // Set to the ID of the view that initiated creating this view, if any. When |
| 587 // the view was initiated by the browser (the common case), this will be | 590 // the view was initiated by the browser (the common case), this will be |
| 588 // MSG_ROUTING_NONE. This is used in determining ownership when opening | 591 // MSG_ROUTING_NONE. This is used in determining ownership when opening |
| 589 // child tabs. See RenderWidget::createWebViewWithRequest. | 592 // child tabs. See RenderWidget::createWebViewWithRequest. |
| 590 // | 593 // |
| 591 // This ID may refer to an invalid view if that view is closed before this | 594 // This ID may refer to an invalid view if that view is closed before this |
| 592 // view is. | 595 // view is. |
| 593 int32_t opener_id_; | 596 int32_t opener_id_; |
| 594 | 597 |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 696 | 699 |
| 697 // While we are waiting for the browser to update window sizes, we track the | 700 // While we are waiting for the browser to update window sizes, we track the |
| 698 // pending size temporarily. | 701 // pending size temporarily. |
| 699 int pending_window_rect_count_; | 702 int pending_window_rect_count_; |
| 700 blink::WebRect pending_window_rect_; | 703 blink::WebRect pending_window_rect_; |
| 701 | 704 |
| 702 // The screen rects of the view and the window that contains it. | 705 // The screen rects of the view and the window that contains it. |
| 703 gfx::Rect view_screen_rect_; | 706 gfx::Rect view_screen_rect_; |
| 704 gfx::Rect window_screen_rect_; | 707 gfx::Rect window_screen_rect_; |
| 705 | 708 |
| 706 scoped_ptr<RenderWidgetInputHandler> input_handler_; | 709 std::unique_ptr<RenderWidgetInputHandler> input_handler_; |
| 707 | 710 |
| 708 // The time spent in input handlers this frame. Used to throttle input acks. | 711 // The time spent in input handlers this frame. Used to throttle input acks. |
| 709 base::TimeDelta total_input_handling_time_this_frame_; | 712 base::TimeDelta total_input_handling_time_this_frame_; |
| 710 | 713 |
| 711 // Properties of the screen hosting this RenderWidget instance. | 714 // Properties of the screen hosting this RenderWidget instance. |
| 712 blink::WebScreenInfo screen_info_; | 715 blink::WebScreenInfo screen_info_; |
| 713 | 716 |
| 714 // The device scale factor. This value is computed from the DPI entries in | 717 // The device scale factor. This value is computed from the DPI entries in |
| 715 // |screen_info_| on some platforms, and defaults to 1 on other platforms. | 718 // |screen_info_| on some platforms, and defaults to 1 on other platforms. |
| 716 float device_scale_factor_; | 719 float device_scale_factor_; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 731 // by script etc., not by user input. | 734 // by script etc., not by user input. |
| 732 bool text_field_is_dirty_; | 735 bool text_field_is_dirty_; |
| 733 | 736 |
| 734 // Stores the history of text input infos from the last ACK'ed one from the | 737 // Stores the history of text input infos from the last ACK'ed one from the |
| 735 // current one. The size is the number of pending ACKs plus one, since we | 738 // current one. The size is the number of pending ACKs plus one, since we |
| 736 // intentionally keep the last ack'd value to know what the browser is | 739 // intentionally keep the last ack'd value to know what the browser is |
| 737 // currently aware of. | 740 // currently aware of. |
| 738 std::deque<blink::WebTextInputInfo> text_input_info_history_; | 741 std::deque<blink::WebTextInputInfo> text_input_info_history_; |
| 739 #endif | 742 #endif |
| 740 | 743 |
| 741 scoped_ptr<RenderWidgetScreenMetricsEmulator> screen_metrics_emulator_; | 744 std::unique_ptr<RenderWidgetScreenMetricsEmulator> screen_metrics_emulator_; |
| 742 | 745 |
| 743 // Popups may be displaced when screen metrics emulation is enabled. | 746 // Popups may be displaced when screen metrics emulation is enabled. |
| 744 // These values are used to properly adjust popup position. | 747 // These values are used to properly adjust popup position. |
| 745 gfx::Point popup_view_origin_for_emulation_; | 748 gfx::Point popup_view_origin_for_emulation_; |
| 746 gfx::Point popup_screen_origin_for_emulation_; | 749 gfx::Point popup_screen_origin_for_emulation_; |
| 747 float popup_origin_scale_for_emulation_; | 750 float popup_origin_scale_for_emulation_; |
| 748 | 751 |
| 749 scoped_refptr<FrameSwapMessageQueue> frame_swap_message_queue_; | 752 scoped_refptr<FrameSwapMessageQueue> frame_swap_message_queue_; |
| 750 scoped_ptr<ResizingModeSelector> resizing_mode_selector_; | 753 std::unique_ptr<ResizingModeSelector> resizing_mode_selector_; |
| 751 | 754 |
| 752 // Lists of RenderFrameProxy objects that need to be notified of | 755 // Lists of RenderFrameProxy objects that need to be notified of |
| 753 // compositing-related events (e.g. DidCommitCompositorFrame). | 756 // compositing-related events (e.g. DidCommitCompositorFrame). |
| 754 base::ObserverList<RenderFrameProxy> render_frame_proxies_; | 757 base::ObserverList<RenderFrameProxy> render_frame_proxies_; |
| 755 #if defined(VIDEO_HOLE) | 758 #if defined(VIDEO_HOLE) |
| 756 base::ObserverList<RenderFrameImpl> video_hole_frames_; | 759 base::ObserverList<RenderFrameImpl> video_hole_frames_; |
| 757 #endif // defined(VIDEO_HOLE) | 760 #endif // defined(VIDEO_HOLE) |
| 758 | 761 |
| 759 // A list of RenderFrames associated with this RenderWidget. Notifications | 762 // A list of RenderFrames associated with this RenderWidget. Notifications |
| 760 // are sent to each frame in the list for events such as changing | 763 // are sent to each frame in the list for events such as changing |
| 761 // visibility state for example. | 764 // visibility state for example. |
| 762 base::ObserverList<RenderFrameImpl> render_frames_; | 765 base::ObserverList<RenderFrameImpl> render_frames_; |
| 763 | 766 |
| 764 bool has_host_context_menu_location_; | 767 bool has_host_context_menu_location_; |
| 765 gfx::Point host_context_menu_location_; | 768 gfx::Point host_context_menu_location_; |
| 766 | 769 |
| 767 scoped_ptr<scheduler::RenderWidgetSchedulingState> | 770 std::unique_ptr<scheduler::RenderWidgetSchedulingState> |
| 768 render_widget_scheduling_state_; | 771 render_widget_scheduling_state_; |
| 769 | 772 |
| 770 private: | 773 private: |
| 771 // When emulated, this returns original device scale factor. | 774 // When emulated, this returns original device scale factor. |
| 772 float GetOriginalDeviceScaleFactor() const; | 775 float GetOriginalDeviceScaleFactor() const; |
| 773 | 776 |
| 774 DISALLOW_COPY_AND_ASSIGN(RenderWidget); | 777 DISALLOW_COPY_AND_ASSIGN(RenderWidget); |
| 775 }; | 778 }; |
| 776 | 779 |
| 777 } // namespace content | 780 } // namespace content |
| 778 | 781 |
| 779 #endif // CONTENT_RENDERER_RENDER_WIDGET_H_ | 782 #endif // CONTENT_RENDERER_RENDER_WIDGET_H_ |
| OLD | NEW |