summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorasvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-11 14:39:18 +0000
committerasvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-11 14:39:18 +0000
commit68bd80aa66da73d9aa2fb6662592bd530ce7b7f0 (patch)
tree91ab5ce0eaaacb0dbf79fe8167189a633486058b /content
parent84534f2f224cdc018dcdae07e251b98baf5d41a3 (diff)
downloadchromium_src-68bd80aa66da73d9aa2fb6662592bd530ce7b7f0.zip
chromium_src-68bd80aa66da73d9aa2fb6662592bd530ce7b7f0.tar.gz
chromium_src-68bd80aa66da73d9aa2fb6662592bd530ce7b7f0.tar.bz2
[Mac] Rubber-banding on Lion.
BUG=88353 TEST=On Lion, scroll past the edge of the web content area and see textured over-scroll area. Review URL: http://codereview.chromium.org/7582009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@96387 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/browser/renderer_host/render_widget_host.cc12
-rw-r--r--content/browser/renderer_host/render_widget_host.h9
-rw-r--r--content/common/view_messages.h5
-rw-r--r--content/renderer/render_view.cc5
-rw-r--r--content/renderer/render_view.h1
-rw-r--r--content/renderer/render_widget.cc6
-rw-r--r--content/renderer/render_widget.h3
7 files changed, 40 insertions, 1 deletions
diff --git a/content/browser/renderer_host/render_widget_host.cc b/content/browser/renderer_host/render_widget_host.cc
index 7d4e3d6..820ab67 100644
--- a/content/browser/renderer_host/render_widget_host.cc
+++ b/content/browser/renderer_host/render_widget_host.cc
@@ -34,6 +34,7 @@ using base::Time;
using base::TimeDelta;
using base::TimeTicks;
+using WebKit::WebGestureEvent;
using WebKit::WebInputEvent;
using WebKit::WebKeyboardEvent;
using WebKit::WebMouseEvent;
@@ -560,6 +561,15 @@ void RenderWidgetHost::ForwardWheelEvent(
ForwardInputEvent(wheel_event, sizeof(WebMouseWheelEvent), false);
}
+void RenderWidgetHost::ForwardGestureEvent(
+ const WebKit::WebGestureEvent& gesture_event) {
+ TRACE_EVENT0("renderer_host", "RenderWidgetHost::ForwardWheelEvent");
+ if (ignore_input_events_ || process_->ignore_input_events())
+ return;
+
+ ForwardInputEvent(gesture_event, sizeof(WebGestureEvent), false);
+}
+
void RenderWidgetHost::ForwardKeyboardEvent(
const NativeWebKeyboardEvent& key_event) {
TRACE_EVENT0("renderer_host", "RenderWidgetHost::ForwardKeyboardEvent");
@@ -870,6 +880,8 @@ void RenderWidgetHost::OnMsgUpdateRect(
// Update our knowledge of the RenderWidget's size.
current_size_ = params.view_size;
+ // Update our knowledge of the RenderWidget's contents size.
+ contents_size_ = params.contents_size;
// Update our knowledge of the RenderWidget's scroll offset.
last_scroll_offset_ = params.scroll_offset;
diff --git a/content/browser/renderer_host/render_widget_host.h b/content/browser/renderer_host/render_widget_host.h
index 5b938b6..841ba51 100644
--- a/content/browser/renderer_host/render_widget_host.h
+++ b/content/browser/renderer_host/render_widget_host.h
@@ -260,6 +260,7 @@ class RenderWidgetHost : public IPC::Channel::Listener,
// Called when a mouse click activates the renderer.
virtual void OnMouseActivate();
void ForwardWheelEvent(const WebKit::WebMouseWheelEvent& wheel_event);
+ void ForwardGestureEvent(const WebKit::WebGestureEvent& gesture_event);
virtual void ForwardKeyboardEvent(const NativeWebKeyboardEvent& key_event);
virtual void ForwardTouchEvent(const WebKit::WebTouchEvent& touch_event);
@@ -366,6 +367,7 @@ class RenderWidgetHost : public IPC::Channel::Listener,
void ActivateDeferredPluginHandles();
const gfx::Point& last_scroll_offset() const { return last_scroll_offset_; }
+ const gfx::Size& contents_size() const { return contents_size_; }
// Notification that the user has made some kind of input that could
// perform an action. See OnUserGesture for more details.
@@ -550,6 +552,13 @@ class RenderWidgetHost : public IPC::Channel::Listener,
// The current size of the RenderWidget.
gfx::Size current_size_;
+ // The size of the underlying contents, including parts that are not visible
+ // due to scrolling. It can be used to calculate the view port bounds using
+ // |last_scroll_offset_|. Note: This size is not always available. In
+ // particular, it is only available for RenderViews after a paint has taken
+ // place. Additionally, it only available on the Mac.
+ gfx::Size contents_size_;
+
// The current reserved area of the RenderWidget where contents should not be
// rendered to draw the resize corner, sidebar mini tabs etc.
gfx::Rect current_reserved_rect_;
diff --git a/content/common/view_messages.h b/content/common/view_messages.h
index 481f5b9..eca2d1a 100644
--- a/content/common/view_messages.h
+++ b/content/common/view_messages.h
@@ -627,6 +627,9 @@ IPC_STRUCT_BEGIN(ViewHostMsg_UpdateRect_Params)
// progress.
IPC_STRUCT_MEMBER(gfx::Size, view_size)
+ // The size of the web content area.
+ IPC_STRUCT_MEMBER(gfx::Size, contents_size)
+
// The area of the RenderView reserved for resize corner when this message
// was generated. Reported for the same reason as view_size is.
IPC_STRUCT_MEMBER(gfx::Rect, resizer_rect)
@@ -646,7 +649,7 @@ IPC_STRUCT_BEGIN(ViewHostMsg_UpdateRect_Params)
// ViewHostMsg_UpdateRect_Flags::IS_REPAINT_ACK
// Indicates that this is a response to a ViewMsg_Repaint message.
//
- // If flags is zero, then this message corresponds to an unsoliticed paint
+ // If flags is zero, then this message corresponds to an unsolicited paint
// request by the render view. Any of the above bits may be set in flags,
// which would indicate that this paint message is an ACK for multiple
// request messages.
diff --git a/content/renderer/render_view.cc b/content/renderer/render_view.cc
index dd31fb7..a09f732 100644
--- a/content/renderer/render_view.cc
+++ b/content/renderer/render_view.cc
@@ -3944,6 +3944,11 @@ gfx::Point RenderView::GetScrollOffset() {
return gfx::Point(scroll_offset.width, scroll_offset.height);
}
+gfx::Size RenderView::GetContentsSize() {
+ WebSize bounds = webview()->mainFrame()->contentsSize();
+ return gfx::Size(bounds.width, bounds.height);
+}
+
void RenderView::OnClearFocusedNode() {
if (webview())
webview()->clearFocusedNode();
diff --git a/content/renderer/render_view.h b/content/renderer/render_view.h
index 3b95206..b34322c 100644
--- a/content/renderer/render_view.h
+++ b/content/renderer/render_view.h
@@ -624,6 +624,7 @@ class RenderView : public RenderWidget,
gfx::Rect* location,
gfx::Rect* clip);
virtual gfx::Point GetScrollOffset();
+ virtual gfx::Size GetContentsSize();
virtual void DidHandleKeyEvent();
virtual void DidHandleMouseEvent(const WebKit::WebMouseEvent& event);
virtual void OnSetFocus(bool enable);
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index 761a993..bd09fe6 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -831,6 +831,7 @@ void RenderWidget::DoDeferredUpdate() {
params.plugin_window_moves.swap(plugin_window_moves_);
params.flags = next_paint_flags_;
params.scroll_offset = GetScrollOffset();
+ params.contents_size = GetContentsSize();
update_reply_pending_ = true;
Send(new ViewHostMsg_UpdateRect(routing_id_, params));
@@ -1248,6 +1249,11 @@ gfx::Point RenderWidget::GetScrollOffset() {
return gfx::Point(0, 0);
}
+gfx::Size RenderWidget::GetContentsSize() {
+ // Bare RenderWidgets don't support contents size.
+ return gfx::Size(0, 0);
+}
+
void RenderWidget::SetHidden(bool hidden) {
if (is_hidden_ == hidden)
return;
diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h
index 3bad78a..360dd68 100644
--- a/content/renderer/render_widget.h
+++ b/content/renderer/render_widget.h
@@ -250,6 +250,9 @@ class RenderWidget : public IPC::Channel::Listener,
// scroll offset.
virtual gfx::Point GetScrollOffset();
+ // Gets the dimensions of the content area.
+ virtual gfx::Size GetContentsSize();
+
// Sets the "hidden" state of this widget. All accesses to is_hidden_ should
// use this method so that we can properly inform the RenderThread of our
// state.