Skip to content

Commit 5b79a84

Browse files
committed
Added browser connection command.
1 parent ce3c79a commit 5b79a84

13 files changed

+166
-2
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#ifndef BROWSER_CONNECTION_COMMAND_H
2+
#define BROWSER_CONNECTION_COMMAND_H
3+
4+
#include "commands/webdriver_command.h"
5+
#include <QtNetwork/QNetworkAccessManager>
6+
7+
namespace webdriver {
8+
class Response;
9+
10+
/// Handles browser connection commands what set online mode.<br>
11+
/// Limitation: setOnline() can change connection state only for currently opened windows.
12+
/// If new view will be open now, it sets online by default (while doesn't receive a command explicitly).
13+
class BrowserConnectionCommand : public WebDriverCommand {
14+
public:
15+
BrowserConnectionCommand(const std::vector<std::string>& path_segments,
16+
const base::DictionaryValue* const parameters);
17+
~BrowserConnectionCommand();
18+
19+
virtual bool DoesPost() const OVERRIDE;
20+
virtual void ExecutePost(Response* const response) OVERRIDE;
21+
virtual bool DoesGet() const OVERRIDE;
22+
virtual void ExecuteGet(Response* const response) OVERRIDE;
23+
24+
DISALLOW_COPY_AND_ASSIGN(BrowserConnectionCommand);
25+
};
26+
27+
}
28+
#endif // BROWSER_CONNECTION_COMMAND_H

