Allow configuring web view console logging via environment variable

This commit is contained in:
Martchus 2023-12-03 21:02:34 +01:00
parent 2ceb9a31b0
commit 01dceb588a
3 changed files with 22 additions and 34 deletions

View File

@ -512,6 +512,7 @@ It is possible to turn on logging of the underlying library by setting environme
* `LIB_SYNCTHING_CONNECTOR_LOG_API_REPLIES`: log replies from Syncthing's REST-API (except events)
* `LIB_SYNCTHING_CONNECTOR_LOG_EVENTS`: log events emitted by Syncthing's events REST-API endpoint
* `LIB_SYNCTHING_CONNECTOR_LOG_DIRS_OR_DEVS_RESETTED`: log when folders/devices are internally reset
* `SYNCTHINGWIDGETS_LOG_JS_CONSOLE`: log message from the JavaScript console of the built-in web view
### Useful environment variables for development
* `QT_QPA_PLATFORM`: set to `offscreen` to disable graphical output, e.g. to run tests in headless

View File

@ -108,16 +108,6 @@ if (USE_LIBSYNCTHING)
list(APPEND META_PUBLIC_COMPILE_DEFINITIONS SYNCTHINGWIDGETS_USE_LIBSYNCTHING)
endif ()
# configure logging JavaScript events to stderr
option(SYNCTHING_WIDGETS_LOG_JAVASCRIPT_CONSOLE "enables logging JavaScript events of webview to stderr" OFF)
if (SYNCTHING_WIDGETS_LOG_JAVASCRIPT_CONSOLE)
set_property(
SOURCE webview/webpage.cpp
APPEND
PROPERTY COMPILE_DEFINITIONS SYNCTHINGWIDGETS_LOG_JAVASCRIPT_CONSOLE)
message(STATUS_MESSAGE "JavaScript console of web view will be logged to stderr")
endif ()
# configure autostart .desktop file exec path
set(AUTOSTART_EXEC_PATH
""

View File

@ -33,9 +33,7 @@
#include <QWebEngineScriptCollection>
#endif
#ifdef SYNCTHINGWIDGETS_LOG_JAVASCRIPT_CONSOLE
#include <iostream>
#endif
using namespace Data;
@ -285,26 +283,25 @@ bool WebPage::acceptNavigationRequest(const QUrl &url, SYNCTHINGWIDGETS_WEB_PAGE
void WebPage::javaScriptConsoleMessage(
QWebEnginePage::JavaScriptConsoleMessageLevel level, const QString &message, int lineNumber, const QString &sourceID)
{
Q_UNUSED(level)
Q_UNUSED(lineNumber)
Q_UNUSED(sourceID)
#ifdef SYNCTHINGWIDGETS_LOG_JAVASCRIPT_CONSOLE
auto levelName = std::string_view();
switch (level) {
case QWebEnginePage::InfoMessageLevel:
levelName = "info";
break;
case QWebEnginePage::WarningMessageLevel:
levelName = "warning";
break;
case QWebEnginePage::ErrorMessageLevel:
levelName = "error";
break;
default:
levelName = "message";
static const auto loggingEnabled = qEnvironmentVariableIntValue(PROJECT_VARNAME_UPPER "_LOG_JS_CONSOLE");
if (loggingEnabled) {
auto levelName = std::string_view();
switch (level) {
case QWebEnginePage::InfoMessageLevel:
levelName = "info";
break;
case QWebEnginePage::WarningMessageLevel:
levelName = "warning";
break;
case QWebEnginePage::ErrorMessageLevel:
levelName = "error";
break;
default:
levelName = "message";
}
std::cerr << "JS " << levelName << ": line " << lineNumber << ": " << message.toLocal8Bit().data() << '\n';
}
std::cerr << "JS " << levelName << ": line " << lineNumber << ": " << message.toLocal8Bit().data() << '\n';
#endif
if (level == QWebEnginePage::InfoMessageLevel) {
processJavaScriptConsoleMessage(message);
}
@ -326,11 +323,11 @@ bool WebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &r
*/
void WebPage::javaScriptConsoleMessage(const QString &message, int lineNumber, const QString &sourceID)
{
Q_UNUSED(lineNumber)
Q_UNUSED(sourceID)
#ifdef SYNCTHINGWIDGETS_LOG_JAVASCRIPT_CONSOLE
std::cerr << "JS console: line " << lineNumber << ": " << message.toLocal8Bit().data() << '\n';
#endif
static const auto loggingEnabled = qEnvironmentVariableIntValue(PROJECT_VARNAME_UPPER "_LOG_JS_CONSOLE");
if (loggingEnabled) {
std::cerr << "JS console: line " << lineNumber << ": " << message.toLocal8Bit().data() << '\n';
}
processJavaScriptConsoleMessage(message);
}
#endif