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/chrome_launcher.h" | 5 #include "chrome/test/chromedriver/chrome_launcher.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/base64.h" | 10 #include "base/base64.h" |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
188 return Status(kOk); | 188 return Status(kOk); |
189 } | 189 } |
190 } | 190 } |
191 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(50)); | 191 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(50)); |
192 } | 192 } |
193 return Status(kUnknownError, "unable to discover open pages"); | 193 return Status(kUnknownError, "unable to discover open pages"); |
194 } | 194 } |
195 | 195 |
196 Status CreateBrowserwideDevToolsClientAndConnect( | 196 Status CreateBrowserwideDevToolsClientAndConnect( |
197 const NetAddress& address, | 197 const NetAddress& address, |
198 const PerfLoggingPrefs& perf_logging_prefs, | |
198 const SyncWebSocketFactory& socket_factory, | 199 const SyncWebSocketFactory& socket_factory, |
199 ScopedVector<DevToolsEventListener>& devtools_event_listeners, | 200 ScopedVector<DevToolsEventListener>& devtools_event_listeners, |
200 scoped_ptr<DevToolsClient>* browser_client) { | 201 scoped_ptr<DevToolsClient>* browser_client) { |
201 scoped_ptr<DevToolsClient> client(new DevToolsClientImpl( | 202 scoped_ptr<DevToolsClient> client(new DevToolsClientImpl( |
202 socket_factory, base::StringPrintf("ws://%s/devtools/browser/", | 203 socket_factory, base::StringPrintf("ws://%s/devtools/browser/", |
203 address.ToString().c_str()), | 204 address.ToString().c_str()), |
204 DevToolsClientImpl::kBrowserwideDevToolsClientId)); | 205 DevToolsClientImpl::kBrowserwideDevToolsClientId)); |
205 for (ScopedVector<DevToolsEventListener>::const_iterator it = | 206 for (ScopedVector<DevToolsEventListener>::const_iterator it = |
206 devtools_event_listeners.begin(); | 207 devtools_event_listeners.begin(); |
207 it != devtools_event_listeners.end(); | 208 it != devtools_event_listeners.end(); |
208 ++it) { | 209 ++it) { |
209 // Only add listeners that subscribe to the browser-wide |DevToolsClient|. | 210 // Only add listeners that subscribe to the browser-wide |DevToolsClient|. |
210 // Otherwise, listeners will think this client is associated with a webview, | 211 // Otherwise, listeners will think this client is associated with a webview, |
211 // and will send unrecognized commands to it. | 212 // and will send unrecognized commands to it. |
212 if ((*it)->subscribes_to_browser()) | 213 if ((*it)->subscribes_to_browser()) |
213 client->AddListener(*it); | 214 client->AddListener(*it); |
214 } | 215 } |
215 // TODO(johnmoore): Call client->ConnectIfNecessary if tracing is enabled. | 216 // Provide the client regardless of whether it connects, so that Chrome always |
216 // For now, provide the client anyway, so that Chrome always has a valid | 217 // has a valid |devtools_websocket_client_|. If not connected, no listeners |
217 // |devtools_websocket_client_|. No listeners will be notified, and the client | 218 // will be notified, and client will just return kDisconnected errors if used. |
218 // will just return kDisconnected errors if used. | |
219 *browser_client = client.Pass(); | 219 *browser_client = client.Pass(); |
220 // To avoid unnecessary overhead, only connect if tracing is enabled, since | |
221 // the browser-wide client is currently only used for tracing. | |
222 if (perf_logging_prefs.trace_categories != "") { | |
samuong
2014/08/04 06:08:22
!perf_logging_prefs.trace_categories.empty()
johnmoore
2014/08/04 17:37:58
Done.
| |
223 Status status = (*browser_client)->ConnectIfNecessary(); | |
224 if (status.IsError()) | |
225 return status; | |
226 } | |
220 return Status(kOk); | 227 return Status(kOk); |
221 } | 228 } |
222 | 229 |
223 Status LaunchRemoteChromeSession( | 230 Status LaunchRemoteChromeSession( |
224 URLRequestContextGetter* context_getter, | 231 URLRequestContextGetter* context_getter, |
225 const SyncWebSocketFactory& socket_factory, | 232 const SyncWebSocketFactory& socket_factory, |
226 const Capabilities& capabilities, | 233 const Capabilities& capabilities, |
227 ScopedVector<DevToolsEventListener>& devtools_event_listeners, | 234 ScopedVector<DevToolsEventListener>& devtools_event_listeners, |
228 scoped_ptr<Chrome>* chrome) { | 235 scoped_ptr<Chrome>* chrome) { |
229 Status status(kOk); | 236 Status status(kOk); |
230 scoped_ptr<DevToolsHttpClient> devtools_http_client; | 237 scoped_ptr<DevToolsHttpClient> devtools_http_client; |
231 status = WaitForDevToolsAndCheckVersion( | 238 status = WaitForDevToolsAndCheckVersion( |
232 capabilities.debugger_address, context_getter, socket_factory, | 239 capabilities.debugger_address, context_getter, socket_factory, |
233 NULL, &devtools_http_client); | 240 NULL, &devtools_http_client); |
234 if (status.IsError()) { | 241 if (status.IsError()) { |
235 return Status(kUnknownError, "cannot connect to chrome at " + | 242 return Status(kUnknownError, "cannot connect to chrome at " + |
236 capabilities.debugger_address.ToString(), | 243 capabilities.debugger_address.ToString(), |
237 status); | 244 status); |
238 } | 245 } |
239 | 246 |
240 scoped_ptr<DevToolsClient> devtools_websocket_client; | 247 scoped_ptr<DevToolsClient> devtools_websocket_client; |
241 status = CreateBrowserwideDevToolsClientAndConnect( | 248 status = CreateBrowserwideDevToolsClientAndConnect( |
242 capabilities.debugger_address, socket_factory, devtools_event_listeners, | 249 capabilities.debugger_address, capabilities.perf_logging_prefs, |
243 &devtools_websocket_client); | 250 socket_factory, devtools_event_listeners, &devtools_websocket_client); |
244 if (status.IsError()) { | 251 if (status.IsError()) { |
245 LOG(WARNING) << "Browser-wide DevTools client failed to connect: " | 252 LOG(WARNING) << "Browser-wide DevTools client failed to connect: " |
246 << status.message(); | 253 << status.message(); |
247 } | 254 } |
248 | 255 |
249 chrome->reset(new ChromeRemoteImpl(devtools_http_client.Pass(), | 256 chrome->reset(new ChromeRemoteImpl(devtools_http_client.Pass(), |
250 devtools_websocket_client.Pass(), | 257 devtools_websocket_client.Pass(), |
251 devtools_event_listeners)); | 258 devtools_event_listeners)); |
252 return Status(kOk); | 259 return Status(kOk); |
253 } | 260 } |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
358 int exit_code; | 365 int exit_code; |
359 if (base::GetTerminationStatus(process, &exit_code) == | 366 if (base::GetTerminationStatus(process, &exit_code) == |
360 base::TERMINATION_STATUS_STILL_RUNNING) | 367 base::TERMINATION_STATUS_STILL_RUNNING) |
361 return Status(kUnknownError, "cannot kill Chrome", status); | 368 return Status(kUnknownError, "cannot kill Chrome", status); |
362 } | 369 } |
363 return status; | 370 return status; |
364 } | 371 } |
365 | 372 |
366 scoped_ptr<DevToolsClient> devtools_websocket_client; | 373 scoped_ptr<DevToolsClient> devtools_websocket_client; |
367 status = CreateBrowserwideDevToolsClientAndConnect( | 374 status = CreateBrowserwideDevToolsClientAndConnect( |
368 NetAddress(port), socket_factory, devtools_event_listeners, | 375 NetAddress(port), capabilities.perf_logging_prefs, socket_factory, |
369 &devtools_websocket_client); | 376 devtools_event_listeners, &devtools_websocket_client); |
370 if (status.IsError()) { | 377 if (status.IsError()) { |
371 LOG(WARNING) << "Browser-wide DevTools client failed to connect: " | 378 LOG(WARNING) << "Browser-wide DevTools client failed to connect: " |
372 << status.message(); | 379 << status.message(); |
373 } | 380 } |
374 | 381 |
375 scoped_ptr<ChromeDesktopImpl> chrome_desktop( | 382 scoped_ptr<ChromeDesktopImpl> chrome_desktop( |
376 new ChromeDesktopImpl(devtools_http_client.Pass(), | 383 new ChromeDesktopImpl(devtools_http_client.Pass(), |
377 devtools_websocket_client.Pass(), | 384 devtools_websocket_client.Pass(), |
378 devtools_event_listeners, | 385 devtools_event_listeners, |
379 port_reservation.Pass(), | 386 port_reservation.Pass(), |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
439 socket_factory, | 446 socket_factory, |
440 &capabilities, | 447 &capabilities, |
441 &devtools_http_client); | 448 &devtools_http_client); |
442 if (status.IsError()) { | 449 if (status.IsError()) { |
443 device->TearDown(); | 450 device->TearDown(); |
444 return status; | 451 return status; |
445 } | 452 } |
446 | 453 |
447 scoped_ptr<DevToolsClient> devtools_websocket_client; | 454 scoped_ptr<DevToolsClient> devtools_websocket_client; |
448 status = CreateBrowserwideDevToolsClientAndConnect( | 455 status = CreateBrowserwideDevToolsClientAndConnect( |
449 NetAddress(port), socket_factory, devtools_event_listeners, | 456 NetAddress(port), capabilities.perf_logging_prefs, socket_factory, |
450 &devtools_websocket_client); | 457 devtools_event_listeners, &devtools_websocket_client); |
451 if (status.IsError()) { | 458 if (status.IsError()) { |
452 LOG(WARNING) << "Browser-wide DevTools client failed to connect: " | 459 LOG(WARNING) << "Browser-wide DevTools client failed to connect: " |
453 << status.message(); | 460 << status.message(); |
454 } | 461 } |
455 | 462 |
456 chrome->reset(new ChromeAndroidImpl(devtools_http_client.Pass(), | 463 chrome->reset(new ChromeAndroidImpl(devtools_http_client.Pass(), |
457 devtools_websocket_client.Pass(), | 464 devtools_websocket_client.Pass(), |
458 devtools_event_listeners, | 465 devtools_event_listeners, |
459 port_reservation.Pass(), | 466 port_reservation.Pass(), |
460 device.Pass())); | 467 device.Pass())); |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
780 // Write empty "First Run" file, otherwise Chrome will wipe the default | 787 // Write empty "First Run" file, otherwise Chrome will wipe the default |
781 // profile that was written. | 788 // profile that was written. |
782 if (base::WriteFile( | 789 if (base::WriteFile( |
783 user_data_dir.Append(chrome::kFirstRunSentinel), "", 0) != 0) { | 790 user_data_dir.Append(chrome::kFirstRunSentinel), "", 0) != 0) { |
784 return Status(kUnknownError, "failed to write first run file"); | 791 return Status(kUnknownError, "failed to write first run file"); |
785 } | 792 } |
786 return Status(kOk); | 793 return Status(kOk); |
787 } | 794 } |
788 | 795 |
789 } // namespace internal | 796 } // namespace internal |
OLD | NEW |