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(
bool resize = false;
if (content_view_core != content_view_core_) {
overscroll_effect_.reset();
selection_controller_.reset();
ReleaseLocksOnSurface();
resize = true;
......@@ -1631,9 +1632,8 @@ void RenderWidgetHostViewAndroid::SetContentViewCore(
if (!selection_controller_)
selection_controller_.reset(new TouchSelectionController(this));
if (!content_view_core_)
overscroll_effect_.reset();
else if (overscroll_effect_enabled_ && !overscroll_effect_)
if (overscroll_effect_enabled_ && !overscroll_effect_ &&
content_view_core_->GetWindowAndroid()->GetCompositor())
overscroll_effect_ = CreateOverscrollEffect(content_view_core_);
}
......@@ -1656,10 +1656,18 @@ void RenderWidgetHostViewAndroid::OnCompositingDidCommit() {
RunAckCallbacks();
}
void RenderWidgetHostViewAndroid::OnAttachCompositor() {
DCHECK(content_view_core_);
if (overscroll_effect_enabled_ && !overscroll_effect_)
overscroll_effect_ = CreateOverscrollEffect(content_view_core_);
}
void RenderWidgetHostViewAndroid::OnDetachCompositor() {
DCHECK(content_view_core_);
DCHECK(!using_synchronous_compositor_);
RunAckCallbacks();
overscroll_effect_.reset();
}
void RenderWidgetHostViewAndroid::OnVSync(base::TimeTicks frame_time,
......
......@@ -199,7 +199,7 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid
// ui::WindowAndroidObserver implementation.
virtual void OnCompositingDidCommit() OVERRIDE;
virtual void OnAttachCompositor() OVERRIDE {}
virtual void OnAttachCompositor() OVERRIDE;
virtual void OnDetachCompositor() OVERRIDE;
virtual void OnVSync(base::TimeTicks frame_time,
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