Skip to content

Commit 5d3592f

Browse files
committed
refactored web_view_util
1 parent 543227c commit 5d3592f

File tree

4 files changed

+64
-81
lines changed

4 files changed

+64
-81
lines changed

inc/extension_qt/web_view_creator.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
namespace webdriver {
99

1010
class Session;
11+
class ViewHandle;
1112

1213
/// base class for custom view's creators
1314
class QWebViewCreator : public ViewCreator {
@@ -20,6 +21,7 @@ class QWebViewCreator : public ViewCreator {
2021
virtual bool CreateViewForUrl(const Logger& logger, const std::string& url, ViewHandle** view) const;
2122

2223
private:
24+
bool ShowView(const Logger& logger, ViewHandle* viewHandle) const;
2325

2426
DISALLOW_COPY_AND_ASSIGN(QWebViewCreator);
2527
};

src/webdriver/extension_qt/web_view_creator.cc

Lines changed: 41 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -37,37 +37,9 @@ bool QWebViewCreator::CreateViewByClassName(const Logger& logger, const std::str
3737
}
3838
}
3939

40-
if (NULL != handle) {
41-
QWidget* widget = (dynamic_cast<QViewHandle*>(handle))->get();
42-
std::string objClassName(widget->metaObject()->className());
43-
44-
if (NULL != widget) {
45-
QEventLoop loop;
46-
QRepaintEventFilter filter(widget);
47-
QCheckPagePaint painter;
48-
QObject::connect(&filter, SIGNAL(repainted()), &loop, SLOT(quit()));
49-
QObject::connect(&filter, SIGNAL(repainted()), &painter, SLOT(pagePainted()));
50-
51-
QTimer timer;
52-
timer.setSingleShot(true);
53-
QObject::connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
54-
timer.start(500);
55-
56-
widget->installEventFilter(&filter);
57-
widget->show();
58-
if (!painter.isPainting())
59-
loop.exec();
60-
61-
logger.Log(kInfoLogLevel, "QWebViewCreator created view ("
62-
+ objClassName +") by class name - "+className);
63-
64-
*view = handle;
65-
66-
return true;
67-
} else {
68-
logger.Log(kSevereLogLevel, "QWebViewCreator, smth wrong.");
69-
handle->Release();
70-
}
40+
if (NULL != handle && ShowView(logger, handle)) {
41+
*view = handle;
42+
return true;
7143
}
7244

7345
// view was not created
@@ -77,65 +49,55 @@ bool QWebViewCreator::CreateViewByClassName(const Logger& logger, const std::str
7749
bool QWebViewCreator::CreateViewForUrl(const Logger& logger, const std::string& url, ViewHandle** view) const {
7850
if (factory.empty())
7951
return false;
80-
81-
QNetworkAccessManager *pmanager = new QNetworkAccessManager();
82-
83-
QContentTypeResolver *presolver = new QContentTypeResolver(pmanager);
84-
std::string contentType;
85-
scoped_ptr<Error> ignore_err(presolver->resolveContentType(url, contentType));
86-
delete pmanager;
87-
delete presolver;
88-
89-
if (ignore_err != NULL) {
52+
53+
Error* tmp_err = NULL;
54+
if (!QWebViewUtil::isUrlSupported(url, &tmp_err)) {
55+
if (tmp_err) delete tmp_err;
9056
return false;
9157
}
58+
59+
// get first found QWebView
60+
CreateViewMethod createMethod = factory.begin()->second;
61+
ViewHandle* handle = new QViewHandle(static_cast<QWidget*>(createMethod()));
9262

93-
QWebPage *pWebPage= new QWebPage();
94-
if (!pWebPage->supportsContentType(QString::fromStdString(contentType))) {
95-
delete pWebPage;
96-
return false;
63+
if (NULL != handle && ShowView(logger, handle)) {
64+
*view = handle;
65+
return true;
9766
}
98-
delete pWebPage;
9967

100-
ViewHandle* handle = NULL;
101-
// get first found QWebView
102-
CreateViewMethod createMethod = factory.begin()->second;
103-
handle = new QViewHandle(static_cast<QWidget*>(createMethod()));
68+
return false;
69+
}
10470

105-
if (NULL != handle) {
106-
QWidget* widget = (dynamic_cast<QViewHandle*>(handle))->get();
107-
std::string objClassName(widget->metaObject()->className());
71+
bool QWebViewCreator::ShowView(const Logger& logger, ViewHandle* viewHandle) const {
72+
QWidget* widget = (dynamic_cast<QViewHandle*>(viewHandle))->get();
10873

109-
if (NULL != widget) {
110-
QEventLoop loop;
111-
QRepaintEventFilter filter(widget);
112-
QCheckPagePaint painter;
113-
QObject::connect(&filter, SIGNAL(repainted()), &loop, SLOT(quit()));
114-
QObject::connect(&filter, SIGNAL(repainted()), &painter, SLOT(pagePainted()));
115-
116-
QTimer timer;
117-
timer.setSingleShot(true);
118-
QObject::connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
119-
timer.start(500);
120-
121-
widget->installEventFilter(&filter);
122-
widget->show();
123-
if (!painter.isPainting())
124-
loop.exec();
74+
if (NULL != widget) {
75+
std::string objClassName(widget->metaObject()->className());
76+
QEventLoop loop;
77+
QRepaintEventFilter filter(widget);
78+
QCheckPagePaint painter;
79+
QObject::connect(&filter, SIGNAL(repainted()), &loop, SLOT(quit()));
80+
QObject::connect(&filter, SIGNAL(repainted()), &painter, SLOT(pagePainted()));
81+
82+
QTimer timer;
83+
timer.setSingleShot(true);
84+
QObject::connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
85+
timer.start(500);
86+
87+
widget->installEventFilter(&filter);
88+
widget->show();
89+
if (!painter.isPainting())
90+
loop.exec();
12591

126-
logger.Log(kInfoLogLevel, "QWebViewCreator created view("
127-
+ objClassName + ") by url - " + url);
128-
129-
*view = handle;
92+
logger.Log(kInfoLogLevel, "QWebViewCreator created view(" + objClassName + ").");
13093

131-
return true;
132-
} else {
133-
logger.Log(kSevereLogLevel, "QWebViewCreator, smth wrong.");
134-
handle->Release();
135-
}
94+
return true;
95+
} else {
96+
logger.Log(kSevereLogLevel, "QWebViewCreator, smth wrong.");
97+
viewHandle->Release();
13698
}
13799

138-
return false;
100+
return false;
139101
}
140102

141103

src/webdriver/extension_qt/web_view_util.cc

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,34 @@ bool QWebViewUtil::isUrlSupported(QWebView* pWebView, const std::string& url, Er
2323
GlobalLogger::Log(kWarningLogLevel, " Invalid QNetworkAccessManager* ");
2424
return false;
2525
}
26-
QContentTypeResolver *presolver = new QContentTypeResolver(pmanager);
2726

28-
std::string mimeType ;
27+
scoped_ptr<QContentTypeResolver> presolver(new QContentTypeResolver(pmanager));
28+
29+
std::string mimeType;
30+
2931
*error = presolver->resolveContentType(url, mimeType);
3032
if (NULL != *error) {
3133
return false;
3234
}
35+
3336
return pWebPage->supportsContentType(QString::fromStdString(mimeType));
3437
}
3538

39+
bool QWebViewUtil::isUrlSupported(const std::string& url, Error **error) {
40+
scoped_ptr<QNetworkAccessManager> pmanager(new QNetworkAccessManager());
41+
scoped_ptr<QContentTypeResolver> presolver(new QContentTypeResolver(pmanager.get()));
42+
43+
std::string mimeType ;
44+
*error = presolver->resolveContentType(url, mimeType);
45+
if (NULL != *error) {
46+
return false;
47+
}
48+
49+
scoped_ptr<QWebPage> pWebPage(new QWebPage());
50+
51+
return pWebPage->supportsContentType(QString::fromStdString(mimeType));
52+
}
53+
3654
QWebView* QWebViewUtil::getWebView(Session* session, const ViewId& viewId) {
3755
ViewHandle* viewHandle = session->GetViewHandle(viewId);
3856
if (NULL == viewHandle)

src/webdriver/extension_qt/web_view_util.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class Error;
1919
class QWebViewUtil {
2020
public:
2121
static bool isUrlSupported(QWebView* pWebView, const std::string& url, Error **error);
22+
static bool isUrlSupported(const std::string& url, Error **error);
2223
static QWebView* getWebView(Session* session, const ViewId& viewId);
2324

2425
private:

0 commit comments

Comments
 (0)