| 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 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 // The following methods alter handlers' behavior for messages related to | 189 // The following methods alter handlers' behavior for messages related to |
| 190 // widget size and position. | 190 // widget size and position. |
| 191 void OnResizeMessage(const ViewMsg_Resize_Params& params); | 191 void OnResizeMessage(const ViewMsg_Resize_Params& params); |
| 192 void OnUpdateScreenRectsMessage(const gfx::Rect& view_screen_rect, | 192 void OnUpdateScreenRectsMessage(const gfx::Rect& view_screen_rect, |
| 193 const gfx::Rect& window_screen_rect); | 193 const gfx::Rect& window_screen_rect); |
| 194 void OnShowContextMenu(ContextMenuParams* params); | 194 void OnShowContextMenu(ContextMenuParams* params); |
| 195 gfx::Rect AdjustValidationMessageAnchor(const gfx::Rect& anchor); | 195 gfx::Rect AdjustValidationMessageAnchor(const gfx::Rect& anchor); |
| 196 | 196 |
| 197 private: | 197 private: |
| 198 void Reapply(); | 198 void Reapply(); |
| 199 void Apply(float overdraw_bottom_height, | 199 void Apply(float top_controls_layout_height, |
| 200 gfx::Rect resizer_rect, | 200 gfx::Rect resizer_rect, |
| 201 bool is_fullscreen); | 201 bool is_fullscreen); |
| 202 | 202 |
| 203 RenderWidget* widget_; | 203 RenderWidget* widget_; |
| 204 | 204 |
| 205 // Parameters as passed by RenderWidget::EnableScreenMetricsEmulation. | 205 // Parameters as passed by RenderWidget::EnableScreenMetricsEmulation. |
| 206 WebDeviceEmulationParams params_; | 206 WebDeviceEmulationParams params_; |
| 207 | 207 |
| 208 // The computed scale and offset used to fit widget into browser window. | 208 // The computed scale and offset used to fit widget into browser window. |
| 209 float scale_; | 209 float scale_; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 226 const WebDeviceEmulationParams& params) | 226 const WebDeviceEmulationParams& params) |
| 227 : widget_(widget), | 227 : widget_(widget), |
| 228 params_(params), | 228 params_(params), |
| 229 scale_(1.f) { | 229 scale_(1.f) { |
| 230 original_size_ = widget_->size_; | 230 original_size_ = widget_->size_; |
| 231 original_physical_backing_size_ = widget_->physical_backing_size_; | 231 original_physical_backing_size_ = widget_->physical_backing_size_; |
| 232 original_visible_viewport_size_ = widget_->visible_viewport_size_; | 232 original_visible_viewport_size_ = widget_->visible_viewport_size_; |
| 233 original_screen_info_ = widget_->screen_info_; | 233 original_screen_info_ = widget_->screen_info_; |
| 234 original_view_screen_rect_ = widget_->view_screen_rect_; | 234 original_view_screen_rect_ = widget_->view_screen_rect_; |
| 235 original_window_screen_rect_ = widget_->window_screen_rect_; | 235 original_window_screen_rect_ = widget_->window_screen_rect_; |
| 236 Apply(widget_->overdraw_bottom_height_, widget_->resizer_rect_, | 236 Apply(widget_->top_controls_layout_height_, widget_->resizer_rect_, |
| 237 widget_->is_fullscreen_); | 237 widget_->is_fullscreen_); |
| 238 } | 238 } |
| 239 | 239 |
| 240 RenderWidget::ScreenMetricsEmulator::~ScreenMetricsEmulator() { | 240 RenderWidget::ScreenMetricsEmulator::~ScreenMetricsEmulator() { |
| 241 widget_->screen_info_ = original_screen_info_; | 241 widget_->screen_info_ = original_screen_info_; |
| 242 | 242 |
| 243 widget_->SetDeviceScaleFactor(original_screen_info_.deviceScaleFactor); | 243 widget_->SetDeviceScaleFactor(original_screen_info_.deviceScaleFactor); |
| 244 widget_->SetScreenMetricsEmulationParameters(0.f, gfx::Point(), 1.f); | 244 widget_->SetScreenMetricsEmulationParameters(0.f, gfx::Point(), 1.f); |
| 245 widget_->view_screen_rect_ = original_view_screen_rect_; | 245 widget_->view_screen_rect_ = original_view_screen_rect_; |
| 246 widget_->window_screen_rect_ = original_window_screen_rect_; | 246 widget_->window_screen_rect_ = original_window_screen_rect_; |
| 247 widget_->Resize(original_size_, original_physical_backing_size_, | 247 widget_->Resize(original_size_, |
| 248 widget_->overdraw_bottom_height_, original_visible_viewport_size_, | 248 original_physical_backing_size_, |
| 249 widget_->resizer_rect_, widget_->is_fullscreen_, NO_RESIZE_ACK); | 249 widget_->top_controls_layout_height_, |
| 250 original_visible_viewport_size_, |
| 251 widget_->resizer_rect_, |
| 252 widget_->is_fullscreen_, |
| 253 NO_RESIZE_ACK); |
| 250 } | 254 } |
| 251 | 255 |
| 252 void RenderWidget::ScreenMetricsEmulator::ChangeEmulationParams( | 256 void RenderWidget::ScreenMetricsEmulator::ChangeEmulationParams( |
| 253 const WebDeviceEmulationParams& params) { | 257 const WebDeviceEmulationParams& params) { |
| 254 params_ = params; | 258 params_ = params; |
| 255 Reapply(); | 259 Reapply(); |
| 256 } | 260 } |
| 257 | 261 |
| 258 void RenderWidget::ScreenMetricsEmulator::Reapply() { | 262 void RenderWidget::ScreenMetricsEmulator::Reapply() { |
| 259 Apply(widget_->overdraw_bottom_height_, widget_->resizer_rect_, | 263 Apply(widget_->top_controls_layout_height_, widget_->resizer_rect_, |
| 260 widget_->is_fullscreen_); | 264 widget_->is_fullscreen_); |
| 261 } | 265 } |
| 262 | 266 |
| 263 void RenderWidget::ScreenMetricsEmulator::Apply( | 267 void RenderWidget::ScreenMetricsEmulator::Apply( |
| 264 float overdraw_bottom_height, | 268 float top_controls_layout_height, |
| 265 gfx::Rect resizer_rect, | 269 gfx::Rect resizer_rect, |
| 266 bool is_fullscreen) { | 270 bool is_fullscreen) { |
| 267 applied_widget_rect_.set_size(gfx::Size(params_.viewSize)); | 271 applied_widget_rect_.set_size(gfx::Size(params_.viewSize)); |
| 268 if (!applied_widget_rect_.width()) | 272 if (!applied_widget_rect_.width()) |
| 269 applied_widget_rect_.set_width(original_size_.width()); | 273 applied_widget_rect_.set_width(original_size_.width()); |
| 270 if (!applied_widget_rect_.height()) | 274 if (!applied_widget_rect_.height()) |
| 271 applied_widget_rect_.set_height(original_size_.height()); | 275 applied_widget_rect_.set_height(original_size_.height()); |
| 272 | 276 |
| 273 if (params_.fitToView && !original_size_.IsEmpty()) { | 277 if (params_.fitToView && !original_size_.IsEmpty()) { |
| 274 int original_width = std::max(original_size_.width(), 1); | 278 int original_width = std::max(original_size_.width(), 1); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 // root layer. | 317 // root layer. |
| 314 widget_->SetScreenMetricsEmulationParameters( | 318 widget_->SetScreenMetricsEmulationParameters( |
| 315 original_screen_info_.deviceScaleFactor, offset_, scale_); | 319 original_screen_info_.deviceScaleFactor, offset_, scale_); |
| 316 | 320 |
| 317 widget_->SetDeviceScaleFactor(applied_device_scale_factor); | 321 widget_->SetDeviceScaleFactor(applied_device_scale_factor); |
| 318 widget_->view_screen_rect_ = applied_widget_rect_; | 322 widget_->view_screen_rect_ = applied_widget_rect_; |
| 319 | 323 |
| 320 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize( | 324 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize( |
| 321 original_size_, original_screen_info_.deviceScaleFactor)); | 325 original_size_, original_screen_info_.deviceScaleFactor)); |
| 322 widget_->Resize(applied_widget_rect_.size(), physical_backing_size, | 326 widget_->Resize(applied_widget_rect_.size(), physical_backing_size, |
| 323 overdraw_bottom_height, applied_widget_rect_.size(), resizer_rect, | 327 top_controls_layout_height, applied_widget_rect_.size(), resizer_rect, |
| 324 is_fullscreen, NO_RESIZE_ACK); | 328 is_fullscreen, NO_RESIZE_ACK); |
| 325 } | 329 } |
| 326 | 330 |
| 327 void RenderWidget::ScreenMetricsEmulator::OnResizeMessage( | 331 void RenderWidget::ScreenMetricsEmulator::OnResizeMessage( |
| 328 const ViewMsg_Resize_Params& params) { | 332 const ViewMsg_Resize_Params& params) { |
| 329 bool need_ack = params.new_size != original_size_ && | 333 bool need_ack = params.new_size != original_size_ && |
| 330 !params.new_size.IsEmpty() && !params.physical_backing_size.IsEmpty(); | 334 !params.new_size.IsEmpty() && !params.physical_backing_size.IsEmpty(); |
| 331 original_size_ = params.new_size; | 335 original_size_ = params.new_size; |
| 332 original_physical_backing_size_ = params.physical_backing_size; | 336 original_physical_backing_size_ = params.physical_backing_size; |
| 333 original_screen_info_ = params.screen_info; | 337 original_screen_info_ = params.screen_info; |
| 334 original_visible_viewport_size_ = params.visible_viewport_size; | 338 original_visible_viewport_size_ = params.visible_viewport_size; |
| 335 Apply(params.overdraw_bottom_height, params.resizer_rect, | 339 Apply(params.top_controls_layout_height, params.resizer_rect, |
| 336 params.is_fullscreen); | 340 params.is_fullscreen); |
| 337 | 341 |
| 338 if (need_ack) { | 342 if (need_ack) { |
| 339 widget_->set_next_paint_is_resize_ack(); | 343 widget_->set_next_paint_is_resize_ack(); |
| 340 if (widget_->compositor_) | 344 if (widget_->compositor_) |
| 341 widget_->compositor_->SetNeedsRedrawRect(gfx::Rect(widget_->size_)); | 345 widget_->compositor_->SetNeedsRedrawRect(gfx::Rect(widget_->size_)); |
| 342 } | 346 } |
| 343 } | 347 } |
| 344 | 348 |
| 345 void RenderWidget::ScreenMetricsEmulator::OnUpdateScreenRectsMessage( | 349 void RenderWidget::ScreenMetricsEmulator::OnUpdateScreenRectsMessage( |
| (...skipping 26 matching lines...) Expand all Loading... |
| 372 RenderWidget::RenderWidget(blink::WebPopupType popup_type, | 376 RenderWidget::RenderWidget(blink::WebPopupType popup_type, |
| 373 const blink::WebScreenInfo& screen_info, | 377 const blink::WebScreenInfo& screen_info, |
| 374 bool swapped_out, | 378 bool swapped_out, |
| 375 bool hidden, | 379 bool hidden, |
| 376 bool never_visible) | 380 bool never_visible) |
| 377 : routing_id_(MSG_ROUTING_NONE), | 381 : routing_id_(MSG_ROUTING_NONE), |
| 378 surface_id_(0), | 382 surface_id_(0), |
| 379 webwidget_(NULL), | 383 webwidget_(NULL), |
| 380 opener_id_(MSG_ROUTING_NONE), | 384 opener_id_(MSG_ROUTING_NONE), |
| 381 init_complete_(false), | 385 init_complete_(false), |
| 382 overdraw_bottom_height_(0.f), | 386 top_controls_layout_height_(0.f), |
| 383 next_paint_flags_(0), | 387 next_paint_flags_(0), |
| 384 auto_resize_mode_(false), | 388 auto_resize_mode_(false), |
| 385 need_update_rect_for_auto_resize_(false), | 389 need_update_rect_for_auto_resize_(false), |
| 386 did_show_(false), | 390 did_show_(false), |
| 387 is_hidden_(hidden), | 391 is_hidden_(hidden), |
| 388 never_visible_(never_visible), | 392 never_visible_(never_visible), |
| 389 is_fullscreen_(false), | 393 is_fullscreen_(false), |
| 390 has_focus_(false), | 394 has_focus_(false), |
| 391 handling_input_event_(false), | 395 handling_input_event_(false), |
| 392 handling_ime_event_(false), | 396 handling_ime_event_(false), |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 635 | 639 |
| 636 // If given a messsage without a routing ID, then assign our routing ID. | 640 // If given a messsage without a routing ID, then assign our routing ID. |
| 637 if (message->routing_id() == MSG_ROUTING_NONE) | 641 if (message->routing_id() == MSG_ROUTING_NONE) |
| 638 message->set_routing_id(routing_id_); | 642 message->set_routing_id(routing_id_); |
| 639 | 643 |
| 640 return RenderThread::Get()->Send(message); | 644 return RenderThread::Get()->Send(message); |
| 641 } | 645 } |
| 642 | 646 |
| 643 void RenderWidget::Resize(const gfx::Size& new_size, | 647 void RenderWidget::Resize(const gfx::Size& new_size, |
| 644 const gfx::Size& physical_backing_size, | 648 const gfx::Size& physical_backing_size, |
| 645 float overdraw_bottom_height, | 649 float top_controls_layout_height, |
| 646 const gfx::Size& visible_viewport_size, | 650 const gfx::Size& visible_viewport_size, |
| 647 const gfx::Rect& resizer_rect, | 651 const gfx::Rect& resizer_rect, |
| 648 bool is_fullscreen, | 652 bool is_fullscreen, |
| 649 ResizeAck resize_ack) { | 653 ResizeAck resize_ack) { |
| 650 if (resizing_mode_selector_->NeverUsesSynchronousResize()) { | 654 if (resizing_mode_selector_->NeverUsesSynchronousResize()) { |
| 651 // A resize ack shouldn't be requested if we have not ACK'd the previous | 655 // A resize ack shouldn't be requested if we have not ACK'd the previous |
| 652 // one. | 656 // one. |
| 653 DCHECK(resize_ack != SEND_RESIZE_ACK || !next_paint_is_resize_ack()); | 657 DCHECK(resize_ack != SEND_RESIZE_ACK || !next_paint_is_resize_ack()); |
| 654 DCHECK(resize_ack == SEND_RESIZE_ACK || resize_ack == NO_RESIZE_ACK); | 658 DCHECK(resize_ack == SEND_RESIZE_ACK || resize_ack == NO_RESIZE_ACK); |
| 655 } | 659 } |
| 656 | 660 |
| 657 // Ignore this during shutdown. | 661 // Ignore this during shutdown. |
| 658 if (!webwidget_) | 662 if (!webwidget_) |
| 659 return; | 663 return; |
| 660 | 664 |
| 661 if (compositor_) { | 665 if (compositor_) { |
| 662 compositor_->setViewportSize(new_size, physical_backing_size); | 666 compositor_->setViewportSize(new_size, physical_backing_size); |
| 663 compositor_->SetOverdrawBottomHeight(overdraw_bottom_height); | 667 compositor_->SetTopControlsLayoutHeight(top_controls_layout_height); |
| 664 } | 668 } |
| 665 | 669 |
| 666 physical_backing_size_ = physical_backing_size; | 670 physical_backing_size_ = physical_backing_size; |
| 667 overdraw_bottom_height_ = overdraw_bottom_height; | 671 top_controls_layout_height_ = top_controls_layout_height; |
| 668 visible_viewport_size_ = visible_viewport_size; | 672 visible_viewport_size_ = visible_viewport_size; |
| 669 resizer_rect_ = resizer_rect; | 673 resizer_rect_ = resizer_rect; |
| 670 | 674 |
| 671 // NOTE: We may have entered fullscreen mode without changing our size. | 675 // NOTE: We may have entered fullscreen mode without changing our size. |
| 672 bool fullscreen_change = is_fullscreen_ != is_fullscreen; | 676 bool fullscreen_change = is_fullscreen_ != is_fullscreen; |
| 673 if (fullscreen_change) | 677 if (fullscreen_change) |
| 674 WillToggleFullscreen(); | 678 WillToggleFullscreen(); |
| 675 is_fullscreen_ = is_fullscreen; | 679 is_fullscreen_ = is_fullscreen; |
| 676 | 680 |
| 677 if (size_ != new_size) { | 681 if (size_ != new_size) { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 701 | 705 |
| 702 if (fullscreen_change) | 706 if (fullscreen_change) |
| 703 DidToggleFullscreen(); | 707 DidToggleFullscreen(); |
| 704 | 708 |
| 705 // If a resize ack is requested and it isn't set-up, then no more resizes will | 709 // If a resize ack is requested and it isn't set-up, then no more resizes will |
| 706 // come in and in general things will go wrong. | 710 // come in and in general things will go wrong. |
| 707 DCHECK(resize_ack != SEND_RESIZE_ACK || next_paint_is_resize_ack()); | 711 DCHECK(resize_ack != SEND_RESIZE_ACK || next_paint_is_resize_ack()); |
| 708 } | 712 } |
| 709 | 713 |
| 710 void RenderWidget::ResizeSynchronously(const gfx::Rect& new_position) { | 714 void RenderWidget::ResizeSynchronously(const gfx::Rect& new_position) { |
| 711 Resize(new_position.size(), new_position.size(), overdraw_bottom_height_, | 715 Resize(new_position.size(), |
| 712 visible_viewport_size_, gfx::Rect(), is_fullscreen_, NO_RESIZE_ACK); | 716 new_position.size(), |
| 717 top_controls_layout_height_, |
| 718 visible_viewport_size_, |
| 719 gfx::Rect(), |
| 720 is_fullscreen_, |
| 721 NO_RESIZE_ACK); |
| 713 view_screen_rect_ = new_position; | 722 view_screen_rect_ = new_position; |
| 714 window_screen_rect_ = new_position; | 723 window_screen_rect_ = new_position; |
| 715 if (!did_show_) | 724 if (!did_show_) |
| 716 initial_pos_ = new_position; | 725 initial_pos_ = new_position; |
| 717 } | 726 } |
| 718 | 727 |
| 719 void RenderWidget::OnClose() { | 728 void RenderWidget::OnClose() { |
| 720 if (closing_) | 729 if (closing_) |
| 721 return; | 730 return; |
| 722 closing_ = true; | 731 closing_ = true; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 755 screen_metrics_emulator_->OnResizeMessage(params); | 764 screen_metrics_emulator_->OnResizeMessage(params); |
| 756 return; | 765 return; |
| 757 } | 766 } |
| 758 | 767 |
| 759 bool orientation_changed = | 768 bool orientation_changed = |
| 760 screen_info_.orientationAngle != params.screen_info.orientationAngle; | 769 screen_info_.orientationAngle != params.screen_info.orientationAngle; |
| 761 | 770 |
| 762 screen_info_ = params.screen_info; | 771 screen_info_ = params.screen_info; |
| 763 SetDeviceScaleFactor(screen_info_.deviceScaleFactor); | 772 SetDeviceScaleFactor(screen_info_.deviceScaleFactor); |
| 764 Resize(params.new_size, params.physical_backing_size, | 773 Resize(params.new_size, params.physical_backing_size, |
| 765 params.overdraw_bottom_height, params.visible_viewport_size, | 774 params.top_controls_layout_height, |
| 766 params.resizer_rect, params.is_fullscreen, SEND_RESIZE_ACK); | 775 params.visible_viewport_size, params.resizer_rect, |
| 776 params.is_fullscreen, SEND_RESIZE_ACK); |
| 767 | 777 |
| 768 if (orientation_changed) | 778 if (orientation_changed) |
| 769 OnOrientationChange(); | 779 OnOrientationChange(); |
| 770 } | 780 } |
| 771 | 781 |
| 772 void RenderWidget::OnChangeResizeRect(const gfx::Rect& resizer_rect) { | 782 void RenderWidget::OnChangeResizeRect(const gfx::Rect& resizer_rect) { |
| 773 if (resizer_rect_ == resizer_rect) | 783 if (resizer_rect_ == resizer_rect) |
| 774 return; | 784 return; |
| 775 resizer_rect_ = resizer_rect; | 785 resizer_rect_ = resizer_rect; |
| 776 if (webwidget_) | 786 if (webwidget_) |
| (...skipping 1382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2159 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { | 2169 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { |
| 2160 video_hole_frames_.AddObserver(frame); | 2170 video_hole_frames_.AddObserver(frame); |
| 2161 } | 2171 } |
| 2162 | 2172 |
| 2163 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { | 2173 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { |
| 2164 video_hole_frames_.RemoveObserver(frame); | 2174 video_hole_frames_.RemoveObserver(frame); |
| 2165 } | 2175 } |
| 2166 #endif // defined(VIDEO_HOLE) | 2176 #endif // defined(VIDEO_HOLE) |
| 2167 | 2177 |
| 2168 } // namespace content | 2178 } // namespace content |
| OLD | NEW |