diff --git a/examples/quick/quicknanobrowser/quickwindow.qml b/examples/quick/quicknanobrowser/quickwindow.qml
index 7ec4fc02169e1f25443a3ed8822444fccd731f7b..a3b8c405dcd42ca57823303564bebc0d84030f3f 100644
--- a/examples/quick/quicknanobrowser/quickwindow.qml
+++ b/examples/quick/quicknanobrowser/quickwindow.qml
@@ -62,36 +62,43 @@ ApplicationWindow {
 
     toolBar: ToolBar {
         id: navigationBar
-        RowLayout {
+        ColumnLayout {
             anchors.fill: parent
+            RowLayout {
+                ToolButton {
+                    id: backButton
+                    iconSource: "icons/go-previous.png"
+                    onClicked: webEngineView.goBack()
+                    enabled: webEngineView.canGoBack
+                }
+                ToolButton {
+                    id: forwardButton
+                    iconSource: "icons/go-next.png"
+                    onClicked: webEngineView.goForward()
+                    enabled: webEngineView.canGoForward
+                }
+                ToolButton {
+                    id: reloadButton
+                    iconSource: webEngineView.loading ? "icons/process-stop.png" : "icons/view-refresh.png"
+                    onClicked: webEngineView.reload()
+                }
+                Image {
+                    id: faviconImage
+                    width: 16; height: 16
+                }
+                TextField {
+                    id: addressBar
+                    focus: true
+                    Layout.fillWidth: true
 
-            ToolButton {
-                id: backButton
-                iconSource: "icons/go-previous.png"
-                onClicked: webEngineView.goBack()
-                enabled: webEngineView.canGoBack
+                    onAccepted: webEngineView.url = utils.fromUserInput(text)
+                }
             }
-            ToolButton {
-                id: forwardButton
-                iconSource: "icons/go-next.png"
-                onClicked: webEngineView.goForward()
-                enabled: webEngineView.canGoForward
-            }
-            ToolButton {
-                id: reloadButton
-                iconSource: webEngineView.loading ? "icons/process-stop.png" : "icons/view-refresh.png"
-                onClicked: webEngineView.reload()
-            }
-            Image {
-                id: faviconImage
-                width: 16; height: 16
-            }
-            TextField {
-                id: addressBar
-                focus: true
+            ProgressBar {
                 Layout.fillWidth: true
-
-                onAccepted: webEngineView.url = utils.fromUserInput(text)
+                id: progressBar
+                minimumValue: 0
+                maximumValue: 100
             }
         }
     }
@@ -104,5 +111,6 @@ ApplicationWindow {
 
         onUrlChanged: addressBar.text = url
         onIconChanged: faviconImage.source = url
+        onLoadProgressChanged: progressBar.value = loadProgress
     }
 }
diff --git a/lib/quick/qquickwebengineview.cpp b/lib/quick/qquickwebengineview.cpp
index aa942c017041785ab18175aafcc858f0a59a0aff..55d8710933839ec60c5be73bf97d564d24528712 100644
--- a/lib/quick/qquickwebengineview.cpp
+++ b/lib/quick/qquickwebengineview.cpp
@@ -51,6 +51,7 @@ QT_BEGIN_NAMESPACE
 
 QQuickWebEngineViewPrivate::QQuickWebEngineViewPrivate()
     : adapter(new WebContentsAdapter)
+    , loadProgress(0)
 {
     adapter->initialize(this);
 }
@@ -87,6 +88,13 @@ void QQuickWebEngineViewPrivate::loadingStateChanged()
     Q_EMIT q->loadingStateChanged();
 }
 
+void QQuickWebEngineViewPrivate::loadProgressChanged(int progress)
+{
+    Q_Q(QQuickWebEngineView);
+    loadProgress = progress;
+    Q_EMIT q->loadProgressChanged();
+}
+
 QRectF QQuickWebEngineViewPrivate::viewportRect() const
 {
     Q_Q(const QQuickWebEngineView);
@@ -170,6 +178,12 @@ bool QQuickWebEngineView::isLoading() const
     return d->adapter->isLoading();
 }
 
+int QQuickWebEngineView::loadProgress() const
+{
+    Q_D(const QQuickWebEngineView);
+    return d->loadProgress;
+}
+
 QString QQuickWebEngineView::title() const
 {
     Q_D(const QQuickWebEngineView);
diff --git a/lib/quick/qquickwebengineview_p.h b/lib/quick/qquickwebengineview_p.h
index 1c3e27732cec1ddf0ff71aaddb2a915e81911c3c..87e7403d61521a1a44828b7b4c84b8d1849bb815 100644
--- a/lib/quick/qquickwebengineview_p.h
+++ b/lib/quick/qquickwebengineview_p.h
@@ -53,6 +53,7 @@ class QQuickWebEngineView : public QQuickItem {
     Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged)
     Q_PROPERTY(QUrl icon READ icon NOTIFY iconChanged)
     Q_PROPERTY(bool loading READ isLoading NOTIFY loadingStateChanged)
+    Q_PROPERTY(int loadProgress READ loadProgress NOTIFY loadProgressChanged)
     Q_PROPERTY(QString title READ title NOTIFY titleChanged)
     Q_PROPERTY(bool canGoBack READ canGoBack NOTIFY loadingStateChanged)
     Q_PROPERTY(bool canGoForward READ canGoForward NOTIFY loadingStateChanged)
@@ -65,6 +66,7 @@ public:
     void setUrl(const QUrl&);
     QUrl icon() const;
     bool isLoading() const;
+    int loadProgress() const;
     QString title() const;
     bool canGoBack() const;
     bool canGoForward() const;
@@ -80,6 +82,7 @@ Q_SIGNALS:
     void urlChanged();
     void iconChanged();
     void loadingStateChanged();
+    void loadProgressChanged();
 
 protected:
     void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry);
diff --git a/lib/quick/qquickwebengineview_p_p.h b/lib/quick/qquickwebengineview_p_p.h
index 38621b44d85cc35c3a28810a55be6065fda0a11b..947886c441f2450e1e6631d5c4dc713605d3adf0 100644
--- a/lib/quick/qquickwebengineview_p_p.h
+++ b/lib/quick/qquickwebengineview_p_p.h
@@ -63,6 +63,7 @@ public:
     virtual void urlChanged(const QUrl&) Q_DECL_OVERRIDE;
     virtual void iconChanged(const QUrl&) Q_DECL_OVERRIDE;
     virtual void loadingStateChanged() Q_DECL_OVERRIDE;
+    virtual void loadProgressChanged(int progress) Q_DECL_OVERRIDE;
     virtual QRectF viewportRect() const Q_DECL_OVERRIDE;
     virtual void loadFinished(bool success) Q_DECL_OVERRIDE;
     virtual void focusContainer() Q_DECL_OVERRIDE;
@@ -70,6 +71,7 @@ public:
 
     QExplicitlySharedDataPointer<WebContentsAdapter> adapter;
     QUrl icon;
+    int loadProgress;
 };
 
 QT_END_NAMESPACE
diff --git a/lib/web_contents_adapter_client.h b/lib/web_contents_adapter_client.h
index ea6e5a666ecaf6f67263bb0cbb8e09b75d4258bd..39968a8a503d9ffce9c5c85e8969395efa5b3f35 100644
--- a/lib/web_contents_adapter_client.h
+++ b/lib/web_contents_adapter_client.h
@@ -82,6 +82,7 @@ public:
     virtual void urlChanged(const QUrl&) = 0;
     virtual void iconChanged(const QUrl&) = 0;
     virtual void loadingStateChanged() = 0;
+    virtual void loadProgressChanged(int progress) = 0;
     virtual QRectF viewportRect() const = 0;
     virtual void loadFinished(bool success) = 0;
     virtual void focusContainer() = 0;
diff --git a/lib/web_contents_delegate_qt.cpp b/lib/web_contents_delegate_qt.cpp
index 12a00481c494f49521bfd8d9527d8d6ac27c4527..877d1cafcaef2cd77a9b054d5843d3ca21dd0fec 100644
--- a/lib/web_contents_delegate_qt.cpp
+++ b/lib/web_contents_delegate_qt.cpp
@@ -86,6 +86,11 @@ void WebContentsDelegateQt::LoadingStateChanged(content::WebContents* source)
     m_viewClient->loadingStateChanged();
 }
 
