77
88#include < QtNetwork/QNetworkReply>
99
10+ #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
11+ #include < QtCore/QMimeDatabase>
12+ #include < QtCore/QMimeType>
13+ #endif
14+
1015namespace webdriver {
1116
1217QContentTypeResolver::QContentTypeResolver (QNetworkAccessManager *pmanager)
@@ -15,51 +20,71 @@ QContentTypeResolver::QContentTypeResolver(QNetworkAccessManager *pmanager)
1520QContentTypeResolver::~QContentTypeResolver () {}
1621
1722Error* QContentTypeResolver::resolveContentType (const std::string& url, std::string& mimetype) {
18- QEventLoop loop;
19- QObject::connect (manager_, SIGNAL (finished (QNetworkReply*)),
20- &loop,SLOT (quit ()));
21-
22- Error *error = NULL ;
23- QNetworkRequest request;
24- request.setUrl (QUrl (QString::fromStdString (url)));
25- QNetworkReply *reply = manager_->head (request);
26- if (NULL == reply) {
27- error = new Error (kBadRequest );
28- GlobalLogger::Log (kWarningLogLevel , " QContentTypeResolver::resolveContentType() : invalid Request " );
29- return error;
30- }
23+ QUrl contentUrl (QString::fromStdString (url));
24+ QString scheme = contentUrl.scheme ();
25+ QString qmimetype;
26+ Error* error = NULL ;
3127
32- if (reply->isRunning ()) {
33- loop.exec ();
34- }
28+ if ( (0 == scheme.compare (" http" , Qt::CaseInsensitive)) ||
29+ (0 == scheme.compare (" https" , Qt::CaseInsensitive)) ) {
3530
36- QNetworkReply::NetworkError err = reply->error ();
37- if (err) {
38- error = new Error (kBadRequest );
39- GlobalLogger::Log (kWarningLogLevel , " QContentTypeResolver::resolveContentType() : NetworkError : " + QString::number (err).toStdString ());
40- return error;
41- }
31+ QEventLoop loop;
32+ QObject::connect (manager_, SIGNAL (finished (QNetworkReply*)),
33+ &loop,SLOT (quit ()));
4234
43- QVariant contentMimeType = reply->header (QNetworkRequest::ContentTypeHeader);
44- if (!contentMimeType.isValid ()) {
45- error = new Error (kBadRequest );
46- GlobalLogger::Log (kWarningLogLevel , " QContentTypeResolver::resolveContentType() : ContentMimeType invalid " );
47- return error;
48- }
35+ QNetworkRequest request;
36+ request.setUrl (contentUrl);
4937
50- QString qmimetype = contentMimeType.toString ();
51- int index = qmimetype.indexOf (" ;" );
52- if (index != -1 ) {
53- qmimetype.remove (index, qmimetype.length ()-index);
54- }
38+ QNetworkReply *reply = manager_->head (request);
39+ if (NULL == reply) {
40+ GlobalLogger::Log (kWarningLogLevel , " QContentTypeResolver::resolveContentType() : invalid Request " );
41+ return new Error (kBadRequest );
42+ }
43+
44+ if (reply->isRunning ()) {
45+ loop.exec ();
46+ }
47+
48+ QNetworkReply::NetworkError err = reply->error ();
49+ if (err) {
50+ GlobalLogger::Log (kWarningLogLevel , " QContentTypeResolver::resolveContentType() : NetworkError : " + QString::number (err).toStdString ());
51+ return new Error (kBadRequest );
52+ }
53+
54+ QVariant contentMimeType = reply->header (QNetworkRequest::ContentTypeHeader);
55+ if (!contentMimeType.isValid ()) {
56+ GlobalLogger::Log (kWarningLogLevel , " QContentTypeResolver::resolveContentType() : ContentMimeType invalid " );
57+ return new Error (kBadRequest );
58+ }
59+
60+ qmimetype = contentMimeType.toString ();
61+ int index = qmimetype.indexOf (" ;" );
62+ if (index != -1 ) {
63+ qmimetype.remove (index, qmimetype.length ()-index);
64+ }
65+
66+ if (qmimetype.isEmpty ()) {
67+ GlobalLogger::Log (kWarningLogLevel , " QContentTypeResolver::resolveContentType() : ContentMimeType is empty " );
68+ return new Error (kBadRequest );
69+ }
70+ } else {
71+ // non http schemes
72+ #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
73+ QMimeDatabase mimeDatabase;
74+ QMimeType mimeType;
75+ mimeType = mimeDatabase.mimeTypeForUrl (contentUrl);
76+
77+ qmimetype = mimeType.name ();
78+ #else
79+ // TODO: implement for qt4
80+ #endif
5581
56- if (qmimetype.isEmpty ()) {
57- error = new Error (kBadRequest );
58- GlobalLogger::Log (kWarningLogLevel , " QContentTypeResolver::resolveContentType() : ContentMimeType is empty " );
59- return error;
6082 }
6183
6284 mimetype = qmimetype.toStdString ();
85+
86+ GlobalLogger::Log (kInfoLogLevel , " QContentTypeResolver::resolveContentType() : content type: " + mimetype);
87+
6388 return error;
6489}
6590
0 commit comments