Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(770)

Side by Side Diff: content/renderer/render_widget.cc

Issue 964403003: Make it possible to set the display mode from Chromium (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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); 272 bool is_fullscreen,
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::Point offset_; 282 gfx::Point offset_;
282 283
(...skipping 17 matching lines...) Expand all
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_); 311 widget_->is_fullscreen_,
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(0.f, gfx::Point(), 1.f); 319 widget_->SetScreenMetricsEmulationParameters(0.f, gfx::Point(), 1.f);
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_, 328 widget_->is_fullscreen_,
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_); 343 widget_->is_fullscreen_,
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) { 351 bool is_fullscreen,
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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 405
401 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize( 406 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize(
402 original_size_, original_screen_info_.deviceScaleFactor)); 407 original_size_, original_screen_info_.deviceScaleFactor));
403 widget_->Resize(applied_widget_rect_.size(), 408 widget_->Resize(applied_widget_rect_.size(),
404 physical_backing_size, 409 physical_backing_size,
405 top_controls_shrink_blink_size, 410 top_controls_shrink_blink_size,
406 top_controls_height, 411 top_controls_height,
407 applied_widget_rect_.size(), 412 applied_widget_rect_.size(),
408 resizer_rect, 413 resizer_rect,
409 is_fullscreen, 414 is_fullscreen,
415 display_mode,
410 NO_RESIZE_ACK); 416 NO_RESIZE_ACK);
411 } 417 }
412 418
413 void RenderWidget::ScreenMetricsEmulator::OnResizeMessage( 419 void RenderWidget::ScreenMetricsEmulator::OnResizeMessage(
414 const ViewMsg_Resize_Params& params) { 420 const ViewMsg_Resize_Params& params) {
415 bool need_ack = params.new_size != original_size_ && 421 bool need_ack = params.new_size != original_size_ &&
416 !params.new_size.IsEmpty() && !params.physical_backing_size.IsEmpty(); 422 !params.new_size.IsEmpty() && !params.physical_backing_size.IsEmpty();
417 original_size_ = params.new_size; 423 original_size_ = params.new_size;
418 original_physical_backing_size_ = params.physical_backing_size; 424 original_physical_backing_size_ = params.physical_backing_size;
419 original_screen_info_ = params.screen_info; 425 original_screen_info_ = params.screen_info;
420 original_visible_viewport_size_ = params.visible_viewport_size; 426 original_visible_viewport_size_ = params.visible_viewport_size;
421 Apply(params.top_controls_shrink_blink_size, 427 Apply(params.top_controls_shrink_blink_size,
422 params.top_controls_height, 428 params.top_controls_height,
423 params.resizer_rect, 429 params.resizer_rect,
424 params.is_fullscreen); 430 params.is_fullscreen,
431 params.display_mode);
425 432
426 if (need_ack) { 433 if (need_ack) {
427 widget_->set_next_paint_is_resize_ack(); 434 widget_->set_next_paint_is_resize_ack();
428 if (widget_->compositor_) 435 if (widget_->compositor_)
429 widget_->compositor_->SetNeedsRedrawRect(gfx::Rect(widget_->size_)); 436 widget_->compositor_->SetNeedsRedrawRect(gfx::Rect(widget_->size_));
430 } 437 }
431 } 438 }
432 439
433 void RenderWidget::ScreenMetricsEmulator::OnUpdateScreenRectsMessage( 440 void RenderWidget::ScreenMetricsEmulator::OnUpdateScreenRectsMessage(
434 const gfx::Rect& view_screen_rect, 441 const gfx::Rect& view_screen_rect,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 opener_id_(MSG_ROUTING_NONE), 476 opener_id_(MSG_ROUTING_NONE),
470 init_complete_(false), 477 init_complete_(false),
471 top_controls_shrink_blink_size_(false), 478 top_controls_shrink_blink_size_(false),
472 top_controls_height_(0.f), 479 top_controls_height_(0.f),
473 next_paint_flags_(0), 480 next_paint_flags_(0),
474 auto_resize_mode_(false), 481 auto_resize_mode_(false),
475 need_update_rect_for_auto_resize_(false), 482 need_update_rect_for_auto_resize_(false),
476 did_show_(false), 483 did_show_(false),
477 is_hidden_(hidden), 484 is_hidden_(hidden),
478 never_visible_(never_visible), 485 never_visible_(never_visible),
479 is_fullscreen_(false), 486 display_mode_(blink::WebDisplayModeUndefined),
480 has_focus_(false), 487 has_focus_(false),
481 handling_input_event_(false), 488 handling_input_event_(false),
482 handling_ime_event_(false), 489 handling_ime_event_(false),
483 handling_event_type_(WebInputEvent::Undefined), 490 handling_event_type_(WebInputEvent::Undefined),
484 ignore_ack_for_mouse_move_from_debugger_(false), 491 ignore_ack_for_mouse_move_from_debugger_(false),
485 closing_(false), 492 closing_(false),
486 host_closing_(false), 493 host_closing_(false),
487 is_swapped_out_(swapped_out), 494 is_swapped_out_(swapped_out),
488 input_method_is_active_(false), 495 input_method_is_active_(false),
489 text_input_type_(ui::TEXT_INPUT_TYPE_NONE), 496 text_input_type_(ui::TEXT_INPUT_TYPE_NONE),
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 return RenderThread::Get()->Send(message); 778 return RenderThread::Get()->Send(message);
772 } 779 }
773 780
774 void RenderWidget::Resize(const gfx::Size& new_size, 781 void RenderWidget::Resize(const gfx::Size& new_size,
775 const gfx::Size& physical_backing_size, 782 const gfx::Size& physical_backing_size,
776 bool top_controls_shrink_blink_size, 783 bool top_controls_shrink_blink_size,
777 float top_controls_height, 784 float top_controls_height,
778 const gfx::Size& visible_viewport_size, 785 const gfx::Size& visible_viewport_size,
779 const gfx::Rect& resizer_rect, 786 const gfx::Rect& resizer_rect,
780 bool is_fullscreen, 787 bool is_fullscreen,
788 blink::WebDisplayMode display_mode,
781 ResizeAck resize_ack) { 789 ResizeAck resize_ack) {
782 if (resizing_mode_selector_->NeverUsesSynchronousResize()) { 790 if (resizing_mode_selector_->NeverUsesSynchronousResize()) {
783 // A resize ack shouldn't be requested if we have not ACK'd the previous 791 // A resize ack shouldn't be requested if we have not ACK'd the previous
784 // one. 792 // one.
785 DCHECK(resize_ack != SEND_RESIZE_ACK || !next_paint_is_resize_ack()); 793 DCHECK(resize_ack != SEND_RESIZE_ACK || !next_paint_is_resize_ack());
786 DCHECK(resize_ack == SEND_RESIZE_ACK || resize_ack == NO_RESIZE_ACK); 794 DCHECK(resize_ack == SEND_RESIZE_ACK || resize_ack == NO_RESIZE_ACK);
787 } 795 }
788 796
789 // Ignore this during shutdown. 797 // Ignore this during shutdown.
790 if (!webwidget_) 798 if (!webwidget_)
791 return; 799 return;
792 800
793 if (compositor_) { 801 if (compositor_) {
794 compositor_->setViewportSize(new_size, physical_backing_size); 802 compositor_->setViewportSize(new_size, physical_backing_size);
795 } 803 }
796 804
797 physical_backing_size_ = physical_backing_size; 805 physical_backing_size_ = physical_backing_size;
798 top_controls_shrink_blink_size_ = top_controls_shrink_blink_size; 806 top_controls_shrink_blink_size_ = top_controls_shrink_blink_size;
799 top_controls_height_ = top_controls_height; 807 top_controls_height_ = top_controls_height;
800 visible_viewport_size_ = visible_viewport_size; 808 visible_viewport_size_ = visible_viewport_size;
801 resizer_rect_ = resizer_rect; 809 resizer_rect_ = resizer_rect;
802 810
803 // NOTE: We may have entered fullscreen mode without changing our size. 811 // NOTE: We may have entered fullscreen mode without changing our size.
804 bool fullscreen_change = is_fullscreen_ != is_fullscreen; 812 bool will_be_fullscreen = is_fullscreen ||
813 (display_mode == blink::WebDisplayModeFullscreen);
814 bool fullscreen_change = (will_be_fullscreen != this->is_fullscreen());
805 if (fullscreen_change) 815 if (fullscreen_change)
806 WillToggleFullscreen(); 816 WillToggleFullscreen();
807 is_fullscreen_ = is_fullscreen; 817 is_fullscreen_ = is_fullscreen;
818 display_mode_ = display_mode;
808 819
809 webwidget_->setTopControlsHeight(top_controls_height, 820 webwidget_->setTopControlsHeight(top_controls_height,
810 top_controls_shrink_blink_size_); 821 top_controls_shrink_blink_size_);
811 822
812 if (size_ != new_size) { 823 if (size_ != new_size) {
813 size_ = new_size; 824 size_ = new_size;
814 825
815 // When resizing, we want to wait to paint before ACK'ing the resize. This 826 // When resizing, we want to wait to paint before ACK'ing the resize. This
816 // ensures that we only resize as fast as we can paint. We only need to 827 // ensures that we only resize as fast as we can paint. We only need to
817 // send an ACK if we are resized to a non-empty rect. 828 // send an ACK if we are resized to a non-empty rect.
(...skipping 26 matching lines...) Expand all
844 855
845 void RenderWidget::SetWindowRectSynchronously( 856 void RenderWidget::SetWindowRectSynchronously(
846 const gfx::Rect& new_window_rect) { 857 const gfx::Rect& new_window_rect) {
847 Resize(new_window_rect.size(), 858 Resize(new_window_rect.size(),
848 new_window_rect.size(), 859 new_window_rect.size(),
849 top_controls_shrink_blink_size_, 860 top_controls_shrink_blink_size_,
850 top_controls_height_, 861 top_controls_height_,
851 new_window_rect.size(), 862 new_window_rect.size(),
852 gfx::Rect(), 863 gfx::Rect(),
853 is_fullscreen_, 864 is_fullscreen_,
865 display_mode_,
854 NO_RESIZE_ACK); 866 NO_RESIZE_ACK);
855 view_screen_rect_ = new_window_rect; 867 view_screen_rect_ = new_window_rect;
856 window_screen_rect_ = new_window_rect; 868 window_screen_rect_ = new_window_rect;
857 if (!did_show_) 869 if (!did_show_)
858 initial_rect_ = new_window_rect; 870 initial_rect_ = new_window_rect;
859 } 871 }
860 872
861 void RenderWidget::OnClose() { 873 void RenderWidget::OnClose() {
862 if (closing_) 874 if (closing_)
863 return; 875 return;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
903 915
904 screen_info_ = params.screen_info; 916 screen_info_ = params.screen_info;
905 SetDeviceScaleFactor(screen_info_.deviceScaleFactor); 917 SetDeviceScaleFactor(screen_info_.deviceScaleFactor);
906 Resize(params.new_size, 918 Resize(params.new_size,
907 params.physical_backing_size, 919 params.physical_backing_size,
908 params.top_controls_shrink_blink_size, 920 params.top_controls_shrink_blink_size,
909 params.top_controls_height, 921 params.top_controls_height,
910 params.visible_viewport_size, 922 params.visible_viewport_size,
911 params.resizer_rect, 923 params.resizer_rect,
912 params.is_fullscreen, 924 params.is_fullscreen,
925 params.display_mode,
913 SEND_RESIZE_ACK); 926 SEND_RESIZE_ACK);
914 927
915 if (orientation_changed) 928 if (orientation_changed)
916 OnOrientationChange(); 929 OnOrientationChange();
917 } 930 }
918 931
919 void RenderWidget::OnColorProfile(const std::vector<char>& color_profile) { 932 void RenderWidget::OnColorProfile(const std::vector<char>& color_profile) {
920 SetDeviceColorProfile(color_profile); 933 SetDeviceColorProfile(color_profile);
921 } 934 }
922 935
(...skipping 901 matching lines...) Expand 10 before | Expand all | Expand 10 after
1824 if (is_hidden_) 1837 if (is_hidden_)
1825 RenderThreadImpl::current()->WidgetHidden(); 1838 RenderThreadImpl::current()->WidgetHidden();
1826 else 1839 else
1827 RenderThreadImpl::current()->WidgetRestored(); 1840 RenderThreadImpl::current()->WidgetRestored();
1828 } 1841 }
1829 1842
1830 void RenderWidget::WillToggleFullscreen() { 1843 void RenderWidget::WillToggleFullscreen() {
1831 if (!webwidget_) 1844 if (!webwidget_)
1832 return; 1845 return;
1833 1846
1834 if (is_fullscreen_) { 1847 if (is_fullscreen()) {
1835 webwidget_->willExitFullScreen(); 1848 webwidget_->willExitFullScreen();
1836 } else { 1849 } else {
1837 webwidget_->willEnterFullScreen(); 1850 webwidget_->willEnterFullScreen();
1838 } 1851 }
1839 } 1852 }
1840 1853
1841 void RenderWidget::DidToggleFullscreen() { 1854 void RenderWidget::DidToggleFullscreen() {
1842 if (!webwidget_) 1855 if (!webwidget_)
1843 return; 1856 return;
1844 1857
1845 if (is_fullscreen_) { 1858 if (is_fullscreen()) {
1846 webwidget_->didEnterFullScreen(); 1859 webwidget_->didEnterFullScreen();
1847 } else { 1860 } else {
1848 webwidget_->didExitFullScreen(); 1861 webwidget_->didExitFullScreen();
1849 } 1862 }
1850 } 1863 }
1851 1864
1852 bool RenderWidget::next_paint_is_resize_ack() const { 1865 bool RenderWidget::next_paint_is_resize_ack() const {
1853 return ViewHostMsg_UpdateRect_Flags::is_resize_ack(next_paint_flags_); 1866 return ViewHostMsg_UpdateRect_Flags::is_resize_ack(next_paint_flags_);
1854 } 1867 }
1855 1868
(...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after
2417 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { 2430 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) {
2418 video_hole_frames_.AddObserver(frame); 2431 video_hole_frames_.AddObserver(frame);
2419 } 2432 }
2420 2433
2421 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { 2434 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) {
2422 video_hole_frames_.RemoveObserver(frame); 2435 video_hole_frames_.RemoveObserver(frame);
2423 } 2436 }
2424 #endif // defined(VIDEO_HOLE) 2437 #endif // defined(VIDEO_HOLE)
2425 2438
2426 } // namespace content 2439 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698