| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/test/chromedriver/session_commands.h" | 5 #include "chrome/test/chromedriver/session_commands.h" |
| 6 | 6 |
| 7 #include <list> | 7 #include <list> |
| 8 | 8 |
| 9 #include "base/callback.h" | 9 #include "base/callback.h" |
| 10 #include "base/logging.h" // For CHECK macros. | 10 #include "base/logging.h" // For CHECK macros. |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 if (status.IsError()) | 99 if (status.IsError()) |
| 100 return status; | 100 return status; |
| 101 | 101 |
| 102 return web_view->Close(); | 102 return web_view->Close(); |
| 103 } | 103 } |
| 104 | 104 |
| 105 Status ExecuteGetWindowHandles( | 105 Status ExecuteGetWindowHandles( |
| 106 Session* session, | 106 Session* session, |
| 107 const base::DictionaryValue& params, | 107 const base::DictionaryValue& params, |
| 108 scoped_ptr<base::Value>* value) { | 108 scoped_ptr<base::Value>* value) { |
| 109 std::list<WebView*> web_views; | 109 std::list<std::string> web_view_ids; |
| 110 Status status = session->chrome->GetWebViews(&web_views); | 110 Status status = session->chrome->GetWebViewIds(&web_view_ids); |
| 111 if (status.IsError()) | 111 if (status.IsError()) |
| 112 return status; | 112 return status; |
| 113 base::ListValue window_ids; | 113 scoped_ptr<base::ListValue> window_ids(new base::ListValue()); |
| 114 for (std::list<WebView*>::const_iterator it = web_views.begin(); | 114 for (std::list<std::string>::const_iterator it = web_view_ids.begin(); |
| 115 it != web_views.end(); ++it) { | 115 it != web_view_ids.end(); ++it) { |
| 116 window_ids.AppendString(WebViewIdToWindowHandle((*it)->GetId())); | 116 window_ids->AppendString(WebViewIdToWindowHandle(*it)); |
| 117 } | 117 } |
| 118 value->reset(window_ids.DeepCopy()); | 118 value->reset(window_ids.release()); |
| 119 return Status(kOk); | 119 return Status(kOk); |
| 120 } | 120 } |
| 121 | 121 |
| 122 Status ExecuteSwitchToWindow( | 122 Status ExecuteSwitchToWindow( |
| 123 Session* session, | 123 Session* session, |
| 124 const base::DictionaryValue& params, | 124 const base::DictionaryValue& params, |
| 125 scoped_ptr<base::Value>* value) { | 125 scoped_ptr<base::Value>* value) { |
| 126 std::string name; | 126 std::string name; |
| 127 if (!params.GetString("name", &name) || name.empty()) | 127 if (!params.GetString("name", &name) || name.empty()) |
| 128 return Status(kUnknownError, "'name' must be a nonempty string"); | 128 return Status(kUnknownError, "'name' must be a nonempty string"); |
| 129 | 129 |
| 130 std::list<WebView*> web_views; | 130 std::list<std::string> web_view_ids; |
| 131 Status status = session->chrome->GetWebViews(&web_views); | 131 Status status = session->chrome->GetWebViewIds(&web_view_ids); |
| 132 if (status.IsError()) | 132 if (status.IsError()) |
| 133 return status; | 133 return status; |
| 134 | 134 |
| 135 WebView* web_view = NULL; | |
| 136 | |
| 137 std::string web_view_id; | 135 std::string web_view_id; |
| 136 bool found = false; |
| 138 if (WindowHandleToWebViewId(name, &web_view_id)) { | 137 if (WindowHandleToWebViewId(name, &web_view_id)) { |
| 139 // Check if any web_view matches |web_view_id|. | 138 // Check if any web_view matches |web_view_id|. |
| 140 for (std::list<WebView*>::const_iterator it = web_views.begin(); | 139 for (std::list<std::string>::const_iterator it = web_view_ids.begin(); |
| 141 it != web_views.end(); ++it) { | 140 it != web_view_ids.end(); ++it) { |
| 142 if ((*it)->GetId() == web_view_id) { | 141 if (*it == web_view_id) { |
| 143 web_view = *it; | 142 found = true; |
| 144 break; | 143 break; |
| 145 } | 144 } |
| 146 } | 145 } |
| 147 } else { | 146 } else { |
| 148 // Check if any of the tab window names match |name|. | 147 // Check if any of the tab window names match |name|. |
| 149 const char* kGetWindowNameScript = "function() { return window.name; }"; | 148 const char* kGetWindowNameScript = "function() { return window.name; }"; |
| 150 base::ListValue args; | 149 base::ListValue args; |
| 151 for (std::list<WebView*>::const_iterator it = web_views.begin(); | 150 for (std::list<std::string>::const_iterator it = web_view_ids.begin(); |
| 152 it != web_views.end(); ++it) { | 151 it != web_view_ids.end(); ++it) { |
| 153 scoped_ptr<base::Value> result; | 152 scoped_ptr<base::Value> result; |
| 154 status = (*it)->CallFunction("", kGetWindowNameScript, args, &result); | 153 WebView* web_view; |
| 154 status = session->chrome->GetWebViewById(*it, &web_view); |
| 155 if (status.IsError()) |
| 156 return status; |
| 157 status = web_view->CallFunction("", kGetWindowNameScript, args, &result); |
| 155 if (status.IsError()) | 158 if (status.IsError()) |
| 156 return status; | 159 return status; |
| 157 std::string window_name; | 160 std::string window_name; |
| 158 if (!result->GetAsString(&window_name)) | 161 if (!result->GetAsString(&window_name)) |
| 159 return Status(kUnknownError, "failed to get window name"); | 162 return Status(kUnknownError, "failed to get window name"); |
| 160 if (window_name == name) { | 163 if (window_name == name) { |
| 161 web_view = *it; | 164 web_view_id = *it; |
| 165 found = true; |
| 162 break; | 166 break; |
| 163 } | 167 } |
| 164 } | 168 } |
| 165 } | 169 } |
| 166 | 170 |
| 167 if (!web_view) | 171 if (!found) |
| 168 return Status(kNoSuchWindow); | 172 return Status(kNoSuchWindow); |
| 169 session->window = web_view->GetId(); | 173 session->window = web_view_id; |
| 170 session->SwitchToTopFrame(); | 174 session->SwitchToTopFrame(); |
| 171 session->mouse_position = WebPoint(0, 0); | 175 session->mouse_position = WebPoint(0, 0); |
| 172 return Status(kOk); | 176 return Status(kOk); |
| 173 } | 177 } |
| 174 | 178 |
| 175 Status ExecuteSetTimeout( | 179 Status ExecuteSetTimeout( |
| 176 Session* session, | 180 Session* session, |
| 177 const base::DictionaryValue& params, | 181 const base::DictionaryValue& params, |
| 178 scoped_ptr<base::Value>* value) { | 182 scoped_ptr<base::Value>* value) { |
| 179 int ms; | 183 int ms; |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 return status; | 296 return status; |
| 293 | 297 |
| 294 bool is_pending; | 298 bool is_pending; |
| 295 status = web_view->IsPendingNavigation( | 299 status = web_view->IsPendingNavigation( |
| 296 session->GetCurrentFrameId(), &is_pending); | 300 session->GetCurrentFrameId(), &is_pending); |
| 297 if (status.IsError()) | 301 if (status.IsError()) |
| 298 return status; | 302 return status; |
| 299 value->reset(new base::FundamentalValue(is_pending)); | 303 value->reset(new base::FundamentalValue(is_pending)); |
| 300 return Status(kOk); | 304 return Status(kOk); |
| 301 } | 305 } |
| OLD | NEW |