browsercore/core/network/webnetworkaccessmanager.cpp
changeset 12 afcd8e6d025b
parent 9 b39122337a00
child 16 3c88a81ff781
equal deleted inserted replaced
11:786160610b4d 12:afcd8e6d025b
    39 #include "SchemeHandlerBr.h"
    39 #include "SchemeHandlerBr.h"
    40 #include <QWebFrame>
    40 #include <QWebFrame>
    41 
    41 
    42 namespace WRT {
    42 namespace WRT {
    43 
    43 
    44 WebNetworkAccessManager::WebNetworkAccessManager(WrtBrowserContainer* container, QObject* parent) : QNetworkAccessManager(container), m_browserContainer(container)
    44 WebNetworkAccessManager::WebNetworkAccessManager(WrtBrowserContainer* container, QObject* /*parent*/) : QNetworkAccessManager(container), m_browserContainer(container)
    45 {
    45 {
    46     m_cookieJar = new CookieJar();
    46     m_cookieJar = new CookieJar();
    47     m_reply = NULL;
    47     m_reply = NULL;
    48     this->setCookieJar(m_cookieJar);
    48     this->setCookieJar(m_cookieJar);
    49     connect(this, SIGNAL(authenticationRequired(QNetworkReply *, QAuthenticator *)), m_browserContainer, SLOT(slotAuthenticationRequired(QNetworkReply *, QAuthenticator *)));
    49     connect(this, SIGNAL(authenticationRequired(QNetworkReply *, QAuthenticator *)), m_browserContainer, SLOT(slotAuthenticationRequired(QNetworkReply *, QAuthenticator *)));
    66 
    66 
    67 void WebNetworkAccessManager::onfinished(QNetworkReply* reply)
    67 void WebNetworkAccessManager::onfinished(QNetworkReply* reply)
    68 {
    68 {
    69     QNetworkReply::NetworkError networkError = reply->error();
    69     QNetworkReply::NetworkError networkError = reply->error();
    70     QString requestUrl = reply->request().url().toString(); 
    70     QString requestUrl = reply->request().url().toString(); 
    71     
    71 
    72     if ( networkError != QNetworkReply::OperationCanceledError && 
    72     if (networkError != QNetworkReply::OperationCanceledError && 
    73         networkError != QNetworkReply::NoError )
    73         networkError != QNetworkReply::NoError)
    74     {
    74     {
    75         QString errorMsg = reply->errorString();
    75         QString errorMsg = reply->errorString();
    76         if ( activeNetworkInterfaces() == 0 ) {
    76         
       
    77         // check for previously flagged error from scheme handler
       
    78         if (m_schemeError == SchemeHandler::SchemeUnsupported) {
       
    79            // override error message from Qt network access manager
       
    80            errorMsg = qtTrId("txt_browser_error_dialog_link_not_associated");
       
    81         } else if (m_schemeError == SchemeHandler::LaunchFailed) {
       
    82            // override error message from Qt network access manager
       
    83            errorMsg = qtTrId("txt_browser_error_dialog_application_not_responding");
       
    84         } else if (activeNetworkInterfaces() == 0) {
    77             errorMsg = "Network not available";
    85             errorMsg = "Network not available";
    78         } else {
    86         } else {
    79             int httpErrorCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
    87             int httpErrorCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
    80             if ( httpErrorCode ) {
    88             if (httpErrorCode) {
    81                 QString httpErrorStr = QString ("HTTP %1 ").arg(httpErrorCode);
    89                 QString httpErrorStr = QString ("HTTP %1 ").arg(httpErrorCode);
    82                 QString httpReasonStr = reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString();
    90                 QString httpReasonStr = reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString();
    83                 errorMsg = httpErrorStr + httpReasonStr;
    91                 errorMsg = httpErrorStr + httpReasonStr;
    84 	          }	  
    92 	         }
    85         }
    93         }
       
    94 
    86         emit networkErrorHappened(errorMsg); 
    95         emit networkErrorHappened(errorMsg); 
    87         emit networkErrorUrl(requestUrl);
    96         emit networkErrorUrl(requestUrl);
    88     }
    97     }
    89 }
    98 }
    90 
    99 
    96 
   105 
    97 QNetworkReply* WebNetworkAccessManager::createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData)
   106 QNetworkReply* WebNetworkAccessManager::createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData)
    98 {
   107 {
    99     QNetworkRequest req = request;
   108     QNetworkRequest req = request;
   100     
   109     
       
   110     m_schemeError = SchemeHandler::NoError; // clear previous error
   101     req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
   111     req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
   102 	// improve performance by
   112 	// improve performance by
   103 	// load from cache if available, otherwise load from network. 
   113 	// load from cache if available, otherwise load from network. 
   104 	// Note that this can return possibly stale (but not expired) items from cache.
   114 	// Note that this can return possibly stale (but not expired) items from cache.
   105 	// QNetworkRequest::PreferNetwork is default value
   115 	// QNetworkRequest::PreferNetwork is default value
   165         QNetworkReply* reply = new NetworkErrorReply(QNetworkReply::OperationCanceledError, "Page Restored", req.url());
   175         QNetworkReply* reply = new NetworkErrorReply(QNetworkReply::OperationCanceledError, "Page Restored", req.url());
   166         QMetaObject::invokeMethod(reply, "finished", Qt::QueuedConnection);
   176         QMetaObject::invokeMethod(reply, "finished", Qt::QueuedConnection);
   167         return reply;
   177         return reply;
   168     }
   178     }
   169     
   179     
   170     if (m_browserContainer->schemeHandler()->HandleSpecialScheme(req.url())) {
   180     // Some schemes such as tel are handled by scheme handler.
       
   181     m_schemeError = m_browserContainer->schemeHandler()->HandleSpecialScheme(req.url());
       
   182     if (m_schemeError == SchemeHandler::NoError) {
   171         // handled in scheme handler - block network access
   183         // handled in scheme handler - block network access
   172         QNetworkReply* reply = new NetworkErrorReply(QNetworkReply::OperationCanceledError, "Scheme Handled", req.url());
   184         QNetworkReply* reply = new NetworkErrorReply(QNetworkReply::OperationCanceledError, "Scheme Handled", req.url());
   173         QMetaObject::invokeMethod(reply, "finished", Qt::QueuedConnection);
   185         QMetaObject::invokeMethod(reply, "finished", Qt::QueuedConnection);
   174         return reply;
   186         return reply;
   175     }
   187     }
       
   188     // else let Qt network access manager create request but if it fails 
       
   189     // m_schemeError may be used to determine an appropriate error message
   176 
   190 
   177     //Accept-Language header
   191     //Accept-Language header
   178     QLocale language;
   192     QLocale language;
   179     QString langCountryCode = language.name();
   193     QString langCountryCode = language.name();
   180     //QLocale::name returns the language and country as a  string of the form "language_country", where
   194     //QLocale::name returns the language and country as a  string of the form "language_country", where