Fix crash on pasting text in a WebView

WindowDecorActionBar and Chrome's ContentViewCore each have their own ActionMode
reference. ActionModeImpl.finish() nulls WindowDecorActionBar's reference and
calls mCallback.onDestroyActionMode() to null ContentViewCore's reference. But
if the callback is deferred, there is a period when the ActionMode is finished
(and mCallback is null), but ContentViewCore doesn't know. ContentViewCore may
try to invalidate() the ActionMode, which will crash on the null mCallback.

Make ActionModeImpl more permissive so that calling invalidate() during this
period does nothing.

BUG:18758329
Change-Id: I407fa0e0cd3cffa217e165caed83130d44760316
This commit is contained in:
Paul Miller
2014-12-19 17:51:18 -08:00
parent 45c6ae56d9
commit f6bf1d7b30

View File

@@ -993,6 +993,13 @@ public class WindowDecorActionBar extends ActionBar implements
@Override
public void invalidate() {
if (mActionMode != this) {
// Not the active action mode - no-op. It's possible we are
// currently deferring onDestroy, so the app doesn't yet know we
// are going away and is trying to use us. That's also a no-op.
return;
}
mMenu.stopDispatchingItemsChanged();
try {
mCallback.onPrepareActionMode(this, mMenu);