browsercore/core/network/webnetworkaccessmanager.cpp
changeset 15 73c48011b8c7
parent 10 232fbd5a2dcb
--- a/browsercore/core/network/webnetworkaccessmanager.cpp	Fri Sep 17 08:27:10 2010 +0300
+++ b/browsercore/core/network/webnetworkaccessmanager.cpp	Mon Oct 04 00:04:54 2010 +0300
@@ -41,7 +41,7 @@
 
 namespace WRT {
 
-WebNetworkAccessManager::WebNetworkAccessManager(WrtBrowserContainer* container, QObject* parent) : QNetworkAccessManager(container), m_browserContainer(container)
+WebNetworkAccessManager::WebNetworkAccessManager(WrtBrowserContainer* container, QObject* /*parent*/) : QNetworkAccessManager(container), m_browserContainer(container)
 {
     m_cookieJar = new CookieJar();
     m_reply = NULL;
@@ -68,21 +68,30 @@
 {
     QNetworkReply::NetworkError networkError = reply->error();
     QString requestUrl = reply->request().url().toString(); 
-    
-    if ( networkError != QNetworkReply::OperationCanceledError && 
-        networkError != QNetworkReply::NoError )
+
+    if (networkError != QNetworkReply::OperationCanceledError && 
+        networkError != QNetworkReply::NoError)
     {
         QString errorMsg = reply->errorString();
-        if ( activeNetworkInterfaces() == 0 ) {
+        
+        // check for previously flagged error from scheme handler
+        if (m_schemeError == SchemeHandler::SchemeUnsupported) {
+           // override error message from Qt network access manager
+           errorMsg = qtTrId("txt_browser_error_dialog_link_not_associated");
+        } else if (m_schemeError == SchemeHandler::LaunchFailed) {
+           // override error message from Qt network access manager
+           errorMsg = qtTrId("txt_browser_error_dialog_application_not_responding");
+        } else if (activeNetworkInterfaces() == 0) {
             errorMsg = "Network not available";
         } else {
             int httpErrorCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
-            if ( httpErrorCode ) {
+            if (httpErrorCode) {
                 QString httpErrorStr = QString ("HTTP %1 ").arg(httpErrorCode);
                 QString httpReasonStr = reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString();
                 errorMsg = httpErrorStr + httpReasonStr;
-	          }	  
+	         }
         }
+
         emit networkErrorHappened(errorMsg); 
         emit networkErrorUrl(requestUrl);
     }
@@ -98,6 +107,7 @@
 {
     QNetworkRequest req = request;
     
+    m_schemeError = SchemeHandler::NoError; // clear previous error
     req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
 	// improve performance by
 	// load from cache if available, otherwise load from network. 
@@ -167,12 +177,16 @@
         return reply;
     }
     
-    if (m_browserContainer->schemeHandler()->HandleSpecialScheme(req.url())) {
+    // Some schemes such as tel are handled by scheme handler.
+    m_schemeError = m_browserContainer->schemeHandler()->HandleSpecialScheme(req.url());
+    if (m_schemeError == SchemeHandler::NoError) {
         // handled in scheme handler - block network access
         QNetworkReply* reply = new NetworkErrorReply(QNetworkReply::OperationCanceledError, "Scheme Handled", req.url());
         QMetaObject::invokeMethod(reply, "finished", Qt::QueuedConnection);
         return reply;
     }
+    // else let Qt network access manager create request but if it fails 
+    // m_schemeError may be used to determine an appropriate error message
 
     //Accept-Language header
     QLocale language;