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

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

Issue 12978003: [chromedriver] Fix 3 bugs about web view, window handle and target window. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 7 years, 9 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
« no previous file with comments | « chrome/test/chromedriver/session.cc ('k') | chrome/test/chromedriver/session_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/chromedriver/session_commands.cc
diff --git a/chrome/test/chromedriver/session_commands.cc b/chrome/test/chromedriver/session_commands.cc
index e5b0a660730a28a3c74303997ad610e4ed202b79..cbe10b8e155ddc8fb2ae2e0adb87a7cc14c2c921 100644
--- a/chrome/test/chromedriver/session_commands.cc
+++ b/chrome/test/chromedriver/session_commands.cc
@@ -119,12 +119,12 @@ Status ExecuteClose(
Session* session,
const base::DictionaryValue& params,
scoped_ptr<base::Value>* value) {
- std::list<WebView*> web_views;
- Status status = session->chrome->GetWebViews(&web_views);
+ std::list<std::string> web_view_ids;
+ Status status = session->chrome->GetWebViewIds(&web_view_ids);
if (status.IsError())
return status;
- bool is_last_web_view = web_views.size() == 1u;
- web_views.clear();
+ bool is_last_web_view = web_view_ids.size() == 1u;
+ web_view_ids.clear();
WebView* web_view = NULL;
status = session->GetTargetWindow(&web_view);
@@ -135,9 +135,9 @@ Status ExecuteClose(
if (status.IsError())
return status;
- status = session->chrome->GetWebViews(&web_views);
+ status = session->chrome->GetWebViewIds(&web_view_ids);
if ((status.code() == kChromeNotReachable && is_last_web_view) ||
- (status.IsOk() && web_views.empty())) {
+ (status.IsOk() && web_view_ids.empty())) {
CHECK(session_map->Remove(session->id));
return Status(kOk);
}
@@ -148,16 +148,16 @@ Status ExecuteGetWindowHandles(
Session* session,
const base::DictionaryValue& params,
scoped_ptr<base::Value>* value) {
- std::list<WebView*> web_views;
- Status status = session->chrome->GetWebViews(&web_views);
+ std::list<std::string> web_view_ids;
+ Status status = session->chrome->GetWebViewIds(&web_view_ids);
if (status.IsError())
return status;
- base::ListValue window_ids;
- for (std::list<WebView*>::const_iterator it = web_views.begin();
- it != web_views.end(); ++it) {
- window_ids.AppendString(WebViewIdToWindowHandle((*it)->GetId()));
+ scoped_ptr<base::ListValue> window_ids(new base::ListValue());
+ for (std::list<std::string>::const_iterator it = web_view_ids.begin();
+ it != web_view_ids.end(); ++it) {
+ window_ids->AppendString(WebViewIdToWindowHandle(*it));
}
- value->reset(window_ids.DeepCopy());
+ value->reset(window_ids.release());
return Status(kOk);
}
@@ -169,20 +169,19 @@ Status ExecuteSwitchToWindow(
if (!params.GetString("name", &name) || name.empty())
return Status(kUnknownError, "'name' must be a nonempty string");
- std::list<WebView*> web_views;
- Status status = session->chrome->GetWebViews(&web_views);
+ std::list<std::string> web_view_ids;
+ Status status = session->chrome->GetWebViewIds(&web_view_ids);
if (status.IsError())
return status;
- WebView* web_view = NULL;
-
std::string web_view_id;
+ bool found = false;
if (WindowHandleToWebViewId(name, &web_view_id)) {
// Check if any web_view matches |web_view_id|.
- for (std::list<WebView*>::const_iterator it = web_views.begin();
- it != web_views.end(); ++it) {
- if ((*it)->GetId() == web_view_id) {
- web_view = *it;
+ for (std::list<std::string>::const_iterator it = web_view_ids.begin();
+ it != web_view_ids.end(); ++it) {
+ if (*it == web_view_id) {
+ found = true;
break;
}
}
@@ -190,25 +189,33 @@ Status ExecuteSwitchToWindow(
// Check if any of the tab window names match |name|.
const char* kGetWindowNameScript = "function() { return window.name; }";
base::ListValue args;
- for (std::list<WebView*>::const_iterator it = web_views.begin();
- it != web_views.end(); ++it) {
+ for (std::list<std::string>::const_iterator it = web_view_ids.begin();
+ it != web_view_ids.end(); ++it) {
scoped_ptr<base::Value> result;
- status = (*it)->CallFunction("", kGetWindowNameScript, args, &result);
+ WebView* web_view;
+ status = session->chrome->GetWebViewById(*it, &web_view);
+ if (status.IsError())
+ return status;
+ status = web_view->ConnectIfNecessary();
+ if (status.IsError())
+ return status;
+ status = web_view->CallFunction("", kGetWindowNameScript, args, &result);
if (status.IsError())
return status;
std::string window_name;
if (!result->GetAsString(&window_name))
return Status(kUnknownError, "failed to get window name");
if (window_name == name) {
- web_view = *it;
+ web_view_id = *it;
+ found = true;
break;
}
}
}
- if (!web_view)
+ if (!found)
return Status(kNoSuchWindow);
- session->window = web_view->GetId();
+ session->window = web_view_id;
session->SwitchToTopFrame();
session->mouse_position = WebPoint(0, 0);
return Status(kOk);
« no previous file with comments | « chrome/test/chromedriver/session.cc ('k') | chrome/test/chromedriver/session_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698