Index: /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp	(revision 58244)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp	(revision 58245)
@@ -61,4 +61,11 @@
 #endif
 
+signals:
+
+    /** Notifies listeners about download progress change.
+      * @param iCurrent holds the current amount of bytes downloaded.
+      * @param iTotal   holds the total amount of bytes to be downloaded. */
+    void sigDownloadProgress(qint64 iCurrent, qint64 iTotal);
+
 public:
 
@@ -96,6 +103,8 @@
 
 private:
+
     /** @name Helpers - HTTP stuff
      * @{ */
+    int applyConfiguration();
     int applyProxyRules();
     int applyHttpsCertificates();
@@ -130,4 +139,12 @@
     /** @} */
 
+    /** @name HTTP download progress handling.
+     * @{ */
+    /** Redirects download progress callback to particular object which can handle it. */
+    static void handleProgressChange(RTHTTP hHttp, void *pvUser, uint64_t cbDownloadTotal, uint64_t cbDownloaded);
+    /** Handles download progress callback. */
+    void handleProgressChange(uint64_t cbDownloadTotal, uint64_t cbDownloaded);
+    /** @} */
+
     /** Holds short descriptive context of thread's current operation. */
     QString m_strContext;
@@ -234,4 +251,10 @@
     if (m_hHttp != NIL_RTHTTP)
         RTHttpAbort(m_hHttp);
+}
+
+int UINetworkReplyPrivateThread::applyConfiguration()
+{
+    /* Install downloading progress callback: */
+    return RTHttpSetDownloadProgressCallback(m_hHttp, &UINetworkReplyPrivateThread::handleProgressChange, this);
 }
 
@@ -441,4 +464,8 @@
     if (RT_SUCCESS(m_iError))
     {
+        /* Apply configuration: */
+        if (RT_SUCCESS(m_iError))
+            m_iError = applyConfiguration();
+
         /* Apply proxy-rules: */
         if (RT_SUCCESS(m_iError))
@@ -790,4 +817,19 @@
 }
 
+/* static */
+void UINetworkReplyPrivateThread::handleProgressChange(RTHTTP hHttp, void *pvUser, uint64_t cbDownloadTotal, uint64_t cbDownloaded)
+{
+    /* Redirect callback to particular object: */
+    Q_UNUSED(hHttp);
+    AssertPtrReturnVoid(pvUser);
+    static_cast<UINetworkReplyPrivateThread*>(pvUser)->handleProgressChange(cbDownloadTotal, cbDownloaded);
+}
+
+void UINetworkReplyPrivateThread::handleProgressChange(uint64_t cbDownloadTotal, uint64_t cbDownloaded)
+{
+    /* Notify listeners about progress change: */
+    emit sigDownloadProgress(cbDownloaded, cbDownloadTotal);
+}
+
 #ifndef VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS
 
@@ -816,4 +858,6 @@
         /* Create and run network-reply thread: */
         m_pThread = new UINetworkReplyPrivateThread(request, type);
+        connect(m_pThread, SIGNAL(sigDownloadProgress(qint64, qint64)),
+                this, SIGNAL(downloadProgress(qint64, qint64)), Qt::QueuedConnection);
         connect(m_pThread, SIGNAL(finished()), this, SLOT(sltFinished()));
         m_pThread->start();
