diff options
Diffstat (limited to 'src/schemes')
| -rw-r--r-- | src/schemes/NullRpcSchemeHandler.hpp | 47 | ||||
| -rw-r--r-- | src/schemes/schemes.hpp | 16 |
2 files changed, 63 insertions, 0 deletions
diff --git a/src/schemes/NullRpcSchemeHandler.hpp b/src/schemes/NullRpcSchemeHandler.hpp new file mode 100644 index 0000000..b1d5168 --- /dev/null +++ b/src/schemes/NullRpcSchemeHandler.hpp @@ -0,0 +1,47 @@ +#pragma once + +#include <QWebEngineUrlRequestJob> +#include <QWebEngineUrlSchemeHandler> +#include <QtCore> +#include <qurlquery.h> + +class NullRPCSchemeHandler : public QWebEngineUrlSchemeHandler { + Q_OBJECT + +public: + static NullRPCSchemeHandler &instance() { + static NullRPCSchemeHandler handler; + return handler; + } + + void requestStarted(QWebEngineUrlRequestJob *job) override { + auto url = job->requestUrl(); + qDebug() << "REQ" << url << url.host(); + + if (url.host().isEmpty() || url.host() == "noop") { + job->reply("text/html", new QBuffer(job)); + return; + } + + if (url.host() == "log") { + qDebug() << url.query(); + job->reply("text/plain", new QBuffer(job)); + return; + } + + QUrlQuery query(url.query()); + emit message_received(url.host(), query); + + QByteArray data = "{}"; + QBuffer *buffer = new QBuffer(job); + buffer->setData(data); + buffer->open(QIODevice::ReadOnly); + job->reply("text/plain", buffer); + } + +signals: + void message_received(const QString &action, QUrlQuery params); + +private: + NullRPCSchemeHandler() = default; +}; diff --git a/src/schemes/schemes.hpp b/src/schemes/schemes.hpp new file mode 100644 index 0000000..f04dc4d --- /dev/null +++ b/src/schemes/schemes.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include <QWebEngineUrlScheme> +#include <qwebengineurlscheme.h> + +void register_nullrpc_scheme() { + QWebEngineUrlScheme scheme("nullrpc"); + scheme.setFlags( + QWebEngineUrlScheme::SecureScheme | QWebEngineUrlScheme::LocalScheme | + QWebEngineUrlScheme::LocalAccessAllowed | QWebEngineUrlScheme::ServiceWorkersAllowed | + QWebEngineUrlScheme::ContentSecurityPolicyIgnored | QWebEngineUrlScheme::FetchApiAllowed); + scheme.setSyntax(QWebEngineUrlScheme::Syntax::Path); + QWebEngineUrlScheme::registerScheme(scheme); +} + +void register_all_schemes() { register_nullrpc_scheme(); } |
