Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(462)

Issue 2175263002: Cache proxy view return value to avoid deadlock (Closed)

Created:
4 years, 5 months ago by Changwan Ryu
Modified:
4 years, 4 months ago
CC:
chromium-reviews, darin-cc_chromium.org, jam, yabinh
Base URL:
https://chromium.googlesource.com/chromium/src.git@master
Target Ref:
refs/pending/heads/master
Project:
chromium
Visibility:
Public.

Description

Cache proxy view return value to avoid deadlock If WebView has an active IME but the Android app calls InputMethodManager#hideSoftInputFromWindow() on a non-UI thread, then a deadlock may happen. One example case is when JavaScript triggers it through JavascriptInterface (therefore, on JavaBridge thread.) The deadlock scenario is as follows: 1) InputMethodManager#hideSoftFromWindow() calls ThreadedInputConnectionProxyView#getWindowToken() on JavaBridge thread while holding InputMethodManager#mH. Then getWindowToken() waits for UI thread to become available. 2) At almost same time, InputMethodManager#restartInput() was waiting for InputMethodManager#mH on UI thread This deadlock can be avoided by caching return values as atomic objects. Alternative approach I've tried: check the current thread and block it only when it's IME thread - this may still leave room for deadlock between IME thread and UI thread. BUG=630937 Committed: https://crrev.com/43ceb11f9abf67fea18e8a731a9ef61f5cfe22fc Cr-Commit-Position: refs/heads/master@{#408925}

Patch Set 1 #

Total comments: 3

Patch Set 2 : caching approach #

Total comments: 5

Patch Set 3 : do not set root view on detachment #

Total comments: 2

Patch Set 4 : set to null #

Messages

Total messages: 43 (22 generated)
Changwan Ryu
4 years, 5 months ago (2016-07-25 09:49:20 UTC) #3
Changwan Ryu
4 years, 5 months ago (2016-07-25 09:50:17 UTC) #6
aelias_OOO_until_Jul13
https://codereview.chromium.org/2175263002/diff/1/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java File content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java (right): https://codereview.chromium.org/2175263002/diff/1/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java#newcode138 content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java:138: if (Looper.myLooper() == mImeThreadHandler.getLooper()) { I think it's a ...
4 years, 5 months ago (2016-07-25 22:11:47 UTC) #9
Changwan Ryu
https://codereview.chromium.org/2175263002/diff/1/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java File content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java (right): https://codereview.chromium.org/2175263002/diff/1/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java#newcode138 content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java:138: if (Looper.myLooper() == mImeThreadHandler.getLooper()) { On 2016/07/25 22:11:47, aelias ...
4 years, 5 months ago (2016-07-26 00:05:55 UTC) #10
aelias_OOO_until_Jul13
https://codereview.chromium.org/2175263002/diff/1/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java File content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java (right): https://codereview.chromium.org/2175263002/diff/1/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java#newcode138 content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java:138: if (Looper.myLooper() == mImeThreadHandler.getLooper()) { Can you change WebView ...
4 years, 5 months ago (2016-07-26 00:14:43 UTC) #11
Changwan Ryu
On 2016/07/26 00:14:43, aelias wrote: > https://codereview.chromium.org/2175263002/diff/1/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java > File > content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java > (right): > > ...
4 years, 5 months ago (2016-07-26 00:38:42 UTC) #13
aelias_OOO_until_Jul13
How about caching a copy of the window token on the proxy view?
4 years, 5 months ago (2016-07-26 00:59:33 UTC) #14
Changwan Ryu
On 2016/07/26 00:59:33, aelias wrote: > How about caching a copy of the window token ...
4 years, 5 months ago (2016-07-26 01:15:45 UTC) #15
aelias_OOO_until_Jul13
All those examples seem reasonable to cache so far, I think it's worth a try.
4 years, 5 months ago (2016-07-26 01:24:12 UTC) #16
Changwan Ryu
On 2016/07/26 01:24:12, aelias wrote: > All those examples seem reasonable to cache so far, ...
4 years, 4 months ago (2016-07-26 08:04:55 UTC) #20
aelias_OOO_until_Jul13
lgtm, adding tedchoc@ for ContentViewCore OWNERS
4 years, 4 months ago (2016-07-26 19:43:51 UTC) #24
Ted C
https://codereview.chromium.org/2175263002/diff/20001/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java File content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java (right): https://codereview.chromium.org/2175263002/diff/20001/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java#newcode52 content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java:52: mFocused.set(gainFocus); should these all have thread checks? or does ...
4 years, 4 months ago (2016-07-27 00:16:36 UTC) #25
Changwan Ryu
https://codereview.chromium.org/2175263002/diff/20001/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java File content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java (right): https://codereview.chromium.org/2175263002/diff/20001/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java#newcode52 content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java:52: mFocused.set(gainFocus); On 2016/07/27 00:16:36, Ted C wrote: > should ...
4 years, 4 months ago (2016-07-27 00:48:45 UTC) #26
Ted C
https://codereview.chromium.org/2175263002/diff/20001/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java File content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java (right): https://codereview.chromium.org/2175263002/diff/20001/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java#newcode72 content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java:72: mRootView.set(mContainerView.getRootView()); On 2016/07/27 00:48:45, Changwan Ryu wrote: > On ...
4 years, 4 months ago (2016-07-27 17:30:20 UTC) #28
Changwan Ryu
On 2016/07/27 17:30:20, Ted C wrote: > https://codereview.chromium.org/2175263002/diff/20001/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java > File > content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java > (right): > ...
4 years, 4 months ago (2016-07-28 02:02:18 UTC) #29
Changwan Ryu
On 2016/07/28 02:02:18, Changwan Ryu wrote: > On 2016/07/27 17:30:20, Ted C wrote: > > ...
4 years, 4 months ago (2016-07-28 07:12:55 UTC) #30
Ted C
lgtm w/ comment but at this point, I'll leave it to you to decide if ...
4 years, 4 months ago (2016-07-28 16:29:17 UTC) #31
Changwan Ryu
Thanks for the reviews. Submitting. https://codereview.chromium.org/2175263002/diff/40001/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java File content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java (right): https://codereview.chromium.org/2175263002/diff/40001/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java#newcode72 content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java:72: // anyways. On 2016/07/28 ...
4 years, 4 months ago (2016-08-01 05:45:57 UTC) #34
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.org/2175263002/60001
4 years, 4 months ago (2016-08-01 07:38:27 UTC) #39
commit-bot: I haz the power
Committed patchset #4 (id:60001)
4 years, 4 months ago (2016-08-01 07:41:52 UTC) #41
commit-bot: I haz the power
4 years, 4 months ago (2016-08-01 07:43:00 UTC) #43
Message was sent while issue was closed.
Patchset 4 (id:??) landed as
https://crrev.com/43ceb11f9abf67fea18e8a731a9ef61f5cfe22fc
Cr-Commit-Position: refs/heads/master@{#408925}

Powered by Google App Engine
This is Rietveld 408576698