| 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/auto_reset.h" | 7 #include "base/auto_reset.h" |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 void OnUpdateScreenRectsMessage(const gfx::Rect& view_screen_rect, | 262 void OnUpdateScreenRectsMessage(const gfx::Rect& view_screen_rect, |
| 263 const gfx::Rect& window_screen_rect); | 263 const gfx::Rect& window_screen_rect); |
| 264 void OnShowContextMenu(ContextMenuParams* params); | 264 void OnShowContextMenu(ContextMenuParams* params); |
| 265 gfx::Rect AdjustValidationMessageAnchor(const gfx::Rect& anchor); | 265 gfx::Rect AdjustValidationMessageAnchor(const gfx::Rect& anchor); |
| 266 | 266 |
| 267 private: | 267 private: |
| 268 void Reapply(); | 268 void Reapply(); |
| 269 void Apply(bool top_controls_shrink_blink_size, | 269 void Apply(bool top_controls_shrink_blink_size, |
| 270 float top_controls_height, | 270 float top_controls_height, |
| 271 gfx::Rect resizer_rect, | 271 gfx::Rect resizer_rect, |
| 272 bool is_fullscreen_granted); | 272 bool is_fullscreen_granted, |
| 273 blink::WebDisplayMode display_mode); |
| 273 | 274 |
| 274 RenderWidget* widget_; | 275 RenderWidget* widget_; |
| 275 | 276 |
| 276 // Parameters as passed by RenderWidget::EnableScreenMetricsEmulation. | 277 // Parameters as passed by RenderWidget::EnableScreenMetricsEmulation. |
| 277 WebDeviceEmulationParams params_; | 278 WebDeviceEmulationParams params_; |
| 278 | 279 |
| 279 // The computed scale and offset used to fit widget into browser window. | 280 // The computed scale and offset used to fit widget into browser window. |
| 280 float scale_; | 281 float scale_; |
| 281 gfx::PointF offset_; | 282 gfx::PointF offset_; |
| 282 | 283 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 300 scale_(1.f) { | 301 scale_(1.f) { |
| 301 original_size_ = widget_->size_; | 302 original_size_ = widget_->size_; |
| 302 original_physical_backing_size_ = widget_->physical_backing_size_; | 303 original_physical_backing_size_ = widget_->physical_backing_size_; |
| 303 original_visible_viewport_size_ = widget_->visible_viewport_size_; | 304 original_visible_viewport_size_ = widget_->visible_viewport_size_; |
| 304 original_screen_info_ = widget_->screen_info_; | 305 original_screen_info_ = widget_->screen_info_; |
| 305 original_view_screen_rect_ = widget_->view_screen_rect_; | 306 original_view_screen_rect_ = widget_->view_screen_rect_; |
| 306 original_window_screen_rect_ = widget_->window_screen_rect_; | 307 original_window_screen_rect_ = widget_->window_screen_rect_; |
| 307 Apply(widget_->top_controls_shrink_blink_size_, | 308 Apply(widget_->top_controls_shrink_blink_size_, |
| 308 widget_->top_controls_height_, | 309 widget_->top_controls_height_, |
| 309 widget_->resizer_rect_, | 310 widget_->resizer_rect_, |
| 310 widget_->is_fullscreen_granted_); | 311 widget_->is_fullscreen_granted_, |
| 312 widget_->display_mode_); |
| 311 } | 313 } |
| 312 | 314 |
| 313 RenderWidget::ScreenMetricsEmulator::~ScreenMetricsEmulator() { | 315 RenderWidget::ScreenMetricsEmulator::~ScreenMetricsEmulator() { |
| 314 widget_->screen_info_ = original_screen_info_; | 316 widget_->screen_info_ = original_screen_info_; |
| 315 | 317 |
| 316 widget_->SetDeviceScaleFactor(original_screen_info_.deviceScaleFactor); | 318 widget_->SetDeviceScaleFactor(original_screen_info_.deviceScaleFactor); |
| 317 widget_->SetScreenMetricsEmulationParameters(false, params_); | 319 widget_->SetScreenMetricsEmulationParameters(false, params_); |
| 318 widget_->view_screen_rect_ = original_view_screen_rect_; | 320 widget_->view_screen_rect_ = original_view_screen_rect_; |
| 319 widget_->window_screen_rect_ = original_window_screen_rect_; | 321 widget_->window_screen_rect_ = original_window_screen_rect_; |
| 320 widget_->Resize(original_size_, | 322 widget_->Resize(original_size_, |
| 321 original_physical_backing_size_, | 323 original_physical_backing_size_, |
| 322 widget_->top_controls_shrink_blink_size_, | 324 widget_->top_controls_shrink_blink_size_, |
| 323 widget_->top_controls_height_, | 325 widget_->top_controls_height_, |
| 324 original_visible_viewport_size_, | 326 original_visible_viewport_size_, |
| 325 widget_->resizer_rect_, | 327 widget_->resizer_rect_, |
| 326 widget_->is_fullscreen_granted_, | 328 widget_->is_fullscreen_granted_, |
| 329 widget_->display_mode_, |
| 327 NO_RESIZE_ACK); | 330 NO_RESIZE_ACK); |
| 328 } | 331 } |
| 329 | 332 |
| 330 void RenderWidget::ScreenMetricsEmulator::ChangeEmulationParams( | 333 void RenderWidget::ScreenMetricsEmulator::ChangeEmulationParams( |
| 331 const WebDeviceEmulationParams& params) { | 334 const WebDeviceEmulationParams& params) { |
| 332 params_ = params; | 335 params_ = params; |
| 333 Reapply(); | 336 Reapply(); |
| 334 } | 337 } |
| 335 | 338 |
| 336 void RenderWidget::ScreenMetricsEmulator::Reapply() { | 339 void RenderWidget::ScreenMetricsEmulator::Reapply() { |
| 337 Apply(widget_->top_controls_shrink_blink_size_, | 340 Apply(widget_->top_controls_shrink_blink_size_, |
| 338 widget_->top_controls_height_, | 341 widget_->top_controls_height_, |
| 339 widget_->resizer_rect_, | 342 widget_->resizer_rect_, |
| 340 widget_->is_fullscreen_granted_); | 343 widget_->is_fullscreen_granted_, |
| 344 widget_->display_mode_); |
| 341 } | 345 } |
| 342 | 346 |
| 343 void RenderWidget::ScreenMetricsEmulator::Apply( | 347 void RenderWidget::ScreenMetricsEmulator::Apply( |
| 344 bool top_controls_shrink_blink_size, | 348 bool top_controls_shrink_blink_size, |
| 345 float top_controls_height, | 349 float top_controls_height, |
| 346 gfx::Rect resizer_rect, | 350 gfx::Rect resizer_rect, |
| 347 bool is_fullscreen_granted) { | 351 bool is_fullscreen_granted, |
| 352 blink::WebDisplayMode display_mode) { |
| 348 applied_widget_rect_.set_size(gfx::Size(params_.viewSize)); | 353 applied_widget_rect_.set_size(gfx::Size(params_.viewSize)); |
| 349 if (!applied_widget_rect_.width()) | 354 if (!applied_widget_rect_.width()) |
| 350 applied_widget_rect_.set_width(original_size_.width()); | 355 applied_widget_rect_.set_width(original_size_.width()); |
| 351 if (!applied_widget_rect_.height()) | 356 if (!applied_widget_rect_.height()) |
| 352 applied_widget_rect_.set_height(original_size_.height()); | 357 applied_widget_rect_.set_height(original_size_.height()); |
| 353 | 358 |
| 354 if (params_.fitToView && !original_size_.IsEmpty()) { | 359 if (params_.fitToView && !original_size_.IsEmpty()) { |
| 355 int original_width = std::max(original_size_.width(), 1); | 360 int original_width = std::max(original_size_.width(), 1); |
| 356 int original_height = std::max(original_size_.height(), 1); | 361 int original_height = std::max(original_size_.height(), 1); |
| 357 float width_ratio = | 362 float width_ratio = |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 | 408 |
| 404 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize( | 409 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize( |
| 405 original_size_, original_screen_info_.deviceScaleFactor)); | 410 original_size_, original_screen_info_.deviceScaleFactor)); |
| 406 widget_->Resize(applied_widget_rect_.size(), | 411 widget_->Resize(applied_widget_rect_.size(), |
| 407 physical_backing_size, | 412 physical_backing_size, |
| 408 top_controls_shrink_blink_size, | 413 top_controls_shrink_blink_size, |
| 409 top_controls_height, | 414 top_controls_height, |
| 410 applied_widget_rect_.size(), | 415 applied_widget_rect_.size(), |
| 411 resizer_rect, | 416 resizer_rect, |
| 412 is_fullscreen_granted, | 417 is_fullscreen_granted, |
| 418 display_mode, |
| 413 NO_RESIZE_ACK); | 419 NO_RESIZE_ACK); |
| 414 } | 420 } |
| 415 | 421 |
| 416 void RenderWidget::ScreenMetricsEmulator::OnResizeMessage( | 422 void RenderWidget::ScreenMetricsEmulator::OnResizeMessage( |
| 417 const ViewMsg_Resize_Params& params) { | 423 const ViewMsg_Resize_Params& params) { |
| 418 bool need_ack = params.new_size != original_size_ && | 424 bool need_ack = params.new_size != original_size_ && |
| 419 !params.new_size.IsEmpty() && !params.physical_backing_size.IsEmpty(); | 425 !params.new_size.IsEmpty() && !params.physical_backing_size.IsEmpty(); |
| 420 original_size_ = params.new_size; | 426 original_size_ = params.new_size; |
| 421 original_physical_backing_size_ = params.physical_backing_size; | 427 original_physical_backing_size_ = params.physical_backing_size; |
| 422 original_screen_info_ = params.screen_info; | 428 original_screen_info_ = params.screen_info; |
| 423 original_visible_viewport_size_ = params.visible_viewport_size; | 429 original_visible_viewport_size_ = params.visible_viewport_size; |
| 424 Apply(params.top_controls_shrink_blink_size, | 430 Apply(params.top_controls_shrink_blink_size, |
| 425 params.top_controls_height, | 431 params.top_controls_height, |
| 426 params.resizer_rect, | 432 params.resizer_rect, |
| 427 params.is_fullscreen_granted); | 433 params.is_fullscreen_granted, |
| 434 params.display_mode); |
| 428 | 435 |
| 429 if (need_ack) { | 436 if (need_ack) { |
| 430 widget_->set_next_paint_is_resize_ack(); | 437 widget_->set_next_paint_is_resize_ack(); |
| 431 if (widget_->compositor_) | 438 if (widget_->compositor_) |
| 432 widget_->compositor_->SetNeedsRedrawRect(gfx::Rect(widget_->size_)); | 439 widget_->compositor_->SetNeedsRedrawRect(gfx::Rect(widget_->size_)); |
| 433 } | 440 } |
| 434 } | 441 } |
| 435 | 442 |
| 436 void RenderWidget::ScreenMetricsEmulator::OnUpdateScreenRectsMessage( | 443 void RenderWidget::ScreenMetricsEmulator::OnUpdateScreenRectsMessage( |
| 437 const gfx::Rect& view_screen_rect, | 444 const gfx::Rect& view_screen_rect, |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 init_complete_(false), | 480 init_complete_(false), |
| 474 top_controls_shrink_blink_size_(false), | 481 top_controls_shrink_blink_size_(false), |
| 475 top_controls_height_(0.f), | 482 top_controls_height_(0.f), |
| 476 next_paint_flags_(0), | 483 next_paint_flags_(0), |
| 477 auto_resize_mode_(false), | 484 auto_resize_mode_(false), |
| 478 need_update_rect_for_auto_resize_(false), | 485 need_update_rect_for_auto_resize_(false), |
| 479 did_show_(false), | 486 did_show_(false), |
| 480 is_hidden_(hidden), | 487 is_hidden_(hidden), |
| 481 never_visible_(never_visible), | 488 never_visible_(never_visible), |
| 482 is_fullscreen_granted_(false), | 489 is_fullscreen_granted_(false), |
| 490 display_mode_(blink::WebDisplayModeUndefined), |
| 483 has_focus_(false), | 491 has_focus_(false), |
| 484 handling_input_event_(false), | 492 handling_input_event_(false), |
| 485 handling_ime_event_(false), | 493 handling_ime_event_(false), |
| 486 handling_event_type_(WebInputEvent::Undefined), | 494 handling_event_type_(WebInputEvent::Undefined), |
| 487 ignore_ack_for_mouse_move_from_debugger_(false), | 495 ignore_ack_for_mouse_move_from_debugger_(false), |
| 488 closing_(false), | 496 closing_(false), |
| 489 host_closing_(false), | 497 host_closing_(false), |
| 490 is_swapped_out_(swapped_out), | 498 is_swapped_out_(swapped_out), |
| 491 input_method_is_active_(false), | 499 input_method_is_active_(false), |
| 492 text_input_type_(ui::TEXT_INPUT_TYPE_NONE), | 500 text_input_type_(ui::TEXT_INPUT_TYPE_NONE), |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 765 return RenderThread::Get()->Send(message); | 773 return RenderThread::Get()->Send(message); |
| 766 } | 774 } |
| 767 | 775 |
| 768 void RenderWidget::Resize(const gfx::Size& new_size, | 776 void RenderWidget::Resize(const gfx::Size& new_size, |
| 769 const gfx::Size& physical_backing_size, | 777 const gfx::Size& physical_backing_size, |
| 770 bool top_controls_shrink_blink_size, | 778 bool top_controls_shrink_blink_size, |
| 771 float top_controls_height, | 779 float top_controls_height, |
| 772 const gfx::Size& visible_viewport_size, | 780 const gfx::Size& visible_viewport_size, |
| 773 const gfx::Rect& resizer_rect, | 781 const gfx::Rect& resizer_rect, |
| 774 bool is_fullscreen_granted, | 782 bool is_fullscreen_granted, |
| 783 blink::WebDisplayMode display_mode, |
| 775 const ResizeAck resize_ack) { | 784 const ResizeAck resize_ack) { |
| 776 if (resizing_mode_selector_->NeverUsesSynchronousResize()) { | 785 if (resizing_mode_selector_->NeverUsesSynchronousResize()) { |
| 777 // A resize ack shouldn't be requested if we have not ACK'd the previous | 786 // A resize ack shouldn't be requested if we have not ACK'd the previous |
| 778 // one. | 787 // one. |
| 779 DCHECK(resize_ack != SEND_RESIZE_ACK || !next_paint_is_resize_ack()); | 788 DCHECK(resize_ack != SEND_RESIZE_ACK || !next_paint_is_resize_ack()); |
| 780 DCHECK(resize_ack == SEND_RESIZE_ACK || resize_ack == NO_RESIZE_ACK); | 789 DCHECK(resize_ack == SEND_RESIZE_ACK || resize_ack == NO_RESIZE_ACK); |
| 781 } | 790 } |
| 782 | 791 |
| 783 // Ignore this during shutdown. | 792 // Ignore this during shutdown. |
| 784 if (!webwidget_) | 793 if (!webwidget_) |
| 785 return; | 794 return; |
| 786 | 795 |
| 787 if (compositor_) { | 796 if (compositor_) { |
| 788 compositor_->setViewportSize(new_size, physical_backing_size); | 797 compositor_->setViewportSize(new_size, physical_backing_size); |
| 789 } | 798 } |
| 790 | 799 |
| 791 physical_backing_size_ = physical_backing_size; | 800 physical_backing_size_ = physical_backing_size; |
| 792 top_controls_shrink_blink_size_ = top_controls_shrink_blink_size; | 801 top_controls_shrink_blink_size_ = top_controls_shrink_blink_size; |
| 793 top_controls_height_ = top_controls_height; | 802 top_controls_height_ = top_controls_height; |
| 794 visible_viewport_size_ = visible_viewport_size; | 803 visible_viewport_size_ = visible_viewport_size; |
| 795 resizer_rect_ = resizer_rect; | 804 resizer_rect_ = resizer_rect; |
| 796 | 805 |
| 797 // NOTE: We may have entered fullscreen mode without changing our size. | 806 // NOTE: We may have entered fullscreen mode without changing our size. |
| 798 bool fullscreen_change = is_fullscreen_granted_ != is_fullscreen_granted; | 807 bool fullscreen_change = is_fullscreen_granted_ != is_fullscreen_granted; |
| 799 if (fullscreen_change) | 808 if (fullscreen_change) |
| 800 WillToggleFullscreen(); | 809 WillToggleFullscreen(); |
| 801 is_fullscreen_granted_ = is_fullscreen_granted; | 810 is_fullscreen_granted_ = is_fullscreen_granted; |
| 811 display_mode_ = display_mode; |
| 802 | 812 |
| 803 webwidget_->setTopControlsHeight(top_controls_height, | 813 webwidget_->setTopControlsHeight(top_controls_height, |
| 804 top_controls_shrink_blink_size_); | 814 top_controls_shrink_blink_size_); |
| 805 | 815 |
| 806 if (size_ != new_size) { | 816 if (size_ != new_size) { |
| 807 size_ = new_size; | 817 size_ = new_size; |
| 808 | 818 |
| 809 // When resizing, we want to wait to paint before ACK'ing the resize. This | 819 // When resizing, we want to wait to paint before ACK'ing the resize. This |
| 810 // ensures that we only resize as fast as we can paint. We only need to | 820 // ensures that we only resize as fast as we can paint. We only need to |
| 811 // send an ACK if we are resized to a non-empty rect. | 821 // send an ACK if we are resized to a non-empty rect. |
| (...skipping 25 matching lines...) Expand all Loading... |
| 837 | 847 |
| 838 void RenderWidget::SetWindowRectSynchronously( | 848 void RenderWidget::SetWindowRectSynchronously( |
| 839 const gfx::Rect& new_window_rect) { | 849 const gfx::Rect& new_window_rect) { |
| 840 Resize(new_window_rect.size(), | 850 Resize(new_window_rect.size(), |
| 841 new_window_rect.size(), | 851 new_window_rect.size(), |
| 842 top_controls_shrink_blink_size_, | 852 top_controls_shrink_blink_size_, |
| 843 top_controls_height_, | 853 top_controls_height_, |
| 844 new_window_rect.size(), | 854 new_window_rect.size(), |
| 845 gfx::Rect(), | 855 gfx::Rect(), |
| 846 is_fullscreen_granted_, | 856 is_fullscreen_granted_, |
| 857 display_mode_, |
| 847 NO_RESIZE_ACK); | 858 NO_RESIZE_ACK); |
| 848 view_screen_rect_ = new_window_rect; | 859 view_screen_rect_ = new_window_rect; |
| 849 window_screen_rect_ = new_window_rect; | 860 window_screen_rect_ = new_window_rect; |
| 850 if (!did_show_) | 861 if (!did_show_) |
| 851 initial_rect_ = new_window_rect; | 862 initial_rect_ = new_window_rect; |
| 852 } | 863 } |
| 853 | 864 |
| 854 void RenderWidget::OnClose() { | 865 void RenderWidget::OnClose() { |
| 855 if (closing_) | 866 if (closing_) |
| 856 return; | 867 return; |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 897 | 908 |
| 898 screen_info_ = params.screen_info; | 909 screen_info_ = params.screen_info; |
| 899 SetDeviceScaleFactor(screen_info_.deviceScaleFactor); | 910 SetDeviceScaleFactor(screen_info_.deviceScaleFactor); |
| 900 Resize(params.new_size, | 911 Resize(params.new_size, |
| 901 params.physical_backing_size, | 912 params.physical_backing_size, |
| 902 params.top_controls_shrink_blink_size, | 913 params.top_controls_shrink_blink_size, |
| 903 params.top_controls_height, | 914 params.top_controls_height, |
| 904 params.visible_viewport_size, | 915 params.visible_viewport_size, |
| 905 params.resizer_rect, | 916 params.resizer_rect, |
| 906 params.is_fullscreen_granted, | 917 params.is_fullscreen_granted, |
| 918 params.display_mode, |
| 907 params.needs_resize_ack ? SEND_RESIZE_ACK : NO_RESIZE_ACK); | 919 params.needs_resize_ack ? SEND_RESIZE_ACK : NO_RESIZE_ACK); |
| 908 | 920 |
| 909 if (orientation_changed) | 921 if (orientation_changed) |
| 910 OnOrientationChange(); | 922 OnOrientationChange(); |
| 911 } | 923 } |
| 912 | 924 |
| 913 void RenderWidget::OnEnableDeviceEmulation( | 925 void RenderWidget::OnEnableDeviceEmulation( |
| 914 const blink::WebDeviceEmulationParams& params) { | 926 const blink::WebDeviceEmulationParams& params) { |
| 915 if (!screen_metrics_emulator_) | 927 if (!screen_metrics_emulator_) |
| 916 screen_metrics_emulator_.reset(new ScreenMetricsEmulator(this, params)); | 928 screen_metrics_emulator_.reset(new ScreenMetricsEmulator(this, params)); |
| (...skipping 1511 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2428 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { | 2440 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { |
| 2429 video_hole_frames_.AddObserver(frame); | 2441 video_hole_frames_.AddObserver(frame); |
| 2430 } | 2442 } |
| 2431 | 2443 |
| 2432 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { | 2444 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { |
| 2433 video_hole_frames_.RemoveObserver(frame); | 2445 video_hole_frames_.RemoveObserver(frame); |
| 2434 } | 2446 } |
| 2435 #endif // defined(VIDEO_HOLE) | 2447 #endif // defined(VIDEO_HOLE) |
| 2436 | 2448 |
| 2437 } // namespace content | 2449 } // namespace content |
| OLD | NEW |