+void WebContentsDelegateQt::LoadProgressChanged(content::WebContents* source, double progress)
+{
+    m_viewClient->loadProgressChanged(qRound(progress * 100));
+}
+
 void WebContentsDelegateQt::DidFailLoad(int64 frame_id, const GURL &validated_url, bool is_main_frame, int error_code, const string16 &error_description, content::RenderViewHost *render_view_host)
 {
     if (is_main_frame)
diff --git a/lib/web_contents_delegate_qt.h b/lib/web_contents_delegate_qt.h
index 629fd5c6c35b690e5df5efb287d0a26b1a1c30ea..b9720eac2cd35b325f8b7b6d3730c8c373fcf56c 100644
--- a/lib/web_contents_delegate_qt.h
+++ b/lib/web_contents_delegate_qt.h
@@ -62,6 +62,7 @@ public:
     virtual void NavigationStateChanged(const content::WebContents* source, unsigned changed_flags);
     virtual void AddNewContents(content::WebContents* source, content::WebContents* new_contents, WindowOpenDisposition disposition, const gfx::Rect& initial_pos, bool user_gesture, bool* was_blocked);
     virtual void LoadingStateChanged(content::WebContents* source);
+    virtual void LoadProgressChanged(content::WebContents* source, double progress);
     virtual void DidFailLoad(int64 frame_id, const GURL &validated_url, bool is_main_frame, int error_code, const string16 &error_description, content::RenderViewHost *render_view_host);
     virtual void DidFinishLoad(int64 frame_id, const GURL &validated_url, bool is_main_frame, content::RenderViewHost *render_view_host);
     virtual void DidUpdateFaviconURL(int32 page_id, const std::vector<content::FaviconURL>& candidates);
diff --git a/lib/widgets/Api/qwebenginepage.cpp b/lib/widgets/Api/qwebenginepage.cpp
index ab3b1e675d382f106d9d19161846142cb94f78ab..8fafb3c47434d7d52d8955bdafca9f587ae1bb75 100644
--- a/lib/widgets/Api/qwebenginepage.cpp
+++ b/lib/widgets/Api/qwebenginepage.cpp
@@ -86,6 +86,12 @@ void QWebEnginePagePrivate::loadingStateChanged()
     updateNavigationActions();
 }
 
