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 |