From a66afe50f824dd34c1003325b9571d43b575cad8 Mon Sep 17 00:00:00 2001 From: Bo Liu Date: Thu, 21 Jan 2016 10:18:01 -0800 Subject: [PATCH] [Merge M49] android: Fix select popup dialog Context edge case There is no way to tell ahead of time whether a Context can be used to display a pop up window, due to hacks some apps uses. Instead, catch the BadTokenException and respond correctly to that. BUG=573294 Review URL: https://codereview.chromium.org/1616473002 Cr-Commit-Position: refs/heads/master@{#370567} (cherry picked from commit 132bb927a995822c79c17764051b456f75ec258f) Review URL: https://codereview.chromium.org/1619833002 . Cr-Commit-Position: refs/branch-heads/2623@{#45} Cr-Branched-From: 92d77538a86529ca35f9220bd3cd512cbea1f086-refs/heads/master@{#369907} --- .../src/org/chromium/content/browser/ContentViewCore.java | 2 +- .../chromium/content/browser/input/SelectPopupDialog.java | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java index 67c1dfad94e30..0db730ac92230 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java +++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java @@ -2449,7 +2449,7 @@ private void showSelectPopup(long nativeSelectPopupSourceFrame, Rect bounds, Str } else { if (getWindowAndroid() == null) return; Context windowContext = getWindowAndroid().getContext().get(); - if (WindowAndroid.activityFromContext(windowContext) == null) return; + if (windowContext == null) return; mSelectPopup = new SelectPopupDialog( this, windowContext, popupItems, multiple, selectedIndices); } diff --git a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDialog.java b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDialog.java index ebf50d329bc54..fc5f38d1ec251 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDialog.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDialog.java @@ -10,6 +10,7 @@ import android.content.res.TypedArray; import android.util.SparseBooleanArray; import android.view.View; +import android.view.WindowManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; @@ -128,7 +129,11 @@ private void notifySelection(int[] indicies) { @Override public void show() { - mListBoxPopup.show(); + try { + mListBoxPopup.show(); + } catch (WindowManager.BadTokenException e) { + notifySelection(null); + } } @Override