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

Side by Side Diff: chrome/test/chromedriver/chrome_launcher.cc

Issue 2777883003: Remove ScopedVector from chrome/test/chromedriver/ (Closed)
Patch Set: 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 unified diff | Download patch
OLDNEW
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 <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory>
10 #include <utility> 11 #include <utility>
11 #include <vector> 12 #include <vector>
12 13
13 #include "base/base64.h" 14 #include "base/base64.h"
14 #include "base/bind.h" 15 #include "base/bind.h"
15 #include "base/command_line.h" 16 #include "base/command_line.h"
16 #include "base/files/file_path.h" 17 #include "base/files/file_path.h"
17 #include "base/files/file_util.h" 18 #include "base/files/file_util.h"
18 #include "base/files/scoped_file.h" 19 #include "base/files/scoped_file.h"
19 #include "base/format_macros.h" 20 #include "base/format_macros.h"
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 } 238 }
238 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(50)); 239 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(50));
239 } 240 }
240 return Status(kUnknownError, "unable to discover open pages"); 241 return Status(kUnknownError, "unable to discover open pages");
241 } 242 }
242 243
243 Status CreateBrowserwideDevToolsClientAndConnect( 244 Status CreateBrowserwideDevToolsClientAndConnect(
244 const NetAddress& address, 245 const NetAddress& address,
245 const PerfLoggingPrefs& perf_logging_prefs, 246 const PerfLoggingPrefs& perf_logging_prefs,
246 const SyncWebSocketFactory& socket_factory, 247 const SyncWebSocketFactory& socket_factory,
247 const ScopedVector<DevToolsEventListener>& devtools_event_listeners, 248 const std::vector<std::unique_ptr<DevToolsEventListener>>&
249 devtools_event_listeners,
248 std::unique_ptr<DevToolsClient>* browser_client) { 250 std::unique_ptr<DevToolsClient>* browser_client) {
249 std::unique_ptr<DevToolsClient> client(new DevToolsClientImpl( 251 std::unique_ptr<DevToolsClient> client(new DevToolsClientImpl(
250 socket_factory, base::StringPrintf("ws://%s/devtools/browser/", 252 socket_factory, base::StringPrintf("ws://%s/devtools/browser/",
251 address.ToString().c_str()), 253 address.ToString().c_str()),
252 DevToolsClientImpl::kBrowserwideDevToolsClientId)); 254 DevToolsClientImpl::kBrowserwideDevToolsClientId));
253 for (ScopedVector<DevToolsEventListener>::const_iterator it = 255 for (const auto& listener : devtools_event_listeners) {
254 devtools_event_listeners.begin();
255 it != devtools_event_listeners.end();
256 ++it) {
257 // Only add listeners that subscribe to the browser-wide |DevToolsClient|. 256 // Only add listeners that subscribe to the browser-wide |DevToolsClient|.
258 // Otherwise, listeners will think this client is associated with a webview, 257 // Otherwise, listeners will think this client is associated with a webview,
259 // and will send unrecognized commands to it. 258 // and will send unrecognized commands to it.
260 if ((*it)->subscribes_to_browser()) 259 if (listener->subscribes_to_browser())
261 client->AddListener(*it); 260 client->AddListener(listener.get());
262 } 261 }
263 // Provide the client regardless of whether it connects, so that Chrome always 262 // Provide the client regardless of whether it connects, so that Chrome always
264 // has a valid |devtools_websocket_client_|. If not connected, no listeners 263 // has a valid |devtools_websocket_client_|. If not connected, no listeners
265 // will be notified, and client will just return kDisconnected errors if used. 264 // will be notified, and client will just return kDisconnected errors if used.
266 *browser_client = std::move(client); 265 *browser_client = std::move(client);
267 // To avoid unnecessary overhead, only connect if tracing is enabled, since 266 // To avoid unnecessary overhead, only connect if tracing is enabled, since
268 // the browser-wide client is currently only used for tracing. 267 // the browser-wide client is currently only used for tracing.
269 if (!perf_logging_prefs.trace_categories.empty()) { 268 if (!perf_logging_prefs.trace_categories.empty()) {
270 Status status = (*browser_client)->ConnectIfNecessary(); 269 Status status = (*browser_client)->ConnectIfNecessary();
271 if (status.IsError()) 270 if (status.IsError())
272 return status; 271 return status;
273 } 272 }
274 return Status(kOk); 273 return Status(kOk);
275 } 274 }
276 275
277 Status LaunchRemoteChromeSession( 276 Status LaunchRemoteChromeSession(
278 URLRequestContextGetter* context_getter, 277 URLRequestContextGetter* context_getter,
279 const SyncWebSocketFactory& socket_factory, 278 const SyncWebSocketFactory& socket_factory,
280 const Capabilities& capabilities, 279 const Capabilities& capabilities,
281 ScopedVector<DevToolsEventListener>* devtools_event_listeners, 280 std::vector<std::unique_ptr<DevToolsEventListener>>*
281 devtools_event_listeners,
Avi (use Gerrit) 2017/03/29 03:26:55 This is passed by pointer, yes, but down on line 2
leonhsl(Using Gerrit) 2017/03/29 09:22:30 Done.
282 std::unique_ptr<Chrome>* chrome) { 282 std::unique_ptr<Chrome>* chrome) {
283 Status status(kOk); 283 Status status(kOk);
284 std::unique_ptr<DevToolsHttpClient> devtools_http_client; 284 std::unique_ptr<DevToolsHttpClient> devtools_http_client;
285 status = WaitForDevToolsAndCheckVersion( 285 status = WaitForDevToolsAndCheckVersion(
286 capabilities.debugger_address, context_getter, socket_factory, 286 capabilities.debugger_address, context_getter, socket_factory,
287 &capabilities, &devtools_http_client); 287 &capabilities, &devtools_http_client);
288 if (status.IsError()) { 288 if (status.IsError()) {
289 return Status(kUnknownError, "cannot connect to chrome at " + 289 return Status(kUnknownError, "cannot connect to chrome at " +
290 capabilities.debugger_address.ToString(), 290 capabilities.debugger_address.ToString(),
291 status); 291 status);
292 } 292 }
293 293
294 std::unique_ptr<DevToolsClient> devtools_websocket_client; 294 std::unique_ptr<DevToolsClient> devtools_websocket_client;
295 status = CreateBrowserwideDevToolsClientAndConnect( 295 status = CreateBrowserwideDevToolsClientAndConnect(
296 capabilities.debugger_address, capabilities.perf_logging_prefs, 296 capabilities.debugger_address, capabilities.perf_logging_prefs,
297 socket_factory, *devtools_event_listeners, &devtools_websocket_client); 297 socket_factory, *devtools_event_listeners, &devtools_websocket_client);
298 if (status.IsError()) { 298 if (status.IsError()) {
299 LOG(WARNING) << "Browser-wide DevTools client failed to connect: " 299 LOG(WARNING) << "Browser-wide DevTools client failed to connect: "
300 << status.message(); 300 << status.message();
301 } 301 }
302 302
303 chrome->reset(new ChromeRemoteImpl(std::move(devtools_http_client), 303 chrome->reset(new ChromeRemoteImpl(std::move(devtools_http_client),
304 std::move(devtools_websocket_client), 304 std::move(devtools_websocket_client),
305 *devtools_event_listeners, 305 *devtools_event_listeners,
306 capabilities.page_load_strategy)); 306 capabilities.page_load_strategy));
307 return Status(kOk); 307 return Status(kOk);
308 } 308 }
309 309
310 Status LaunchDesktopChrome( 310 Status LaunchDesktopChrome(URLRequestContextGetter* context_getter,
311 URLRequestContextGetter* context_getter, 311 uint16_t port,
312 uint16_t port, 312 std::unique_ptr<PortReservation> port_reservation,
313 std::unique_ptr<PortReservation> port_reservation, 313 const SyncWebSocketFactory& socket_factory,
314 const SyncWebSocketFactory& socket_factory, 314 const Capabilities& capabilities,
315 const Capabilities& capabilities, 315 std::vector<std::unique_ptr<DevToolsEventListener>>*
316 ScopedVector<DevToolsEventListener>* devtools_event_listeners, 316 devtools_event_listeners,
317 std::unique_ptr<Chrome>* chrome, 317 std::unique_ptr<Chrome>* chrome,
318 bool w3c_compliant) { 318 bool w3c_compliant) {
319 base::CommandLine command(base::CommandLine::NO_PROGRAM); 319 base::CommandLine command(base::CommandLine::NO_PROGRAM);
320 base::ScopedTempDir user_data_dir; 320 base::ScopedTempDir user_data_dir;
321 base::ScopedTempDir extension_dir; 321 base::ScopedTempDir extension_dir;
322 std::vector<std::string> extension_bg_pages; 322 std::vector<std::string> extension_bg_pages;
323 Status status = PrepareCommandLine(port, 323 Status status = PrepareCommandLine(port,
324 capabilities, 324 capabilities,
325 &command, 325 &command,
326 &user_data_dir, 326 &user_data_dir,
327 &extension_dir, 327 &extension_dir,
328 &extension_bg_pages); 328 &extension_bg_pages);
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 return Status(kUnknownError, 459 return Status(kUnknownError,
460 "failed to wait for extension background page to load: " + 460 "failed to wait for extension background page to load: " +
461 extension_bg_pages[i], 461 extension_bg_pages[i],
462 status); 462 status);
463 } 463 }
464 } 464 }
465 *chrome = std::move(chrome_desktop); 465 *chrome = std::move(chrome_desktop);
466 return Status(kOk); 466 return Status(kOk);
467 } 467 }
468 468
469 Status LaunchAndroidChrome( 469 Status LaunchAndroidChrome(URLRequestContextGetter* context_getter,
470 URLRequestContextGetter* context_getter, 470 uint16_t port,
471 uint16_t port, 471 std::unique_ptr<PortReservation> port_reservation,
472 std::unique_ptr<PortReservation> port_reservation, 472 const SyncWebSocketFactory& socket_factory,
473 const SyncWebSocketFactory& socket_factory, 473 const Capabilities& capabilities,
474 const Capabilities& capabilities, 474 std::vector<std::unique_ptr<DevToolsEventListener>>*
475 ScopedVector<DevToolsEventListener>* devtools_event_listeners, 475 devtools_event_listeners,
476 DeviceManager* device_manager, 476 DeviceManager* device_manager,
477 std::unique_ptr<Chrome>* chrome) { 477 std::unique_ptr<Chrome>* chrome) {
478 Status status(kOk); 478 Status status(kOk);
479 std::unique_ptr<Device> device; 479 std::unique_ptr<Device> device;
480 if (capabilities.android_device_serial.empty()) { 480 if (capabilities.android_device_serial.empty()) {
481 status = device_manager->AcquireDevice(&device); 481 status = device_manager->AcquireDevice(&device);
482 } else { 482 } else {
483 status = device_manager->AcquireSpecificDevice( 483 status = device_manager->AcquireSpecificDevice(
484 capabilities.android_device_serial, &device); 484 capabilities.android_device_serial, &device);
485 } 485 }
486 if (status.IsError()) 486 if (status.IsError())
487 return status; 487 return status;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 std::move(devtools_websocket_client), 528 std::move(devtools_websocket_client),
529 *devtools_event_listeners, 529 *devtools_event_listeners,
530 std::move(port_reservation), 530 std::move(port_reservation),
531 capabilities.page_load_strategy, 531 capabilities.page_load_strategy,
532 std::move(device))); 532 std::move(device)));
533 return Status(kOk); 533 return Status(kOk);
534 } 534 }
535 535
536 } // namespace 536 } // namespace
537 537
538 Status LaunchChrome( 538 Status LaunchChrome(URLRequestContextGetter* context_getter,
539 URLRequestContextGetter* context_getter, 539 const SyncWebSocketFactory& socket_factory,
540 const SyncWebSocketFactory& socket_factory, 540 DeviceManager* device_manager,
541 DeviceManager* device_manager, 541 PortServer* port_server,
542 PortServer* port_server, 542 PortManager* port_manager,
543 PortManager* port_manager, 543 const Capabilities& capabilities,
544 const Capabilities& capabilities, 544 std::vector<std::unique_ptr<DevToolsEventListener>>*
545 ScopedVector<DevToolsEventListener>* devtools_event_listeners, 545 devtools_event_listeners,
546 std::unique_ptr<Chrome>* chrome, 546 std::unique_ptr<Chrome>* chrome,
547 bool w3c_compliant) { 547 bool w3c_compliant) {
548 if (capabilities.IsRemoteBrowser()) { 548 if (capabilities.IsRemoteBrowser()) {
549 return LaunchRemoteChromeSession( 549 return LaunchRemoteChromeSession(
550 context_getter, socket_factory, 550 context_getter, socket_factory,
551 capabilities, devtools_event_listeners, chrome); 551 capabilities, devtools_event_listeners, chrome);
552 } 552 }
553 553
554 uint16_t port = 0; 554 uint16_t port = 0;
555 std::unique_ptr<PortReservation> port_reservation; 555 std::unique_ptr<PortReservation> port_reservation;
556 Status port_status(kOk); 556 Status port_status(kOk);
557 557
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
881 // Write empty "First Run" file, otherwise Chrome will wipe the default 881 // Write empty "First Run" file, otherwise Chrome will wipe the default
882 // profile that was written. 882 // profile that was written.
883 if (base::WriteFile( 883 if (base::WriteFile(
884 user_data_dir.Append(chrome::kFirstRunSentinel), "", 0) != 0) { 884 user_data_dir.Append(chrome::kFirstRunSentinel), "", 0) != 0) {
885 return Status(kUnknownError, "failed to write first run file"); 885 return Status(kUnknownError, "failed to write first run file");
886 } 886 }
887 return Status(kOk); 887 return Status(kOk);
888 } 888 }
889 889
890 } // namespace internal 890 } // namespace internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698