OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/logging.h" | 5 #include "chrome/test/chromedriver/logging.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 #include <stdio.h> | 9 #include <stdio.h> |
10 | 10 |
11 #include <memory> | 11 #include <memory> |
12 #include <utility> | 12 #include <utility> |
13 | 13 |
14 #include "base/command_line.h" | 14 #include "base/command_line.h" |
15 #include "base/json/json_reader.h" | 15 #include "base/json/json_reader.h" |
16 #include "base/logging.h" | 16 #include "base/logging.h" |
17 #include "base/macros.h" | 17 #include "base/macros.h" |
| 18 #include "base/memory/ptr_util.h" |
18 #include "base/strings/stringprintf.h" | 19 #include "base/strings/stringprintf.h" |
19 #include "base/time/time.h" | 20 #include "base/time/time.h" |
20 #include "build/build_config.h" | 21 #include "build/build_config.h" |
21 #include "chrome/test/chromedriver/capabilities.h" | 22 #include "chrome/test/chromedriver/capabilities.h" |
22 #include "chrome/test/chromedriver/chrome/console_logger.h" | 23 #include "chrome/test/chromedriver/chrome/console_logger.h" |
23 #include "chrome/test/chromedriver/chrome/status.h" | 24 #include "chrome/test/chromedriver/chrome/status.h" |
24 #include "chrome/test/chromedriver/command_listener_proxy.h" | 25 #include "chrome/test/chromedriver/command_listener_proxy.h" |
25 #include "chrome/test/chromedriver/performance_logger.h" | 26 #include "chrome/test/chromedriver/performance_logger.h" |
26 #include "chrome/test/chromedriver/session.h" | 27 #include "chrome/test/chromedriver/session.h" |
27 | 28 |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 false, // enable_thread_id | 265 false, // enable_thread_id |
265 false, // enable_timestamp | 266 false, // enable_timestamp |
266 false); // enable_tickcount | 267 false); // enable_tickcount |
267 logging::SetLogMessageHandler(&HandleLogMessage); | 268 logging::SetLogMessageHandler(&HandleLogMessage); |
268 | 269 |
269 logging::LoggingSettings logging_settings; | 270 logging::LoggingSettings logging_settings; |
270 logging_settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; | 271 logging_settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; |
271 return logging::InitLogging(logging_settings); | 272 return logging::InitLogging(logging_settings); |
272 } | 273 } |
273 | 274 |
274 Status CreateLogs(const Capabilities& capabilities, | 275 Status CreateLogs( |
275 const Session* session, | 276 const Capabilities& capabilities, |
276 ScopedVector<WebDriverLog>* out_logs, | 277 const Session* session, |
277 ScopedVector<DevToolsEventListener>* out_devtools_listeners, | 278 std::vector<std::unique_ptr<WebDriverLog>>* out_logs, |
278 ScopedVector<CommandListener>* out_command_listeners) { | 279 std::vector<std::unique_ptr<DevToolsEventListener>>* out_devtools_listeners, |
279 ScopedVector<WebDriverLog> logs; | 280 std::vector<std::unique_ptr<CommandListener>>* out_command_listeners) { |
280 ScopedVector<DevToolsEventListener> devtools_listeners; | 281 std::vector<std::unique_ptr<WebDriverLog>> logs; |
281 ScopedVector<CommandListener> command_listeners; | 282 std::vector<std::unique_ptr<DevToolsEventListener>> devtools_listeners; |
| 283 std::vector<std::unique_ptr<CommandListener>> command_listeners; |
282 Log::Level browser_log_level = Log::kWarning; | 284 Log::Level browser_log_level = Log::kWarning; |
283 const LoggingPrefs& prefs = capabilities.logging_prefs; | 285 const LoggingPrefs& prefs = capabilities.logging_prefs; |
284 | 286 |
285 for (LoggingPrefs::const_iterator iter = prefs.begin(); | 287 for (LoggingPrefs::const_iterator iter = prefs.begin(); |
286 iter != prefs.end(); | 288 iter != prefs.end(); |
287 ++iter) { | 289 ++iter) { |
288 std::string type = iter->first; | 290 std::string type = iter->first; |
289 Log::Level level = iter->second; | 291 Log::Level level = iter->second; |
290 if (type == WebDriverLog::kPerformanceType) { | 292 if (type == WebDriverLog::kPerformanceType) { |
291 if (level != Log::kOff) { | 293 if (level != Log::kOff) { |
292 WebDriverLog* log = new WebDriverLog(type, Log::kAll); | 294 logs.push_back(base::MakeUnique<WebDriverLog>(type, Log::kAll)); |
293 logs.push_back(log); | 295 devtools_listeners.push_back(base::MakeUnique<PerformanceLogger>( |
| 296 logs.back().get(), session, capabilities.perf_logging_prefs)); |
294 PerformanceLogger* perf_log = | 297 PerformanceLogger* perf_log = |
295 new PerformanceLogger(log, session, | 298 static_cast<PerformanceLogger*>(devtools_listeners.back().get()); |
296 capabilities.perf_logging_prefs); | |
297 // We use a proxy for |perf_log|'s |CommandListener| interface. | 299 // We use a proxy for |perf_log|'s |CommandListener| interface. |
298 // Otherwise, |perf_log| would be owned by both session->chrome and | 300 // Otherwise, |perf_log| would be owned by both session->chrome and |
299 // |session|, which would lead to memory errors on destruction. | 301 // |session|, which would lead to memory errors on destruction. |
300 // session->chrome will own |perf_log|, and |session| will own |proxy|. | 302 // session->chrome will own |perf_log|, and |session| will own |proxy|. |
301 // session->command_listeners (the proxy) will be destroyed first. | 303 // session->command_listeners (the proxy) will be destroyed first. |
302 CommandListenerProxy* proxy = new CommandListenerProxy(perf_log); | 304 command_listeners.push_back( |
303 devtools_listeners.push_back(perf_log); | 305 base::MakeUnique<CommandListenerProxy>(perf_log)); |
304 command_listeners.push_back(proxy); | |
305 } | 306 } |
306 } else if (type == WebDriverLog::kBrowserType) { | 307 } else if (type == WebDriverLog::kBrowserType) { |
307 browser_log_level = level; | 308 browser_log_level = level; |
308 } else if (type != WebDriverLog::kDriverType) { | 309 } else if (type != WebDriverLog::kDriverType) { |
309 // Driver "should" ignore unrecognized log types, per Selenium tests. | 310 // Driver "should" ignore unrecognized log types, per Selenium tests. |
310 // For example the Java client passes the "client" log type in the caps, | 311 // For example the Java client passes the "client" log type in the caps, |
311 // which the server should never provide. | 312 // which the server should never provide. |
312 LOG(WARNING) << "Ignoring unrecognized log type: " << type; | 313 LOG(WARNING) << "Ignoring unrecognized log type: " << type; |
313 } | 314 } |
314 } | 315 } |
315 // Create "browser" log -- should always exist. | 316 // Create "browser" log -- should always exist. |
316 WebDriverLog* browser_log = | 317 logs.push_back(base::MakeUnique<WebDriverLog>(WebDriverLog::kBrowserType, |
317 new WebDriverLog(WebDriverLog::kBrowserType, browser_log_level); | 318 browser_log_level)); |
318 logs.push_back(browser_log); | |
319 // If the level is OFF, don't even bother listening for DevTools events. | 319 // If the level is OFF, don't even bother listening for DevTools events. |
320 if (browser_log_level != Log::kOff) | 320 if (browser_log_level != Log::kOff) |
321 devtools_listeners.push_back(new ConsoleLogger(browser_log)); | 321 devtools_listeners.push_back( |
| 322 base::MakeUnique<ConsoleLogger>(logs.back().get())); |
322 | 323 |
323 out_logs->swap(logs); | 324 out_logs->swap(logs); |
324 out_devtools_listeners->swap(devtools_listeners); | 325 out_devtools_listeners->swap(devtools_listeners); |
325 out_command_listeners->swap(command_listeners); | 326 out_command_listeners->swap(command_listeners); |
326 return Status(kOk); | 327 return Status(kOk); |
327 } | 328 } |
OLD | NEW |