diff --git a/runtime/BrowserWindow.cpp b/runtime/BrowserWindow.cpp
index 6b962bd..d58a094 100644
--- a/runtime/BrowserWindow.cpp
+++ b/runtime/BrowserWindow.cpp
@@ -353,8 +353,9 @@ void BrowserWindow::downloadFileProgress(qint64 readData, qint64 totalData)
         m_file->write(reply->read(readData));
         m_progressDialog->setValue(readData);
 
-        // As read data and totalData difference is zero means downloading is finished
-        if ((totalData - readData) == 0)
+        // As read data and totalData difference is zero means downloading is finished.
+        if ((totalData - readData) == 0 ||
+            (readData != 0 && totalData == -1))
         {
             // As downloading is finished so remove progress bar dialog
             if (m_progressDialog)
@@ -438,6 +439,11 @@ void BrowserWindow::downloadFinished()
 // Below slot will be called when user directly click on any download link
 void BrowserWindow::unsupportedContent(QNetworkReply * reply)
 {
+    // Extract filename and query from encoded URL
+    QUrlQuery query_data(reply->url());
+    QString file_name = query_data.queryItemValue("filename");
+    QString query = query_data.queryItemValue("query");
+
     if (m_downloadStarted)
     {
         // Inform user that download is already started
@@ -445,7 +451,12 @@ void BrowserWindow::unsupportedContent(QNetworkReply * reply)
         return;
     }
 
-    m_defaultFilename = QFileInfo(reply->url().toString()).fileName();
+    // If encoded URL contains 'filename' attribute then use that filename in file dialog.
+    if (file_name.isEmpty() && query.isEmpty())
+        m_defaultFilename = QFileInfo(reply->url().toString()).fileName();
+    else
+        m_defaultFilename = file_name;
+
     QFileDialog save_dialog(this);
     save_dialog.setAcceptMode(QFileDialog::AcceptSave);
     save_dialog.setWindowTitle(tr("Save file"));
