Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Java 9 Support #3

Open
marcuscraske opened this issue Aug 24, 2018 · 2 comments
Open

Java 9 Support #3

marcuscraske opened this issue Aug 24, 2018 · 2 comments

Comments

@marcuscraske
Copy link

marcuscraske commented Aug 24, 2018

The following example needs to be updated:

Class webEngineClazz = WebEngine.class;

Field debuggerField = webEngineClazz.getDeclaredField("debugger");
debuggerField.setAccessible(true);

Debugger debugger = (Debugger) debuggerField.get(webView.getEngine());
DevToolsDebuggerServer devToolsDebuggerServer.startDebugServer(debugger, 51742, 1);

To:

Class webEngineClazz = WebEngine.class;

Field debuggerField = webEngineClazz.getDeclaredField("debugger");
debuggerField.setAccessible(true);

Debugger debugger = (Debugger) debuggerField.get(webView.getEngine());
DevToolsDebuggerServer bridge = new DevToolsDebuggerServer(debugger, WEBVIEW_DEBUG_PORT, 0, null, null);

Using this class is not well documented, and just something I've used from the previous repo this was based upon.

When using the new class DevToolsJsBridge, as shown in the example, there's no way to pass a Debugger instance. The underlying method it uses, .impl_getDebugger(), on WebEngine is not supported in Java 9 (and presumed above).

Would it be possible to allow support to either pass in a Debugger, use reflection to extract the debugger field or check for which method is available (Java 9 seems to have getDebugger()?

Also what is the difference between DevToolsJsBridge and DevToolsDebuggerServer ?

@vsch
Copy link
Owner

vsch commented Aug 27, 2018

@limpygnome, I will modify the code for DevToolsJsBridge to take debugger argument.

The DevToolsDebuggerJsBridge is used by the by the debug code for interfacing JS script code to handler for implementation. Saving JS state, stopping event propagation and signalling page load complete is done through this interface.

  • The state can be used to save/load JS state.
  • Event propagation does not reach events implemented from Java so an alternate mechanism has to be used.
  • Additionally println, print and consoleLog is also passed through this interface.

The class provides a default implementation but can be customized if needed. Some functionality, like console logs have very convoluted implementation to allow creating a stack trace which needs to be passed to Chrome Dev Tools.

I have not looked at the code for a while but do remember the brittle nature of the debug interface which has to prevent recursion into the debugger interface under some conditions, otherwise JVM crashes and exits the application.

@ShaharYak
Copy link

@vsch
Please update the README file according to the right way.
I have been struggling to use the webview debugger but it can be much easier if the README will be up to date with a working example.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants