diff --git a/src/core/web_contents_adapter_client.h b/src/core/web_contents_adapter_client.h
index f2462923408dc8a2b3f9af6053de9a12e8a6e9b8..7deb556866e8540e53270805353df04351af2c9b 100644
--- a/src/core/web_contents_adapter_client.h
+++ b/src/core/web_contents_adapter_client.h
@@ -129,7 +129,7 @@ public:
     virtual void loadCommitted() = 0;
     virtual void loadFinished(bool success, int error_code = 0, const QString &error_description = QString()) = 0;
     virtual void focusContainer() = 0;
-    virtual void adoptNewWindow(WebContentsAdapter *newWebContents, WindowOpenDisposition disposition, const QRect & initialGeometry) = 0;
+    virtual void adoptNewWindow(WebContentsAdapter *newWebContents, WindowOpenDisposition disposition, bool userGesture, const QRect & initialGeometry) = 0;
     virtual void close() = 0;
     virtual bool contextMenuRequested(const WebEngineContextMenuData&) = 0;
     virtual void requestFullScreen(bool) = 0;
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
index dba63296b846b808f3fbc78308cd5fc6524de714..8c5646ab5b241fbb192c97798eb10b077ebb7806 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -86,7 +86,7 @@ void WebContentsDelegateQt::AddNewContents(content::WebContents* source, content
     // Do the first ref-count manually to be able to know if the application is handling adoptNewWindow through the public API.
     newAdapter->ref.ref();
 
-    m_viewClient->adoptNewWindow(newAdapter, static_cast<WebContentsAdapterClient::WindowOpenDisposition>(disposition), toQt(initial_pos));
+    m_viewClient->adoptNewWindow(newAdapter, static_cast<WebContentsAdapterClient::WindowOpenDisposition>(disposition), user_gesture, toQt(initial_pos));
 
     if (!newAdapter->ref.deref()) {
         // adoptNewWindow didn't increase the ref-count, new_contents needs to be discarded.
diff --git a/src/webengine/api/qquickwebenginenewviewrequest.cpp b/src/webengine/api/qquickwebenginenewviewrequest.cpp
index 8af8f5b49380b861f5892d2c050f64270755eed6..2aa45228cdfed5f3963e61b5c41d6fba2b2f7c66 100644
--- a/src/webengine/api/qquickwebenginenewviewrequest.cpp
+++ b/src/webengine/api/qquickwebenginenewviewrequest.cpp
@@ -57,9 +57,9 @@ QQuickWebEngineView::NewViewDestination QQuickWebEngineNewViewRequest::destinati
     return m_destination;
 }
 
-bool QQuickWebEngineNewViewRequest::isPopup() const
+bool QQuickWebEngineNewViewRequest::isUserInitiated() const
 {
-    return m_isPopup;
+    return m_isUserInitiated;
 }
 
 void QQuickWebEngineNewViewRequest::openIn(QQuickWebEngineView *view)
diff --git a/src/webengine/api/qquickwebenginenewviewrequest_p.h b/src/webengine/api/qquickwebenginenewviewrequest_p.h
index ed762cd393a294318ed973dfd999025c39b1dd1b..390ca278bf6eb2b8b5cc50e695d63aa0d66cb3cc 100644
--- a/src/webengine/api/qquickwebenginenewviewrequest_p.h
+++ b/src/webengine/api/qquickwebenginenewviewrequest_p.h
@@ -52,18 +52,18 @@ QT_BEGIN_NAMESPACE
 class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineNewViewRequest : public QObject {
     Q_OBJECT
     Q_PROPERTY(QQuickWebEngineView::NewViewDestination destination READ destination CONSTANT FINAL)
-    Q_PROPERTY(bool popup READ isPopup CONSTANT FINAL)
+    Q_PROPERTY(bool userInitiated READ isUserInitiated CONSTANT FINAL)
 public:
     ~QQuickWebEngineNewViewRequest();
 
     QQuickWebEngineView::NewViewDestination destination() const;
-    bool isPopup() const;
+    bool isUserInitiated() const;
     Q_INVOKABLE void openIn(QQuickWebEngineView *view);
 
 private:
     QQuickWebEngineNewViewRequest();
     QQuickWebEngineView::NewViewDestination m_destination;
-    bool m_isPopup;
+    bool m_isUserInitiated;
     QExplicitlySharedDataPointer<WebContentsAdapter> m_adapter;
     friend class QQuickWebEngineViewPrivate;
 };
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index c8c8bfac04682f5fc97991ad2d43c0b55eb0e570..e3838255eaa2562445709a8a12811cb1b17ec4a0 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -295,22 +295,22 @@ void QQuickWebEngineViewPrivate::focusContainer()
     q->forceActiveFocus();
 }
 
