Chromium Code Reviews| 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/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 181 // The following methods alter handlers' behavior for messages related to | 181 // The following methods alter handlers' behavior for messages related to |
| 182 // widget size and position. | 182 // widget size and position. |
| 183 void OnResizeMessage(const ViewMsg_Resize_Params& params); | 183 void OnResizeMessage(const ViewMsg_Resize_Params& params); |
| 184 void OnUpdateScreenRectsMessage(const gfx::Rect& view_screen_rect, | 184 void OnUpdateScreenRectsMessage(const gfx::Rect& view_screen_rect, |
| 185 const gfx::Rect& window_screen_rect); | 185 const gfx::Rect& window_screen_rect); |
| 186 void OnShowContextMenu(ContextMenuParams* params); | 186 void OnShowContextMenu(ContextMenuParams* params); |
| 187 | 187 |
| 188 private: | 188 private: |
| 189 void Reapply(); | 189 void Reapply(); |
| 190 void Apply(float overdraw_bottom_height, | 190 void Apply(float overdraw_bottom_height, |
| 191 const gfx::Size& visible_viewport_size, | |
| 192 gfx::Rect resizer_rect, | 191 gfx::Rect resizer_rect, |
| 193 bool is_fullscreen); | 192 bool is_fullscreen); |
| 194 | 193 |
| 195 RenderWidget* widget_; | 194 RenderWidget* widget_; |
| 196 | 195 |
| 197 // Parameters as passed by RenderWidget::EnableScreenMetricsEmulation. | 196 // Parameters as passed by RenderWidget::EnableScreenMetricsEmulation. |
| 198 WebDeviceEmulationParams params_; | 197 WebDeviceEmulationParams params_; |
| 199 | 198 |
| 200 // The computed scale and offset used to fit widget into browser window. | 199 // The computed scale and offset used to fit widget into browser window. |
| 201 float scale_; | 200 float scale_; |
| 202 gfx::Point offset_; | 201 gfx::Point offset_; |
| 203 | 202 |
| 204 // Widget rect as passed to webwidget. | 203 // Widget rect as passed to webwidget. |
| 205 gfx::Rect applied_widget_rect_; | 204 gfx::Rect applied_widget_rect_; |
| 206 | 205 |
| 207 // Original values to restore back after emulation ends. | 206 // Original values to restore back after emulation ends. |
| 208 gfx::Size original_size_; | 207 gfx::Size original_size_; |
| 209 gfx::Size original_physical_backing_size_; | 208 gfx::Size original_physical_backing_size_; |
| 209 gfx::Size original_visible_viewport_size_; | |
| 210 blink::WebScreenInfo original_screen_info_; | 210 blink::WebScreenInfo original_screen_info_; |
| 211 gfx::Rect original_view_screen_rect_; | 211 gfx::Rect original_view_screen_rect_; |
| 212 gfx::Rect original_window_screen_rect_; | 212 gfx::Rect original_window_screen_rect_; |
| 213 }; | 213 }; |
| 214 | 214 |
| 215 RenderWidget::ScreenMetricsEmulator::ScreenMetricsEmulator( | 215 RenderWidget::ScreenMetricsEmulator::ScreenMetricsEmulator( |
| 216 RenderWidget* widget, | 216 RenderWidget* widget, |
| 217 const WebDeviceEmulationParams& params) | 217 const WebDeviceEmulationParams& params) |
| 218 : widget_(widget), | 218 : widget_(widget), |
| 219 params_(params), | 219 params_(params), |
| 220 scale_(1.f) { | 220 scale_(1.f) { |
| 221 original_size_ = widget_->size_; | 221 original_size_ = widget_->size_; |
| 222 original_physical_backing_size_ = widget_->physical_backing_size_; | 222 original_physical_backing_size_ = widget_->physical_backing_size_; |
| 223 original_visible_viewport_size_ = widget_->visible_viewport_size_; | |
| 223 original_screen_info_ = widget_->screen_info_; | 224 original_screen_info_ = widget_->screen_info_; |
| 224 original_view_screen_rect_ = widget_->view_screen_rect_; | 225 original_view_screen_rect_ = widget_->view_screen_rect_; |
| 225 original_window_screen_rect_ = widget_->window_screen_rect_; | 226 original_window_screen_rect_ = widget_->window_screen_rect_; |
| 226 Apply(widget_->overdraw_bottom_height_, widget_->visible_viewport_size_, | 227 Apply(widget_->overdraw_bottom_height_, widget_->resizer_rect_, |
| 227 widget_->resizer_rect_, widget_->is_fullscreen_); | 228 widget_->is_fullscreen_); |
| 228 } | 229 } |
| 229 | 230 |
| 230 RenderWidget::ScreenMetricsEmulator::~ScreenMetricsEmulator() { | 231 RenderWidget::ScreenMetricsEmulator::~ScreenMetricsEmulator() { |
| 231 widget_->screen_info_ = original_screen_info_; | 232 widget_->screen_info_ = original_screen_info_; |
| 232 | 233 |
| 233 widget_->SetDeviceScaleFactor(original_screen_info_.deviceScaleFactor); | 234 widget_->SetDeviceScaleFactor(original_screen_info_.deviceScaleFactor); |
| 234 widget_->SetScreenMetricsEmulationParameters(0.f, gfx::Point(), 1.f); | 235 widget_->SetScreenMetricsEmulationParameters(0.f, gfx::Point(), 1.f); |
| 235 widget_->view_screen_rect_ = original_view_screen_rect_; | 236 widget_->view_screen_rect_ = original_view_screen_rect_; |
| 236 widget_->window_screen_rect_ = original_window_screen_rect_; | 237 widget_->window_screen_rect_ = original_window_screen_rect_; |
| 237 widget_->Resize(original_size_, original_physical_backing_size_, | 238 widget_->Resize(original_size_, original_physical_backing_size_, |
| 238 widget_->overdraw_bottom_height_, widget_->visible_viewport_size_, | 239 widget_->overdraw_bottom_height_, original_visible_viewport_size_, |
| 239 widget_->resizer_rect_, widget_->is_fullscreen_, NO_RESIZE_ACK); | 240 widget_->resizer_rect_, widget_->is_fullscreen_, NO_RESIZE_ACK); |
| 240 } | 241 } |
| 241 | 242 |
| 242 void RenderWidget::ScreenMetricsEmulator::ChangeEmulationParams( | 243 void RenderWidget::ScreenMetricsEmulator::ChangeEmulationParams( |
| 243 const WebDeviceEmulationParams& params) { | 244 const WebDeviceEmulationParams& params) { |
| 244 params_ = params; | 245 params_ = params; |
| 245 Reapply(); | 246 Reapply(); |
| 246 } | 247 } |
| 247 | 248 |
| 248 void RenderWidget::ScreenMetricsEmulator::Reapply() { | 249 void RenderWidget::ScreenMetricsEmulator::Reapply() { |
| 249 Apply(widget_->overdraw_bottom_height_, widget_->visible_viewport_size_, | 250 Apply(widget_->overdraw_bottom_height_, widget_->resizer_rect_, |
| 250 widget_->resizer_rect_, widget_->is_fullscreen_); | 251 widget_->is_fullscreen_); |
| 251 } | 252 } |
| 252 | 253 |
| 253 void RenderWidget::ScreenMetricsEmulator::Apply( | 254 void RenderWidget::ScreenMetricsEmulator::Apply( |
| 254 float overdraw_bottom_height, | 255 float overdraw_bottom_height, |
| 255 const gfx::Size& visible_viewport_size, | |
| 256 gfx::Rect resizer_rect, | 256 gfx::Rect resizer_rect, |
| 257 bool is_fullscreen) { | 257 bool is_fullscreen) { |
| 258 applied_widget_rect_.set_size(gfx::Size(params_.viewSize)); | 258 applied_widget_rect_.set_size(gfx::Size(params_.viewSize)); |
| 259 if (!applied_widget_rect_.width()) | 259 if (!applied_widget_rect_.width()) |
| 260 applied_widget_rect_.set_width(original_size_.width()); | 260 applied_widget_rect_.set_width(original_size_.width()); |
| 261 if (!applied_widget_rect_.height()) | 261 if (!applied_widget_rect_.height()) |
| 262 applied_widget_rect_.set_height(original_size_.height()); | 262 applied_widget_rect_.set_height(original_size_.height()); |
| 263 | 263 |
| 264 if (params_.fitToView && !original_size_.IsEmpty()) { | 264 if (params_.fitToView && !original_size_.IsEmpty()) { |
| 265 int width_with_gutter = | 265 int width_with_gutter = |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 306 // root layer. | 306 // root layer. |
| 307 widget_->SetScreenMetricsEmulationParameters( | 307 widget_->SetScreenMetricsEmulationParameters( |
| 308 original_screen_info_.deviceScaleFactor, offset_, scale_); | 308 original_screen_info_.deviceScaleFactor, offset_, scale_); |
| 309 | 309 |
| 310 widget_->SetDeviceScaleFactor(applied_device_scale_factor); | 310 widget_->SetDeviceScaleFactor(applied_device_scale_factor); |
| 311 widget_->view_screen_rect_ = applied_widget_rect_; | 311 widget_->view_screen_rect_ = applied_widget_rect_; |
| 312 | 312 |
| 313 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize( | 313 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize( |
| 314 original_size_, original_screen_info_.deviceScaleFactor)); | 314 original_size_, original_screen_info_.deviceScaleFactor)); |
| 315 widget_->Resize(applied_widget_rect_.size(), physical_backing_size, | 315 widget_->Resize(applied_widget_rect_.size(), physical_backing_size, |
| 316 overdraw_bottom_height, visible_viewport_size, resizer_rect, | 316 overdraw_bottom_height, applied_widget_rect_.size(), resizer_rect, |
| 317 is_fullscreen, NO_RESIZE_ACK); | 317 is_fullscreen, NO_RESIZE_ACK); |
| 318 } | 318 } |
| 319 | 319 |
| 320 void RenderWidget::ScreenMetricsEmulator::OnResizeMessage( | 320 void RenderWidget::ScreenMetricsEmulator::OnResizeMessage( |
| 321 const ViewMsg_Resize_Params& params) { | 321 const ViewMsg_Resize_Params& params) { |
| 322 bool need_ack = params.new_size != original_size_ && | 322 bool need_ack = params.new_size != original_size_ && |
| 323 !params.new_size.IsEmpty() && !params.physical_backing_size.IsEmpty(); | 323 !params.new_size.IsEmpty() && !params.physical_backing_size.IsEmpty(); |
| 324 original_size_ = params.new_size; | 324 original_size_ = params.new_size; |
| 325 original_physical_backing_size_ = params.physical_backing_size; | 325 original_physical_backing_size_ = params.physical_backing_size; |
| 326 original_screen_info_ = params.screen_info; | 326 original_screen_info_ = params.screen_info; |
| 327 Apply(params.overdraw_bottom_height, params.visible_viewport_size, | 327 Apply(params.overdraw_bottom_height, params.resizer_rect, |
|
dgozman
2014/05/30 19:17:52
You should update |original_visible_viewport_size_
bokan
2014/05/30 19:43:46
Good catch, thanks.
| |
| 328 params.resizer_rect, params.is_fullscreen); | 328 params.is_fullscreen); |
| 329 | 329 |
| 330 if (need_ack) { | 330 if (need_ack) { |
| 331 widget_->set_next_paint_is_resize_ack(); | 331 widget_->set_next_paint_is_resize_ack(); |
| 332 if (widget_->compositor_) | 332 if (widget_->compositor_) |
| 333 widget_->compositor_->SetNeedsRedrawRect(gfx::Rect(widget_->size_)); | 333 widget_->compositor_->SetNeedsRedrawRect(gfx::Rect(widget_->size_)); |
| 334 } | 334 } |
| 335 } | 335 } |
| 336 | 336 |
| 337 void RenderWidget::ScreenMetricsEmulator::OnUpdateScreenRectsMessage( | 337 void RenderWidget::ScreenMetricsEmulator::OnUpdateScreenRectsMessage( |
| 338 const gfx::Rect& view_screen_rect, | 338 const gfx::Rect& view_screen_rect, |
| (...skipping 1792 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2131 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { | 2131 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { |
| 2132 video_hole_frames_.AddObserver(frame); | 2132 video_hole_frames_.AddObserver(frame); |
| 2133 } | 2133 } |
| 2134 | 2134 |
| 2135 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { | 2135 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { |
| 2136 video_hole_frames_.RemoveObserver(frame); | 2136 video_hole_frames_.RemoveObserver(frame); |
| 2137 } | 2137 } |
| 2138 #endif // defined(VIDEO_HOLE) | 2138 #endif // defined(VIDEO_HOLE) |
| 2139 | 2139 |
| 2140 } // namespace content | 2140 } // namespace content |
| OLD | NEW |