summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/webengine/quicknanobrowser/ApplicationRoot.qml58
-rw-r--r--examples/webengine/quicknanobrowser/BrowserDialog.qml56
-rw-r--r--examples/webengine/quicknanobrowser/BrowserWindow.qml18
-rw-r--r--examples/webengine/quicknanobrowser/main.cpp2
-rw-r--r--examples/webengine/quicknanobrowser/quicknanobrowser.pro4
-rw-r--r--examples/webengine/quicknanobrowser/resources.qrc2
-rw-r--r--src/webengine/api/qquickwebenginenewviewrequest.cpp46
-rw-r--r--src/webengine/api/qquickwebengineview.cpp3
-rw-r--r--src/webengine/api/qquickwebengineview_p.h2
-rw-r--r--src/webengine/api/qquickwebengineview_p_p.h2
-rw-r--r--src/webengine/doc/qtwebengine.qdocconf2
-rw-r--r--src/webengine/doc/snippets/qtwebengine_webengineview_newviewrequested.qml74
-rw-r--r--src/webengine/doc/src/qquickwebengineview_lgpl.qdoc37
-rw-r--r--src/webengine/plugin/experimental/plugin.cpp3
-rw-r--r--src/webengine/plugin/plugin.cpp6
-rw-r--r--tests/quicktestbrowser/BrowserWindow.qml29
16 files changed, 317 insertions, 27 deletions
diff --git a/examples/webengine/quicknanobrowser/ApplicationRoot.qml b/examples/webengine/quicknanobrowser/ApplicationRoot.qml
new file mode 100644
index 000000000..56196efdc
--- /dev/null
+++ b/examples/webengine/quicknanobrowser/ApplicationRoot.qml
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.1
+
+QtObject {
+ id: root
+ property Component browserWindowComponent: BrowserWindow {
+ applicationRoot: root
+ onClosing: destroy()
+ }
+ property Component browserDialogComponent: BrowserDialog {
+ onClosing: destroy()
+ }
+ function createWindow() { return browserWindowComponent.createObject(root) }
+ function createDialog() { return browserDialogComponent.createObject(root) }
+ function load(url) {
+ var browserWindow = createWindow()
+ browserWindow.currentWebView.url = url
+ }
+}
diff --git a/examples/webengine/quicknanobrowser/BrowserDialog.qml b/examples/webengine/quicknanobrowser/BrowserDialog.qml
new file mode 100644
index 000000000..038a62f28
--- /dev/null
+++ b/examples/webengine/quicknanobrowser/BrowserDialog.qml
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import QtQuick.Window 2.2
+import QtWebEngine 1.0
+
+Window {
+ property alias currentWebView: webView
+ flags: Qt.Dialog
+ width: 800
+ height: 600
+ visible: true
+ onClosing: destroy()
+ WebEngineView {
+ id: webView
+ anchors.fill: parent
+ }
+}
diff --git a/examples/webengine/quicknanobrowser/BrowserWindow.qml b/examples/webengine/quicknanobrowser/BrowserWindow.qml
index b954629fb..8d9980746 100644
--- a/examples/webengine/quicknanobrowser/BrowserWindow.qml
+++ b/examples/webengine/quicknanobrowser/BrowserWindow.qml
@@ -39,7 +39,7 @@
****************************************************************************/
import QtQuick 2.1
-import QtWebEngine 1.0
+import QtWebEngine 1.1
import QtQuick.Controls 1.0
import QtQuick.Controls.Styles 1.0
import QtQuick.Layouts 1.0
@@ -48,7 +48,7 @@ import QtQuick.Controls.Private 1.0
ApplicationWindow {
id: browserWindow
- function load(url) { currentWebView.url = url }
+ property QtObject applicationRoot
property Item currentWebView: tabs.currentIndex < tabs.count ? tabs.getTab(tabs.currentIndex).item : null
width: 1300
@@ -198,6 +198,20 @@ ApplicationWindow {
statusText.text = hoveredUrl
}
}
+ onNewViewRequested: {
+ if (!request.userInitiated)
+ print("Warning: Blocked a popup window.")
+ else if (request.destination == WebEngineView.NewViewInTab) {
+ var tab = tabs.createEmptyTab()
+ request.openIn(tab.item)
+ } else if (request.destination == WebEngineView.NewViewInDialog) {
+ var dialog = applicationRoot.createDialog()
+ request.openIn(dialog.currentWebView)
+ } else {
+ var window = applicationRoot.createWindow()
+ request.openIn(window.currentWebView)
+ }
+ }
}
}
}
diff --git a/examples/webengine/quicknanobrowser/main.cpp b/examples/webengine/quicknanobrowser/main.cpp
index bcfec07c5..76cfa8397 100644
--- a/examples/webengine/quicknanobrowser/main.cpp
+++ b/examples/webengine/quicknanobrowser/main.cpp
@@ -76,7 +76,7 @@ int main(int argc, char **argv)
QQmlApplicationEngine appEngine;
Utils utils;
appEngine.rootContext()->setContextProperty("utils", &utils);
- appEngine.load(QUrl("qrc:/BrowserWindow.qml"));
+ appEngine.load(QUrl("qrc:/ApplicationRoot.qml"));
QMetaObject::invokeMethod(appEngine.rootObjects().first(), "load", Q_ARG(QVariant, startupUrl()));
return app.exec();
diff --git a/examples/webengine/quicknanobrowser/quicknanobrowser.pro b/examples/webengine/quicknanobrowser/quicknanobrowser.pro
index 37df16d3c..b6bc2e0db 100644
--- a/examples/webengine/quicknanobrowser/quicknanobrowser.pro
+++ b/examples/webengine/quicknanobrowser/quicknanobrowser.pro
@@ -6,7 +6,9 @@ TARGET = quicknanobrowser
HEADERS = utils.h
SOURCES = main.cpp
-OTHER_FILES += BrowserWindow.qml
+OTHER_FILES += ApplicationRoot.qml \
+ BrowserDialog.qml \
+ BrowserWindow.qml
RESOURCES += resources.qrc
diff --git a/examples/webengine/quicknanobrowser/resources.qrc b/examples/webengine/quicknanobrowser/resources.qrc
index c95721028..2c1aea802 100644
--- a/examples/webengine/quicknanobrowser/resources.qrc
+++ b/examples/webengine/quicknanobrowser/resources.qrc
@@ -1,5 +1,7 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="/">
+ <file>ApplicationRoot.qml</file>
+ <file>BrowserDialog.qml</file>
<file>BrowserWindow.qml</file>
</qresource>
<qresource prefix="icons">
diff --git a/src/webengine/api/qquickwebenginenewviewrequest.cpp b/src/webengine/api/qquickwebenginenewviewrequest.cpp
index f2a361f55..053fcd2f6 100644
--- a/src/webengine/api/qquickwebenginenewviewrequest.cpp
+++ b/src/webengine/api/qquickwebenginenewviewrequest.cpp
@@ -39,6 +39,18 @@
#include "qquickwebengineview_p_p.h"
#include "web_contents_adapter.h"
+/*!
+ \qmltype WebEngineNewViewRequest
+ \instantiates QQuickWebEngineNewViewRequest
+ \inqmlmodule QtWebEngine 1.1
+ \since QtWebEngine 1.1
+
+ \brief A utility class for the WebEngineView::newViewRequested signal.
+
+ This class contains information about the request of a page to open a new window.
+
+ \sa WebEngineView::newViewRequested
+*/
QQuickWebEngineNewViewRequest::QQuickWebEngineNewViewRequest()
{
}
@@ -47,20 +59,48 @@ QQuickWebEngineNewViewRequest::~QQuickWebEngineNewViewRequest()
{
}
+/*!
+ \qmlproperty WebEngineView::NewViewDestination WebEngineNewViewRequest::destination
+ \brief The type of view that is requested by the page.
+ */
QQuickWebEngineView::NewViewDestination QQuickWebEngineNewViewRequest::destination() const
{
return m_destination;
}
+/*!
+ \qmlproperty bool WebEngineNewViewRequest::isUserInitiated
+ \brief Whether this window request was directly triggered as the result of a keyboard or mouse event.
+
+ Use this property to block possibly unwanted "popups".
+ */
bool QQuickWebEngineNewViewRequest::isUserInitiated() const
{
return m_isUserInitiated;
}
+/*!
+ \qmlmethod WebEngineNewViewRequest::openIn(WebEngineView view)
+
+ Call this method to fulfill the request and determine which WebEngineView
+ should be used to contain the new page. Any state, history or loaded page
+ within \a view will be lost as result of this.
+
+ \sa WebEngineView::newViewRequested
+ */
void QQuickWebEngineNewViewRequest::openIn(QQuickWebEngineView *view)
{
- if (view) {
- view->d_func()->adoptWebContents(m_adapter.data());
- m_adapter.reset();
+ if (!m_adapter) {
+ qWarning("Trying to open an empty request, it was either already used or was invalidated."
+ "\nYou must complete the request synchronously within the newViewRequested signal handler."
+ " If a view hasn't been adopted before returning, the request will be invalidated.");
+ return;
+ }
+
+ if (!view) {
+ qWarning("Trying to open a WebEngineNewViewRequest in an invalid WebEngineView.");
+ return;
}
+ view->d_func()->adoptWebContents(m_adapter.data());
+ m_adapter.reset();
}
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index a93cd7079..dbafd9655 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -349,6 +349,7 @@ void QQuickWebEngineViewPrivate::focusContainer()
void QQuickWebEngineViewPrivate::adoptNewWindow(WebContentsAdapter *newWebContents, WindowOpenDisposition disposition, bool userGesture, const QRect &)
{
+ Q_Q(QQuickWebEngineView);
QQuickWebEngineNewViewRequest request;
// This increases the ref-count of newWebContents and will tell Chromium
// to start loading it and possibly return it to its parent page window.open().
@@ -372,7 +373,7 @@ void QQuickWebEngineViewPrivate::adoptNewWindow(WebContentsAdapter *newWebConten
Q_UNREACHABLE();
}
- Q_EMIT e->newViewRequested(&request);
+ Q_EMIT q->newViewRequested(&request);
}
void QQuickWebEngineViewPrivate::close()
diff --git a/src/webengine/api/qquickwebengineview_p.h b/src/webengine/api/qquickwebengineview_p.h
index d625dbdd9..72620b0f7 100644
--- a/src/webengine/api/qquickwebengineview_p.h
+++ b/src/webengine/api/qquickwebengineview_p.h
@@ -44,6 +44,7 @@ QT_BEGIN_NAMESPACE
class QQuickWebEngineLoadRequest;
class QQuickWebEngineNavigationRequest;
+class QQuickWebEngineNewViewRequest;
class QQuickWebEngineProfile;
class QQuickWebEngineViewExperimental;
class QQuickWebEngineViewPrivate;
@@ -156,6 +157,7 @@ Q_SIGNALS:
void navigationRequested(QQuickWebEngineNavigationRequest *request);
void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString &message, int lineNumber, const QString &sourceID);
void zoomFactorChanged(qreal arg);
+ Q_REVISION(1) void newViewRequested(QQuickWebEngineNewViewRequest *request);
protected:
void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry);
diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h
index 964a4f0d9..cdd6b1955 100644
--- a/src/webengine/api/qquickwebengineview_p_p.h
+++ b/src/webengine/api/qquickwebengineview_p_p.h
@@ -51,7 +51,6 @@ class UIDelegatesManager;
QT_BEGIN_NAMESPACE
class QQuickWebEngineHistory;
-class QQuickWebEngineNewViewRequest;
class QQuickWebEngineView;
class QQmlComponent;
class QQmlContext;
@@ -114,7 +113,6 @@ public Q_SLOTS:
void grantFeaturePermission(const QUrl &securityOrigin, Feature, bool granted);
Q_SIGNALS:
- void newViewRequested(QQuickWebEngineNewViewRequest *request);
void fullScreenRequested(bool fullScreen);
void isFullScreenChanged();
void extraContextMenuEntriesComponentChanged();
diff --git a/src/webengine/doc/qtwebengine.qdocconf b/src/webengine/doc/qtwebengine.qdocconf
index e5abeafd6..ad6898440 100644
--- a/src/webengine/doc/qtwebengine.qdocconf
+++ b/src/webengine/doc/qtwebengine.qdocconf
@@ -33,7 +33,7 @@ depends += qtcore qtgui qtquick qtquickcontrols qtdoc
headerdirs += . ../api
sourcedirs += . ../api
-exampledirs += ../../../examples/webengine
+exampledirs += ../../../examples/webengine .
navigation.landingpage = "Qt WebEngine"
navigation.qmltypespage = "Qt WebEngine QML Types"
diff --git a/src/webengine/doc/snippets/qtwebengine_webengineview_newviewrequested.qml b/src/webengine/doc/snippets/qtwebengine_webengineview_newviewrequested.qml
new file mode 100644
index 000000000..6c5497145
--- /dev/null
+++ b/src/webengine/doc/snippets/qtwebengine_webengineview_newviewrequested.qml
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Window 2.1
+import QtWebEngine 1.1
+
+//! [0]
+QtObject {
+ id: windowParent
+ // Create the initial browsing windows and open the startup page.
+ Component.onCompleted: {
+ var firstWindow = windowComponent.createObject(windowParent)
+ firstWindow.webView.loadHtml('<input type="button" value="Click!" onclick="window.open(&quot;http://qt.io&quot;)">')
+ }
+
+ property Component windowComponent: Window {
+ // Destroy on close to release the Window's QML resources.
+ // Because it was created with a parent, it won't be garbage-collected.
+ onClosing: destroy()
+ visible: true
+
+ property WebEngineView webView: webView_
+ WebEngineView {
+ id: webView_
+ anchors.fill: parent
+
+ // Handle the signal. Dynamically create the window and
+ // use its WebEngineView as the destination of our request.
+ onNewViewRequested: {
+ var newWindow = windowComponent.createObject(windowParent)
+ request.openIn(newWindow.webView)
+ }
+ }
+ }
+}
+//! [0]
diff --git a/src/webengine/doc/src/qquickwebengineview_lgpl.qdoc b/src/webengine/doc/src/qquickwebengineview_lgpl.qdoc
index 379c45e1c..24341d745 100644
--- a/src/webengine/doc/src/qquickwebengineview_lgpl.qdoc
+++ b/src/webengine/doc/src/qquickwebengineview_lgpl.qdoc
@@ -258,6 +258,26 @@
*/
/*!
+ \qmlsignal WebEngineView::newViewRequested(request)
+
+ This signal is emitted when a page load is requested to happen in a separate
+ WebEngineView. This can either be because the current page requested it explicitly
+ through a JavaScript call to window.open, or because the user clicked on a link
+ while holding Shift, Ctrl or a built-in combination that triggers the page to open
+ in a new window.
+
+ If this signal isn't handled the requested load will fail.
+
+ An example implementation:
+
+ \snippet snippets/qtwebengine_webengineview_newviewrequested.qml 0
+
+ The corresponding handler is onNewViewRequested.
+
+ \sa WebEngineNewViewRequest, WebEngineView::NewViewDestination, {WebEngine Quick Nano Browser}
+*/
+
+/*!
\qmlproperty enumeration WebEngineView::ErrorDomain
This enumeration details various high-level error types.
@@ -328,3 +348,20 @@
\endtable
*/
+
+/*!
+ \qmlproperty enumeration WebEngineView::NewViewDestination
+
+ This enumeration details the format in which a new view request should be opened.
+
+ \value WebEngineView::NewViewInWindow
+ The page expects to be opened in a separate Window.
+ \value WebEngineView::NewViewInTab
+ The page expects to be opened in a tab of the same window.
+ \value WebEngineView::NewViewInDialog
+ The page expects to be opened in a Window without any tab, tool or URL bar.
+ \value WebEngineView::NewViewInBackgroundTab
+ The page expects to be opened in a tab of the same window, without hiding the currently visible WebEngineView.
+
+ \sa WebEngineNewViewRequest::destination
+*/
diff --git a/src/webengine/plugin/experimental/plugin.cpp b/src/webengine/plugin/experimental/plugin.cpp
index 93f0cb7f0..6e4853fea 100644
--- a/src/webengine/plugin/experimental/plugin.cpp
+++ b/src/webengine/plugin/experimental/plugin.cpp
@@ -84,6 +84,9 @@ public:
qmlRegisterUncreatableType<QQuickWebEngineDownloadItem>(uri, 1, 0, "WebEngineDownloadItem",
QObject::tr("Cannot create a separate instance of WebEngineDownloadItem"));
qmlRegisterSingletonType<QQuickWebEngineSingleton>(uri, 1, 0, "WebEngine", webEngineSingletonProvider);
+
+ // Use the latest revision of QQuickWebEngineView when importing QtWebEngine.experimental 1.0
+ qmlRegisterRevision<QQuickWebEngineView, 1>(uri, 1, 0);
}
};
diff --git a/src/webengine/plugin/plugin.cpp b/src/webengine/plugin/plugin.cpp
index 5d7bf2d36..465e626f7 100644
--- a/src/webengine/plugin/plugin.cpp
+++ b/src/webengine/plugin/plugin.cpp
@@ -59,10 +59,12 @@ public:
Q_ASSERT(QLatin1String(uri) == QLatin1String("QtWebEngine"));
qmlRegisterType<QQuickWebEngineView>(uri, 1, 0, "WebEngineView");
- qmlRegisterType<QQuickWebEngineProfile>(uri, 1, 1, "WebEngineProfile");
qmlRegisterUncreatableType<QQuickWebEngineLoadRequest>(uri, 1, 0, "WebEngineLoadRequest", QObject::tr("Cannot create separate instance of WebEngineLoadRequest"));
- qmlRegisterUncreatableType<QQuickWebEngineNewViewRequest>(uri, 1, 0, "WebEngineNewViewRequest", QObject::tr("Cannot create separate instance of WebEngineNewViewRequest"));
qmlRegisterUncreatableType<QQuickWebEngineNavigationRequest>(uri, 1, 0, "WebEngineNavigationRequest", QObject::tr("Cannot create separate instance of WebEngineNavigationRequest"));
+
+ qmlRegisterType<QQuickWebEngineView, 1>(uri, 1, 1, "WebEngineView");
+ qmlRegisterType<QQuickWebEngineProfile>(uri, 1, 1, "WebEngineProfile");
+ qmlRegisterUncreatableType<QQuickWebEngineNewViewRequest>(uri, 1, 1, "WebEngineNewViewRequest", QObject::tr("Cannot create separate instance of WebEngineNewViewRequest"));
}
};
diff --git a/tests/quicktestbrowser/BrowserWindow.qml b/tests/quicktestbrowser/BrowserWindow.qml
index 98156eeb4..7516d0a65 100644
--- a/tests/quicktestbrowser/BrowserWindow.qml
+++ b/tests/quicktestbrowser/BrowserWindow.qml
@@ -355,6 +355,21 @@ ApplicationWindow {
}
]
+ onNewViewRequested: {
+ if (!request.userInitiated)
+ print("Warning: Blocked a popup window.")
+ else if (request.destination == WebEngineView.NewViewInTab) {
+ var tab = tabs.createEmptyTab()
+ request.openIn(tab.item.webView)
+ } else if (request.destination == WebEngineView.NewViewInDialog) {
+ var dialog = applicationRoot.createDialog()
+ request.openIn(dialog.currentWebView)
+ } else {
+ var window = applicationRoot.createWindow()
+ request.openIn(window.currentWebView)
+ }
+ }
+
experimental {
isFullScreen: webEngineView.state == "FullScreen" && browserWindow.isFullScreen
onFullScreenRequested: {
@@ -367,20 +382,6 @@ ApplicationWindow {
}
}
- onNewViewRequested: {
- if (!request.userInitiated)
- print("Warning: Blocked a popup window.")
- else if (request.destination == WebEngineView.NewViewInTab) {
- var tab = tabs.createEmptyTab()
- request.openIn(tab.item.webView)
- } else if (request.destination == WebEngineView.NewViewInDialog) {
- var dialog = applicationRoot.createDialog()
- request.openIn(dialog.currentWebView)
- } else {
- var window = applicationRoot.createWindow()
- request.openIn(window.currentWebView)
- }
- }
onFeaturePermissionRequested: {
permBar.securityOrigin = securityOrigin;
permBar.requestedFeature = feature;