summaryrefslogtreecommitdiffstats
path: root/examples/webenginewidgets/browser/browserapplication.cpp
diff options
context:
space:
mode:
authorPierre Rossi <pierre.rossi@theqtcompany.com>2015-01-09 11:59:22 +0100
committerPierre Rossi <pierre.rossi@theqtcompany.com>2015-03-20 12:14:52 +0000
commitaaa2ecff7e52a52ccd2e9c9c71a7703222341318 (patch)
tree19bf5f2e01e005517ec82adc48fec8a443b45d7b /examples/webenginewidgets/browser/browserapplication.cpp
parent3ef408a32c352d86fbc1346304e0a6ffbbe12c0b (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.cpp44
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"));