diff options
Diffstat (limited to 'src/core/api/qwebenginescriptcollection.cpp')
-rw-r--r-- | src/core/api/qwebenginescriptcollection.cpp | 248 |
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; +} |