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 #include "content/renderer/render_widget.h" | 5 #include "content/renderer/render_widget.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
10 #include "base/debug/trace_event_synthetic_delay.h" | 10 #include "base/debug/trace_event_synthetic_delay.h" |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
180 // The following methods alter handlers' behavior for messages related to | 180 // The following methods alter handlers' behavior for messages related to |
181 // widget size and position. | 181 // widget size and position. |
182 void OnResizeMessage(const ViewMsg_Resize_Params& params); | 182 void OnResizeMessage(const ViewMsg_Resize_Params& params); |
183 void OnUpdateScreenRectsMessage(const gfx::Rect& view_screen_rect, | 183 void OnUpdateScreenRectsMessage(const gfx::Rect& view_screen_rect, |
184 const gfx::Rect& window_screen_rect); | 184 const gfx::Rect& window_screen_rect); |
185 void OnShowContextMenu(ContextMenuParams* params); | 185 void OnShowContextMenu(ContextMenuParams* params); |
186 | 186 |
187 private: | 187 private: |
188 void Reapply(); | 188 void Reapply(); |
189 void Apply(float overdraw_bottom_height, | 189 void Apply(float overdraw_bottom_height, |
190 gfx::Rect resizer_rect, bool is_fullscreen); | 190 const gfx::SizeF& visible_viewport_size, gfx::Rect resizer_rect, |
sky
2014/04/24 15:55:09
nit: one param per line here, and align params wit
kevers
2014/04/24 18:38:33
Done.
| |
191 bool is_fullscreen); | |
191 | 192 |
192 RenderWidget* widget_; | 193 RenderWidget* widget_; |
193 | 194 |
194 // Parameters as passed by RenderWidget::EnableScreenMetricsEmulation. | 195 // Parameters as passed by RenderWidget::EnableScreenMetricsEmulation. |
195 WebDeviceEmulationParams params_; | 196 WebDeviceEmulationParams params_; |
196 | 197 |
197 // The computed scale and offset used to fit widget into browser window. | 198 // The computed scale and offset used to fit widget into browser window. |
198 float scale_; | 199 float scale_; |
199 gfx::Point offset_; | 200 gfx::Point offset_; |
200 | 201 |
(...skipping 12 matching lines...) Expand all Loading... | |
213 RenderWidget* widget, | 214 RenderWidget* widget, |
214 const WebDeviceEmulationParams& params) | 215 const WebDeviceEmulationParams& params) |
215 : widget_(widget), | 216 : widget_(widget), |
216 params_(params), | 217 params_(params), |
217 scale_(1.f) { | 218 scale_(1.f) { |
218 original_size_ = widget_->size_; | 219 original_size_ = widget_->size_; |
219 original_physical_backing_size_ = widget_->physical_backing_size_; | 220 original_physical_backing_size_ = widget_->physical_backing_size_; |
220 original_screen_info_ = widget_->screen_info_; | 221 original_screen_info_ = widget_->screen_info_; |
221 original_view_screen_rect_ = widget_->view_screen_rect_; | 222 original_view_screen_rect_ = widget_->view_screen_rect_; |
222 original_window_screen_rect_ = widget_->window_screen_rect_; | 223 original_window_screen_rect_ = widget_->window_screen_rect_; |
223 Apply(widget_->overdraw_bottom_height_, | 224 Apply(widget_->overdraw_bottom_height_, widget_->visible_viewport_size_, |
224 widget_->resizer_rect_, widget_->is_fullscreen_); | 225 widget_->resizer_rect_, widget_->is_fullscreen_); |
225 } | 226 } |
226 | 227 |
227 RenderWidget::ScreenMetricsEmulator::~ScreenMetricsEmulator() { | 228 RenderWidget::ScreenMetricsEmulator::~ScreenMetricsEmulator() { |
228 widget_->screen_info_ = original_screen_info_; | 229 widget_->screen_info_ = original_screen_info_; |
229 | 230 |
230 widget_->SetDeviceScaleFactor(original_screen_info_.deviceScaleFactor); | 231 widget_->SetDeviceScaleFactor(original_screen_info_.deviceScaleFactor); |
231 widget_->SetScreenMetricsEmulationParameters(0.f, gfx::Point(), 1.f); | 232 widget_->SetScreenMetricsEmulationParameters(0.f, gfx::Point(), 1.f); |
232 widget_->view_screen_rect_ = original_view_screen_rect_; | 233 widget_->view_screen_rect_ = original_view_screen_rect_; |
233 widget_->window_screen_rect_ = original_window_screen_rect_; | 234 widget_->window_screen_rect_ = original_window_screen_rect_; |
234 widget_->Resize(original_size_, original_physical_backing_size_, | 235 widget_->Resize(original_size_, original_physical_backing_size_, |
235 widget_->overdraw_bottom_height_, widget_->resizer_rect_, | 236 widget_->overdraw_bottom_height_, widget_->visible_viewport_size_, |
236 widget_->is_fullscreen_, NO_RESIZE_ACK); | 237 widget_->resizer_rect_, widget_->is_fullscreen_, NO_RESIZE_ACK); |
237 } | 238 } |
238 | 239 |
239 void RenderWidget::ScreenMetricsEmulator::ChangeEmulationParams( | 240 void RenderWidget::ScreenMetricsEmulator::ChangeEmulationParams( |
240 const WebDeviceEmulationParams& params) { | 241 const WebDeviceEmulationParams& params) { |
241 params_ = params; | 242 params_ = params; |
242 Reapply(); | 243 Reapply(); |
243 } | 244 } |
244 | 245 |
245 void RenderWidget::ScreenMetricsEmulator::Reapply() { | 246 void RenderWidget::ScreenMetricsEmulator::Reapply() { |
246 Apply(widget_->overdraw_bottom_height_, | 247 Apply(widget_->overdraw_bottom_height_, widget_->visible_viewport_size_, |
247 widget_->resizer_rect_, widget_->is_fullscreen_); | 248 widget_->resizer_rect_, widget_->is_fullscreen_); |
248 } | 249 } |
249 | 250 |
250 void RenderWidget::ScreenMetricsEmulator::Apply( | 251 void RenderWidget::ScreenMetricsEmulator::Apply( |
251 float overdraw_bottom_height, gfx::Rect resizer_rect, bool is_fullscreen) { | 252 float overdraw_bottom_height, const gfx::SizeF& visible_viewport_size, |
253 gfx::Rect resizer_rect, bool is_fullscreen) { | |
252 applied_widget_rect_.set_size(params_.viewSize.isEmpty() ? | 254 applied_widget_rect_.set_size(params_.viewSize.isEmpty() ? |
253 original_size_ : gfx::Size(params_.viewSize)); | 255 original_size_ : gfx::Size(params_.viewSize)); |
254 | 256 |
255 if (params_.fitToView) { | 257 if (params_.fitToView) { |
256 DCHECK(!original_size_.IsEmpty()); | 258 DCHECK(!original_size_.IsEmpty()); |
257 | 259 |
258 int width_with_gutter = | 260 int width_with_gutter = |
259 std::max(original_size_.width() - 2 * params_.viewInsets.width, 1); | 261 std::max(original_size_.width() - 2 * params_.viewInsets.width, 1); |
260 int height_with_gutter = | 262 int height_with_gutter = |
261 std::max(original_size_.height() - 2 * params_.viewInsets.height, 1); | 263 std::max(original_size_.height() - 2 * params_.viewInsets.height, 1); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
299 // root layer. | 301 // root layer. |
300 widget_->SetScreenMetricsEmulationParameters( | 302 widget_->SetScreenMetricsEmulationParameters( |
301 original_screen_info_.deviceScaleFactor, offset_, scale_); | 303 original_screen_info_.deviceScaleFactor, offset_, scale_); |
302 | 304 |
303 widget_->SetDeviceScaleFactor(applied_device_scale_factor); | 305 widget_->SetDeviceScaleFactor(applied_device_scale_factor); |
304 widget_->view_screen_rect_ = applied_widget_rect_; | 306 widget_->view_screen_rect_ = applied_widget_rect_; |
305 | 307 |
306 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize( | 308 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize( |
307 original_size_, original_screen_info_.deviceScaleFactor)); | 309 original_size_, original_screen_info_.deviceScaleFactor)); |
308 widget_->Resize(applied_widget_rect_.size(), physical_backing_size, | 310 widget_->Resize(applied_widget_rect_.size(), physical_backing_size, |
309 overdraw_bottom_height, resizer_rect, is_fullscreen, NO_RESIZE_ACK); | 311 overdraw_bottom_height, visible_viewport_size, resizer_rect, |
312 is_fullscreen, NO_RESIZE_ACK); | |
310 } | 313 } |
311 | 314 |
312 void RenderWidget::ScreenMetricsEmulator::OnResizeMessage( | 315 void RenderWidget::ScreenMetricsEmulator::OnResizeMessage( |
313 const ViewMsg_Resize_Params& params) { | 316 const ViewMsg_Resize_Params& params) { |
314 bool need_ack = params.new_size != original_size_ && | 317 bool need_ack = params.new_size != original_size_ && |
315 !params.new_size.IsEmpty() && !params.physical_backing_size.IsEmpty(); | 318 !params.new_size.IsEmpty() && !params.physical_backing_size.IsEmpty(); |
316 original_size_ = params.new_size; | 319 original_size_ = params.new_size; |
317 original_physical_backing_size_ = params.physical_backing_size; | 320 original_physical_backing_size_ = params.physical_backing_size; |
318 original_screen_info_ = params.screen_info; | 321 original_screen_info_ = params.screen_info; |
319 Apply(params.overdraw_bottom_height, params.resizer_rect, | 322 Apply(params.overdraw_bottom_height, params.visible_viewport_size, |
320 params.is_fullscreen); | 323 params.resizer_rect, params.is_fullscreen); |
321 | 324 |
322 if (need_ack) { | 325 if (need_ack) { |
323 widget_->set_next_paint_is_resize_ack(); | 326 widget_->set_next_paint_is_resize_ack(); |
324 if (widget_->compositor_) | 327 if (widget_->compositor_) |
325 widget_->compositor_->SetNeedsRedrawRect(gfx::Rect(widget_->size_)); | 328 widget_->compositor_->SetNeedsRedrawRect(gfx::Rect(widget_->size_)); |
326 } | 329 } |
327 } | 330 } |
328 | 331 |
329 void RenderWidget::ScreenMetricsEmulator::OnUpdateScreenRectsMessage( | 332 void RenderWidget::ScreenMetricsEmulator::OnUpdateScreenRectsMessage( |
330 const gfx::Rect& view_screen_rect, | 333 const gfx::Rect& view_screen_rect, |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
638 // If given a messsage without a routing ID, then assign our routing ID. | 641 // If given a messsage without a routing ID, then assign our routing ID. |
639 if (message->routing_id() == MSG_ROUTING_NONE) | 642 if (message->routing_id() == MSG_ROUTING_NONE) |
640 message->set_routing_id(routing_id_); | 643 message->set_routing_id(routing_id_); |
641 | 644 |
642 return RenderThread::Get()->Send(message); | 645 return RenderThread::Get()->Send(message); |
643 } | 646 } |
644 | 647 |
645 void RenderWidget::Resize(const gfx::Size& new_size, | 648 void RenderWidget::Resize(const gfx::Size& new_size, |
646 const gfx::Size& physical_backing_size, | 649 const gfx::Size& physical_backing_size, |
647 float overdraw_bottom_height, | 650 float overdraw_bottom_height, |
651 const gfx::SizeF& visible_viewport_size, | |
648 const gfx::Rect& resizer_rect, | 652 const gfx::Rect& resizer_rect, |
649 bool is_fullscreen, | 653 bool is_fullscreen, |
650 ResizeAck resize_ack) { | 654 ResizeAck resize_ack) { |
651 if (resizing_mode_selector_->NeverUsesSynchronousResize()) { | 655 if (resizing_mode_selector_->NeverUsesSynchronousResize()) { |
652 // A resize ack shouldn't be requested if we have not ACK'd the previous | 656 // A resize ack shouldn't be requested if we have not ACK'd the previous |
653 // one. | 657 // one. |
654 DCHECK(resize_ack != SEND_RESIZE_ACK || !next_paint_is_resize_ack()); | 658 DCHECK(resize_ack != SEND_RESIZE_ACK || !next_paint_is_resize_ack()); |
655 DCHECK(resize_ack == SEND_RESIZE_ACK || resize_ack == NO_RESIZE_ACK); | 659 DCHECK(resize_ack == SEND_RESIZE_ACK || resize_ack == NO_RESIZE_ACK); |
656 } | 660 } |
657 | 661 |
658 // Ignore this during shutdown. | 662 // Ignore this during shutdown. |
659 if (!webwidget_) | 663 if (!webwidget_) |
660 return; | 664 return; |
661 | 665 |
662 if (compositor_) { | 666 if (compositor_) { |
663 compositor_->setViewportSize(new_size, physical_backing_size); | 667 compositor_->setViewportSize(new_size, physical_backing_size); |
664 compositor_->SetOverdrawBottomHeight(overdraw_bottom_height); | 668 compositor_->SetOverdrawBottomHeight(overdraw_bottom_height); |
669 webwidget()->resizePinchViewport(gfx::Size( | |
bokan
2014/04/24 17:37:47
This should actually go below the webwidget_->resi
kevers
2014/04/24 18:38:33
Done.
| |
670 visible_viewport_size.width(), | |
671 visible_viewport_size.height())); | |
665 } | 672 } |
666 | 673 |
667 physical_backing_size_ = physical_backing_size; | 674 physical_backing_size_ = physical_backing_size; |
668 overdraw_bottom_height_ = overdraw_bottom_height; | 675 overdraw_bottom_height_ = overdraw_bottom_height; |
669 resizer_rect_ = resizer_rect; | 676 resizer_rect_ = resizer_rect; |
670 | 677 |
671 // NOTE: We may have entered fullscreen mode without changing our size. | 678 // NOTE: We may have entered fullscreen mode without changing our size. |
672 bool fullscreen_change = is_fullscreen_ != is_fullscreen; | 679 bool fullscreen_change = is_fullscreen_ != is_fullscreen; |
673 if (fullscreen_change) | 680 if (fullscreen_change) |
674 WillToggleFullscreen(); | 681 WillToggleFullscreen(); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
709 if (fullscreen_change) | 716 if (fullscreen_change) |
710 DidToggleFullscreen(); | 717 DidToggleFullscreen(); |
711 | 718 |
712 // If a resize ack is requested and it isn't set-up, then no more resizes will | 719 // If a resize ack is requested and it isn't set-up, then no more resizes will |
713 // come in and in general things will go wrong. | 720 // come in and in general things will go wrong. |
714 DCHECK(resize_ack != SEND_RESIZE_ACK || next_paint_is_resize_ack()); | 721 DCHECK(resize_ack != SEND_RESIZE_ACK || next_paint_is_resize_ack()); |
715 } | 722 } |
716 | 723 |
717 void RenderWidget::ResizeSynchronously(const gfx::Rect& new_position) { | 724 void RenderWidget::ResizeSynchronously(const gfx::Rect& new_position) { |
718 Resize(new_position.size(), new_position.size(), overdraw_bottom_height_, | 725 Resize(new_position.size(), new_position.size(), overdraw_bottom_height_, |
719 gfx::Rect(), is_fullscreen_, NO_RESIZE_ACK); | 726 visible_viewport_size_, gfx::Rect(), is_fullscreen_, NO_RESIZE_ACK); |
720 view_screen_rect_ = new_position; | 727 view_screen_rect_ = new_position; |
721 window_screen_rect_ = new_position; | 728 window_screen_rect_ = new_position; |
722 if (!did_show_) | 729 if (!did_show_) |
723 initial_pos_ = new_position; | 730 initial_pos_ = new_position; |
724 } | 731 } |
725 | 732 |
726 void RenderWidget::OnClose() { | 733 void RenderWidget::OnClose() { |
727 if (closing_) | 734 if (closing_) |
728 return; | 735 return; |
729 closing_ = true; | 736 closing_ = true; |
(...skipping 29 matching lines...) Expand all Loading... | |
759 return; | 766 return; |
760 | 767 |
761 if (screen_metrics_emulator_) { | 768 if (screen_metrics_emulator_) { |
762 screen_metrics_emulator_->OnResizeMessage(params); | 769 screen_metrics_emulator_->OnResizeMessage(params); |
763 return; | 770 return; |
764 } | 771 } |
765 | 772 |
766 screen_info_ = params.screen_info; | 773 screen_info_ = params.screen_info; |
767 SetDeviceScaleFactor(screen_info_.deviceScaleFactor); | 774 SetDeviceScaleFactor(screen_info_.deviceScaleFactor); |
768 Resize(params.new_size, params.physical_backing_size, | 775 Resize(params.new_size, params.physical_backing_size, |
769 params.overdraw_bottom_height, params.resizer_rect, | 776 params.overdraw_bottom_height, params.visible_viewport_size, |
770 params.is_fullscreen, SEND_RESIZE_ACK); | 777 params.resizer_rect, params.is_fullscreen, SEND_RESIZE_ACK); |
771 } | 778 } |
772 | 779 |
773 void RenderWidget::OnChangeResizeRect(const gfx::Rect& resizer_rect) { | 780 void RenderWidget::OnChangeResizeRect(const gfx::Rect& resizer_rect) { |
774 if (resizer_rect_ != resizer_rect) { | 781 if (resizer_rect_ != resizer_rect) { |
775 gfx::Rect view_rect(size_); | 782 gfx::Rect view_rect(size_); |
776 | 783 |
777 gfx::Rect old_damage_rect = gfx::IntersectRects(view_rect, resizer_rect_); | 784 gfx::Rect old_damage_rect = gfx::IntersectRects(view_rect, resizer_rect_); |
778 if (!old_damage_rect.IsEmpty()) | 785 if (!old_damage_rect.IsEmpty()) |
779 has_frame_pending_ = true; | 786 has_frame_pending_ = true; |
780 | 787 |
(...skipping 1709 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2490 | 2497 |
2491 void RenderWidget::RegisterSwappedOutChildFrame(RenderFrameImpl* frame) { | 2498 void RenderWidget::RegisterSwappedOutChildFrame(RenderFrameImpl* frame) { |
2492 swapped_out_frames_.AddObserver(frame); | 2499 swapped_out_frames_.AddObserver(frame); |
2493 } | 2500 } |
2494 | 2501 |
2495 void RenderWidget::UnregisterSwappedOutChildFrame(RenderFrameImpl* frame) { | 2502 void RenderWidget::UnregisterSwappedOutChildFrame(RenderFrameImpl* frame) { |
2496 swapped_out_frames_.RemoveObserver(frame); | 2503 swapped_out_frames_.RemoveObserver(frame); |
2497 } | 2504 } |
2498 | 2505 |
2499 } // namespace content | 2506 } // namespace content |
OLD | NEW |