summaryrefslogtreecommitdiffstats
path: root/src/webengine/api/qquickwebengineview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/webengine/api/qquickwebengineview.cpp')
-rw-r--r--src/webengine/api/qquickwebengineview.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index acae4a11b..13eb63e07 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -48,9 +48,11 @@
#include "qquickwebengineprofile_p.h"
#include "qquickwebengineprofile_p_p.h"
#include "qquickwebenginesettings_p.h"
+#include "qquickwebenginescript_p_p.h"
#include "render_widget_host_view_qt_delegate_quick.h"
#include "render_widget_host_view_qt_delegate_quickwindow.h"
#include "ui_delegates_manager.h"
+#include "user_script_controller_host.h"
#include "web_contents_adapter.h"
#include "web_engine_error.h"
#include "web_engine_settings.h"
@@ -567,6 +569,9 @@ void QQuickWebEngineViewPrivate::ensureContentsAdapter()
adapter->initialize(this);
if (explicitUrl.isValid())
adapter->load(explicitUrl);
+ // push down the page's user scripts
+ Q_FOREACH (QQuickWebEngineScript *script, m_userScripts)
+ script->d_func()->bind(browserContextAdapter()->userScriptController(), adapter.data());
}
}
@@ -668,6 +673,16 @@ QQuickWebEngineSettings *QQuickWebEngineView::settings() const
return d->m_settings.data();
}
+QQmlListProperty<QQuickWebEngineScript> QQuickWebEngineView::userScripts()
+{
+ Q_D(QQuickWebEngineView);
+ return QQmlListProperty<QQuickWebEngineScript>(this, d,
+ d->userScripts_append,
+ d->userScripts_count,
+ d->userScripts_at,
+ d->userScripts_clear);
+}
+
void QQuickWebEngineViewPrivate::setProfile(QQuickWebEngineProfile *profile)
{
if (profile == m_profile)
@@ -911,6 +926,41 @@ void QQuickWebEngineView::itemChange(ItemChange change, const ItemChangeData &va
QQuickItem::itemChange(change, value);
}
+void QQuickWebEngineViewPrivate::userScripts_append(QQmlListProperty<QQuickWebEngineScript> *p, QQuickWebEngineScript *script)
+{
+ Q_ASSERT(p && p->data);
+ QQuickWebEngineViewPrivate *d = static_cast<QQuickWebEngineViewPrivate*>(p->data);
+ UserScriptControllerHost *scriptController = d->browserContextAdapter()->userScriptController();
+ d->m_userScripts.append(script);
+ // If the adapter hasn't been instantiated, we'll bind the scripts in ensureContentsAdapter()
+ if (!d->adapter)
+ return;
+ script->d_func()->bind(scriptController, d->adapter.data());
+}
+
+int QQuickWebEngineViewPrivate::userScripts_count(QQmlListProperty<QQuickWebEngineScript> *p)
+{
+ Q_ASSERT(p && p->data);
+ QQuickWebEngineViewPrivate *d = static_cast<QQuickWebEngineViewPrivate*>(p->data);
+ return d->m_userScripts.count();
+}
+
+QQuickWebEngineScript *QQuickWebEngineViewPrivate::userScripts_at(QQmlListProperty<QQuickWebEngineScript> *p, int idx)
+{
+ Q_ASSERT(p && p->data);
+ QQuickWebEngineViewPrivate *d = static_cast<QQuickWebEngineViewPrivate*>(p->data);
+ return d->m_userScripts.at(idx);
+}
+
+void QQuickWebEngineViewPrivate::userScripts_clear(QQmlListProperty<QQuickWebEngineScript> *p)
+{
+ Q_ASSERT(p && p->data);
+ QQuickWebEngineViewPrivate *d = static_cast<QQuickWebEngineViewPrivate*>(p->data);
+ UserScriptControllerHost *scriptController = d->browserContextAdapter()->userScriptController();
+ scriptController->clearAllScripts(d->adapter.data());
+ d->m_userScripts.clear();
+}
+
void QQuickWebEngineView::componentComplete()
{
Q_D(QQuickWebEngineView);