/* * This file is part of smolbote. It's copyrighted by the contributors recorded * in the version control history of the file, available from its original * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote * * SPDX-License-Identifier: GPL-3.0 */ #include "parser.h" std::optional> parseComment(QString &line) { const QLatin1String separator(": "); if(line.contains(separator)) { const QStringList comment = line.mid(1).split(QLatin1String(": ")); return std::make_pair(comment.at(0).trimmed(), comment.at(1).trimmed()); } else return std::nullopt; } std::optional> parseResourceOption(const QString &option) { const bool exception = !option.startsWith(QLatin1String("~")); if(option.endsWith(QLatin1String("script"))) { // external scripts loaded via HTML script tag return std::make_pair(QWebEngineUrlRequestInfo::ResourceTypeScript, exception); } else if(option.endsWith(QLatin1String("image"))) { // regular images, typically loaded via HTML img tag return std::make_pair(QWebEngineUrlRequestInfo::ResourceTypeImage, exception); } else if(option.endsWith(QLatin1String("stylesheet"))) { // external CSS stylesheet files return std::make_pair(QWebEngineUrlRequestInfo::ResourceTypeStylesheet, exception); } else if(option.endsWith(QLatin1String("object"))) { // content handled by browser plugins, e.g. Flash or Java return std::make_pair(QWebEngineUrlRequestInfo::ResourceTypeObject, exception); } else if(option.endsWith(QLatin1String("xmlhttprequest"))) { // requests started using the XMLHttpRequest object or fetch() API return std::make_pair(QWebEngineUrlRequestInfo::ResourceTypeXhr, exception); } else if(option.endsWith(QLatin1String("object-subrequest"))) { // requests started by plugins like Flash return std::make_pair(QWebEngineUrlRequestInfo::ResourceTypePluginResource, exception); } else if(option.endsWith(QLatin1String("subdocument"))) { // embedded pages, usually included via HTML frames return std::make_pair(QWebEngineUrlRequestInfo::ResourceTypeSubFrame, exception); } else if(option.endsWith(QLatin1String("ping"))) { // requests started by or navigator.sendBeacon() return std::make_pair(QWebEngineUrlRequestInfo::ResourceTypePing, exception); } else if(option.endsWith(QLatin1String("websocket"))) { // requests initiated via WebSocket object qDebug("Resource type 'websocket' not available"); } else if(option.endsWith(QLatin1String("webrtc"))) { // connections opened via RTCPeerConnection instances to ICE servers qDebug("Resource type 'webrtc' not available"); } else if(option.endsWith(QLatin1String("document"))) { // the page itself return std::make_pair(QWebEngineUrlRequestInfo::ResourceTypeMainFrame, exception); } else if(option.endsWith(QLatin1String("other"))) { return std::make_pair(QWebEngineUrlRequestInfo::ResourceTypeUnknown, exception); } qDebug("TODO: %s", qUtf8Printable(option)); return std::nullopt; }