Index: chrome/test/chromedriver/chrome/log.cc |
diff --git a/chrome/test/chromedriver/chrome/log.cc b/chrome/test/chromedriver/chrome/log.cc |
index d272a55333cbc88c99bec19095eccb27b53b487a..148c04618ad4e2a0dd7bd9f3db56a7f7069833b6 100644 |
--- a/chrome/test/chromedriver/chrome/log.cc |
+++ b/chrome/test/chromedriver/chrome/log.cc |
@@ -4,18 +4,19 @@ |
#include "chrome/test/chromedriver/chrome/log.h" |
-#include <stdio.h> |
- |
#include "base/json/json_reader.h" |
#include "base/json/json_writer.h" |
#include "base/strings/string_util.h" |
-#include "base/strings/stringprintf.h" |
#include "base/values.h" |
+void Log::AddEntry(Level level, const std::string& message) { |
+ AddEntryTimestamped(base::Time::Now(), level, message); |
+} |
+ |
namespace { |
-// Truncates the given string to 200 characters, adding an ellipsis if |
-// truncation was necessary. |
+IsVLogOnFunc g_is_vlog_on_func = NULL; |
+ |
void TruncateString(std::string* data) { |
const size_t kMaxLength = 200; |
if (data->length() > kMaxLength) { |
@@ -24,8 +25,7 @@ void TruncateString(std::string* data) { |
} |
} |
-// Truncates all strings contained in the given value. |
-void TruncateContainedStrings(base::Value* value) { |
+base::Value* TruncateContainedStrings(base::Value* value) { |
base::ListValue* list = NULL; |
base::DictionaryValue* dict = NULL; |
if (value->GetAsDictionary(&dict)) { |
@@ -55,80 +55,45 @@ void TruncateContainedStrings(base::Value* value) { |
} |
} |
} |
+ return value; |
} |
-std::string ConvertForDisplayInternal(const std::string& input) { |
- size_t left = input.find("{"); |
- size_t right = input.rfind("}"); |
- if (left == std::string::npos || right == std::string::npos) |
- return input.substr(0, 10 << 10); |
+} // namespace |
- scoped_ptr<base::Value> value( |
- base::JSONReader::Read(input.substr(left, right - left + 1))); |
- if (!value) |
- return input.substr(0, 10 << 10); |
- TruncateContainedStrings(value.get()); |
- std::string json; |
- base::JSONWriter::WriteWithOptions( |
- value.get(), base::JSONWriter::OPTIONS_PRETTY_PRINT, &json); |
- std::string display = input.substr(0, left) + json; |
- if (input.length() > right) |
- display += input.substr(right + 1); |
- return display; |
+void InitLogging(IsVLogOnFunc is_vlog_on_func) { |
+ g_is_vlog_on_func = is_vlog_on_func; |
} |
-// Pretty prints encapsulated JSON and truncates long strings for display. |
-std::string ConvertForDisplay(const std::string& input) { |
- std::string display = ConvertForDisplayInternal(input); |
- char remove_chars[] = {'\r', '\0'}; |
- RemoveChars(display, remove_chars, &display); |
- return display; |
+bool IsVLogOn(int vlog_level) { |
+ if (!g_is_vlog_on_func) |
+ return false; |
+ return g_is_vlog_on_func(vlog_level); |
} |
-} // namespace |
- |
-void Log::AddEntry(Level level, const std::string& message) { |
- AddEntryTimestamped(base::Time::Now(), level, message); |
+std::string PrettyPrintValue(const base::Value& value) { |
+ std::string json; |
+ base::JSONWriter::WriteWithOptions( |
+ &value, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json); |
+#if defined(OS_WIN) |
+ RemoveChars(json, "\r", &json); |
+#endif |
+ // Remove the trailing newline. |
+ if (json.length()) |
+ json.resize(json.length() - 1); |
+ return json; |
} |
-Logger::Logger() : min_log_level_(kLog), start_(base::Time::Now()) {} |
- |
-Logger::Logger(Level min_log_level) |
- : min_log_level_(min_log_level), start_(base::Time::Now()) {} |
- |
-Logger::~Logger() {} |
- |
-void Logger::AddEntryTimestamped(const base::Time& timestamp, |
- Level level, |
- const std::string& message) { |
- if (level < min_log_level_) |
- return; |
+std::string FormatValueForDisplay(const base::Value& value) { |
+ scoped_ptr<base::Value> truncated(TruncateContainedStrings(value.DeepCopy())); |
+ return PrettyPrintValue(*truncated); |
+} |
- const char* level_name = "UNKNOWN"; |
- switch (level) { |
- case kDebug: |
- level_name = "DEBUG"; |
- break; |
- case kLog: |
- level_name = "INFO"; |
- break; |
- case kWarning: |
- level_name = "WARNING"; |
- break; |
- case kError: |
- level_name = "ERROR"; |
- break; |
- default: |
- break; |
+std::string FormatJsonForDisplay(const std::string& json) { |
+ scoped_ptr<base::Value> value(base::JSONReader::Read(json)); |
+ if (!value) { |
+ std::string truncated = json; |
+ TruncateString(&truncated); |
+ return truncated; |
} |
- std::string entry = |
- base::StringPrintf("[%.3lf][%s]: %s", |
- base::TimeDelta(timestamp - start_).InSecondsF(), |
- level_name, |
- ConvertForDisplay(message).c_str()); |
- const char* format = "%s\n"; |
- if (entry[entry.length() - 1] == '\n') |
- format = "%s"; |
- fprintf(stderr, format, entry.c_str()); |
- fflush(stderr); |
+ return PrettyPrintValue(*TruncateContainedStrings(value.get())); |
} |