0

webview: Post web message listener to app looper

This was crashing with immediate_crash. Posting
the web message listener to the current looper thread
so that it rather crashes as a regular AndroidRuntime
exception.

Confirmed this worked by throwing a runtime
exception on my own custom WebViewCompat.WebMessageListener and
confirmed that the exception was being logged
out to AndroidRuntime instead of System.err from Chromium.

Bug: 1479041
Change-Id: I4edd0a55a5e752177b2cc71fcf2cc876cfc38ff7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4847457
Commit-Queue: Rupert Wiser <bewise@chromium.org>
Reviewed-by: Richard Coles <torne@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1193643}
This commit is contained in:
Rupert Ben Wiser
2023-09-07 17:05:36 +00:00
committed by Chromium LUCI CQ
parent fd4bfab8e3
commit f09b4360db

@ -21,7 +21,7 @@ import org.chromium.content_public.browser.MessagePort;
@Lifetime.Temporary
@JNINamespace("android_webview")
public class WebMessageListenerHolder {
private WebMessageListener mListener;
private final WebMessageListener mListener;
public WebMessageListenerHolder(@NonNull WebMessageListener listener) {
mListener = listener;
@ -30,7 +30,10 @@ public class WebMessageListenerHolder {
@CalledByNative
public void onPostMessage(MessagePayload payload, String sourceOrigin, boolean isMainFrame,
MessagePort[] ports, JsReplyProxy replyProxy) {
mListener.onPostMessage(payload, Uri.parse(sourceOrigin), isMainFrame, replyProxy, ports);
AwThreadUtils.postToCurrentLooper(() -> {
mListener.onPostMessage(
payload, Uri.parse(sourceOrigin), isMainFrame, replyProxy, ports);
});
}
public WebMessageListener getListener() {