/**************************************************************************** ** ** 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 QtWebEngineWidgets \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. */ /*! \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 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 &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 QWebEngineScriptCollection::toList() const { return d->toList(); } QWebEngineScriptCollectionPrivate::QWebEngineScriptCollectionPrivate(QtWebEngineCore::UserResourceControllerHost *controller, QSharedPointer 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 QWebEngineScriptCollectionPrivate::toList(const QString &scriptName) const { if (scriptName.isNull()) return m_scripts; QList 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 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; }