summaryrefslogtreecommitdiffstats
path: root/src/core/api/qwebenginescriptcollection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/api/qwebenginescriptcollection.cpp')
-rw-r--r--src/core/api/qwebenginescriptcollection.cpp248
1 files changed, 248 insertions, 0 deletions
diff --git a/src/core/api/qwebenginescriptcollection.cpp b/src/core/api/qwebenginescriptcollection.cpp
new file mode 100644
index 000000000..087aad4cb
--- /dev/null
+++ b/src/core/api/qwebenginescriptcollection.cpp
@@ -0,0 +1,248 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qwebenginescriptcollection.h"
+#include "qwebenginescriptcollection_p.h"
+
+#include "renderer_host/user_resource_controller_host.h"
+
+using QtWebEngineCore::UserScript;
+
+/*!
+ \class QWebEngineScriptCollection
+ \inmodule QtWebEngineCore
+ \since 5.5
+ \brief The QWebEngineScriptCollection class represents a collection of user scripts.
+
+ QWebEngineScriptCollection manages a set of user scripts.
+
+ Use QWebEnginePage::scripts() and QWebEngineProfile::scripts() to access
+ the collection of scripts associated with a single page or a
+ number of pages sharing the same profile.
+
+ \sa {Script Injection}
+*/
+
+/*!
+ \fn QWebEngineScriptCollection::isEmpty() const
+
+ Returns \c true if the collection is empty; otherwise returns \c false.
+*/
+
+/*!
+ \fn QWebEngineScriptCollection::size() const
+
+ Returns the number of elements in the collection.
+*/
+
+QWebEngineScriptCollection::QWebEngineScriptCollection(QWebEngineScriptCollectionPrivate *collectionPrivate)
+ :d(collectionPrivate)
+{
+}
+
+/*!
+ Destroys the collection.
+*/
+QWebEngineScriptCollection::~QWebEngineScriptCollection()
+{
+}
+
+/*!
+ Returns the number of elements in the collection.
+ */
+
+int QWebEngineScriptCollection::count() const
+{
+ return d->count();
+}
+
+/*!
+ Returns \c true if the collection contains an occurrence of \a value; otherwise returns
+ \c false.
+ */
+
+bool QWebEngineScriptCollection::contains(const QWebEngineScript &value) const
+{
+ return d->contains(value);
+}
+
+/*!
+ * Returns the first script found in the collection with the name \a name, or a null
+ * QWebEngineScript if none was found.
+ * \note The order in which the script collection is traversed is undefined, which means this should
+ * be used when the unicity is guaranteed at the application level.
+ * \sa findScripts()
+ */
+
+QWebEngineScript QWebEngineScriptCollection::findScript(const QString &name) const
+{
+ return d->find(name);
+}
+
+/*!
+ Returns the list of scripts in the collection with the name \a name, or an empty list if none
+ was found.
+ */
+
+QList<QWebEngineScript> QWebEngineScriptCollection::findScripts(const QString &name) const
+{
+ return d->toList(name);
+}
+/*!
+ Inserts the script \a s into the collection.
+ */
+void QWebEngineScriptCollection::insert(const QWebEngineScript &s)
+{
+ d->insert(s);
+}
+/*!
+ Inserts scripts from the list \a list into the collection.
+ */
+void QWebEngineScriptCollection::insert(const QList<QWebEngineScript> &list)
+{
+ d->reserve(list.size());
+ for (const QWebEngineScript &s : list)
+ d->insert(s);
+}
+
+/*!
+ Removes \a script from the collection.
+
+ Returns \c true if the script was found and successfully removed from the collection; otherwise
+ returns \c false.
+ */
+bool QWebEngineScriptCollection::remove(const QWebEngineScript &script)
+{
+ return d->remove(script);
+}
+
+/*!
+ * Removes all scripts from this collection.
+ */
+void QWebEngineScriptCollection::clear()
+{
+ d->clear();
+}
+
+/*!
+ Returns a list with the values of the scripts used in this collection.
+ */
+QList<QWebEngineScript> QWebEngineScriptCollection::toList() const
+{
+ return d->toList();
+}
+
+
+QWebEngineScriptCollectionPrivate::QWebEngineScriptCollectionPrivate(QtWebEngineCore::UserResourceControllerHost *controller, QSharedPointer<QtWebEngineCore::WebContentsAdapter> webContents)
+ : m_scriptController(controller)
+ , m_contents(webContents)
+{
+}
+
+int QWebEngineScriptCollectionPrivate::count() const
+{
+ return m_scripts.count();
+}
+
+bool QWebEngineScriptCollectionPrivate::contains(const QWebEngineScript &s) const
+{
+ return m_scripts.contains(s);
+}
+
+void QWebEngineScriptCollectionPrivate::insert(const QWebEngineScript &script)
+{
+ if (!script.d || script.d->isNull())
+ return;
+ m_scripts.append(script);
+ if (!m_contents || m_contents->isInitialized())
+ m_scriptController->addUserScript(*script.d, m_contents.data());
+}
+
+bool QWebEngineScriptCollectionPrivate::remove(const QWebEngineScript &script)
+{
+ if (!script.d || script.d->isNull())
+ return false;
+ if (!m_contents || m_contents->isInitialized())
+ m_scriptController->removeUserScript(*script.d, m_contents.data());
+ return m_scripts.removeAll(script);
+}
+
+QList<QWebEngineScript> QWebEngineScriptCollectionPrivate::toList(const QString &scriptName) const
+{
+ if (scriptName.isNull())
+ return m_scripts;
+
+ QList<QWebEngineScript> ret;
+ for (const QWebEngineScript &script : qAsConst(m_scripts))
+ if (scriptName == script.name())
+ ret.append(script);
+ return ret;
+}
+
+QWebEngineScript QWebEngineScriptCollectionPrivate::find(const QString &name) const
+{
+ for (const QWebEngineScript &script : qAsConst(m_scripts))
+ if (name == script.name())
+ return script;
+ return QWebEngineScript();
+}
+
+void QWebEngineScriptCollectionPrivate::clear()
+{
+ m_scripts.clear();
+ if (!m_contents || m_contents->isInitialized())
+ m_scriptController->clearAllScripts(m_contents.data());
+}
+
+void QWebEngineScriptCollectionPrivate::reserve(int capacity)
+{
+ m_scripts.reserve(capacity);
+ if (!m_contents || m_contents->isInitialized())
+ m_scriptController->reserve(m_contents.data(), capacity);
+}
+
+void QWebEngineScriptCollectionPrivate::initializationFinished(QSharedPointer<QtWebEngineCore::WebContentsAdapter> contents)
+{
+ Q_ASSERT(m_contents);
+ Q_ASSERT(contents);
+
+ for (const QWebEngineScript &script : qAsConst(m_scripts))
+ m_scriptController->addUserScript(*script.d, contents.data());
+ m_contents = contents;
+}