Chromium Code Reviews| Index: components/proximity_auth/webui/proximity_auth_webui_handler.cc |
| diff --git a/components/proximity_auth/webui/proximity_auth_webui_handler.cc b/components/proximity_auth/webui/proximity_auth_webui_handler.cc |
| index 3d81f66a32fca2222386e62b56fad9cc88ba2fe1..eb3e1824a08b7029f4c0162e7c844ab32587d44c 100644 |
| --- a/components/proximity_auth/webui/proximity_auth_webui_handler.cc |
| +++ b/components/proximity_auth/webui/proximity_auth_webui_handler.cc |
| @@ -4,15 +4,85 @@ |
| #include "components/proximity_auth/webui/proximity_auth_webui_handler.h" |
| +#include "base/bind.h" |
| +#include "base/i18n/time_formatting.h" |
| +#include "base/values.h" |
| +#include "content/public/browser/web_ui.h" |
| + |
| namespace proximity_auth { |
| +namespace { |
| + |
| +// Keys in the JSON representation of a log message. |
| +const char kLogMessageTextKey[] = "text"; |
| +const char kLogMessageTimeKey[] = "time"; |
| +const char kLogMessageFileKey[] = "file"; |
| +const char kLogMessageLineKey[] = "line"; |
| +const char kLogMessageSeverityKey[] = "severity"; |
| + |
| +// Converts |log_message| to a raw dictionary value used as a JSON argument to |
| +// JavaScript functions. The caller owns the returned value. |
|
Ilya Sherman
2015/05/13 00:49:57
Please return a scoped_ptr if passing ownership.
Tim Song
2015/05/13 02:24:37
Done.
|
| +base::DictionaryValue* LogMessageToDictionary( |
| + const LogBuffer::LogMessage& log_message) { |
| + base::DictionaryValue* dictionary = new base::DictionaryValue(); |
| + dictionary->SetString(kLogMessageTextKey, log_message.text); |
| + dictionary->SetString(kLogMessageTimeKey, |
| + base::TimeFormatTimeOfDay(log_message.time)); |
| + dictionary->SetString(kLogMessageFileKey, log_message.file); |
| + dictionary->SetInteger(kLogMessageLineKey, log_message.line); |
| + dictionary->SetInteger(kLogMessageSeverityKey, |
| + static_cast<int>(log_message.severity)); |
| + return dictionary; |
| +} |
| + |
| +} // namespace |
| + |
| ProximityAuthWebUIHandler::ProximityAuthWebUIHandler() { |
| + LogBuffer::GetInstance()->AddObserver(this); |
| } |
| ProximityAuthWebUIHandler::~ProximityAuthWebUIHandler() { |
| + LogBuffer::GetInstance()->RemoveObserver(this); |
| } |
| void ProximityAuthWebUIHandler::RegisterMessages() { |
| + web_ui()->RegisterMessageCallback( |
| + "clearLogBuffer", base::Bind(&ProximityAuthWebUIHandler::ClearLogBuffer, |
| + base::Unretained(this))); |
| + |
| + web_ui()->RegisterMessageCallback( |
| + "getLogMessages", base::Bind(&ProximityAuthWebUIHandler::GetLogMessages, |
| + base::Unretained(this))); |
| +} |
| + |
| +void ProximityAuthWebUIHandler::OnLogMessageAdded( |
| + const LogBuffer::LogMessage& log_message) { |
| + scoped_ptr<base::DictionaryValue> dictionary( |
| + LogMessageToDictionary(log_message)); |
| + web_ui()->CallJavascriptFunction("LogBufferInterface.onLogMessageAdded", |
| + *dictionary); |
| +} |
| + |
| +void ProximityAuthWebUIHandler::OnLogBufferCleared() { |
| + web_ui()->CallJavascriptFunction("LogBufferInterface.onLogBufferCleared"); |
| +} |
| + |
| +void ProximityAuthWebUIHandler::GetLogMessages(const base::ListValue* args) { |
| + base::ListValue json_logs; |
| + auto logs = LogBuffer::GetInstance()->logs(); |
| + std::transform(logs->begin(), logs->end(), json_logs.begin(), |
| + [](const LogBuffer::LogMessage& log) { |
| + return LogMessageToDictionary(log); |
| + }); |
| + |
| + web_ui()->CallJavascriptFunction("LogBufferInterface.onGotLogMessages", |
| + json_logs); |
| +} |
| + |
| +void ProximityAuthWebUIHandler::ClearLogBuffer(const base::ListValue* args) { |
| + // The OnLogBufferCleared() observer function will be called after the buffer |
| + // is cleared. |
| + LogBuffer::GetInstance()->Clear(); |
| } |
| } // namespace proximity_auth |