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

Unified Diff: chrome/test/webdriver/webdriver_session.cc

Issue 8649004: Allow chromedriver to install an extension and get all installed extension IDs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ... Created 9 years, 1 month 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/webdriver/webdriver_session.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/webdriver/webdriver_session.cc
diff --git a/chrome/test/webdriver/webdriver_session.cc b/chrome/test/webdriver/webdriver_session.cc
index 9ea256dd61bf410ea1e6a82e4ec83698e11fc80c..cd5a11da16be6e8cbd27415d4aa4889fc7cbef2b 100644
--- a/chrome/test/webdriver/webdriver_session.cc
+++ b/chrome/test/webdriver/webdriver_session.cc
@@ -43,16 +43,20 @@
namespace webdriver {
-FrameId::FrameId(int window_id, const FramePath& frame_path)
- : window_id(window_id),
+FrameId::FrameId() {}
+
+FrameId::FrameId(const WebViewId& view_id, const FramePath& frame_path)
+ : view_id(view_id),
frame_path(frame_path) {
}
+/*
FrameId& FrameId::operator=(const FrameId& other) {
- window_id = other.window_id;
+ view_id = other.view_id;
frame_path = other.frame_path;
return *this;
}
+*/
Session::Options::Options()
: use_native_events(false),
@@ -64,7 +68,7 @@ Session::Options::~Options() {
Session::Session(const Options& options)
: id_(GenerateRandomID()),
- current_target_(FrameId(0, FramePath())),
+ current_target_(FrameId(WebViewId(), FramePath())),
thread_(id_.c_str()),
async_script_timeout_(0),
implicit_wait_(0),
@@ -277,7 +281,7 @@ Error* Session::DragAndDropFilePaths(
RunSessionTask(NewRunnableMethod(
automation_.get(),
&Automation::DragAndDropFilePaths,
- current_target_.window_id,
+ current_target_.view_id.id.tab_id, // FIXME
location,
paths,
&error));
@@ -290,14 +294,14 @@ Error* Session::NavigateToURL(const std::string& url) {
RunSessionTask(NewRunnableMethod(
automation_.get(),
&Automation::NavigateToURLAsync,
- current_target_.window_id,
+ current_target_.view_id.id.tab_id, // FIXME
url,
&error));
} else {
RunSessionTask(NewRunnableMethod(
automation_.get(),
&Automation::NavigateToURL,
- current_target_.window_id,
+ current_target_.view_id.id.tab_id, // FIXME
url,
&error));
}
@@ -309,7 +313,7 @@ Error* Session::GoForward() {
RunSessionTask(NewRunnableMethod(
automation_.get(),
&Automation::GoForward,
- current_target_.window_id,
+ current_target_.view_id.id.tab_id, // FIXME
&error));
return error;
}
@@ -319,7 +323,7 @@ Error* Session::GoBack() {
RunSessionTask(NewRunnableMethod(
automation_.get(),
&Automation::GoBack,
- current_target_.window_id,
+ current_target_.view_id.id.tab_id, // FIXME
&error));
return error;
}
@@ -329,7 +333,7 @@ Error* Session::Reload() {
RunSessionTask(NewRunnableMethod(
automation_.get(),
&Automation::Reload,
- current_target_.window_id,
+ current_target_.view_id.id.tab_id, // FIXME
&error));
return error;
}
@@ -350,7 +354,7 @@ Error* Session::GetTitle(std::string* tab_title) {
" else"
" return document.URL;"
"}";
- return ExecuteScriptAndParse(FrameId(current_target_.window_id, FramePath()),
+ return ExecuteScriptAndParse(FrameId(current_target_.view_id, FramePath()),
kGetTitleScript,
"getTitle",
new ListValue(),
@@ -363,7 +367,7 @@ Error* Session::MouseMoveAndClick(const Point& location,
RunSessionTask(NewRunnableMethod(
automation_.get(),
&Automation::MouseClick,
- current_target_.window_id,
+ current_target_.view_id.id.tab_id, // FIXME
location,
button,
&error));
@@ -377,7 +381,7 @@ Error* Session::MouseMove(const Point& location) {
RunSessionTask(NewRunnableMethod(
automation_.get(),
&Automation::MouseMove,
- current_target_.window_id,
+ current_target_.view_id.id.tab_id, // FIXME
location,
&error));
if (!error)
@@ -391,7 +395,7 @@ Error* Session::MouseDrag(const Point& start,
RunSessionTask(NewRunnableMethod(
automation_.get(),
&Automation::MouseDrag,
- current_target_.window_id,
+ current_target_.view_id.id.tab_id, // FIXME
start,
end,
&error));
@@ -409,7 +413,7 @@ Error* Session::MouseButtonDown() {
RunSessionTask(NewRunnableMethod(
automation_.get(),
&Automation::MouseButtonDown,
- current_target_.window_id,
+ current_target_.view_id.id.tab_id, // FIXME
mouse_position_,
&error));
return error;
@@ -420,7 +424,7 @@ Error* Session::MouseButtonUp() {
RunSessionTask(NewRunnableMethod(
automation_.get(),
&Automation::MouseButtonUp,
- current_target_.window_id,
+ current_target_.view_id.id.tab_id, // FIXME
mouse_position_,
&error));
return error;
@@ -431,7 +435,7 @@ Error* Session::MouseDoubleClick() {
RunSessionTask(NewRunnableMethod(
automation_.get(),
&Automation::MouseDoubleClick,
- current_target_.window_id,
+ current_target_.view_id.id.tab_id, // FIXME
mouse_position_,
&error));
return error;
@@ -472,61 +476,80 @@ Error* Session::SetCookie(const std::string& url,
return error;
}
-Error* Session::GetWindowIds(std::vector<int>* window_ids) {
+Error* Session::GetViews(std::vector<WebViewInfo>* views) {
Error* error = NULL;
RunSessionTask(NewRunnableMethod(
automation_.get(),
- &Automation::GetTabIds,
- window_ids,
+ &Automation::GetViews,
+ views,
&error));
return error;
}
-Error* Session::SwitchToWindow(const std::string& name) {
- int switch_to_id = 0;
- int name_no = 0;
- if (base::StringToInt(name, &name_no)) {
- Error* error = NULL;
- bool does_exist = false;
+Error* Session::SwitchToView(const std::string& id_or_name) {
+ Error* error = NULL;
+ bool does_exist = false;
+
+ bool new_version = false;
+ error = CompareBrowserVersion(500, 0, &new_version);
+ if (error)
+ return error;
+ int id_no;
+ WebViewId new_view;
+ if (new_version) {
+ std::vector<std::string> parts;
+ // Check if valid type.
+ base::SplitString(id_or_name, '|', &parts);
+ int type;
+ if (parts.size() == 2 && base::StringToInt(parts[0], &type)) {
+ new_view = WebViewId::ForView(
+ AutomationId(static_cast<AutomationId::Type>(type),
+ parts[1]));
+ }
+ } else if (base::StringToInt(id_or_name, &id_no)) {
+ new_view = WebViewId::ForTab(id_no);
+ }
+ if (new_view.IsValid()) {
RunSessionTask(NewRunnableMethod(
automation_.get(),
- &Automation::DoesTabExist,
- name_no,
+ &Automation::DoesViewExist,
+ new_view,
&does_exist,
&error));
if (error)
return error;
- if (does_exist)
- switch_to_id = name_no;
}
- if (!switch_to_id) {
- std::vector<int> window_ids;
- Error* error = GetWindowIds(&window_ids);
+ if (!does_exist) {
+ // See if any of the tab window names match |name|.
+ std::vector<WebViewInfo> views;
+ Error* error = GetViews(&views);
if (error)
return error;
- // See if any of the window names match |name|.
- for (size_t i = 0; i < window_ids.size(); ++i) {
+ for (size_t i = 0; i < views.size(); ++i) {
+ if (views[i].view_id.type != WebViewId::kTypeTabId)
+ continue;
std::string window_name;
Error* error = ExecuteScriptAndParse(
- FrameId(window_ids[i], FramePath()),
+ FrameId(views[i].view_id, FramePath()),
"function() { return window.name; }",
"getWindowName",
new ListValue(),
CreateDirectValueParser(&window_name));
if (error)
return error;
- if (name == window_name) {
- switch_to_id = window_ids[i];
+ if (id_or_name == window_name) {
+ new_view = views[i].view_id;
+ does_exist = true;
break;
}
}
}
- if (!switch_to_id)
+ if (!does_exist)
return new Error(kNoSuchWindow);
frame_elements_.clear();
- current_target_ = FrameId(switch_to_id, FramePath());
+ current_target_ = FrameId(new_view, FramePath());
return NULL;
}
@@ -611,7 +634,7 @@ Error* Session::SwitchToTopFrameIfCurrentFrameInvalid() {
// This code should not execute script in any frame before making sure the
// frame element is valid, otherwise the automation hangs until a timeout.
for (size_t i = 0; i < frame_elements_.size(); ++i) {
- FrameId frame_id(current_target_.window_id, frame_path);
+ FrameId frame_id(current_target_.view_id, frame_path);
scoped_ptr<Error> error(ExecuteScriptAndParse(
frame_id,
"function(){ }",
@@ -633,13 +656,13 @@ Error* Session::CloseWindow() {
RunSessionTask(NewRunnableMethod(
automation_.get(),
&Automation::CloseTab,
- current_target_.window_id,
+ current_target_.view_id.id.tab_id, // FIXME
&error));
if (!error) {
- std::vector<int> window_ids;
- scoped_ptr<Error> error(GetWindowIds(&window_ids));
- if (error.get() || window_ids.empty()) {
+ std::vector<WebViewInfo> views;
+ scoped_ptr<Error> error(GetViews(&views));
+ if (error.get() || views.empty()) {
// The automation connection will soon be closed, if not already,
// because we supposedly just closed the last window. Terminate the
// session.
@@ -780,7 +803,7 @@ Error* Session::GetElementRegionInView(
frame_path.IsSubframe();
frame_path = frame_path.Parent()) {
// Find the frame element for the current frame path.
- FrameId frame_id(current_target_.window_id, frame_path.Parent());
+ FrameId frame_id(current_target_.view_id, frame_path.Parent());
ElementId frame_element;
error = FindElement(
frame_id, ElementId(""),
@@ -1104,15 +1127,15 @@ void Session::InitOnSessionThread(const Automation::BrowserOptions& options,
if (*error)
return;
- std::vector<int> tab_ids;
- automation_->GetTabIds(&tab_ids, error);
+ std::vector<WebViewInfo> views;
+ automation_->GetViews(&views, error);
if (*error)
return;
- if (tab_ids.empty()) {
- *error = new Error(kUnknownError, "No tab ids after initialization");
+ if (views.empty()) {
+ *error = new Error(kUnknownError, "No view ids after initialization");
return;
}
- current_target_ = FrameId(tab_ids[0], FramePath());
+ current_target_ = FrameId(views[0].view_id, FramePath());
}
void Session::TerminateOnSessionThread() {
@@ -1129,7 +1152,7 @@ Error* Session::ExecuteScriptAndParseValue(const FrameId& frame_id,
RunSessionTask(NewRunnableMethod(
automation_.get(),
&Automation::ExecuteScript,
- frame_id.window_id,
+ frame_id.view_id,
frame_id.frame_path,
script,
&response_json,
@@ -1186,13 +1209,14 @@ void Session::SendKeysOnSessionThread(const string16& keys, Error** error) {
if (key_events[i].type != automation::kRawKeyDownType)
continue;
automation_->SendNativeKeyEvent(
- current_target_.window_id,
+ current_target_.view_id.id.tab_id, // FIXME
key_events[i].key_code,
key_events[i].modifiers,
error);
} else {
automation_->SendWebKeyEvent(
- current_target_.window_id, key_events[i], error);
+ current_target_.view_id.id.tab_id, // FIXME
+ key_events[i], error);
}
if (*error) {
std::string details = base::StringPrintf(
@@ -1448,7 +1472,7 @@ Error* Session::GetScreenShot(std::string* png) {
RunSessionTask(NewRunnableMethod(
automation_.get(),
&Automation::CaptureEntirePageAsPNG,
- current_target_.window_id,
+ current_target_.view_id.id.tab_id, // FIXME
path,
&error));
if (error)
« no previous file with comments | « chrome/test/webdriver/webdriver_session.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698