Added error handling to onConsoleMessage.

This commit is contained in:
Koen J
2026-03-20 11:35:16 +01:00
parent 8982ea2289
commit 897ba8a560
@@ -183,6 +183,7 @@ class PackageBrowser: V8Package {
} }
_browser?.webChromeClient = object : WebChromeClient() { _browser?.webChromeClient = object : WebChromeClient() {
override fun onConsoleMessage(consoleMessage: ConsoleMessage?): Boolean { override fun onConsoleMessage(consoleMessage: ConsoleMessage?): Boolean {
try {
val raw = consoleMessage?.message().orEmpty() val raw = consoleMessage?.message().orEmpty()
val normalized = raw.trim().let { s -> val normalized = raw.trim().let { s ->
@@ -197,18 +198,26 @@ class PackageBrowser: V8Package {
} }
if (consoleMessage?.messageLevel() == ConsoleMessage.MessageLevel.ERROR) { if (consoleMessage?.messageLevel() == ConsoleMessage.MessageLevel.ERROR) {
val emsg = "Browser Error:${consoleMessage.message()} [${consoleMessage.lineNumber()}]" val emsg =
"Browser Error:${consoleMessage.message()} [${consoleMessage.lineNumber()}]"
Logger.e("PackageBrowser", emsg) Logger.e("PackageBrowser", emsg)
if (_plugin.config is SourcePluginConfig && _plugin.config.id == StateDeveloper.DEV_ID) if (_plugin.config is SourcePluginConfig && _plugin.config.id == StateDeveloper.DEV_ID)
StateDeveloper.instance.logDevException(StateDeveloper.instance.currentDevID ?: "", emsg) StateDeveloper.instance.logDevException(
StateDeveloper.instance.currentDevID ?: "", emsg
)
} else { } else {
val imsg = "Browser Log:${consoleMessage?.message()}" val imsg = "Browser Log:${consoleMessage?.message()}"
Logger.i("PackageBrowser", imsg) Logger.i("PackageBrowser", imsg)
if (_plugin.config is SourcePluginConfig && _plugin.config.id == StateDeveloper.DEV_ID) if (_plugin.config is SourcePluginConfig && _plugin.config.id == StateDeveloper.DEV_ID)
StateDeveloper.instance.logDevInfo(StateDeveloper.instance.currentDevID ?: "", imsg) StateDeveloper.instance.logDevInfo(
StateDeveloper.instance.currentDevID ?: "", imsg
)
} }
return super.onConsoleMessage(consoleMessage) return super.onConsoleMessage(consoleMessage)
} catch (e: Throwable) {
Logger.e(TAG, "Failed to handle onConsoleMessage", e)
}
} }
} }
} }
@@ -507,7 +516,13 @@ class PackageBrowser: V8Package {
val res = parsed.result val res = parsed.result
val cb = synchronized(_callbacks) { _callbacks.remove(id) } ?: return true val cb = synchronized(_callbacks) { _callbacks.remove(id) } ?: return true
StateApp.instance.scopeOrNull?.launch(Dispatchers.IO) { cb.invoke(res) } StateApp.instance.scopeOrNull?.launch(Dispatchers.IO) {
try {
cb.invoke(res)
} catch (e: Throwable) {
Logger.e(TAG, "Failed to invoke callback asynchronously", e)
}
}
return true return true
} }
"log" -> { "log" -> {
@@ -524,6 +539,7 @@ class PackageBrowser: V8Package {
private companion object { private companion object {
private const val CONSOLE_BRIDGE_PREFIX = "__GJ__:" private const val CONSOLE_BRIDGE_PREFIX = "__GJ__:"
private const val TAG = "PackageBrowser"
private fun String.quoteForJs(): String { private fun String.quoteForJs(): String {
val s = this val s = this