diff --git a/tests/quicktestbrowser/FeaturePermissionBar.qml b/tests/quicktestbrowser/FeaturePermissionBar.qml
new file mode 100644
index 0000000000000000000000000000000000000000..dd2e0f714dba58022d836bd30f8abfcdbc88e1aa
--- /dev/null
+++ b/tests/quicktestbrowser/FeaturePermissionBar.qml
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 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.Controls 1.0
+import QtWebEngine 1.0
+import QtWebEngine.experimental 1.0
+import QtQuick.Layouts 1.0
+
+Rectangle {
+    property var requestedFeature;
+    property url securityOrigin;
+    property WebEngineView view;
+
+    id: permissionBar
+    visible: false
+    height: acceptButton.height + 4
+
+    onRequestedFeatureChanged: {
+        message.text = securityOrigin + " wants to access " + message.textForFeature(requestedFeature);
+    }
+
+
+    RowLayout {
+        anchors {
+            fill: permissionBar
+            leftMargin: 5
+            rightMargin: 5
+        }
+        Label {
+            id: message
+            Layout.fillWidth: true
+
+            function textForFeature(feature) {
+                if (feature === WebEngineViewExperimental.MediaAudioDevices)
+                    return "your microphone"
+                if (feature === WebEngineViewExperimental.MediaVideoDevices)
+                    return "your camera"
+                if (feature === WebEngineViewExperimental.MediaAudioVideoDevices)
+                    return "your camera and microphone"
+            }
+        }
+
+        Button {
+            id: acceptButton
+            text: "Accept"
+            Layout.alignment: Qt.AlignRight
+            onClicked: {
+                view.experimental.grantFeaturePermission(securityOrigin, requestedFeature, true);
+                permissionBar.visible = false;
+            }
+        }
+
+        Button {
+            text: "Deny"
+            Layout.alignment: Qt.AlignRight
+            onClicked: {
+                view.experimental.grantFeaturePermission(securityOrigin, requestedFeature, false);
+                permissionBar.visible = false
+            }
+        }
+    }
+}
diff --git a/tests/quicktestbrowser/quicktestbrowser.pro b/tests/quicktestbrowser/quicktestbrowser.pro
index b0146a6890f71e8d83184a311545c9441c24254d..a6ee521d4a5fbf3b82d699ef4c7d09d0cccb6f3a 100644
--- a/tests/quicktestbrowser/quicktestbrowser.pro
+++ b/tests/quicktestbrowser/quicktestbrowser.pro
@@ -9,6 +9,7 @@ SOURCES = quickwindow.cpp \
           main.cpp
 
 OTHER_FILES += ContextMenuExtras.qml \
+               FeaturePermissionBar.qml \
                quickwindow.qml
 
 RESOURCES += resources.qrc
diff --git a/tests/quicktestbrowser/quickwindow.qml b/tests/quicktestbrowser/quickwindow.qml
index f77fec582d0c2be4fa565eab0acccdda962bdada..f08469dda30d0fea61b0663dae9830bf59345961 100644
--- a/tests/quicktestbrowser/quickwindow.qml
+++ b/tests/quicktestbrowser/quickwindow.qml
@@ -50,7 +50,7 @@ import QtQuick.Controls.Private 1.0
 ApplicationWindow {
     id: browserWindow
     function load(url) { currentWebView.url = url }
-    property Item currentWebView: tabs.currentIndex < tabs.count ? tabs.getTab(tabs.currentIndex).item : null
+    property Item currentWebView: tabs.currentIndex < tabs.count ? tabs.getTab(tabs.currentIndex).item.webView : null
 
     property bool isFullScreen: visibility == Window.FullScreen
     onIsFullScreenChanged: {
@@ -250,53 +250,79 @@ ApplicationWindow {
 
         Component {
             id: tabComponent
-            WebEngineView {
-                id: webEngineView
-                focus: true
+            Item {
+                property alias webView: webEngineView
+                property alias title: webEngineView.title
+                FeaturePermissionBar {
+                    id: permBar
+                    view: webEngineView
+                    anchors {
+                        left: parent.left
+                        right: parent.right
+                        top: parent.top
+                    }
+                    z: 3
+                }
 
-                states: [
-                    State {
-                        name: "FullScreen"
-                        PropertyChanges {
-                            target: tabs
-                            frameVisible: false
-                            tabsVisible: false
-                        }
-                        PropertyChanges {
-                            target: navigationBar
-                            visible: false
-                        }
+                WebEngineView {
+                    id: webEngineView
+
+                    anchors {
+                        fill: parent
+                        top: permBar.bottom
                     }
-                ]
 
-                experimental {
-                    isFullScreen: webEngineView.state == "FullScreen" && browserWindow.isFullScreen
-                    onFullScreenRequested: {
-                        if (fullScreen) {
-                            webEngineView.state = "FullScreen"
-                            browserWindow.showFullScreen();
-                        } else {
-                            webEngineView.state = ""
-                            browserWindow.showNormal();
+                    focus: true
+
+                    states: [
+                        State {
+                            name: "FullScreen"
+                            PropertyChanges {
+                                target: tabs
+                                frameVisible: false
+                                tabsVisible: false
+                            }
+                            PropertyChanges {
+                                target: navigationBar
+                                visible: false
+                            }
                         }
-                    }
+                    ]
 
-                    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 = dialogComponent.createObject()
-                            request.openIn(dialog.webView)
-                        } else {
-                            var component = Qt.createComponent("quickwindow.qml")
-                            var window = component.createObject()
-                            request.openIn(window.currentWebView)
+                    experimental {
+                        isFullScreen: webEngineView.state == "FullScreen" && browserWindow.isFullScreen
+                        onFullScreenRequested: {
+                            if (fullScreen) {
+                                webEngineView.state = "FullScreen"
+                                browserWindow.showFullScreen();
+                            } else {
+                                webEngineView.state = ""
+                                browserWindow.showNormal();
+                            }
+                        }
+
+                        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 = dialogComponent.createObject()
+                                request.openIn(dialog.webView)
+                            } else {
+                                var component = Qt.createComponent("quickwindow.qml")
+                                var window = component.createObject()
+                                request.openIn(window.currentWebView)
+                            }
+                        }
+                        onFeaturePermissionRequested: {
+                            permBar.securityOrigin = securityOrigin;
+                            permBar.requestedFeature = feature;
+                            permBar.visible = true;
                         }
+                        extraContextMenuEntriesComponent: ContextMenuExtras {}
                     }
-                    extraContextMenuEntriesComponent: ContextMenuExtras {}
                 }
             }
         }
diff --git a/tests/quicktestbrowser/resources.qrc b/tests/quicktestbrowser/resources.qrc
index 166d2bc1e0dd05ef6e8449e8dea3231d6395f20c..1226be00becec77a708b409304ef00d6b6367dcf 100644
--- a/tests/quicktestbrowser/resources.qrc
+++ b/tests/quicktestbrowser/resources.qrc
@@ -2,6 +2,7 @@
     <qresource prefix="/">
         <file>quickwindow.qml</file>
         <file>ContextMenuExtras.qml</file>
+        <file>FeaturePermissionBar.qml</file>
     </qresource>
     <qresource prefix="icons">
         <!-- To the risk of this breaking more often, do not duplicate the resources since this application won't be deployed -->