diff options
author | Pierre Rossi <pierre.rossi@theqtcompany.com> | 2015-01-09 11:59:22 +0100 |
---|---|---|
committer | Pierre Rossi <pierre.rossi@theqtcompany.com> | 2015-03-20 12:14:52 +0000 |
commit | aaa2ecff7e52a52ccd2e9c9c71a7703222341318 (patch) | |
tree | 19bf5f2e01e005517ec82adc48fec8a443b45d7b /examples/webenginewidgets/browser/browserapplication.cpp | |
parent | 3ef408a32c352d86fbc1346304e0a6ffbbe12c0b (diff) |
Demo browser: re-add user stylesheets
Implemented in terms of user scripts.
Considering loading from a file URL would probably require
setting a different cross origin policy for the isolated
world we run this in, something we don't quite have yet, it
seems easier to just use an inline <style> block.
Change-Id: Ia6f7fbb96b925bcc3202b510689524abd93643fc
Reviewed-by: Andras Becsi <andras.becsi@theqtcompany.com>
Diffstat (limited to 'examples/webenginewidgets/browser/browserapplication.cpp')
-rw-r--r-- | examples/webenginewidgets/browser/browserapplication.cpp | 44 |
1 files changed, 40 insertions, 4 deletions
diff --git a/examples/webenginewidgets/browser/browserapplication.cpp b/examples/webenginewidgets/browser/browserapplication.cpp index ac3925d51..b1426ea24 100644 --- a/examples/webenginewidgets/browser/browserapplication.cpp +++ b/examples/webenginewidgets/browser/browserapplication.cpp @@ -68,6 +68,8 @@ #include <QWebEngineProfile> #include <QWebEngineSettings> +#include <QWebEngineScript> +#include <QWebEngineScriptCollection> #include <QtCore/QDebug> @@ -76,6 +78,41 @@ HistoryManager *BrowserApplication::s_historyManager = 0; QNetworkAccessManager *BrowserApplication::s_networkAccessManager = 0; BookmarksManager *BrowserApplication::s_bookmarksManager = 0; +static void setUserStyleSheet(QWebEngineProfile *profile, const QString &styleSheet, BrowserMainWindow *mainWindow = 0) +{ + Q_ASSERT(profile); + QString scriptName(QStringLiteral("userStyleSheet")); + QWebEngineScript script; + QList<QWebEngineScript> styleSheets = profile->scripts().findScripts(scriptName); + if (!styleSheets.isEmpty()) + script = styleSheets.first(); + Q_FOREACH (const QWebEngineScript &s, styleSheets) + profile->scripts().remove(s); + + if (script.isNull()) { + script.setName(scriptName); + script.setInjectionPoint(QWebEngineScript::DocumentReady); + script.setRunsOnSubFrames(true); + script.setWorldId(QWebEngineScript::ApplicationWorld); + } + QString source = QString::fromLatin1("(function() {"\ + "var css = document.getElementById(\"_qt_testBrowser_userStyleSheet\");"\ + "if (css == undefined) {"\ + " css = document.createElement(\"style\");"\ + " css.type = \"text/css\";"\ + " css.id = \"_qt_testBrowser_userStyleSheet\";"\ + " document.head.appendChild(css);"\ + "}"\ + "css.innerText = \"%1\";"\ + "})()").arg(styleSheet); + script.setSourceCode(source); + profile->scripts().insert(script); + // run the script on the already loaded views + // this has to be deferred as it could mess with the storage initialization on startup + if (mainWindow) + QMetaObject::invokeMethod(mainWindow, "runScriptOnOpenViews", Qt::QueuedConnection, Q_ARG(QString, source)); +} + BrowserApplication::BrowserApplication(int &argc, char **argv) : QApplication(argc, argv) , m_localServer(0) @@ -254,10 +291,9 @@ void BrowserApplication::loadSettings() defaultSettings->setAttribute(QWebEngineSettings::PluginsEnabled, settings.value(QLatin1String("enablePlugins"), true).toBool()); #endif -#if defined(QTWEBENGINE_USERSTYLESHEET) - QUrl url = settings.value(QLatin1String("userStyleSheet")).toUrl(); - defaultSettings->setUserStyleSheetUrl(url); -#endif + QString css = settings.value(QLatin1String("userStyleSheet")).toString(); + setUserStyleSheet(defaultProfile, css, mainWindow()); + defaultProfile->setHttpUserAgent(settings.value(QLatin1String("httpUserAgent")).toString()); settings.endGroup(); settings.beginGroup(QLatin1String("cookies")); |