Index: content/browser/web_contents/web_contents_impl.cc |
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc |
index 1df288a3b8809c23c804c7260e833cecb33d8b94..6656462cdacded576ac97870b1ab87c6f1ea4c60 100644 |
--- a/content/browser/web_contents/web_contents_impl.cc |
+++ b/content/browser/web_contents/web_contents_impl.cc |
@@ -347,6 +347,7 @@ WebContentsImpl::WebContentsImpl( |
render_view_message_source_(NULL), |
fullscreen_widget_routing_id_(MSG_ROUTING_NONE), |
is_subframe_(false), |
+ touch_emulation_enabled_(false), |
last_dialog_suppressed_(false) { |
for (size_t i = 0; i < g_created_callbacks.Get().size(); i++) |
g_created_callbacks.Get().at(i).Run(this); |
@@ -613,7 +614,7 @@ void WebContentsImpl::SetDelegate(WebContentsDelegate* delegate) { |
delegate_->Attach(this); |
// Ensure the visible RVH reflects the new delegate's preferences. |
if (view_) |
- view_->SetOverscrollControllerEnabled(delegate->CanOverscrollContent()); |
+ view_->SetOverscrollControllerEnabled(CanOverscrollContent()); |
} |
} |
@@ -1698,6 +1699,12 @@ void WebContentsImpl::DidSendScreenRects(RenderWidgetHostImpl* rwh) { |
browser_plugin_embedder_->DidSendScreenRects(); |
} |
+void WebContentsImpl::OnTouchEmulationEnabled(bool enabled) { |
+ touch_emulation_enabled_ = enabled; |
+ if (view_) |
+ view_->SetOverscrollControllerEnabled(CanOverscrollContent()); |
+} |
+ |
void WebContentsImpl::UpdatePreferredSize(const gfx::Size& pref_size) { |
const gfx::Size old_size = GetPreferredSize(); |
preferred_size_ = pref_size; |
@@ -2456,10 +2463,9 @@ void WebContentsImpl::DidNavigateMainFramePostCommit( |
FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
DidNavigateMainFrame(details, params)); |
- if (delegate_) { |
+ if (delegate_) |
delegate_->DidNavigateMainFramePostCommit(this); |
- view_->SetOverscrollControllerEnabled(delegate_->CanOverscrollContent()); |
- } |
+ view_->SetOverscrollControllerEnabled(CanOverscrollContent()); |
} |
void WebContentsImpl::DidNavigateAnyFramePostCommit( |
@@ -2484,6 +2490,10 @@ void WebContentsImpl::SetMainFrameMimeType(const std::string& mime_type) { |
} |
bool WebContentsImpl::CanOverscrollContent() const { |
+ // Disable overscroll when touch emulation is on. See crbug.com/369938. |
+ if (touch_emulation_enabled_) |
+ return false; |
+ |
if (delegate_) |
return delegate_->CanOverscrollContent(); |
@@ -3295,7 +3305,7 @@ void WebContentsImpl::RenderViewCreated(RenderViewHost* render_view_host) { |
return; |
if (delegate_) |
- view_->SetOverscrollControllerEnabled(delegate_->CanOverscrollContent()); |
+ view_->SetOverscrollControllerEnabled(CanOverscrollContent()); |
NotificationService::current()->Notify( |
NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED, |
@@ -3797,7 +3807,7 @@ void WebContentsImpl::NotifySwappedFromRenderManager(RenderViewHost* old_host, |
// Make sure the visible RVH reflects the new delegate's preferences. |
if (delegate_) |
- view_->SetOverscrollControllerEnabled(delegate_->CanOverscrollContent()); |
+ view_->SetOverscrollControllerEnabled(CanOverscrollContent()); |
view_->RenderViewSwappedIn(new_host); |
} |