+void QWebEnginePagePrivate::loadProgressChanged(int progress)
+{
+    Q_Q(QWebEnginePage);
+    Q_EMIT q->loadProgress(progress);
+}
+
 QRectF QWebEnginePagePrivate::viewportRect() const
 {
     return view ? view->geometry() : QRectF();
diff --git a/lib/widgets/Api/qwebenginepage_p.h b/lib/widgets/Api/qwebenginepage_p.h
index ad1de0047edaf57cb25a28a05397489fd02aab4b..e8f511d2d6668c7fe6b14ad68462aeba155c94ca 100644
--- a/lib/widgets/Api/qwebenginepage_p.h
+++ b/lib/widgets/Api/qwebenginepage_p.h
@@ -69,6 +69,7 @@ public:
     virtual void urlChanged(const QUrl&) Q_DECL_OVERRIDE;
     virtual void iconChanged(const QUrl&) Q_DECL_OVERRIDE;
     virtual void loadingStateChanged() Q_DECL_OVERRIDE;
+    virtual void loadProgressChanged(int progress) Q_DECL_OVERRIDE;
     virtual QRectF viewportRect() const Q_DECL_OVERRIDE;
     virtual void loadFinished(bool success) Q_DECL_OVERRIDE;
     virtual void focusContainer() Q_DECL_OVERRIDE;
diff --git a/lib/widgets/Api/qwebengineview.cpp b/lib/widgets/Api/qwebengineview.cpp
index a1b4fbc272e82e8696ccd1860379927658cdf5c5..d07e710abe2bd2c7790a42e0463c40986bc0de4e 100644
--- a/lib/widgets/Api/qwebengineview.cpp
+++ b/lib/widgets/Api/qwebengineview.cpp
@@ -75,6 +75,7 @@ void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page)
         QObject::connect(page, &QWebEnginePage::titleChanged, view, &QWebEngineView::titleChanged);
         QObject::connect(page, &QWebEnginePage::urlChanged, view, &QWebEngineView::urlChanged);
         QObject::connect(page, &QWebEnginePage::loadStarted, view, &QWebEngineView::loadStarted);
+        QObject::connect(page, &QWebEnginePage::loadProgress, view, &QWebEngineView::loadProgress);
         QObject::connect(page, &QWebEnginePage::loadFinished, view, &QWebEngineView::loadFinished);
     }
 }