Index: chrome/test/chromedriver/logging.cc |
diff --git a/chrome/test/chromedriver/logging.cc b/chrome/test/chromedriver/logging.cc |
index 4a8cfa1ce83435d4ab675f575b3fbf88101d2125..ea7fd86beadd3c05e3c25c7c521c3a96b30443d3 100644 |
--- a/chrome/test/chromedriver/logging.cc |
+++ b/chrome/test/chromedriver/logging.cc |
@@ -77,8 +77,18 @@ Log::Level GetLevelFromSeverity(int severity) { |
} |
} |
+WebDriverLog* GetSessionLog() { |
+ Session* session = GetThreadLocalSession(); |
+ if (!session) |
+ return NULL; |
+ return session->driver_log.get(); |
+} |
+ |
bool InternalIsVLogOn(int vlog_level) { |
- return GetLevelFromSeverity(vlog_level * -1) >= g_log_level; |
+ WebDriverLog* session_log = GetSessionLog(); |
+ Log::Level session_level = session_log ? session_log->min_level() : Log::kOff; |
+ Log::Level level = g_log_level < session_level ? g_log_level : session_level; |
+ return GetLevelFromSeverity(vlog_level * -1) >= level; |
} |
bool HandleLogMessage(int severity, |
@@ -87,42 +97,34 @@ bool HandleLogMessage(int severity, |
size_t message_start, |
const std::string& str) { |
Log::Level level = GetLevelFromSeverity(severity); |
- if (level < g_log_level) |
- return true; |
- |
std::string message = str.substr(message_start); |
- const char* level_name = "UNKNOWN"; |
- switch (level) { |
- case Log::kDebug: |
- level_name = "DEBUG"; |
- break; |
- case Log::kInfo: |
- level_name = "INFO"; |
- break; |
- case Log::kWarning: |
- level_name = "WARNING"; |
- break; |
- case Log::kError: |
- level_name = "ERROR"; |
- break; |
- default: |
- break; |
+ |
+ if (level >= g_log_level) { |
+ const char* level_name = LevelToName(level); |
+ std::string entry = base::StringPrintf( |
+ "[%.3lf][%s]: %s", |
+ base::TimeDelta(base::TimeTicks::Now() - |
+ base::TimeTicks::FromInternalValue(g_start_time)) |
+ .InSecondsF(), |
+ level_name, |
+ message.c_str()); |
+ fprintf(stderr, "%s", entry.c_str()); |
+ fflush(stderr); |
} |
- std::string entry = base::StringPrintf( |
- "[%.3lf][%s]: %s", |
- base::TimeDelta(base::TimeTicks::Now() - |
- base::TimeTicks::FromInternalValue(g_start_time)) |
- .InSecondsF(), |
- level_name, |
- message.c_str()); |
- |
- fprintf(stderr, "%s", entry.c_str()); |
- fflush(stderr); |
+ |
+ WebDriverLog* session_log = GetSessionLog(); |
+ if (session_log) |
+ session_log->AddEntry(level, message); |
+ |
return true; |
} |
} // namespace |
+const char WebDriverLog::kBrowserType[] = "browser"; |
+const char WebDriverLog::kDriverType[] = "driver"; |
+const char WebDriverLog::kPerformanceType[] = "performance"; |
+ |
bool WebDriverLog::NameToLevel(const std::string& name, Log::Level* out_level) { |
for (size_t i = 0; i < arraysize(kNameToLevel); ++i) { |
if (name == kNameToLevel[i].name) { |
@@ -166,6 +168,10 @@ const std::string& WebDriverLog::type() const { |
return type_; |
} |
+void WebDriverLog::set_min_level(Level min_level) { |
+ min_level_ = min_level; |
+} |
+ |
Log::Level WebDriverLog::min_level() const { |
return min_level_; |
} |
@@ -217,32 +223,26 @@ bool InitLogging() { |
Status CreateLogs(const Capabilities& capabilities, |
ScopedVector<WebDriverLog>* out_logs, |
- scoped_ptr<WebDriverLog>* out_driver_log, |
ScopedVector<DevToolsEventListener>* out_listeners) { |
ScopedVector<WebDriverLog> logs; |
ScopedVector<DevToolsEventListener> listeners; |
Log::Level browser_log_level = Log::kOff; |
- Log::Level driver_log_level = Log::kWarning; |
const LoggingPrefs& prefs = capabilities.logging_prefs; |
- const char kBrowserLogType[] = "browser"; |
- const char kDriverLogType[] = "driver"; |
for (LoggingPrefs::const_iterator iter = prefs.begin(); |
iter != prefs.end(); |
++iter) { |
std::string type = iter->first; |
Log::Level level = iter->second; |
- if (type == "performance") { |
+ if (type == WebDriverLog::kPerformanceType) { |
if (level != Log::kOff) { |
WebDriverLog* log = new WebDriverLog(type, Log::kAll); |
logs.push_back(log); |
listeners.push_back(new PerformanceLogger(log)); |
} |
- } else if (type == kBrowserLogType) { |
+ } else if (type == WebDriverLog::kBrowserType) { |
browser_log_level = level; |
- } else if (type == kDriverLogType) { |
- driver_log_level = level; |
- } else { |
+ } else if (type != WebDriverLog::kDriverType) { |
// Driver "should" ignore unrecognized log types, per Selenium tests. |
// For example the Java client passes the "client" log type in the caps, |
// which the server should never provide. |
@@ -251,18 +251,13 @@ Status CreateLogs(const Capabilities& capabilities, |
} |
// Create "browser" log -- should always exist. |
WebDriverLog* browser_log = |
- new WebDriverLog(kBrowserLogType, browser_log_level); |
+ new WebDriverLog(WebDriverLog::kBrowserType, browser_log_level); |
logs.push_back(browser_log); |
// If the level is OFF, don't even bother listening for DevTools events. |
if (browser_log_level != Log::kOff) |
listeners.push_back(new ConsoleLogger(browser_log)); |
- // Create "driver" log -- should always exist. |
- scoped_ptr<WebDriverLog> driver_log( |
- new WebDriverLog(kDriverLogType, driver_log_level)); |
- |
out_logs->swap(logs); |
- *out_driver_log = driver_log.Pass(); |
out_listeners->swap(listeners); |
return Status(kOk); |
} |