| Index: chrome/test/chromedriver/chrome_launcher.cc
|
| diff --git a/chrome/test/chromedriver/chrome_launcher.cc b/chrome/test/chromedriver/chrome_launcher.cc
|
| index 1592c2913c813c10936865934ba31f80edf66884..6d4ebae9d53e33490535ff69f7cd5082a4f9e592 100644
|
| --- a/chrome/test/chromedriver/chrome_launcher.cc
|
| +++ b/chrome/test/chromedriver/chrome_launcher.cc
|
| @@ -7,6 +7,7 @@
|
| #include <stddef.h>
|
| #include <stdint.h>
|
| #include <algorithm>
|
| +#include <memory>
|
| #include <utility>
|
| #include <vector>
|
|
|
| @@ -244,21 +245,19 @@ Status CreateBrowserwideDevToolsClientAndConnect(
|
| const NetAddress& address,
|
| const PerfLoggingPrefs& perf_logging_prefs,
|
| const SyncWebSocketFactory& socket_factory,
|
| - const ScopedVector<DevToolsEventListener>& devtools_event_listeners,
|
| + const std::vector<std::unique_ptr<DevToolsEventListener>>&
|
| + devtools_event_listeners,
|
| std::unique_ptr<DevToolsClient>* browser_client) {
|
| std::unique_ptr<DevToolsClient> client(new DevToolsClientImpl(
|
| socket_factory, base::StringPrintf("ws://%s/devtools/browser/",
|
| address.ToString().c_str()),
|
| DevToolsClientImpl::kBrowserwideDevToolsClientId));
|
| - for (ScopedVector<DevToolsEventListener>::const_iterator it =
|
| - devtools_event_listeners.begin();
|
| - it != devtools_event_listeners.end();
|
| - ++it) {
|
| + for (const auto& listener : devtools_event_listeners) {
|
| // Only add listeners that subscribe to the browser-wide |DevToolsClient|.
|
| // Otherwise, listeners will think this client is associated with a webview,
|
| // and will send unrecognized commands to it.
|
| - if ((*it)->subscribes_to_browser())
|
| - client->AddListener(*it);
|
| + if (listener->subscribes_to_browser())
|
| + client->AddListener(listener.get());
|
| }
|
| // Provide the client regardless of whether it connects, so that Chrome always
|
| // has a valid |devtools_websocket_client_|. If not connected, no listeners
|
| @@ -278,7 +277,8 @@ Status LaunchRemoteChromeSession(
|
| URLRequestContextGetter* context_getter,
|
| const SyncWebSocketFactory& socket_factory,
|
| const Capabilities& capabilities,
|
| - ScopedVector<DevToolsEventListener>* devtools_event_listeners,
|
| + std::vector<std::unique_ptr<DevToolsEventListener>>
|
| + devtools_event_listeners,
|
| std::unique_ptr<Chrome>* chrome) {
|
| Status status(kOk);
|
| std::unique_ptr<DevToolsHttpClient> devtools_http_client;
|
| @@ -294,28 +294,27 @@ Status LaunchRemoteChromeSession(
|
| std::unique_ptr<DevToolsClient> devtools_websocket_client;
|
| status = CreateBrowserwideDevToolsClientAndConnect(
|
| capabilities.debugger_address, capabilities.perf_logging_prefs,
|
| - socket_factory, *devtools_event_listeners, &devtools_websocket_client);
|
| + socket_factory, devtools_event_listeners, &devtools_websocket_client);
|
| if (status.IsError()) {
|
| LOG(WARNING) << "Browser-wide DevTools client failed to connect: "
|
| << status.message();
|
| }
|
|
|
| - chrome->reset(new ChromeRemoteImpl(std::move(devtools_http_client),
|
| - std::move(devtools_websocket_client),
|
| - *devtools_event_listeners,
|
| - capabilities.page_load_strategy));
|
| + chrome->reset(new ChromeRemoteImpl(
|
| + std::move(devtools_http_client), std::move(devtools_websocket_client),
|
| + std::move(devtools_event_listeners), capabilities.page_load_strategy));
|
| return Status(kOk);
|
| }
|
|
|
| -Status LaunchDesktopChrome(
|
| - URLRequestContextGetter* context_getter,
|
| - uint16_t port,
|
| - std::unique_ptr<PortReservation> port_reservation,
|
| - const SyncWebSocketFactory& socket_factory,
|
| - const Capabilities& capabilities,
|
| - ScopedVector<DevToolsEventListener>* devtools_event_listeners,
|
| - std::unique_ptr<Chrome>* chrome,
|
| - bool w3c_compliant) {
|
| +Status LaunchDesktopChrome(URLRequestContextGetter* context_getter,
|
| + uint16_t port,
|
| + std::unique_ptr<PortReservation> port_reservation,
|
| + const SyncWebSocketFactory& socket_factory,
|
| + const Capabilities& capabilities,
|
| + std::vector<std::unique_ptr<DevToolsEventListener>>
|
| + devtools_event_listeners,
|
| + std::unique_ptr<Chrome>* chrome,
|
| + bool w3c_compliant) {
|
| base::CommandLine command(base::CommandLine::NO_PROGRAM);
|
| base::ScopedTempDir user_data_dir;
|
| base::ScopedTempDir extension_dir;
|
| @@ -432,23 +431,17 @@ Status LaunchDesktopChrome(
|
| std::unique_ptr<DevToolsClient> devtools_websocket_client;
|
| status = CreateBrowserwideDevToolsClientAndConnect(
|
| NetAddress(port), capabilities.perf_logging_prefs, socket_factory,
|
| - *devtools_event_listeners, &devtools_websocket_client);
|
| + devtools_event_listeners, &devtools_websocket_client);
|
| if (status.IsError()) {
|
| LOG(WARNING) << "Browser-wide DevTools client failed to connect: "
|
| << status.message();
|
| }
|
|
|
| - std::unique_ptr<ChromeDesktopImpl> chrome_desktop(
|
| - new ChromeDesktopImpl(std::move(devtools_http_client),
|
| - std::move(devtools_websocket_client),
|
| - *devtools_event_listeners,
|
| - std::move(port_reservation),
|
| - capabilities.page_load_strategy,
|
| - std::move(process),
|
| - command,
|
| - &user_data_dir,
|
| - &extension_dir,
|
| - capabilities.network_emulation_enabled));
|
| + std::unique_ptr<ChromeDesktopImpl> chrome_desktop(new ChromeDesktopImpl(
|
| + std::move(devtools_http_client), std::move(devtools_websocket_client),
|
| + std::move(devtools_event_listeners), std::move(port_reservation),
|
| + capabilities.page_load_strategy, std::move(process), command,
|
| + &user_data_dir, &extension_dir, capabilities.network_emulation_enabled));
|
| for (size_t i = 0; i < extension_bg_pages.size(); ++i) {
|
| VLOG(0) << "Waiting for extension bg page load: " << extension_bg_pages[i];
|
| std::unique_ptr<WebView> web_view;
|
| @@ -466,15 +459,15 @@ Status LaunchDesktopChrome(
|
| return Status(kOk);
|
| }
|
|
|
| -Status LaunchAndroidChrome(
|
| - URLRequestContextGetter* context_getter,
|
| - uint16_t port,
|
| - std::unique_ptr<PortReservation> port_reservation,
|
| - const SyncWebSocketFactory& socket_factory,
|
| - const Capabilities& capabilities,
|
| - ScopedVector<DevToolsEventListener>* devtools_event_listeners,
|
| - DeviceManager* device_manager,
|
| - std::unique_ptr<Chrome>* chrome) {
|
| +Status LaunchAndroidChrome(URLRequestContextGetter* context_getter,
|
| + uint16_t port,
|
| + std::unique_ptr<PortReservation> port_reservation,
|
| + const SyncWebSocketFactory& socket_factory,
|
| + const Capabilities& capabilities,
|
| + std::vector<std::unique_ptr<DevToolsEventListener>>
|
| + devtools_event_listeners,
|
| + DeviceManager* device_manager,
|
| + std::unique_ptr<Chrome>* chrome) {
|
| Status status(kOk);
|
| std::unique_ptr<Device> device;
|
| if (capabilities.android_device_serial.empty()) {
|
| @@ -518,37 +511,35 @@ Status LaunchAndroidChrome(
|
| std::unique_ptr<DevToolsClient> devtools_websocket_client;
|
| status = CreateBrowserwideDevToolsClientAndConnect(
|
| NetAddress(port), capabilities.perf_logging_prefs, socket_factory,
|
| - *devtools_event_listeners, &devtools_websocket_client);
|
| + devtools_event_listeners, &devtools_websocket_client);
|
| if (status.IsError()) {
|
| LOG(WARNING) << "Browser-wide DevTools client failed to connect: "
|
| << status.message();
|
| }
|
|
|
| - chrome->reset(new ChromeAndroidImpl(std::move(devtools_http_client),
|
| - std::move(devtools_websocket_client),
|
| - *devtools_event_listeners,
|
| - std::move(port_reservation),
|
| - capabilities.page_load_strategy,
|
| - std::move(device)));
|
| + chrome->reset(new ChromeAndroidImpl(
|
| + std::move(devtools_http_client), std::move(devtools_websocket_client),
|
| + std::move(devtools_event_listeners), std::move(port_reservation),
|
| + capabilities.page_load_strategy, std::move(device)));
|
| return Status(kOk);
|
| }
|
|
|
| } // namespace
|
|
|
| -Status LaunchChrome(
|
| - URLRequestContextGetter* context_getter,
|
| - const SyncWebSocketFactory& socket_factory,
|
| - DeviceManager* device_manager,
|
| - PortServer* port_server,
|
| - PortManager* port_manager,
|
| - const Capabilities& capabilities,
|
| - ScopedVector<DevToolsEventListener>* devtools_event_listeners,
|
| - std::unique_ptr<Chrome>* chrome,
|
| - bool w3c_compliant) {
|
| +Status LaunchChrome(URLRequestContextGetter* context_getter,
|
| + const SyncWebSocketFactory& socket_factory,
|
| + DeviceManager* device_manager,
|
| + PortServer* port_server,
|
| + PortManager* port_manager,
|
| + const Capabilities& capabilities,
|
| + std::vector<std::unique_ptr<DevToolsEventListener>>
|
| + devtools_event_listeners,
|
| + std::unique_ptr<Chrome>* chrome,
|
| + bool w3c_compliant) {
|
| if (capabilities.IsRemoteBrowser()) {
|
| return LaunchRemoteChromeSession(
|
| - context_getter, socket_factory,
|
| - capabilities, devtools_event_listeners, chrome);
|
| + context_getter, socket_factory, capabilities,
|
| + std::move(devtools_event_listeners), chrome);
|
| }
|
|
|
| uint16_t port = 0;
|
| @@ -565,7 +556,8 @@ Status LaunchChrome(
|
| port_status);
|
| return LaunchAndroidChrome(
|
| context_getter, port, std::move(port_reservation), socket_factory,
|
| - capabilities, devtools_event_listeners, device_manager, chrome);
|
| + capabilities, std::move(devtools_event_listeners), device_manager,
|
| + chrome);
|
| } else {
|
| if (port_server)
|
| port_status = port_server->ReservePort(&port, &port_reservation);
|
| @@ -574,10 +566,10 @@ Status LaunchChrome(
|
| if (port_status.IsError())
|
| return Status(kUnknownError, "cannot reserve port for Chrome",
|
| port_status);
|
| - return LaunchDesktopChrome(context_getter, port,
|
| - std::move(port_reservation), socket_factory,
|
| - capabilities, devtools_event_listeners, chrome,
|
| - w3c_compliant);
|
| + return LaunchDesktopChrome(
|
| + context_getter, port, std::move(port_reservation), socket_factory,
|
| + capabilities, std::move(devtools_event_listeners), chrome,
|
| + w3c_compliant);
|
| }
|
| }
|
|
|
|
|