Commit fe8d94c2 authored by Tatiana Buldina's avatar Tatiana Buldina Committed by Commit Bot

[ChromeDriver] Handle user prompts in window size commands

Bug: chromedriver:2658
Change-Id: Id1acd6fbab55a47f42858d5c82aec9210dacf845
Reviewed-on: https://chromium-review.googlesource.com/c/1343371Reviewed-by: default avatarJohn Chen <johnchen@chromium.org>
Commit-Queue: Tatiana Buldina <buldina@chromium.org>
Cr-Commit-Position: refs/heads/master@{#609850}
parent 694b7abc
...@@ -899,33 +899,6 @@ Status ExecuteSetNetworkConnection(Session* session, ...@@ -899,33 +899,6 @@ Status ExecuteSetNetworkConnection(Session* session,
return Status(kOk); return Status(kOk);
} }
// TODO(johnchen): There is no public method in Chrome or ChromeDesktopImpl to
// get both size and position in one call. What we're doing now is kind of
// wasteful, since both GetWindowPosition and GetWindowSize end up getting both
// position and size, and then discard one of the two pieces.
Status ExecuteGetWindowRect(Session* session,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value) {
int x, y;
int width, height;
Status status = session->chrome->GetWindowPosition(session->window, &x, &y);
if (status.IsError())
return status;
status = session->chrome->GetWindowSize(session->window, &width, &height);
if (status.IsError())
return status;
base::DictionaryValue rect;
rect.SetInteger("x", x);
rect.SetInteger("y", y);
rect.SetInteger("width", width);
rect.SetInteger("height", height);
value->reset(rect.DeepCopy());
return Status(kOk);
}
Status ExecuteGetWindowPosition(Session* session, Status ExecuteGetWindowPosition(Session* session,
const base::DictionaryValue& params, const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value) { std::unique_ptr<base::Value>* value) {
...@@ -972,65 +945,6 @@ Status ExecuteGetWindowSize(Session* session, ...@@ -972,65 +945,6 @@ Status ExecuteGetWindowSize(Session* session,
return Status(kOk); return Status(kOk);
} }
Status ExecuteSetWindowRect(Session* session,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value) {
const double max_range = 2147483647; // 2^31 - 1
const double min_range = -2147483648; // -2^31
const base::Value* temp;
double width = 0;
double height = 0;
double x = 0;
double y = 0;
bool has_x = params.Get("x", &temp) && !temp->is_none();
if (has_x) {
if (!temp->GetAsDouble(&x))
return Status(kInvalidArgument, "'x' must be a number");
if (x > max_range || x < min_range)
return Status(kInvalidArgument, "'x' out of range");
}
bool has_y = params.Get("y", &temp) && !temp->is_none();
if (has_y) {
if (!temp->GetAsDouble(&y))
return Status(kInvalidArgument, "'y' must be a number");
if (y > max_range || y < min_range )
return Status(kInvalidArgument, "'y' out of range");
}
bool has_width = params.Get("width", &temp) && !temp->is_none();
if (has_width) {
if (!temp->GetAsDouble(&width))
return Status(kInvalidArgument, "'width' must be a number");
if (width > max_range || width < 0 )
return Status(kInvalidArgument, "'width' out of range");
}
bool has_height = params.Get("height", &temp) && !temp->is_none();
if (has_height) {
if (!temp->GetAsDouble(&height))
return Status(kInvalidArgument, "'height' must be a number");
if (height > max_range || height < 0 )
return Status(kInvalidArgument, "'height' out of range");
}
// to pass to the set window rect command
base::DictionaryValue rect_params;
// only set position if both x and y are given
if (has_x && has_y) {
rect_params.SetInteger("x", static_cast<int>(x));
rect_params.SetInteger("y", static_cast<int>(y));
} // only set size if both height and width are given
if (has_width && has_height) {
rect_params.SetInteger("width", static_cast<int>(width));
rect_params.SetInteger("height", static_cast<int>(height));
}
Status status = session->chrome->SetWindowRect(session->window, rect_params);
if (status.IsError())
return status;
// return the current window rect
return ExecuteGetWindowRect(session, params, value);
}
Status ExecuteSetWindowSize(Session* session, Status ExecuteSetWindowSize(Session* session,
const base::DictionaryValue& params, const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value) { std::unique_ptr<base::Value>* value) {
...@@ -1045,36 +959,6 @@ Status ExecuteSetWindowSize(Session* session, ...@@ -1045,36 +959,6 @@ Status ExecuteSetWindowSize(Session* session,
static_cast<int>(height)); static_cast<int>(height));
} }
Status ExecuteMaximizeWindow(Session* session,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value) {
Status status = session->chrome->MaximizeWindow(session->window);
if (status.IsError())
return status;
return ExecuteGetWindowRect(session, params, value);
}
Status ExecuteMinimizeWindow(Session* session,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value) {
Status status = session->chrome->MinimizeWindow(session->window);
if (status.IsError())
return status;
return ExecuteGetWindowRect(session, params, value);
}
Status ExecuteFullScreenWindow(Session* session,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value) {
Status status = session->chrome->FullScreenWindow(session->window);
if (status.IsError())
return status;
return ExecuteGetWindowRect(session, params, value);
}
Status ExecuteGetAvailableLogTypes(Session* session, Status ExecuteGetAvailableLogTypes(Session* session,
const base::DictionaryValue& params, const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value) { std::unique_ptr<base::Value>* value) {
......
...@@ -126,10 +126,6 @@ Status ExecuteSetNetworkConnection(Session* session, ...@@ -126,10 +126,6 @@ Status ExecuteSetNetworkConnection(Session* session,
const base::DictionaryValue& params, const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value); std::unique_ptr<base::Value>* value);
Status ExecuteGetWindowRect(Session* session,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value);
Status ExecuteGetWindowPosition(Session* session, Status ExecuteGetWindowPosition(Session* session,
const base::DictionaryValue& params, const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value); std::unique_ptr<base::Value>* value);
...@@ -142,26 +138,10 @@ Status ExecuteGetWindowSize(Session* session, ...@@ -142,26 +138,10 @@ Status ExecuteGetWindowSize(Session* session,
const base::DictionaryValue& params, const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value); std::unique_ptr<base::Value>* value);
Status ExecuteSetWindowRect(Session* session,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value);
Status ExecuteSetWindowSize(Session* session, Status ExecuteSetWindowSize(Session* session,
const base::DictionaryValue& params, const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value); std::unique_ptr<base::Value>* value);
Status ExecuteMaximizeWindow(Session* session,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value);
Status ExecuteMinimizeWindow(Session* session,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value);
Status ExecuteFullScreenWindow(Session* session,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value);
Status ExecuteGetAvailableLogTypes(Session* session, Status ExecuteGetAvailableLogTypes(Session* session,
const base::DictionaryValue& params, const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value); std::unique_ptr<base::Value>* value);
......
...@@ -1585,3 +1585,129 @@ Status ExecuteTakeHeapSnapshot(Session* session, ...@@ -1585,3 +1585,129 @@ Status ExecuteTakeHeapSnapshot(Session* session,
Timeout* timeout) { Timeout* timeout) {
return web_view->TakeHeapSnapshot(value); return web_view->TakeHeapSnapshot(value);
} }
// TODO(johnchen): There is no public method in Chrome or ChromeDesktopImpl to
// get both size and position in one call. What we're doing now is kind of
// wasteful, since both GetWindowPosition and GetWindowSize end up getting both
// position and size, and then discard one of the two pieces.
Status ExecuteGetWindowRect(Session* session,
WebView* web_view,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value,
Timeout* timeout) {
int x, y;
int width, height;
Status status = session->chrome->GetWindowPosition(session->window, &x, &y);
if (status.IsError())
return status;
status = session->chrome->GetWindowSize(session->window, &width, &height);
if (status.IsError())
return status;
base::DictionaryValue rect;
rect.SetInteger("x", x);
rect.SetInteger("y", y);
rect.SetInteger("width", width);
rect.SetInteger("height", height);
value->reset(rect.DeepCopy());
return Status(kOk);
}
Status ExecuteSetWindowRect(Session* session,
WebView* web_view,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value,
Timeout* timeout) {
const double max_range = 2147483647; // 2^31 - 1
const double min_range = -2147483648; // -2^31
const base::Value* temp;
double width = 0;
double height = 0;
double x = 0;
double y = 0;
bool has_x = params.Get("x", &temp) && !temp->is_none();
if (has_x) {
if (!temp->GetAsDouble(&x))
return Status(kInvalidArgument, "'x' must be a number");
if (x > max_range || x < min_range)
return Status(kInvalidArgument, "'x' out of range");
}
bool has_y = params.Get("y", &temp) && !temp->is_none();
if (has_y) {
if (!temp->GetAsDouble(&y))
return Status(kInvalidArgument, "'y' must be a number");
if (y > max_range || y < min_range )
return Status(kInvalidArgument, "'y' out of range");
}
bool has_width = params.Get("width", &temp) && !temp->is_none();
if (has_width) {
if (!temp->GetAsDouble(&width))
return Status(kInvalidArgument, "'width' must be a number");
if (width > max_range || width < 0 )
return Status(kInvalidArgument, "'width' out of range");
}
bool has_height = params.Get("height", &temp) && !temp->is_none();
if (has_height) {
if (!temp->GetAsDouble(&height))
return Status(kInvalidArgument, "'height' must be a number");
if (height > max_range || height < 0 )
return Status(kInvalidArgument, "'height' out of range");
}
// to pass to the set window rect command
base::DictionaryValue rect_params;
// only set position if both x and y are given
if (has_x && has_y) {
rect_params.SetInteger("x", static_cast<int>(x));
rect_params.SetInteger("y", static_cast<int>(y));
} // only set size if both height and width are given
if (has_width && has_height) {
rect_params.SetInteger("width", static_cast<int>(width));
rect_params.SetInteger("height", static_cast<int>(height));
}
Status status = session->chrome->SetWindowRect(session->window, rect_params);
if (status.IsError())
return status;
// return the current window rect
return ExecuteGetWindowRect(session, web_view, params, value, timeout);
}
Status ExecuteMaximizeWindow(Session* session,
WebView* web_view,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value,
Timeout* timeout) {
Status status = session->chrome->MaximizeWindow(session->window);
if (status.IsError())
return status;
return ExecuteGetWindowRect(session, web_view, params, value, timeout);
}
Status ExecuteMinimizeWindow(Session* session,
WebView* web_view,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value,
Timeout* timeout) {
Status status = session->chrome->MinimizeWindow(session->window);
if (status.IsError())
return status;
return ExecuteGetWindowRect(session, web_view, params, value, timeout);
}
Status ExecuteFullScreenWindow(Session* session,
WebView* web_view,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value,
Timeout* timeout) {
Status status = session->chrome->FullScreenWindow(session->window);
if (status.IsError())
return status;
return ExecuteGetWindowRect(session, web_view, params, value, timeout);
}
...@@ -365,4 +365,35 @@ Status ExecutePerformActions(Session* session, ...@@ -365,4 +365,35 @@ Status ExecutePerformActions(Session* session,
Status ProcessInputActionSequence(Session* session, Status ProcessInputActionSequence(Session* session,
const base::DictionaryValue* action_sequence, const base::DictionaryValue* action_sequence,
std::unique_ptr<base::ListValue>* result); std::unique_ptr<base::ListValue>* result);
Status ExecuteGetWindowRect(Session* session,
WebView* web_view,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value,
Timeout* timeout);
Status ExecuteSetWindowRect(Session* session,
WebView* web_view,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value,
Timeout* timeout);
Status ExecuteMaximizeWindow(Session* session,
WebView* web_view,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value,
Timeout* timeout);
Status ExecuteMinimizeWindow(Session* session,
WebView* web_view,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value,
Timeout* timeout);
Status ExecuteFullScreenWindow(Session* session,
WebView* web_view,
const base::DictionaryValue& params,
std::unique_ptr<base::Value>* value,
Timeout* timeout);
#endif // CHROME_TEST_CHROMEDRIVER_WINDOW_COMMANDS_H_ #endif // CHROME_TEST_CHROMEDRIVER_WINDOW_COMMANDS_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment