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

Unified Diff: content/browser/renderer_host/render_widget_host_impl.cc

Issue 659093002: Pass the size to the RenderView on creation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@java_enum
Patch Set: fix autoresize for guestview/extensions Created 6 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/render_widget_host_impl.cc
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index 9a1d709a2ef00f024c3194de5ec841498afcfc3b..e88295ae134acb3c7067019996f637f2f6a0a49d 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -167,12 +167,10 @@ RenderWidgetHostImpl::RenderWidgetHostImpl(RenderWidgetHostDelegate* delegate,
surface_id_(0),
is_loading_(false),
is_hidden_(hidden),
- is_fullscreen_(false),
repaint_ack_pending_(false),
resize_ack_pending_(false),
screen_info_out_of_date_(false),
- top_controls_layout_height_(0.f),
- should_auto_resize_(false),
+ auto_resize_enabled_(false),
waiting_for_screen_rects_ack_(false),
needs_repainting_on_restore_(false),
is_unresponsive_(false),
@@ -362,7 +360,8 @@ void RenderWidgetHostImpl::ResetSizeAndRepaintPendingFlags() {
"renderer_host", "RenderWidgetHostImpl::repaint_ack_pending_", this);
}
repaint_ack_pending_ = false;
- last_requested_size_.SetSize(0, 0);
+ if (old_resize_params_)
+ old_resize_params_->new_size = gfx::Size();
}
void RenderWidgetHostImpl::SendScreenRects() {
@@ -564,61 +563,80 @@ void RenderWidgetHostImpl::WasShown(const ui::LatencyInfo& latency_info) {
WasResized();
}
+void RenderWidgetHostImpl::GetResizeParams(
+ ViewMsg_Resize_Params* resize_params) {
+ *resize_params = ViewMsg_Resize_Params();
+
+ if (!screen_info_) {
+ screen_info_.reset(new blink::WebScreenInfo);
+ GetWebScreenInfo(screen_info_.get());
+ }
+ resize_params->screen_info = *screen_info_;
+ resize_params->resizer_rect = GetRootWindowResizerRect();
+
+ if (view_) {
+ resize_params->new_size = view_->GetRequestedRendererSize();
+ resize_params->physical_backing_size = view_->GetPhysicalBackingSize();
+ resize_params->top_controls_layout_height =
+ view_->GetTopControlsLayoutHeight();
+ resize_params->visible_viewport_size = view_->GetVisibleViewportSize();
+ resize_params->is_fullscreen = IsFullscreen();
+ }
+}
+
+void RenderWidgetHostImpl::SetInitialRenderSizeParams(
+ const ViewMsg_Resize_Params& resize_params) {
+ // We don't expect to receive an ACK when the requested size or the physical
+ // backing size is empty, or when the main viewport size didn't change.
+ if (!resize_params.new_size.IsEmpty() &&
+ !resize_params.physical_backing_size.IsEmpty()) {
+ resize_ack_pending_ = g_check_for_pending_resize_ack;
+ }
+
+ old_resize_params_ =
+ make_scoped_ptr(new ViewMsg_Resize_Params(resize_params));
+}
+
void RenderWidgetHostImpl::WasResized() {
// Skip if the |delegate_| has already been detached because
// it's web contents is being deleted.
if (resize_ack_pending_ || !process_->HasConnection() || !view_ ||
- !renderer_initialized_ || should_auto_resize_ || !delegate_) {
+ !renderer_initialized_ || auto_resize_enabled_ || !delegate_) {
return;
}
- gfx::Size new_size(view_->GetRequestedRendererSize());
-
- gfx::Size old_physical_backing_size = physical_backing_size_;
- physical_backing_size_ = view_->GetPhysicalBackingSize();
- bool was_fullscreen = is_fullscreen_;
- is_fullscreen_ = IsFullscreen();
- float old_top_controls_layout_height =
- top_controls_layout_height_;
- top_controls_layout_height_ =
- view_->GetTopControlsLayoutHeight();
- gfx::Size old_visible_viewport_size = visible_viewport_size_;
- visible_viewport_size_ = view_->GetVisibleViewportSize();
-
- bool size_changed = new_size != last_requested_size_;
- bool side_payload_changed =
- screen_info_out_of_date_ ||
- old_physical_backing_size != physical_backing_size_ ||
- was_fullscreen != is_fullscreen_ ||
- old_top_controls_layout_height !=
- top_controls_layout_height_ ||
- old_visible_viewport_size != visible_viewport_size_;
+ bool size_changed = true;
+ bool side_payload_changed = screen_info_out_of_date_;
+ scoped_ptr<ViewMsg_Resize_Params> params(new ViewMsg_Resize_Params);
+
+ GetResizeParams(params.get());
+ if (old_resize_params_) {
+ size_changed = old_resize_params_->new_size != params->new_size;
+ side_payload_changed =
+ side_payload_changed ||
+ old_resize_params_->physical_backing_size !=
+ params->physical_backing_size ||
+ old_resize_params_->is_fullscreen != params->is_fullscreen ||
+ old_resize_params_->top_controls_layout_height !=
+ params->top_controls_layout_height ||
+ old_resize_params_->visible_viewport_size !=
+ params->visible_viewport_size;
+ }
if (!size_changed && !side_payload_changed)
return;
- if (!screen_info_) {
- screen_info_.reset(new blink::WebScreenInfo);
- GetWebScreenInfo(screen_info_.get());
- }
-
// We don't expect to receive an ACK when the requested size or the physical
// backing size is empty, or when the main viewport size didn't change.
- if (!new_size.IsEmpty() && !physical_backing_size_.IsEmpty() && size_changed)
+ if (!params->new_size.IsEmpty() && !params->physical_backing_size.IsEmpty() &&
+ size_changed) {
resize_ack_pending_ = g_check_for_pending_resize_ack;
+ }
- ViewMsg_Resize_Params params;
- params.screen_info = *screen_info_;
- params.new_size = new_size;
- params.physical_backing_size = physical_backing_size_;
- params.top_controls_layout_height = top_controls_layout_height_;
- params.visible_viewport_size = visible_viewport_size_;
- params.resizer_rect = GetRootWindowResizerRect();
- params.is_fullscreen = is_fullscreen_;
- if (!Send(new ViewMsg_Resize(routing_id_, params))) {
+ if (!Send(new ViewMsg_Resize(routing_id_, *params))) {
resize_ack_pending_ = false;
} else {
- last_requested_size_ = new_size;
+ old_resize_params_.swap(params);
}
}
@@ -746,7 +764,7 @@ void RenderWidgetHostImpl::WaitForSurface() {
// size of the view_. (For auto-sized views, current_size_ is updated during
// UpdateRect messages.)
gfx::Size view_size = current_size_;
- if (!should_auto_resize_) {
+ if (!auto_resize_enabled_) {
// Get the desired size from the current view bounds.
gfx::Rect view_rect = view_->GetViewBounds();
if (view_rect.IsEmpty())
@@ -800,7 +818,7 @@ void RenderWidgetHostImpl::WaitForSurface() {
// For auto-resized views, current_size_ determines the view_size and it
// may have changed during the handling of an UpdateRect message.
- if (should_auto_resize_)
+ if (auto_resize_enabled_)
view_size = current_size_;
// Break now if we got a backing store or accelerated surface of the
@@ -1380,8 +1398,12 @@ bool RenderWidgetHostImpl::IsFullscreen() const {
return false;
}
-void RenderWidgetHostImpl::SetShouldAutoResize(bool enable) {
- should_auto_resize_ = enable;
+void RenderWidgetHostImpl::SetAutoResize(bool enable,
+ const gfx::Size& min_size,
+ const gfx::Size& max_size) {
+ auto_resize_enabled_ = enable;
+ min_size_for_auto_resize_ = min_size;
+ max_size_for_auto_resize_ = max_size;
}
void RenderWidgetHostImpl::Destroy() {
@@ -1581,7 +1603,7 @@ void RenderWidgetHostImpl::OnUpdateRect(
DidUpdateBackingStore(params, paint_start);
- if (should_auto_resize_) {
+ if (auto_resize_enabled_) {
bool post_callback = new_auto_size_.IsEmpty();
new_auto_size_ = params.view_size;
if (post_callback) {
@@ -2073,7 +2095,7 @@ void RenderWidgetHostImpl::DelayedAutoResized() {
// indicate that no callback is in progress (i.e. without this line
// DelayedAutoResized will not get called again).
new_auto_size_.SetSize(0, 0);
- if (!should_auto_resize_)
+ if (!auto_resize_enabled_)
return;
OnRenderAutoResized(new_size);
« no previous file with comments | « content/browser/renderer_host/render_widget_host_impl.h ('k') | content/browser/renderer_host/render_widget_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698