Dear mailing list,

For reasons too complicated to explain here, i would like to have a
result of WebViewClient.shouldInterceptRequest be based on a result of
Javascript call in another WebView instance. As shouldInterceptRequest
is being invoked on a non-Main thread, while
WebView.evaluateJavascript is expected to be called on Main, i
actually tried it. Miracles don't happen: the shouldInterceptRequest
IOThread gets as far as enqueing a main thread task and waiting itself
on a condition. Main thread keeps running after evaluateJavascript
execution, but its ValueCallback never hits. Chrome Inspection of the
"another" WebView instance shows it frozen, expectedly deadlocked on
IOThread somewhere inside WebKit.

My skimming of the WebKit and Crosswalk sources shows that
shouldInterceptRequest starts its life as an asynchronous IOThread
task, so my question is: how insane it would be to try propagating
that asynchronicity through the JNI interface, so that it won't block
IOThread on return value?

FYI, the Android PoC is here
https://github.com/pavel-zdenek/android-testbrowser
which works out of the box because i shortcutted the JS eval. It will
deadlock on uncommenting
https://github.com/pavel-zdenek/android-testbrowser/blob/master/app/src/main/java/my/mybrowser/background/ScriptContainer.java#L111
(and removing the following line)


Best regards,

Pavel Zdenek
_______________________________________________
Crosswalk-dev mailing list
Crosswalk-dev@lists.crosswalk-project.org
https://lists.crosswalk-project.org/mailman/listinfo/crosswalk-dev

Reply via email to