diff options
author | Michal Klocek <michal.klocek@qt.io> | 2020-08-26 16:25:00 +0200 |
---|---|---|
committer | Michal Klocek <michal.klocek@qt.io> | 2020-09-28 13:59:08 +0200 |
commit | 3bf3d3fe7bcfa7933ecc2ec2f1607f586b2b00d8 (patch) | |
tree | 85efe06d6dd9a6afb997b016007376a86c4a2aaf /src | |
parent | b598974f9cbde2688a75488d6920e474343c84d2 (diff) |
Cleanup qwebenginescript and qwebenginescriptcollection api
This patch cleans up script and collection apis:
* do not allocate user_script on heap, there is no need
for that.
* remove isNull(), which was used by collection.findScript(name)
* remove collection.size(), there is already collection.count()
* remove collection.findScript(name), user can use findScripts(name)
which returns list of scripts or empty list if not found
* collection.findScripts(name) is simply collection.find(name)
[ChangeLog] Removed QWebEngineScriptCollection::findScript(name),
use QWebEngineScriptCollection::find(name) instead.
Change-Id: Iecf8f1d7c26275b9ce3a1ea97cf4bd74b17f681e
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/core/api/qwebenginescript.cpp | 11 | ||||
-rw-r--r-- | src/core/api/qwebenginescript.h | 4 | ||||
-rw-r--r-- | src/core/api/qwebenginescriptcollection.cpp | 27 | ||||
-rw-r--r-- | src/core/api/qwebenginescriptcollection.h | 8 | ||||
-rw-r--r-- | src/core/api/qwebenginescriptcollection_p.h | 4 | ||||
-rw-r--r-- | src/core/common/user_script_data.cpp | 2 | ||||
-rw-r--r-- | src/core/common/user_script_data.h | 6 | ||||
-rw-r--r-- | src/core/renderer_host/user_resource_controller_host.cpp | 4 | ||||
-rw-r--r-- | src/core/user_script.cpp | 110 | ||||
-rw-r--r-- | src/core/user_script.h | 16 | ||||
-rw-r--r-- | src/webengine/api/qquickwebenginescriptcollection.cpp | 23 | ||||
-rw-r--r-- | src/webengine/api/qquickwebenginescriptcollection.h | 11 |
12 files changed, 52 insertions, 174 deletions
diff --git a/src/core/api/qwebenginescript.cpp b/src/core/api/qwebenginescript.cpp index e3917566a..650ad5c53 100644 --- a/src/core/api/qwebenginescript.cpp +++ b/src/core/api/qwebenginescript.cpp @@ -146,14 +146,6 @@ QWebEngineScript &QWebEngineScript::operator=(const QWebEngineScript &other) } /*! - Returns \c true is the script is null; otherwise returns \c false. -*/ -bool QWebEngineScript::isNull() const -{ - return d->isNull(); -} - -/*! * Returns the name of the script. Can be useful to retrieve a particular script from a * QWebEngineScriptCollection. * @@ -305,9 +297,6 @@ QWebEngineScript::QWebEngineScript(const UserScript &coreScript) #ifndef QT_NO_DEBUG_STREAM QDebug operator<<(QDebug d, const QWebEngineScript &script) { - if (script.isNull()) - return d.maybeSpace() << "QWebEngineScript()"; - d.nospace() << "QWebEngineScript(" << script.name() << ", "; switch (script.injectionPoint()) { case QWebEngineScript::DocumentCreation: diff --git a/src/core/api/qwebenginescript.h b/src/core/api/qwebenginescript.h index 42a98e3e2..0c1849dac 100644 --- a/src/core/api/qwebenginescript.h +++ b/src/core/api/qwebenginescript.h @@ -85,8 +85,6 @@ public: QWebEngineScript &operator=(const QWebEngineScript &other); - bool isNull() const; - QString name() const; void setName(const QString &); @@ -119,7 +117,7 @@ private: QSharedDataPointer<QtWebEngineCore::UserScript> d; }; -Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QWebEngineScript) +Q_DECLARE_TYPEINFO(QWebEngineScript, Q_MOVABLE_TYPE); #ifndef QT_NO_DEBUG_STREAM Q_WEBENGINECORE_EXPORT QDebug operator<<(QDebug, const QWebEngineScript &); diff --git a/src/core/api/qwebenginescriptcollection.cpp b/src/core/api/qwebenginescriptcollection.cpp index 087aad4cb..6dfa12c46 100644 --- a/src/core/api/qwebenginescriptcollection.cpp +++ b/src/core/api/qwebenginescriptcollection.cpp @@ -103,24 +103,11 @@ bool QWebEngineScriptCollection::contains(const QWebEngineScript &value) const } /*! - * 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 +QList<QWebEngineScript> QWebEngineScriptCollection::find(const QString &name) const { return d->toList(name); } @@ -187,8 +174,6 @@ bool QWebEngineScriptCollectionPrivate::contains(const QWebEngineScript &s) cons 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()); @@ -196,8 +181,6 @@ void QWebEngineScriptCollectionPrivate::insert(const QWebEngineScript &script) 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); @@ -215,14 +198,6 @@ QList<QWebEngineScript> QWebEngineScriptCollectionPrivate::toList(const QString 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(); diff --git a/src/core/api/qwebenginescriptcollection.h b/src/core/api/qwebenginescriptcollection.h index 79c3e7f19..2a1ab7dbf 100644 --- a/src/core/api/qwebenginescriptcollection.h +++ b/src/core/api/qwebenginescriptcollection.h @@ -52,17 +52,13 @@ class QWebEngineScriptCollectionPrivate; class Q_WEBENGINECORE_EXPORT QWebEngineScriptCollection { public: ~QWebEngineScriptCollection(); + bool isEmpty() const { return !count(); } int count() const; - inline int size() const { return count(); } bool contains(const QWebEngineScript &value) const; - - QWebEngineScript findScript(const QString &name) const; - QList<QWebEngineScript> findScripts(const QString &name) const; - + QList<QWebEngineScript> find(const QString &name) const; void insert(const QWebEngineScript &); void insert(const QList<QWebEngineScript> &list); - bool remove(const QWebEngineScript &); void clear(); diff --git a/src/core/api/qwebenginescriptcollection_p.h b/src/core/api/qwebenginescriptcollection_p.h index fe71b6bc3..442f8fe3d 100644 --- a/src/core/api/qwebenginescriptcollection_p.h +++ b/src/core/api/qwebenginescriptcollection_p.h @@ -66,14 +66,10 @@ QT_BEGIN_NAMESPACE class Q_WEBENGINECORE_PRIVATE_EXPORT QWebEngineScriptCollectionPrivate { public: QWebEngineScriptCollectionPrivate(QtWebEngineCore::UserResourceControllerHost *, QSharedPointer<QtWebEngineCore::WebContentsAdapter> = QSharedPointer<QtWebEngineCore::WebContentsAdapter>()); - int count() const; bool contains(const QWebEngineScript &) const; QList<QWebEngineScript> toList(const QString &scriptName = QString()) const; - QWebEngineScript find(const QString & name) const; - void initializationFinished(QSharedPointer<QtWebEngineCore::WebContentsAdapter> contents); - void insert(const QWebEngineScript &); bool remove(const QWebEngineScript &); void clear(); diff --git a/src/core/common/user_script_data.cpp b/src/core/common/user_script_data.cpp index 6f4b8cb05..68840d2fa 100644 --- a/src/core/common/user_script_data.cpp +++ b/src/core/common/user_script_data.cpp @@ -41,8 +41,6 @@ #include "base/pickle.h" UserScriptData::UserScriptData() : injectionPoint(AfterLoad) - , injectForSubframes(false) - , worldId(1) { static uint64_t idCount = 0; scriptId = idCount++; diff --git a/src/core/common/user_script_data.h b/src/core/common/user_script_data.h index 8d98890e3..a2ca8c2ea 100644 --- a/src/core/common/user_script_data.h +++ b/src/core/common/user_script_data.h @@ -56,9 +56,9 @@ struct UserScriptData { std::string source; GURL url; - /*InjectionPoint*/uint8_t injectionPoint; - bool injectForSubframes; - uint worldId; + uint8_t injectionPoint = AfterLoad; + bool injectForSubframes = false; + uint worldId = 1; uint64_t scriptId; std::vector<std::string> globs; std::vector<std::string> excludeGlobs; diff --git a/src/core/renderer_host/user_resource_controller_host.cpp b/src/core/renderer_host/user_resource_controller_host.cpp index 6b9bb63fe..0c0818ba9 100644 --- a/src/core/renderer_host/user_resource_controller_host.cpp +++ b/src/core/renderer_host/user_resource_controller_host.cpp @@ -116,8 +116,6 @@ void UserResourceControllerHost::RenderProcessObserverHelper::RenderProcessHostD void UserResourceControllerHost::addUserScript(const UserScript &script, WebContentsAdapter *adapter) { - if (script.isNull()) - return; // Global scripts should be dispatched to all our render processes. const bool isProfileWideScript = !adapter; if (isProfileWideScript) { @@ -150,8 +148,6 @@ void UserResourceControllerHost::addUserScript(const UserScript &script, WebCont bool UserResourceControllerHost::removeUserScript(const UserScript &script, WebContentsAdapter *adapter) { - if (script.isNull()) - return false; const bool isProfileWideScript = !adapter; if (isProfileWideScript) { QList<UserScript>::iterator it = std::find(m_profileWideScripts.begin(), m_profileWideScripts.end(), script); diff --git a/src/core/user_script.cpp b/src/core/user_script.cpp index 6f5828cbf..f4f320d4c 100644 --- a/src/core/user_script.cpp +++ b/src/core/user_script.cpp @@ -74,28 +74,13 @@ UserScript::UserScript() { } -UserScript::UserScript(const UserScript &other) - : QSharedData(other) -{ - if (other.isNull()) - return; - scriptData.reset(new UserScriptData(*other.scriptData)); - m_name = other.m_name; - m_url = other.m_url; -} +UserScript::UserScript(const UserScript &other) = default; -UserScript::~UserScript() -{ -} +UserScript::~UserScript() = default; UserScript &UserScript::operator=(const UserScript &other) { - if (other.isNull()) { - scriptData.reset(); - m_name = QString(); - return *this; - } - scriptData.reset(new UserScriptData(*other.scriptData)); + m_scriptData = other.m_scriptData; m_name = other.m_name; m_url = other.m_url; return *this; @@ -109,21 +94,17 @@ QString UserScript::name() const void UserScript::setName(const QString &name) { m_name = name; - initData(); - scriptData->url = GURL(QStringLiteral("userScript:%1").arg(name).toStdString()); + m_scriptData.url = GURL(QStringLiteral("userScript:%1").arg(name).toStdString()); } QString UserScript::sourceCode() const { - if (isNull()) - return QString(); - return toQt(scriptData->source); + return toQt(m_scriptData.source); } void UserScript::setSourceCode(const QString &source) { - initData(); - scriptData->source = source.toStdString(); + m_scriptData.source = source.toStdString(); parseMetadataHeader(); } @@ -139,83 +120,56 @@ void UserScript::setSourceUrl(const QUrl &url) UserScript::InjectionPoint UserScript::injectionPoint() const { - if (isNull()) - return UserScript::AfterLoad; - return static_cast<UserScript::InjectionPoint>(scriptData->injectionPoint); + return static_cast<UserScript::InjectionPoint>(m_scriptData.injectionPoint); } void UserScript::setInjectionPoint(UserScript::InjectionPoint p) { - initData(); - scriptData->injectionPoint = p; + m_scriptData.injectionPoint = p; } -uint UserScript::worldId() const +quint32 UserScript::worldId() const { - if (isNull()) - return 1; - return scriptData->worldId; + return m_scriptData.worldId; } -void UserScript::setWorldId(uint id) +void UserScript::setWorldId(quint32 id) { - initData(); - scriptData->worldId = id; + m_scriptData.worldId = id; } bool UserScript::runsOnSubFrames() const { - if (isNull()) - return false; - return scriptData->injectForSubframes; + return m_scriptData.injectForSubframes; } void UserScript::setRunsOnSubFrames(bool on) { - initData(); - scriptData->injectForSubframes = on; -} - -bool UserScript::operator==(const UserScript &other) const -{ - if (isNull() != other.isNull()) - return false; - if (isNull()) // neither is valid - return true; - return worldId() == other.worldId() - && runsOnSubFrames() == other.runsOnSubFrames() - && injectionPoint() == other.injectionPoint() - && name() == other.name() - && sourceCode() == other.sourceCode() - && sourceUrl() == other.sourceUrl(); + m_scriptData.injectForSubframes = on; } -void UserScript::initData() +const UserScriptData &UserScript::data() const { - if (scriptData.isNull()) - scriptData.reset(new UserScriptData); + return m_scriptData; } -bool UserScript::isNull() const -{ - return scriptData.isNull(); -} - -UserScriptData &UserScript::data() const +bool UserScript::operator==(const UserScript &other) const { - return *(scriptData.data()); + return worldId() == other.worldId() && runsOnSubFrames() == other.runsOnSubFrames() + && injectionPoint() == other.injectionPoint() && name() == other.name() + && sourceCode() == other.sourceCode() && sourceUrl() == other.sourceUrl(); } void UserScript::parseMetadataHeader() { // Clear previous values - scriptData->globs.clear(); - scriptData->excludeGlobs.clear(); - scriptData->urlPatterns.clear(); + m_scriptData.globs.clear(); + m_scriptData.excludeGlobs.clear(); + m_scriptData.urlPatterns.clear(); // Logic taken from Chromium (extensions/browser/user_script_loader.cc) // http://wiki.greasespot.net/Metadata_block - const std::string &script_text = scriptData->source; + const std::string &script_text = m_scriptData.source; base::StringPiece line; size_t line_start = 0; size_t line_end = line_start; @@ -261,7 +215,7 @@ void UserScript::parseMetadataHeader() base::ReplaceSubstringsAfterOffset(&value, 0, "\\", "\\\\"); base::ReplaceSubstringsAfterOffset(&value, 0, "?", "\\?"); } - scriptData->globs.push_back(value); + m_scriptData.globs.push_back(value); } else if (GetDeclarationValue(line, kExcludeDeclaration, &value)) { if (value.front() != '/' || value.back() != '/') { // The greasemonkey spec only allows for wildcards (*), so @@ -269,16 +223,16 @@ void UserScript::parseMetadataHeader() base::ReplaceSubstringsAfterOffset(&value, 0, "\\", "\\\\"); base::ReplaceSubstringsAfterOffset(&value, 0, "?", "\\?"); } - scriptData->excludeGlobs.push_back(value); + m_scriptData.excludeGlobs.push_back(value); } else if (GetDeclarationValue(line, kMatchDeclaration, &value)) { - scriptData->urlPatterns.push_back(value); + m_scriptData.urlPatterns.push_back(value); } else if (GetDeclarationValue(line, kRunAtDeclaration, &value)) { if (value == kRunAtDocumentStartValue) - scriptData->injectionPoint = DocumentElementCreation; + m_scriptData.injectionPoint = DocumentElementCreation; else if (value == kRunAtDocumentEndValue) - scriptData->injectionPoint = DocumentLoadFinished; + m_scriptData.injectionPoint = DocumentLoadFinished; else if (value == kRunAtDocumentIdleValue) - scriptData->injectionPoint = AfterLoad; + m_scriptData.injectionPoint = AfterLoad; } } @@ -287,8 +241,8 @@ void UserScript::parseMetadataHeader() // If no patterns were specified, default to @include *. This is what // Greasemonkey does. - if (scriptData->globs.empty() && scriptData->urlPatterns.empty()) - scriptData->globs.push_back("*"); + if (m_scriptData.globs.empty() && m_scriptData.urlPatterns.empty()) + m_scriptData.globs.push_back("*"); } } // namespace QtWebEngineCore diff --git a/src/core/user_script.h b/src/core/user_script.h index 07fba90f4..4970641e1 100644 --- a/src/core/user_script.h +++ b/src/core/user_script.h @@ -52,7 +52,7 @@ #define USER_SCRIPT_H #include "qtwebenginecoreglobal_p.h" - +#include "common/user_script_data.h" #include <QtCore/QScopedPointer> #include <QtCore/QSharedData> #include <QtCore/QString> @@ -64,7 +64,8 @@ namespace QtWebEngineCore { class UserResourceControllerHost; -class Q_WEBENGINECORE_PRIVATE_EXPORT UserScript : public QSharedData { +class UserScript : public QSharedData +{ public: enum InjectionPoint { AfterLoad, @@ -77,8 +78,6 @@ public: ~UserScript(); UserScript &operator=(const UserScript &other); - bool isNull() const; - QString name() const; void setName(const QString &); @@ -91,8 +90,8 @@ public: InjectionPoint injectionPoint() const; void setInjectionPoint(InjectionPoint); - uint worldId() const; - void setWorldId(uint id); + quint32 worldId() const; + void setWorldId(quint32 id); bool runsOnSubFrames() const; void setRunsOnSubFrames(bool on); @@ -100,12 +99,11 @@ public: bool operator==(const UserScript &) const; private: - void initData(); - UserScriptData &data() const; + const UserScriptData &data() const; void parseMetadataHeader(); friend class UserResourceControllerHost; - QScopedPointer<UserScriptData> scriptData; + UserScriptData m_scriptData; QString m_name; QUrl m_url; }; diff --git a/src/webengine/api/qquickwebenginescriptcollection.cpp b/src/webengine/api/qquickwebenginescriptcollection.cpp index 4e4fb6579..c0939d72f 100644 --- a/src/webengine/api/qquickwebenginescriptcollection.cpp +++ b/src/webengine/api/qquickwebenginescriptcollection.cpp @@ -87,24 +87,14 @@ QQuickWebEngineScriptCollection::QQuickWebEngineScriptCollection( QQuickWebEngineScriptCollection::~QQuickWebEngineScriptCollection() { } -int QQuickWebEngineScriptCollection::count() const -{ - return d->count(); -} - bool QQuickWebEngineScriptCollection::contains(const QWebEngineScript &value) const { return d->contains(value); } -QWebEngineScript QQuickWebEngineScriptCollection::findScript(const QString &name) const +QList<QWebEngineScript> QQuickWebEngineScriptCollection::find(const QString &name) const { - return d->findScript(name); -} - -QList<QWebEngineScript> QQuickWebEngineScriptCollection::findScripts(const QString &name) const -{ - return d->findScripts(name); + return d->find(name); } void QQuickWebEngineScriptCollection::insert(const QWebEngineScript &s) @@ -127,14 +117,9 @@ void QQuickWebEngineScriptCollection::clear() d->clear(); } -QList<QWebEngineScript> QQuickWebEngineScriptCollection::toList() const -{ - return d->toList(); -} - QJSValue QQuickWebEngineScriptCollection::collection() const { - const QList<QWebEngineScript> &list = toList(); + const QList<QWebEngineScript> &list = d->toList(); QQmlContext *context = QQmlEngine::contextForObject(this); QQmlEngine *engine = context->engine(); QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(engine); @@ -164,7 +149,7 @@ void QQuickWebEngineScriptCollection::setCollection(const QJSValue &scripts) } scriptList.append(s); } - if (scriptList != toList()) { + if (scriptList != d->toList()) { clear(); insert(scriptList); Q_EMIT collectionChanged(); diff --git a/src/webengine/api/qquickwebenginescriptcollection.h b/src/webengine/api/qquickwebenginescriptcollection.h index a3e1695c3..8ae3dc02b 100644 --- a/src/webengine/api/qquickwebenginescriptcollection.h +++ b/src/webengine/api/qquickwebenginescriptcollection.h @@ -57,24 +57,17 @@ class Q_WEBENGINE_EXPORT QQuickWebEngineScriptCollection : public QObject public: Q_PROPERTY(QJSValue collection READ collection WRITE setCollection NOTIFY collectionChanged) ~QQuickWebEngineScriptCollection(); - bool isEmpty() const { return !count(); } - int count() const; - inline int size() const { return count(); } - bool contains(const QWebEngineScript &value) const; - - Q_INVOKABLE QWebEngineScript findScript(const QString &name) const; - Q_INVOKABLE QList<QWebEngineScript> findScripts(const QString &name) const; + Q_INVOKABLE bool contains(const QWebEngineScript &value) const; + Q_INVOKABLE QList<QWebEngineScript> find(const QString &name) const; Q_INVOKABLE void insert(const QWebEngineScript &); Q_INVOKABLE void insert(const QList<QWebEngineScript> &list); - Q_INVOKABLE bool remove(const QWebEngineScript &); Q_INVOKABLE void clear(); QJSValue collection() const; void setCollection(const QJSValue &scripts); - QList<QWebEngineScript> toList() const; Q_SIGNALS: void collectionChanged(); |