Commit 7936233f authored by jdduke's avatar jdduke Committed by Commit bot

[Android] Speculative fix for crash during overscroll effect creation

Crash reports indicate that the WindowAndroid's Compositor may be NULL
during |RenderWidgetHostViewAndroid::SetContentViewCore()|. While this
is a somewhat surprising result, it is in theory possible and should
probably not be fatal. Avoid creating the overscroll effect in this
case, instead creating it after the compositor is (re-)attached.

BUG=407208

Review URL: https://codereview.chromium.org/503813003

Cr-Commit-Position: refs/heads/master@{#291835}
parent b5ca81a3
...@@ -1601,6 +1601,7 @@ void RenderWidgetHostViewAndroid::SetContentViewCore( ...@@ -1601,6 +1601,7 @@ void RenderWidgetHostViewAndroid::SetContentViewCore(
bool resize = false; bool resize = false;
if (content_view_core != content_view_core_) { if (content_view_core != content_view_core_) {
overscroll_effect_.reset();
selection_controller_.reset(); selection_controller_.reset();
ReleaseLocksOnSurface(); ReleaseLocksOnSurface();
resize = true; resize = true;
...@@ -1631,9 +1632,8 @@ void RenderWidgetHostViewAndroid::SetContentViewCore( ...@@ -1631,9 +1632,8 @@ void RenderWidgetHostViewAndroid::SetContentViewCore(
if (!selection_controller_) if (!selection_controller_)
selection_controller_.reset(new TouchSelectionController(this)); selection_controller_.reset(new TouchSelectionController(this));
if (!content_view_core_) if (overscroll_effect_enabled_ && !overscroll_effect_ &&
overscroll_effect_.reset(); content_view_core_->GetWindowAndroid()->GetCompositor())
else if (overscroll_effect_enabled_ && !overscroll_effect_)
overscroll_effect_ = CreateOverscrollEffect(content_view_core_); overscroll_effect_ = CreateOverscrollEffect(content_view_core_);
} }
...@@ -1656,10 +1656,18 @@ void RenderWidgetHostViewAndroid::OnCompositingDidCommit() { ...@@ -1656,10 +1656,18 @@ void RenderWidgetHostViewAndroid::OnCompositingDidCommit() {
RunAckCallbacks(); RunAckCallbacks();
} }
void RenderWidgetHostViewAndroid::OnAttachCompositor() {
DCHECK(content_view_core_);
if (overscroll_effect_enabled_ && !overscroll_effect_)
overscroll_effect_ = CreateOverscrollEffect(content_view_core_);
}
void RenderWidgetHostViewAndroid::OnDetachCompositor() { void RenderWidgetHostViewAndroid::OnDetachCompositor() {
DCHECK(content_view_core_); DCHECK(content_view_core_);
DCHECK(!using_synchronous_compositor_); DCHECK(!using_synchronous_compositor_);
RunAckCallbacks(); RunAckCallbacks();
overscroll_effect_.reset();
} }
void RenderWidgetHostViewAndroid::OnVSync(base::TimeTicks frame_time, void RenderWidgetHostViewAndroid::OnVSync(base::TimeTicks frame_time,
......
...@@ -199,7 +199,7 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid ...@@ -199,7 +199,7 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid
// ui::WindowAndroidObserver implementation. // ui::WindowAndroidObserver implementation.
virtual void OnCompositingDidCommit() OVERRIDE; virtual void OnCompositingDidCommit() OVERRIDE;
virtual void OnAttachCompositor() OVERRIDE {} virtual void OnAttachCompositor() OVERRIDE;
virtual void OnDetachCompositor() OVERRIDE; virtual void OnDetachCompositor() OVERRIDE;
virtual void OnVSync(base::TimeTicks frame_time, virtual void OnVSync(base::TimeTicks frame_time,
base::TimeDelta vsync_period) OVERRIDE; base::TimeDelta vsync_period) OVERRIDE;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment