| 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 <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 blink::WebPopupType popup_type, | 238 blink::WebPopupType popup_type, |
| 239 const blink::WebScreenInfo& screen_info, | 239 const blink::WebScreenInfo& screen_info, |
| 240 bool swapped_out, | 240 bool swapped_out, |
| 241 bool hidden, | 241 bool hidden, |
| 242 bool never_visible) | 242 bool never_visible) |
| 243 : routing_id_(MSG_ROUTING_NONE), | 243 : routing_id_(MSG_ROUTING_NONE), |
| 244 compositor_deps_(compositor_deps), | 244 compositor_deps_(compositor_deps), |
| 245 webwidget_(nullptr), | 245 webwidget_(nullptr), |
| 246 owner_delegate_(nullptr), | 246 owner_delegate_(nullptr), |
| 247 opener_id_(MSG_ROUTING_NONE), | 247 opener_id_(MSG_ROUTING_NONE), |
| 248 top_controls_shrink_blink_size_(false), | |
| 249 top_controls_height_(0.f), | |
| 250 next_paint_flags_(0), | 248 next_paint_flags_(0), |
| 251 auto_resize_mode_(false), | 249 auto_resize_mode_(false), |
| 252 need_update_rect_for_auto_resize_(false), | 250 need_update_rect_for_auto_resize_(false), |
| 253 did_show_(false), | 251 did_show_(false), |
| 254 is_hidden_(hidden), | 252 is_hidden_(hidden), |
| 255 compositor_never_visible_(never_visible), | 253 compositor_never_visible_(never_visible), |
| 256 is_fullscreen_granted_(false), | 254 is_fullscreen_granted_(false), |
| 257 display_mode_(blink::WebDisplayModeUndefined), | 255 display_mode_(blink::WebDisplayModeUndefined), |
| 258 ime_event_guard_(nullptr), | 256 ime_event_guard_(nullptr), |
| 259 closing_(false), | 257 closing_(false), |
| (...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 return RenderThread::Get()->Send(message); | 533 return RenderThread::Get()->Send(message); |
| 536 } | 534 } |
| 537 | 535 |
| 538 void RenderWidget::SetWindowRectSynchronously( | 536 void RenderWidget::SetWindowRectSynchronously( |
| 539 const gfx::Rect& new_window_rect) { | 537 const gfx::Rect& new_window_rect) { |
| 540 ResizeParams params; | 538 ResizeParams params; |
| 541 params.screen_info = screen_info_; | 539 params.screen_info = screen_info_; |
| 542 params.new_size = new_window_rect.size(); | 540 params.new_size = new_window_rect.size(); |
| 543 params.physical_backing_size = | 541 params.physical_backing_size = |
| 544 gfx::ScaleToCeiledSize(new_window_rect.size(), device_scale_factor_); | 542 gfx::ScaleToCeiledSize(new_window_rect.size(), device_scale_factor_); |
| 545 params.top_controls_shrink_blink_size = top_controls_shrink_blink_size_; | |
| 546 params.top_controls_height = top_controls_height_; | |
| 547 params.visible_viewport_size = new_window_rect.size(); | 543 params.visible_viewport_size = new_window_rect.size(); |
| 548 params.resizer_rect = gfx::Rect(); | 544 params.resizer_rect = gfx::Rect(); |
| 549 params.is_fullscreen_granted = is_fullscreen_granted_; | 545 params.is_fullscreen_granted = is_fullscreen_granted_; |
| 550 params.display_mode = display_mode_; | 546 params.display_mode = display_mode_; |
| 551 params.needs_resize_ack = false; | 547 params.needs_resize_ack = false; |
| 552 Resize(params); | 548 Resize(params); |
| 553 | 549 |
| 554 view_screen_rect_ = new_window_rect; | 550 view_screen_rect_ = new_window_rect; |
| 555 window_screen_rect_ = new_window_rect; | 551 window_screen_rect_ = new_window_rect; |
| 556 if (!did_show_) | 552 if (!did_show_) |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 604 } | 600 } |
| 605 | 601 |
| 606 void RenderWidget::OnEnableDeviceEmulation( | 602 void RenderWidget::OnEnableDeviceEmulation( |
| 607 const blink::WebDeviceEmulationParams& params) { | 603 const blink::WebDeviceEmulationParams& params) { |
| 608 if (!screen_metrics_emulator_) { | 604 if (!screen_metrics_emulator_) { |
| 609 ResizeParams resize_params; | 605 ResizeParams resize_params; |
| 610 resize_params.screen_info = screen_info_; | 606 resize_params.screen_info = screen_info_; |
| 611 resize_params.new_size = size_; | 607 resize_params.new_size = size_; |
| 612 resize_params.physical_backing_size = physical_backing_size_; | 608 resize_params.physical_backing_size = physical_backing_size_; |
| 613 resize_params.visible_viewport_size = visible_viewport_size_; | 609 resize_params.visible_viewport_size = visible_viewport_size_; |
| 614 resize_params.top_controls_shrink_blink_size = | |
| 615 top_controls_shrink_blink_size_; | |
| 616 resize_params.top_controls_height = top_controls_height_; | |
| 617 resize_params.resizer_rect = resizer_rect_; | 610 resize_params.resizer_rect = resizer_rect_; |
| 618 resize_params.is_fullscreen_granted = is_fullscreen_granted_; | 611 resize_params.is_fullscreen_granted = is_fullscreen_granted_; |
| 619 resize_params.display_mode = display_mode_; | 612 resize_params.display_mode = display_mode_; |
| 620 screen_metrics_emulator_.reset(new RenderWidgetScreenMetricsEmulator( | 613 screen_metrics_emulator_.reset(new RenderWidgetScreenMetricsEmulator( |
| 621 this, params, resize_params, view_screen_rect_, window_screen_rect_)); | 614 this, params, resize_params, view_screen_rect_, window_screen_rect_)); |
| 622 screen_metrics_emulator_->Apply(); | 615 screen_metrics_emulator_->Apply(); |
| 623 } else { | 616 } else { |
| 624 screen_metrics_emulator_->ChangeEmulationParams(params); | 617 screen_metrics_emulator_->ChangeEmulationParams(params); |
| 625 } | 618 } |
| 626 } | 619 } |
| (...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1108 | 1101 |
| 1109 /////////////////////////////////////////////////////////////////////////////// | 1102 /////////////////////////////////////////////////////////////////////////////// |
| 1110 // RenderWidgetScreenMetricsDelegate | 1103 // RenderWidgetScreenMetricsDelegate |
| 1111 | 1104 |
| 1112 void RenderWidget::Redraw() { | 1105 void RenderWidget::Redraw() { |
| 1113 set_next_paint_is_resize_ack(); | 1106 set_next_paint_is_resize_ack(); |
| 1114 if (compositor_) | 1107 if (compositor_) |
| 1115 compositor_->SetNeedsRedrawRect(gfx::Rect(size_)); | 1108 compositor_->SetNeedsRedrawRect(gfx::Rect(size_)); |
| 1116 } | 1109 } |
| 1117 | 1110 |
| 1111 void RenderWidget::ResizeWebWidget() { |
| 1112 webwidget_->resize(GetSizeForWebWidget()); |
| 1113 } |
| 1114 |
| 1115 gfx::Size RenderWidget::GetSizeForWebWidget() const { |
| 1116 if (IsUseZoomForDSFEnabled()) |
| 1117 return gfx::ScaleToCeiledSize(size_, GetOriginalDeviceScaleFactor()); |
| 1118 |
| 1119 return size_; |
| 1120 } |
| 1121 |
| 1118 void RenderWidget::Resize(const ResizeParams& params) { | 1122 void RenderWidget::Resize(const ResizeParams& params) { |
| 1119 bool orientation_changed = | 1123 bool orientation_changed = |
| 1120 screen_info_.orientationAngle != params.screen_info.orientationAngle || | 1124 screen_info_.orientationAngle != params.screen_info.orientationAngle || |
| 1121 screen_info_.orientationType != params.screen_info.orientationType; | 1125 screen_info_.orientationType != params.screen_info.orientationType; |
| 1122 | 1126 |
| 1123 screen_info_ = params.screen_info; | 1127 screen_info_ = params.screen_info; |
| 1124 SetDeviceScaleFactor(screen_info_.deviceScaleFactor); | 1128 SetDeviceScaleFactor(screen_info_.deviceScaleFactor); |
| 1125 | 1129 |
| 1126 if (resizing_mode_selector_->NeverUsesSynchronousResize()) { | 1130 if (resizing_mode_selector_->NeverUsesSynchronousResize()) { |
| 1127 // A resize ack shouldn't be requested if we have not ACK'd the previous | 1131 // A resize ack shouldn't be requested if we have not ACK'd the previous |
| 1128 // one. | 1132 // one. |
| 1129 DCHECK(!params.needs_resize_ack || !next_paint_is_resize_ack()); | 1133 DCHECK(!params.needs_resize_ack || !next_paint_is_resize_ack()); |
| 1130 } | 1134 } |
| 1131 | 1135 |
| 1132 // Ignore this during shutdown. | 1136 // Ignore this during shutdown. |
| 1133 if (!webwidget_) | 1137 if (!webwidget_) |
| 1134 return; | 1138 return; |
| 1135 | 1139 |
| 1136 if (compositor_) | 1140 if (compositor_) |
| 1137 compositor_->setViewportSize(params.physical_backing_size); | 1141 compositor_->setViewportSize(params.physical_backing_size); |
| 1138 | 1142 |
| 1139 size_ = params.new_size; | |
| 1140 physical_backing_size_ = params.physical_backing_size; | |
| 1141 | |
| 1142 top_controls_shrink_blink_size_ = params.top_controls_shrink_blink_size; | |
| 1143 top_controls_height_ = params.top_controls_height; | |
| 1144 visible_viewport_size_ = params.visible_viewport_size; | 1143 visible_viewport_size_ = params.visible_viewport_size; |
| 1145 resizer_rect_ = params.resizer_rect; | 1144 resizer_rect_ = params.resizer_rect; |
| 1146 | 1145 |
| 1147 // NOTE: We may have entered fullscreen mode without changing our size. | 1146 // NOTE: We may have entered fullscreen mode without changing our size. |
| 1148 bool fullscreen_change = | 1147 bool fullscreen_change = |
| 1149 is_fullscreen_granted_ != params.is_fullscreen_granted; | 1148 is_fullscreen_granted_ != params.is_fullscreen_granted; |
| 1150 is_fullscreen_granted_ = params.is_fullscreen_granted; | 1149 is_fullscreen_granted_ = params.is_fullscreen_granted; |
| 1151 display_mode_ = params.display_mode; | 1150 display_mode_ = params.display_mode; |
| 1152 | 1151 |
| 1153 webwidget_->setTopControlsHeight(params.top_controls_height, | 1152 size_ = params.new_size; |
| 1154 top_controls_shrink_blink_size_); | 1153 physical_backing_size_ = params.physical_backing_size; |
| 1155 | 1154 |
| 1156 gfx::Size new_widget_size = size_; | 1155 ResizeWebWidget(); |
| 1157 if (IsUseZoomForDSFEnabled()) { | |
| 1158 new_widget_size = gfx::ScaleToCeiledSize(new_widget_size, | |
| 1159 GetOriginalDeviceScaleFactor()); | |
| 1160 } | |
| 1161 // When resizing, we want to wait to paint before ACK'ing the resize. This | |
| 1162 // ensures that we only resize as fast as we can paint. We only need to | |
| 1163 // send an ACK if we are resized to a non-empty rect. | |
| 1164 webwidget_->resize(new_widget_size); | |
| 1165 | 1156 |
| 1166 WebSize visual_viewport_size; | 1157 WebSize visual_viewport_size; |
| 1167 | 1158 |
| 1168 if (IsUseZoomForDSFEnabled()) { | 1159 if (IsUseZoomForDSFEnabled()) { |
| 1169 visual_viewport_size = gfx::ScaleToCeiledSize( | 1160 visual_viewport_size = gfx::ScaleToCeiledSize( |
| 1170 params.visible_viewport_size, | 1161 params.visible_viewport_size, |
| 1171 GetOriginalDeviceScaleFactor()); | 1162 GetOriginalDeviceScaleFactor()); |
| 1172 } else { | 1163 } else { |
| 1173 visual_viewport_size = visible_viewport_size_; | 1164 visual_viewport_size = visible_viewport_size_; |
| 1174 } | 1165 } |
| 1175 | 1166 |
| 1176 webwidget()->resizeVisualViewport(visual_viewport_size); | 1167 webwidget()->resizeVisualViewport(visual_viewport_size); |
| 1177 | 1168 |
| 1169 // When resizing, we want to wait to paint before ACK'ing the resize. This |
| 1170 // ensures that we only resize as fast as we can paint. We only need to |
| 1171 // send an ACK if we are resized to a non-empty rect. |
| 1178 if (params.new_size.IsEmpty() || params.physical_backing_size.IsEmpty()) { | 1172 if (params.new_size.IsEmpty() || params.physical_backing_size.IsEmpty()) { |
| 1179 // In this case there is no paint/composite and therefore no | 1173 // In this case there is no paint/composite and therefore no |
| 1180 // ViewHostMsg_UpdateRect to send the resize ack with. We'd need to send the | 1174 // ViewHostMsg_UpdateRect to send the resize ack with. We'd need to send the |
| 1181 // ack through a fake ViewHostMsg_UpdateRect or a different message. | 1175 // ack through a fake ViewHostMsg_UpdateRect or a different message. |
| 1182 DCHECK(!params.needs_resize_ack); | 1176 DCHECK(!params.needs_resize_ack); |
| 1183 } | 1177 } |
| 1184 | 1178 |
| 1185 // Send the Resize_ACK flag once we paint again if requested. | 1179 // Send the Resize_ACK flag once we paint again if requested. |
| 1186 if (params.needs_resize_ack) | 1180 if (params.needs_resize_ack) |
| 1187 set_next_paint_is_resize_ack(); | 1181 set_next_paint_is_resize_ack(); |
| (...skipping 921 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2109 } | 2103 } |
| 2110 | 2104 |
| 2111 float RenderWidget::GetOriginalDeviceScaleFactor() const { | 2105 float RenderWidget::GetOriginalDeviceScaleFactor() const { |
| 2112 return | 2106 return |
| 2113 screen_metrics_emulator_ ? | 2107 screen_metrics_emulator_ ? |
| 2114 screen_metrics_emulator_->original_screen_info().deviceScaleFactor : | 2108 screen_metrics_emulator_->original_screen_info().deviceScaleFactor : |
| 2115 device_scale_factor_; | 2109 device_scale_factor_; |
| 2116 } | 2110 } |
| 2117 | 2111 |
| 2118 } // namespace content | 2112 } // namespace content |
| OLD | NEW |