Index: content/browser/renderer_host/render_widget_host_view_android.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc |
index 4a1e4149c0348e5e0f36e7a6d26ace361846e455..2d21e33b2ec23fbdae0ab8256e4c5659f14f5ad1 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_android.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc |
@@ -186,7 +186,6 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( |
weak_ptr_factory_(this), |
overscroll_effect_enabled_(!CommandLine::ForCurrentProcess()->HasSwitch( |
switches::kDisableOverscrollEdgeEffect)), |
- overscroll_effect_(OverscrollGlow::Create(overscroll_effect_enabled_)), |
gesture_provider_(CreateGestureProviderConfig(), this), |
gesture_text_selector_(this), |
flush_input_requested_(false), |
@@ -354,7 +353,7 @@ void RenderWidgetHostViewAndroid::MovePluginWindows( |
void RenderWidgetHostViewAndroid::Focus() { |
host_->Focus(); |
host_->SetInputMethodActive(true); |
- if (overscroll_effect_enabled_) |
+ if (overscroll_effect_) |
overscroll_effect_->Enable(); |
} |
@@ -362,7 +361,8 @@ void RenderWidgetHostViewAndroid::Blur() { |
host_->ExecuteEditCommand("Unselect", ""); |
host_->SetInputMethodActive(false); |
host_->Blur(); |
- overscroll_effect_->Disable(); |
+ if (overscroll_effect_) |
+ overscroll_effect_->Disable(); |
} |
bool RenderWidgetHostViewAndroid::HasFocus() const { |
@@ -859,8 +859,10 @@ void RenderWidgetHostViewAndroid::ComputeContentsSize( |
gfx::Size(texture_size_in_layer_.width() - offset.x(), |
texture_size_in_layer_.height() - offset.y()); |
- overscroll_effect_->UpdateDisplayParameters( |
- CreateOverscrollDisplayParameters(frame_metadata)); |
+ if (overscroll_effect_) { |
+ overscroll_effect_->UpdateDisplayParameters( |
+ CreateOverscrollDisplayParameters(frame_metadata)); |
+ } |
} |
void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame( |
@@ -1029,7 +1031,7 @@ void RenderWidgetHostViewAndroid::AttachLayers() { |
return; |
content_view_core_->AttachLayer(layer_); |
- if (overscroll_effect_enabled_) |
+ if (overscroll_effect_) |
overscroll_effect_->Enable(); |
layer_->SetHideLayerAndSubtree(!is_showing_); |
} |
@@ -1041,7 +1043,8 @@ void RenderWidgetHostViewAndroid::RemoveLayers() { |
return; |
content_view_core_->RemoveLayer(layer_); |
- overscroll_effect_->Disable(); |
+ if (overscroll_effect_) |
+ overscroll_effect_->Disable(); |
} |
void RenderWidgetHostViewAndroid::SetNeedsAnimate() { |
@@ -1049,7 +1052,7 @@ void RenderWidgetHostViewAndroid::SetNeedsAnimate() { |
} |
bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { |
- return overscroll_effect_->Animate(frame_time); |
+ return overscroll_effect_ ? overscroll_effect_->Animate(frame_time) : false; |
} |
void RenderWidgetHostViewAndroid::AcceleratedSurfacePostSubBuffer( |
@@ -1209,8 +1212,8 @@ void RenderWidgetHostViewAndroid::SendMouseWheelEvent( |
void RenderWidgetHostViewAndroid::SendGestureEvent( |
const blink::WebGestureEvent& event) { |
// Sending a gesture that may trigger overscroll should resume the effect. |
- if (overscroll_effect_enabled_) |
- overscroll_effect_->Enable(); |
+ if (overscroll_effect_) |
+ overscroll_effect_->Enable(); |
if (host_) |
host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event)); |
@@ -1231,7 +1234,9 @@ void RenderWidgetHostViewAndroid::DidOverscroll( |
return; |
const float device_scale_factor = content_view_core_->GetDpiScale(); |
- if (overscroll_effect_->OnOverscrolled( |
+ |
+ if (overscroll_effect_ && |
+ overscroll_effect_->OnOverscrolled( |
content_view_core_->GetLayer(), |
base::TimeTicks::Now(), |
gfx::ScaleVector2d(params.accumulated_overscroll, |
@@ -1283,6 +1288,16 @@ void RenderWidgetHostViewAndroid::SetContentViewCore( |
if (resize && content_view_core_) |
WasResized(); |
+ |
+ if (!content_view_core_) { |
+ overscroll_effect_.reset(); |
+ } else if (overscroll_effect_enabled_ && !overscroll_effect_) { |
+ DCHECK(content_view_core_->GetWindowAndroid()->GetCompositor()); |
+ overscroll_effect_ = |
+ OverscrollGlow::Create(&content_view_core_->GetWindowAndroid() |
+ ->GetCompositor() |
+ ->GetSystemUIResourceManager()); |
+ } |
} |
void RenderWidgetHostViewAndroid::RunAckCallbacks() { |