summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/api/qwebengineframe.h1
-rw-r--r--src/webenginequick/api/qquickwebengineframe.cpp11
-rw-r--r--src/webenginequick/api/qquickwebengineframe_p.h2
-rw-r--r--src/webenginequick/doc/src/webengineframe.qdoc8
-rw-r--r--tests/auto/quick/publicapi/tst_publicapi.cpp4
-rw-r--r--tests/auto/quick/qmltests/data/tst_frames.qml26
6 files changed, 47 insertions, 5 deletions
diff --git a/src/core/api/qwebengineframe.h b/src/core/api/qwebengineframe.h
index fa277c44f..126b8320b 100644
--- a/src/core/api/qwebengineframe.h
+++ b/src/core/api/qwebengineframe.h
@@ -30,6 +30,7 @@ class QWebEngineFrame
Q_PROPERTY(QUrl url READ url FINAL)
Q_PROPERTY(QSizeF size READ size FINAL)
Q_PROPERTY(bool isMainFrame READ isMainFrame FINAL)
+ Q_PROPERTY(QList<QWebEngineFrame> children READ children)
public:
QWebEngineFrame() = default;
diff --git a/src/webenginequick/api/qquickwebengineframe.cpp b/src/webenginequick/api/qquickwebengineframe.cpp
index 44476e31b..8bab7952e 100644
--- a/src/webenginequick/api/qquickwebengineframe.cpp
+++ b/src/webenginequick/api/qquickwebengineframe.cpp
@@ -23,6 +23,17 @@ QQuickWebEngineFrame::QQuickWebEngineFrame(
{
}
+QList<QQuickWebEngineFrame> QQuickWebEngineFrame::children() const
+{
+ auto adapter = m_adapter.lock();
+ if (!adapter)
+ return QList<QQuickWebEngineFrame>();
+ QList<QQuickWebEngineFrame> result;
+ for (auto childId : adapter->frameChildren(m_id))
+ result.push_back(QQuickWebEngineFrame{ m_adapter, childId });
+ return result;
+}
+
void QQuickWebEngineFrame::runJavaScript(const QString &script, const QJSValue &callback)
{
QWebEngineFrame::runJavaScript(script, QWebEngineScript::MainWorld, callback);
diff --git a/src/webenginequick/api/qquickwebengineframe_p.h b/src/webenginequick/api/qquickwebengineframe_p.h
index a4fb64ecc..9d7173e1e 100644
--- a/src/webenginequick/api/qquickwebengineframe_p.h
+++ b/src/webenginequick/api/qquickwebengineframe_p.h
@@ -26,6 +26,7 @@ QT_BEGIN_NAMESPACE
class QQuickWebEngineFrame : public QWebEngineFrame
{
Q_GADGET_EXPORT(Q_WEBENGINEQUICK_EXPORT)
+ Q_PROPERTY(QList<QQuickWebEngineFrame> children READ children CONSTANT REVISION(6, 10) FINAL)
QML_VALUE_TYPE(webEngineFrame)
QML_ADDED_IN_VERSION(6, 8)
QML_FOREIGN(QWebEngineFrame)
@@ -38,6 +39,7 @@ public:
Q_WEBENGINEQUICK_EXPORT Q_INVOKABLE void runJavaScript(const QString &script, quint32 worldId,
const QJSValue &callback);
Q_WEBENGINEQUICK_EXPORT Q_INVOKABLE void printToPdf(const QJSValue &callback);
+ QList<QQuickWebEngineFrame> children() const;
private:
friend class QQuickWebEngineView;
diff --git a/src/webenginequick/doc/src/webengineframe.qdoc b/src/webenginequick/doc/src/webengineframe.qdoc
index daa6aad23..eae2aa6f8 100644
--- a/src/webenginequick/doc/src/webengineframe.qdoc
+++ b/src/webenginequick/doc/src/webengineframe.qdoc
@@ -73,6 +73,14 @@
*/
/*!
+ \qmlproperty list<webEngineFrame> webEngineFrame::children
+ \since QtWebEngine 6.10
+ Returns a list of the frame's children in an arbitrary order.
+
+ If the frame could not be found, returns an empty list.
+*/
+
+/*!
\qmlmethod void webEngineFrame::runJavaScript(string script, variant callback)
\qmlmethod void webEngineFrame::runJavaScript(string script, uint worldId, variant callback)
diff --git a/tests/auto/quick/publicapi/tst_publicapi.cpp b/tests/auto/quick/publicapi/tst_publicapi.cpp
index 98bc442e9..7aef6d3a3 100644
--- a/tests/auto/quick/publicapi/tst_publicapi.cpp
+++ b/tests/auto/quick/publicapi/tst_publicapi.cpp
@@ -111,6 +111,8 @@ static const QStringList hardcodedTypes = QStringList()
<< "QQmlComponent*"
<< "QMultiMap<QByteArray,QByteArray>"
<< "QList<QWebEnginePermission>"
+ << "QList<QWebEngineFrame>"
+ << "QList<QQuickWebEngineFrame>"
#if QT_CONFIG(webengine_extensions)
<< "QList<QWebEngineExtensionInfo>"
#endif
@@ -998,6 +1000,7 @@ static const QStringList expectedAPI = QStringList()
<< "QWebEngineFrame.isValid --> bool"
<< "QWebEngineFrame.name --> QString"
<< "QWebEngineFrame.printToPdf(QJSValue) --> void"
+ << "QWebEngineFrame.children --> QList<QWebEngineFrame>"
<< "QWebEngineFrame.printToPdf(QString) --> void"
<< "QWebEngineFrame.runJavaScript(QString) --> void"
<< "QWebEngineFrame.runJavaScript(QString,uint) --> void"
@@ -1005,6 +1008,7 @@ static const QStringList expectedAPI = QStringList()
<< "QWebEngineFrame.runJavaScript(QString,uint,QJSValue) --> void"
<< "QWebEngineFrame.size --> QSizeF"
<< "QWebEngineFrame.url --> QUrl"
+ << "QQuickWebEngineFrame.children --> QList<QQuickWebEngineFrame>"
<< "QQuickWebEngineFrame.printToPdf(QJSValue) --> void"
<< "QQuickWebEngineFrame.runJavaScript(QString,QJSValue) --> void"
<< "QQuickWebEngineFrame.runJavaScript(QString,uint,QJSValue) --> void"
diff --git a/tests/auto/quick/qmltests/data/tst_frames.qml b/tests/auto/quick/qmltests/data/tst_frames.qml
index b09016e8c..e3bc345ec 100644
--- a/tests/auto/quick/qmltests/data/tst_frames.qml
+++ b/tests/auto/quick/qmltests/data/tst_frames.qml
@@ -19,7 +19,7 @@ TestWebEngineView {
verify(webEngineView.mainFrame.isValid);
compare(webEngineView.mainFrame.name,"");
compare(webEngineView.mainFrame.htmlName,"");
- //compare(webEngineView.mainFrame.children().size(), 0) // TODO: broken
+ compare(webEngineView.mainFrame.children.length, 0);
compare(webEngineView.mainFrame.url,"");
compare(webEngineView.mainFrame.size, Qt.size(-1,-1));
verify(webEngineView.mainFrame.isMainFrame);
@@ -31,22 +31,38 @@ TestWebEngineView {
verify(webEngineView.mainFrame.isValid);
compare(webEngineView.mainFrame.name,"test-main-frame");
compare(webEngineView.mainFrame.htmlName,"");
- //compare(webEngineView.mainFrame.children().size(), 0) // TODO: broken
compare(webEngineView.mainFrame.url,Qt.resolvedUrl("iframes.html"));
//compare(webEngineView.mainFrame.size, Qt.size(200,400)); // TODO: broken
verify(webEngineView.mainFrame.isMainFrame);
- }
+ compare(webEngineView.mainFrame.children.length, 2);
+ var subFrame = webEngineView.mainFrame.children[0];
+ compare(subFrame.name,"test-subframe1");
+ verify(subFrame.isValid);
+ compare(subFrame.htmlName,"iframe1-300x200");
+ compare(subFrame.children.length, 0);
+ compare(subFrame.url,Qt.url("about:blank"));
+ compare(subFrame.size, Qt.size(300,200));
+ subFrame = webEngineView.mainFrame.children[1];
+ compare(subFrame.name,"test-subframe2");
+ verify(subFrame.isValid);
+ compare(subFrame.htmlName,"iframe2-350x250");
+ compare(subFrame.children.length, 0);
+ compare(subFrame.url,Qt.url("about:blank"));
+ compare(subFrame.size, Qt.size(350,250));
+ verify(!subFrame.isMainFrame);
+ }
function test_findFrame() {
webEngineView.url = Qt.resolvedUrl("iframes.html");
verify(webEngineView.waitForLoadSucceeded());
verify(webEngineView.mainFrame.isValid);
compare(webEngineView.mainFrame.name,"test-main-frame");
+ compare(webEngineView.mainFrame.children.length, 2);
var subFrame = webEngineView.findFrameByName("test-subframe1");
compare(subFrame.name,"test-subframe1");
verify(subFrame.isValid);
compare(subFrame.htmlName,"iframe1-300x200");
- //compare(subFrame.children().size(), 0) // TODO: broken
+ compare(subFrame.children.length, 0);
compare(subFrame.url,Qt.url("about:blank"));
compare(subFrame.size, Qt.size(300,200));
verify(!subFrame.isMainFrame);
@@ -54,7 +70,7 @@ TestWebEngineView {
compare(subFrame.name,"test-subframe2");
verify(subFrame.isValid);
compare(subFrame.htmlName,"iframe2-350x250");
- //compare(subFrame.children().size(), 0) // TODO: broken
+ compare(subFrame.children.length, 0);
compare(subFrame.url,Qt.url("about:blank"));
compare(subFrame.size, Qt.size(350,250));
verify(!subFrame.isMainFrame);