-void QQuickWebEngineViewPrivate::adoptNewWindow(WebContentsAdapter *newWebContents, WindowOpenDisposition disposition, const QRect &)
+void QQuickWebEngineViewPrivate::adoptNewWindow(WebContentsAdapter *newWebContents, WindowOpenDisposition disposition, bool userGesture, const QRect &)
 {
     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().
     request.m_adapter = newWebContents;
-    request.m_isPopup = false;
+    request.m_isUserInitiated = userGesture;
 
     switch (disposition) {
-    case WebContentsAdapterClient::NewPopupDisposition:
-        request.m_isPopup = true;
-        // fall through
     case WebContentsAdapterClient::NewForegroundTabDisposition:
     case WebContentsAdapterClient::NewBackgroundTabDisposition:
         request.m_destination = QQuickWebEngineView::NewViewInTab;
         break;
+    case WebContentsAdapterClient::NewPopupDisposition:
+        request.m_destination = QQuickWebEngineView::NewViewInDialog;
+        break;
     case WebContentsAdapterClient::NewWindowDisposition:
         request.m_destination = QQuickWebEngineView::NewViewInWindow;
         break;
diff --git a/src/webengine/api/qquickwebengineview_p.h b/src/webengine/api/qquickwebengineview_p.h
index 40bc59f4e4cf17d1ad544a510592285931638944..d9284e739a640f38012993b73029b1df01c12fa2 100644
--- a/src/webengine/api/qquickwebengineview_p.h
+++ b/src/webengine/api/qquickwebengineview_p.h
@@ -100,7 +100,8 @@ public:
 
     enum NewViewDestination {
         NewViewInWindow,
-        NewViewInTab
+        NewViewInTab,
+        NewViewInDialog
     };
 
     // must match WebContentsAdapterClient::JavaScriptConsoleMessageLevel
diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h
index 3a84eae5ce687f0b412f8383d13f6dee521bf654..4cbca6594094344292daa3e55f22d4f253fc8b1a 100644
--- a/src/webengine/api/qquickwebengineview_p_p.h
+++ b/src/webengine/api/qquickwebengineview_p_p.h
@@ -139,7 +139,7 @@ public:
     virtual void loadCommitted() Q_DECL_OVERRIDE;
     virtual void loadFinished(bool success, int error_code = 0, const QString &error_description = QString()) Q_DECL_OVERRIDE;
     virtual void focusContainer() Q_DECL_OVERRIDE;
-    virtual void adoptNewWindow(WebContentsAdapter *newWebContents, WindowOpenDisposition disposition, const QRect &) Q_DECL_OVERRIDE;
+    virtual void adoptNewWindow(WebContentsAdapter *newWebContents, WindowOpenDisposition disposition, bool userGesture, const QRect &) Q_DECL_OVERRIDE;
     virtual void close() Q_DECL_OVERRIDE;
     virtual void requestFullScreen(bool) Q_DECL_OVERRIDE;
     virtual bool isFullScreen() const Q_DECL_OVERRIDE;
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
index 70f2097a0ffa2e25fddbe1cf9f4f8d43892f73fb..04f24c62a441b7465119131d32aff90c145454ed 100644
--- a/src/webenginewidgets/api/qwebenginepage.cpp
+++ b/src/webenginewidgets/api/qwebenginepage.cpp
@@ -241,9 +241,10 @@ void QWebEnginePagePrivate::focusContainer()
         view->setFocus();
 }
 
-void QWebEnginePagePrivate::adoptNewWindow(WebContentsAdapter *newWebContents, WindowOpenDisposition disposition, const QRect &initialGeometry)
+void QWebEnginePagePrivate::adoptNewWindow(WebContentsAdapter *newWebContents, WindowOpenDisposition disposition, bool userGesture, const QRect &initialGeometry)
 {
     Q_Q(QWebEnginePage);
+    Q_UNUSED(userGesture);
     QWebEnginePage *newPage = q->createWindow(disposition == WebContentsAdapterClient::NewPopupDisposition ? QWebEnginePage::WebModalDialog : QWebEnginePage::WebBrowserWindow);
     // Overwrite the new page's WebContents with ours.
     if (newPage && newPage->d_func() != this) {
diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h
index b24489385da3a7e0972204d29749bfcaf28403bd..ddc7c51e7598cfe81b8cc0714a7e11ab5b082892 100644
--- a/src/webenginewidgets/api/qwebenginepage_p.h
+++ b/src/webenginewidgets/api/qwebenginepage_p.h
@@ -122,7 +122,7 @@ public:
     virtual void loadCommitted() Q_DECL_OVERRIDE;
     virtual void loadFinished(bool success, int error_code, const QString &error_description = QString()) Q_DECL_OVERRIDE;
     virtual void focusContainer() Q_DECL_OVERRIDE;
-    virtual void adoptNewWindow(WebContentsAdapter *newWebContents, WindowOpenDisposition disposition, const QRect &initialGeometry) Q_DECL_OVERRIDE;
+    virtual void adoptNewWindow(WebContentsAdapter *newWebContents, WindowOpenDisposition disposition, bool userGesture, const QRect &initialGeometry) Q_DECL_OVERRIDE;
     virtual void close() Q_DECL_OVERRIDE;
     virtual bool contextMenuRequested(const WebEngineContextMenuData &data) Q_DECL_OVERRIDE;
     virtual void requestFullScreen(bool) Q_DECL_OVERRIDE { };
diff --git a/tests/quicktestbrowser/quickwindow.qml b/tests/quicktestbrowser/quickwindow.qml
index 891ab5792e4890a9d1a160a3b4dc0463d65d3c8c..f77fec582d0c2be4fa565eab0acccdda962bdada 100644
--- a/tests/quicktestbrowser/quickwindow.qml
+++ b/tests/quicktestbrowser/quickwindow.qml
@@ -234,6 +234,20 @@ ApplicationWindow {
         anchors.fill: parent
         Component.onCompleted: createEmptyTab()
 
+        Component {
+            id: dialogComponent
+            Window {
+                property Item webView: _webView
+                width: 800
+                height: 600
+                visible: true
+                WebEngineView {
+                    id: _webView
+                    anchors.fill: parent
+                }
+            }
+        }
+
         Component {
             id: tabComponent
             WebEngineView {
@@ -268,11 +282,14 @@ ApplicationWindow {
                     }
 
                     onNewViewRequested: {
-                        if (request.popup)
+                        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 = dialogComponent.createObject()
+                            request.openIn(dialog.webView)
                         } else {
                             var component = Qt.createComponent("quickwindow.qml")
                             var window = component.createObject()