Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2764)

Unified Diff: chrome/test/chromedriver/chrome/chrome_desktop_impl.cc

Issue 2836023003: fix testWindowMaximize bug (Closed)
Patch Set: nit Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/chromedriver/chrome/chrome_desktop_impl.cc
diff --git a/chrome/test/chromedriver/chrome/chrome_desktop_impl.cc b/chrome/test/chromedriver/chrome/chrome_desktop_impl.cc
index 05613c408b12d1831d7407908888e05f30ec4c69..1125a8f1ae89c6d0ca876194c60d1aba327f5e8a 100644
--- a/chrome/test/chromedriver/chrome/chrome_desktop_impl.cc
+++ b/chrome/test/chromedriver/chrome/chrome_desktop_impl.cc
@@ -264,19 +264,47 @@ Status ChromeDesktopImpl::GetWindowSize(const std::string& target_id,
Status ChromeDesktopImpl::SetWindowPosition(const std::string& target_id,
int x,
int y) {
+ Window window;
+ Status status = GetWindow(target_id, &window);
+ if (status.IsError())
+ return status;
+
+ if (window.state != "normal") {
+ // restore window to normal first to allow position change.
+ auto bounds = base::MakeUnique<base::DictionaryValue>();
+ bounds->SetString("windowState", "normal");
+ status = SetWindowBounds(window.id, std::move(bounds));
+ if (status.IsError())
+ return status;
+ }
+
auto bounds = base::MakeUnique<base::DictionaryValue>();
bounds->SetInteger("left", x);
bounds->SetInteger("top", y);
- return SetWindowBounds(target_id, std::move(bounds));
+ return SetWindowBounds(window.id, std::move(bounds));
}
Status ChromeDesktopImpl::SetWindowSize(const std::string& target_id,
int width,
int height) {
+ Window window;
+ Status status = GetWindow(target_id, &window);
+ if (status.IsError())
+ return status;
+
+ if (window.state != "normal") {
+ // restore window to normal first to allow size change.
+ auto bounds = base::MakeUnique<base::DictionaryValue>();
+ bounds->SetString("windowState", "normal");
+ status = SetWindowBounds(window.id, std::move(bounds));
+ if (status.IsError())
+ return status;
+ }
+
auto bounds = base::MakeUnique<base::DictionaryValue>();
bounds->SetInteger("width", width);
bounds->SetInteger("height", height);
- return SetWindowBounds(target_id, std::move(bounds));
+ return SetWindowBounds(window.id, std::move(bounds));
}
Status ChromeDesktopImpl::MaximizeWindow(const std::string& target_id) {
@@ -291,20 +319,21 @@ Status ChromeDesktopImpl::MaximizeWindow(const std::string& target_id) {
if (window.state != "normal") {
// always restore window to normal first, since chrome ui doesn't allow
// maximizing a minimized or fullscreen window.
- status = SetWindowState(window.id, "normal");
+ auto bounds = base::MakeUnique<base::DictionaryValue>();
+ bounds->SetString("windowState", "normal");
+ status = SetWindowBounds(window.id, std::move(bounds));
if (status.IsError())
return status;
}
- return SetWindowState(window.id, "maximized");
+ auto bounds = base::MakeUnique<base::DictionaryValue>();
+ bounds->SetString("windowState", "maximized");
+ return SetWindowBounds(window.id, std::move(bounds));
}
-Status ChromeDesktopImpl::ParseWindow(
+Status ChromeDesktopImpl::ParseWindowBounds(
std::unique_ptr<base::DictionaryValue> params,
Window* window) {
- if (!params->GetInteger("windowId", &window->id))
- return Status(kUnknownError, "no window id in response");
-
const base::Value* value = nullptr;
const base::DictionaryValue* bounds_dict = nullptr;
if (!params->Get("bounds", &value) || !value->GetAsDictionary(&bounds_dict))
@@ -325,6 +354,15 @@ Status ChromeDesktopImpl::ParseWindow(
return Status(kOk);
}
+Status ChromeDesktopImpl::ParseWindow(
+ std::unique_ptr<base::DictionaryValue> params,
+ Window* window) {
+ if (!params->GetInteger("windowId", &window->id))
+ return Status(kUnknownError, "no window id in response");
+
+ return ParseWindowBounds(std::move(params), window);
+}
+
Status ChromeDesktopImpl::GetWindow(const std::string& target_id,
Window* window) {
Status status = devtools_websocket_client_->ConnectIfNecessary();
@@ -342,47 +380,48 @@ Status ChromeDesktopImpl::GetWindow(const std::string& target_id,
return ParseWindow(std::move(result), window);
}
-Status ChromeDesktopImpl::SetWindowState(int window_id,
- const std::string& window_state) {
+Status ChromeDesktopImpl::GetWindowBounds(int window_id, Window* window) {
Status status = devtools_websocket_client_->ConnectIfNecessary();
if (status.IsError())
return status;
base::DictionaryValue params;
params.SetInteger("windowId", window_id);
- auto bounds_object = base::MakeUnique<base::DictionaryValue>();
- bounds_object->SetString("windowState", window_state);
- params.Set("bounds", std::move(bounds_object));
- status = devtools_websocket_client_->SendCommand("Browser.setWindowBounds",
- params);
+ std::unique_ptr<base::DictionaryValue> result;
+ status = devtools_websocket_client_->SendCommandAndGetResult(
+ "Browser.getWindowBounds", params, &result);
if (status.IsError())
return status;
- base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(100));
- return Status(kOk);
+ return ParseWindowBounds(std::move(result), window);
}
Status ChromeDesktopImpl::SetWindowBounds(
- const std::string& target_id,
+ int window_id,
std::unique_ptr<base::DictionaryValue> bounds) {
- Window window;
- Status status = GetWindow(target_id, &window);
+ Status status = devtools_websocket_client_->ConnectIfNecessary();
if (status.IsError())
return status;
- if (window.state != "normal") {
- status = SetWindowState(window.id, "normal");
- if (status.IsError())
- return status;
- }
-
base::DictionaryValue params;
- params.SetInteger("windowId", window.id);
- params.Set("bounds", std::move(bounds));
+ params.SetInteger("windowId", window_id);
+ params.Set("bounds", bounds->CreateDeepCopy());
status = devtools_websocket_client_->SendCommand("Browser.setWindowBounds",
params);
if (status.IsError())
return status;
+ base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(100));
+ std::string state;
+ if (!bounds->GetString("windowState", &state))
+ return Status(kOk);
+
+ Window window;
+ status = GetWindowBounds(window_id, &window);
+ if (status.IsError())
+ return status;
+ if (window.state != state)
+ return Status(kUnknownError, "failed to change window state to " + state +
+ ", current state is " + window.state);
return Status(kOk);
}
« no previous file with comments | « chrome/test/chromedriver/chrome/chrome_desktop_impl.h ('k') | chrome/test/chromedriver/test/run_py_tests.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698