summaryrefslogtreecommitdiffstats
path: root/content/browser/renderer_host
diff options
context:
space:
mode:
authorlevin@chromium.org <levin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-02 17:04:47 +0000
committerlevin@chromium.org <levin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-02 17:04:47 +0000
commit244ac18924f4e2c3bb2877d847a88c0c97e6e5c7 (patch)
tree11acfa2cac0e35853e5020b81fe0f3a6b9ee8118 /content/browser/renderer_host
parent4f21d0f8ee7e79619971f1d6a5825ba49ee67b49 (diff)
downloadchromium_src-244ac18924f4e2c3bb2877d847a88c0c97e6e5c7.zip
chromium_src-244ac18924f4e2c3bb2877d847a88c0c97e6e5c7.tar.gz
chromium_src-244ac18924f4e2c3bb2877d847a88c0c97e6e5c7.tar.bz2
Add autoresize capability to chromium.
Review URL: http://codereview.chromium.org/8704005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@112719 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/renderer_host')
-rw-r--r--content/browser/renderer_host/render_view_host.cc10
-rw-r--r--content/browser/renderer_host/render_view_host.h5
-rw-r--r--content/browser/renderer_host/render_widget_host.cc33
-rw-r--r--content/browser/renderer_host/render_widget_host.h11
4 files changed, 53 insertions, 6 deletions
diff --git a/content/browser/renderer_host/render_view_host.cc b/content/browser/renderer_host/render_view_host.cc
index 69bdae5..e03b6fa 100644
--- a/content/browser/renderer_host/render_view_host.cc
+++ b/content/browser/renderer_host/render_view_host.cc
@@ -1023,6 +1023,10 @@ void RenderViewHost::OnMsgDidContentsPreferredSizeChange(
delegate_->UpdatePreferredSize(new_size);
}
+void RenderViewHost::OnRenderAutoResized(const gfx::Size& new_size) {
+ delegate_->UpdatePreferredSize(new_size);
+}
+
void RenderViewHost::OnMsgDidChangeScrollbarsForMainFrame(
bool has_horizontal_scrollbar, bool has_vertical_scrollbar) {
if (view())
@@ -1339,6 +1343,12 @@ void RenderViewHost::EnablePreferredSizeMode() {
Send(new ViewMsg_EnablePreferredSizeChangedMode(routing_id()));
}
+void RenderViewHost::EnableAutoResize(const gfx::Size& min_size,
+ const gfx::Size& max_size) {
+ SetShouldAutoResize(true);
+ Send(new ViewMsg_EnableAutoResize(routing_id(), min_size, max_size));
+}
+
void RenderViewHost::ExecuteCustomContextMenuCommand(
int action, const webkit_glue::CustomContextMenuContext& context) {
Send(new ViewMsg_CustomContextMenuAction(routing_id(), context, action));
diff --git a/content/browser/renderer_host/render_view_host.h b/content/browser/renderer_host/render_view_host.h
index 468688e..8d62b8f 100644
--- a/content/browser/renderer_host/render_view_host.h
+++ b/content/browser/renderer_host/render_view_host.h
@@ -442,6 +442,10 @@ class CONTENT_EXPORT RenderViewHost : public RenderWidgetHost {
// Instructs the RenderView to send back updates to the preferred size.
void EnablePreferredSizeMode();
+ // Instructs the RenderView to automatically resize and send back updates
+ // for the new size.
+ void EnableAutoResize(const gfx::Size& min_size, const gfx::Size& max_size);
+
// Executes custom context menu action that was provided from WebKit.
void ExecuteCustomContextMenuCommand(
int action, const webkit_glue::CustomContextMenuContext& context);
@@ -495,6 +499,7 @@ class CONTENT_EXPORT RenderViewHost : public RenderWidgetHost {
virtual void OnUserGesture() OVERRIDE;
virtual void NotifyRendererUnresponsive() OVERRIDE;
virtual void NotifyRendererResponsive() OVERRIDE;
+ virtual void OnRenderAutoResized(const gfx::Size& size) OVERRIDE;
virtual void RequestToLockMouse() OVERRIDE;
virtual bool IsFullscreen() const OVERRIDE;
virtual void OnMsgFocus() OVERRIDE;
diff --git a/content/browser/renderer_host/render_widget_host.cc b/content/browser/renderer_host/render_widget_host.cc
index f636de3..295b90b 100644
--- a/content/browser/renderer_host/render_widget_host.cc
+++ b/content/browser/renderer_host/render_widget_host.cc
@@ -89,6 +89,7 @@ RenderWidgetHost::RenderWidgetHost(content::RenderProcessHost* process,
is_accelerated_compositing_active_(false),
repaint_ack_pending_(false),
resize_ack_pending_(false),
+ should_auto_resize_(false),
mouse_move_pending_(false),
mouse_wheel_pending_(false),
touch_move_pending_(false),
@@ -332,7 +333,7 @@ void RenderWidgetHost::WasRestored() {
void RenderWidgetHost::WasResized() {
if (resize_ack_pending_ || !process_->HasConnection() || !view_ ||
- !renderer_initialized_) {
+ !renderer_initialized_ || should_auto_resize_) {
return;
}
@@ -868,6 +869,20 @@ bool RenderWidgetHost::IsFullscreen() const {
return false;
}
+void RenderWidgetHost::SetShouldAutoResize(bool enable) {
+ // Note if this switches from true to false then one has to verify that the
+ // mechanics about all the messaging works. For example, what happens to a
+ // update message rect that was in progress from the render widget. Perhaps,
+ // on a transition to false, this should do a WasResized, but what if that
+ // will not trigger a resize message...etc. Due to these complications it is
+ // fitting that this method doesn't look like a simple set method.
+ DCHECK(enable);
+
+ // TODO: Change this to enable instead of true when this supports turning
+ // off auto-resize.
+ should_auto_resize_ = true;
+}
+
void RenderWidgetHost::Destroy() {
content::NotificationService::current()->Notify(
content::NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED,
@@ -991,11 +1006,13 @@ void RenderWidgetHost::OnMsgUpdateRect(
// resize_ack_pending_ needs to be cleared before we call DidPaintRect, since
// that will end up reaching GetBackingStore.
- if (is_resize_ack) {
- DCHECK(resize_ack_pending_);
- resize_ack_pending_ = false;
- in_flight_size_.SetSize(0, 0);
- in_flight_reserved_rect_.SetRect(0, 0, 0, 0);
+ if (is_resize_ack || should_auto_resize_) {
+ if (is_resize_ack) {
+ DCHECK(resize_ack_pending_);
+ resize_ack_pending_ = false;
+ in_flight_size_.SetSize(0, 0);
+ in_flight_reserved_rect_.SetRect(0, 0, 0, 0);
+ }
// Update our knowledge of the RenderWidget's resizer rect.
// ViewMsg_Resize is acknowledged only when view size is actually changed,
// otherwise current_reserved_rect_ is updated immediately after sending
@@ -1056,6 +1073,10 @@ void RenderWidgetHost::OnMsgUpdateRect(
DidUpdateBackingStore(params, paint_start);
}
+ if (should_auto_resize_) {
+ OnRenderAutoResized(params.view_size);
+ }
+
// Log the time delta for processing a paint message. On platforms that don't
// support asynchronous painting, this is equivalent to
// MPArch.RWH_TotalPaintTime.
diff --git a/content/browser/renderer_host/render_widget_host.h b/content/browser/renderer_host/render_widget_host.h
index be4d693..3383b97 100644
--- a/content/browser/renderer_host/render_widget_host.h
+++ b/content/browser/renderer_host/render_widget_host.h
@@ -496,6 +496,9 @@ class CONTENT_EXPORT RenderWidgetHost : public IPC::Channel::Listener,
virtual void NotifyRendererUnresponsive() {}
virtual void NotifyRendererResponsive() {}
+ // Called when auto-resize resulted in the renderer size changing.
+ virtual void OnRenderAutoResized(const gfx::Size& new_size) {}
+
// ---------------------------------------------------------------------------
// RenderViewHost overrides this method to impose further restrictions on when
@@ -510,6 +513,10 @@ class CONTENT_EXPORT RenderWidgetHost : public IPC::Channel::Listener,
// RenderViewHost overrides this method to report when in fullscreen mode.
virtual bool IsFullscreen() const;
+ // Indicates if the render widget host should track the render widget's size
+ // as opposed to visa versa.
+ void SetShouldAutoResize(bool enable);
+
protected:
// true if a renderer has once been valid. We use this flag to display a sad
// tab only when we lose our renderer and not if a paint occurs during
@@ -674,6 +681,10 @@ class CONTENT_EXPORT RenderWidgetHost : public IPC::Channel::Listener,
// hand is updated when the resize message is sent.
gfx::Rect in_flight_reserved_rect_;
+ // True if the render widget host should track the render widget's size as
+ // opposed to visa versa.
+ bool should_auto_resize_;
+
// True if a mouse move event was sent to the render view and we are waiting
// for a corresponding ViewHostMsg_HandleInputEvent_ACK message.
bool mouse_move_pending_;