summaryrefslogtreecommitdiffstats
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
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>
-rw-r--r--examples/webenginewidgets/browser/browserapplication.cpp44
-rw-r--r--examples/webenginewidgets/browser/browsermainwindow.cpp6
-rw-r--r--examples/webenginewidgets/browser/browsermainwindow.h1
-rw-r--r--examples/webenginewidgets/browser/settings.cpp8
-rw-r--r--examples/webenginewidgets/browser/settings.ui28
5 files changed, 63 insertions, 24 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"));
diff --git a/examples/webenginewidgets/browser/browsermainwindow.cpp b/examples/webenginewidgets/browser/browsermainwindow.cpp
index b50343942..98f61d6cb 100644
--- a/examples/webenginewidgets/browser/browsermainwindow.cpp
+++ b/examples/webenginewidgets/browser/browsermainwindow.cpp
@@ -269,6 +269,12 @@ bool BrowserMainWindow::restoreState(const QByteArray &state)
return true;
}
+void BrowserMainWindow::runScriptOnOpenViews(const QString &source)
+{
+ for (int i =0; i < tabWidget()->count(); ++i)
+ tabWidget()->webView(i)->page()->runJavaScript(source);
+}
+
void BrowserMainWindow::setupMenu()
{
new QShortcut(QKeySequence(Qt::Key_F6), this, SLOT(slotSwapFocus()));
diff --git a/examples/webenginewidgets/browser/browsermainwindow.h b/examples/webenginewidgets/browser/browsermainwindow.h
index 99a5e55b0..831504700 100644
--- a/examples/webenginewidgets/browser/browsermainwindow.h
+++ b/examples/webenginewidgets/browser/browsermainwindow.h
@@ -77,6 +77,7 @@ public:
WebView *currentTab() const;
QByteArray saveState(bool withTabs = true) const;
bool restoreState(const QByteArray &state);
+ Q_INVOKABLE void runScriptOnOpenViews(const QString &);
public slots:
void loadPage(const QString &url);
diff --git a/examples/webenginewidgets/browser/settings.cpp b/examples/webenginewidgets/browser/settings.cpp
index 6169f72a3..7ed5f707b 100644
--- a/examples/webenginewidgets/browser/settings.cpp
+++ b/examples/webenginewidgets/browser/settings.cpp
@@ -137,7 +137,7 @@ void SettingsDialog::loadFromSettings()
enableJavascript->setChecked(settings.value(QLatin1String("enableJavascript"), enableJavascript->isChecked()).toBool());
enablePlugins->setChecked(settings.value(QLatin1String("enablePlugins"), enablePlugins->isChecked()).toBool());
- userStyleSheet->setText(settings.value(QLatin1String("userStyleSheet")).toUrl().toString());
+ userStyleSheet->setPlainText(settings.value(QLatin1String("userStyleSheet")).toString());
enableScrollAnimator->setChecked(settings.value(QLatin1String("enableScrollAnimator"), enableScrollAnimator->isChecked()).toBool());
httpUserAgent->setText(settings.value(QLatin1String("httpUserAgent"), httpUserAgent->text()).toString());
settings.endGroup();
@@ -196,11 +196,7 @@ void SettingsDialog::saveToSettings()
settings.setValue(QLatin1String("enableJavascript"), enableJavascript->isChecked());
settings.setValue(QLatin1String("enablePlugins"), enablePlugins->isChecked());
settings.setValue(QLatin1String("enableScrollAnimator"), enableScrollAnimator->isChecked());
- QString userStyleSheetString = userStyleSheet->text();
- if (QFile::exists(userStyleSheetString))
- settings.setValue(QLatin1String("userStyleSheet"), QUrl::fromLocalFile(userStyleSheetString));
- else
- settings.setValue(QLatin1String("userStyleSheet"), QUrl(userStyleSheetString));
+ settings.setValue(QLatin1String("userStyleSheet"), userStyleSheet->toPlainText());
settings.setValue(QLatin1String("httpUserAgent"), httpUserAgent->text());
settings.endGroup();
diff --git a/examples/webenginewidgets/browser/settings.ui b/examples/webenginewidgets/browser/settings.ui
index 7cafdae4b..11bdee4d3 100644
--- a/examples/webenginewidgets/browser/settings.ui
+++ b/examples/webenginewidgets/browser/settings.ui
@@ -499,17 +499,27 @@
<string>Advanced</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_2">
+ <item row="2" column="1">
+ <widget class="QTextEdit" name="userStyleSheet"/>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="httpUserAgent"/>
+ </item>
<item row="0" column="0">
+ <widget class="QLabel" name="label_15">
+ <property name="text">
+ <string>HTTP User-Agent:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Style Sheet:</string>
</property>
</widget>
</item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="userStyleSheet"/>
- </item>
- <item row="2" column="1">
+ <item row="4" column="1">
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -522,16 +532,6 @@
</property>
</spacer>
</item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="httpUserAgent"/>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_15">
- <property name="text">
- <string>HTTP User-Agent:</string>
- </property>
- </widget>
- </item>
</layout>
</widget>
</widget>