inc/extension_qt/qml_view_executor.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@ class QQmlViewCmdExecutor : public QViewCmdExecutor {
104104
virtual void VisualizerSource(std::string* source, Error** error) NOT_SUPPORTED_IMPL;
105105
virtual void VisualizerShowPoint(Error** error) NOT_SUPPORTED_IMPL;
106106

107+
virtual void SetOnline(bool, Error** error) NOT_SUPPORTED_IMPL;
108+
virtual void IsOnline(bool*, Error** error) NOT_SUPPORTED_IMPL;
109+
107110
protected:
108111
QDeclarativeView* getView(const ViewId& viewId, Error** error);
109112
typedef QHash<QString, QDeclarativeItem*> XMLElementMap;

inc/extension_qt/quick2_view_executor.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@ class Quick2ViewCmdExecutor : public QWindowViewCmdExecutor {
108108
virtual void VisualizerSource(std::string* source, Error** error) NOT_SUPPORTED_IMPL;
109109
virtual void VisualizerShowPoint(Error** error) NOT_SUPPORTED_IMPL;
110110

111+
virtual void SetOnline(bool, Error** error) NOT_SUPPORTED_IMPL;
112+
virtual void IsOnline(bool*, Error** error) NOT_SUPPORTED_IMPL;
113+
111114
protected:
112115
QQuickView* getView(const ViewId& viewId, Error** error);
113116
typedef QHash<QString, QQuickItem*> XMLElementMap;

inc/extension_qt/web_view_executor.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ class QWebViewCmdExecutor : public QViewCmdExecutor {
120120
virtual void VisualizerSource(std::string* source, Error** error);
121121
virtual void VisualizerShowPoint(Error** error);
122122

123+
virtual void SetOnline(bool, Error** error);
124+
virtual void IsOnline(bool*, Error** error);
125+
123126
protected:
124127
QWebView* getView(const ViewId& viewId, Error** error);
125128

inc/extension_qt/widget_view_executor.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,9 @@ class QWidgetViewCmdExecutor : public QViewCmdExecutor {
151151
virtual void VisualizerSource(std::string* source, Error** error);
152152
virtual void VisualizerShowPoint(Error** error) NOT_SUPPORTED_IMPL;
153153

154+
virtual void SetOnline(bool, Error** error) NOT_SUPPORTED_IMPL;
155+
virtual void IsOnline(bool*, Error** error) NOT_SUPPORTED_IMPL;
156+
154157
protected:
155158
typedef QHash<QString, QWidget*> XMLElementMap;
156159

inc/webdriver_route_patterns.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ class CommandRoutes {
7171
static const char kExecuteScript[];
7272
static const char kExecuteAsyncScript[];
7373
static const char kGetAppCache[];
74+
static const char kBrowserConnection[];
7475
static const char kAlertText[];
7576
static const char kAcceptAlert[];
7677
static const char kDismissAlert[];

inc/webdriver_view_executor.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,9 @@ class ViewCmdExecutor{
169169
virtual void VisualizerSource(std::string* source, Error** error) = 0;
170170
virtual void VisualizerShowPoint(Error** error) = 0;
171171

172+
virtual void IsOnline(bool *online,Error **error) = 0;
173+
virtual void SetOnline(bool online, Error **error) = 0;
174+
172175
protected:
173176
Session* session_;
174177
ViewId view_id_;
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
#include "commands/browser_connection_command.h"
2+
3+
#include "base/bind.h"
4+
#include "commands/response.h"
5+
#include "webdriver_error.h"
6+
#include "webdriver_session.h"
7+
#include "webdriver_view_executor.h"
8+
#include "webdriver_view_enumerator.h"
9+
10+
namespace webdriver {
11+
12+
typedef scoped_ptr<ViewCmdExecutor> ExecutorPtr;
13+
14+
BrowserConnectionCommand::BrowserConnectionCommand(const std::vector<std::string>& path_segments,
15+
const base::DictionaryValue* const parameters)
16+
: WebDriverCommand(path_segments, parameters) {
17+
}
18+
19+
BrowserConnectionCommand::~BrowserConnectionCommand() {
20+
}
21+
22+
bool BrowserConnectionCommand::DoesPost() const {
23+
return true;
24+
}
25+
26+
bool BrowserConnectionCommand::DoesGet() const {
27+
return true;
28+
}
29+
30+
void BrowserConnectionCommand::ExecuteGet(Response* const response) {
31+
bool online;
32+
Error* error = NULL;
33+
34+
ExecutorPtr executor(ViewCmdExecutorFactory::GetInstance()->CreateExecutor(session_));
35+
if (NULL == executor.get()) {
36+
response->SetError(new Error(kBadRequest, "cant get view executor."));
37+
return;
38+
}
39+
40+
session_->RunSessionTask(base::Bind(
41+
&ViewCmdExecutor::IsOnline,
42+
base::Unretained(executor.get()),
43+
&online,
44+
&error));
45+
46+
if (error) {
47+
response->SetError(error);
48+
return;
49+
}
50+
response->SetValue(base::Value::CreateBooleanValue(online));
51+
}
52+
53+
void BrowserConnectionCommand::ExecutePost(Response* const response) {
54+
const char kStateKey[] = "state";
55+
56+
if (!HasParameter(kStateKey)) {
57+
response->SetError(new Error(kBadRequest, "Request missing 'state' parameter"));
58+
return;
59+
}
60+
61+
bool online;
62+
if (!GetBooleanParameter("state", &online)) {
63+
response->SetError(new Error(
64+
kBadRequest, "'state' is invalid"));
65+
return;
66+
}
67+
68+
// update online state for all views
69+
std::vector<ViewId> views;
70+
71+
session_->RunSessionTask(base::Bind(
72+
&ViewEnumerator::EnumerateViews,
73+
session_,
74+
&views));
75+
76+
for (size_t i = 0; i < views.size(); ++i) {
77+
Error* error = NULL;
78+
ExecutorPtr executor(ViewCmdExecutorFactory::GetInstance()->CreateExecutor(session_, views.at(i)));
79+
if (NULL == executor.get()) {
80+
GlobalLogger::Log(kWarningLogLevel, "Cant update online mode for view(no executor), skip.");
81+
continue;
82+
}
83+
84+
session_->RunSessionTask(base::Bind(
85+
&ViewCmdExecutor::SetOnline,
86+
base::Unretained(executor.get()),
87+
online,
88+
&error));
89+
90+
if (error) {
91+
response->SetError(error);
92+
return;
93+
}
94+
}
95+
}
96+
97+
98+
}

src/webdriver/extension_qt/web_view_executor.cc

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
#include <QtGui/QApplication>
3232
#endif
3333
class QNetworkCookie;
34-
3534
namespace webdriver {
3635

3736
#define CHECK_VIEW_EXISTANCE \
@@ -839,6 +838,24 @@ void QWebViewCmdExecutor::VisualizerShowPoint(Error** error) {
839838
command.Execute(error);
840839
}
841840

841+
void QWebViewCmdExecutor::SetOnline(bool online, Error** error) {
842+
QNetworkAccessManager *manager = view_->page()->networkAccessManager();
843+
844+
if (online){
845+
manager->setNetworkAccessible(QNetworkAccessManager::Accessible);
846+
} else {
847+
manager->setNetworkAccessible(QNetworkAccessManager::NotAccessible);
848+
}
849+
}
850+
851+
void QWebViewCmdExecutor::IsOnline(bool* online, Error** error) {
852+
QNetworkAccessManager *manager = view_->page()->networkAccessManager();
853+
if (manager->networkAccessible() == QNetworkAccessManager::NotAccessible) {
854+
*online = false;
855+
} else {
856+
*online = true;
857+
}
858+
}
842859

843860

844861
} //namespace webdriver

src/webdriver/webdriver_route_patterns.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ bool CommandRoutes::IsStandardRoute(const std::string& pattern) {
6262
standardCommandRoutes.insert(kExecuteScript);
6363
standardCommandRoutes.insert(kExecuteAsyncScript);
6464
standardCommandRoutes.insert(kGetAppCache);
65+
standardCommandRoutes.insert(kBrowserConnection);
6566
standardCommandRoutes.insert(kAlertText);
6667
standardCommandRoutes.insert(kAcceptAlert);
6768
standardCommandRoutes.insert(kDismissAlert);
@@ -148,6 +149,7 @@ const char CommandRoutes::kUrlCmd[] = "/session/*/url";
148149
const char CommandRoutes::kExecuteScript[] = "/session/*/execute";
149150
const char CommandRoutes::kExecuteAsyncScript[] = "/session/*/execute_async";
150151
const char CommandRoutes::kGetAppCache[] = "/session/*/application_cache/status";
152+
const char CommandRoutes::kBrowserConnection[] = "/session/*/browser_connection";
151153
const char CommandRoutes::kAlertText[] = "/session/*/alert_text";
152154
const char CommandRoutes::kAcceptAlert[] = "/session/*/accept_alert";
153155
const char CommandRoutes::kDismissAlert[] = "/session/*/dismiss_alert";

0 commit comments

Comments
 (0)