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 |