1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/webui/device_log_ui.h"
6
7 #include <memory>
8 #include <string>
9
10 #include "base/bind.h"
11 #include "base/bind_helpers.h"
12 #include "base/macros.h"
13 #include "base/values.h"
14 #include "chrome/browser/ui/webui/webui_util.h"
15 #include "chrome/common/url_constants.h"
16 #include "chrome/grit/dev_ui_browser_resources.h"
17 #include "chrome/grit/generated_resources.h"
18 #include "components/device_event_log/device_event_log.h"
19 #include "content/public/browser/web_contents.h"
20 #include "content/public/browser/web_ui.h"
21 #include "content/public/browser/web_ui_data_source.h"
22 #include "content/public/browser/web_ui_message_handler.h"
23 #include "ui/base/webui/web_ui_util.h"
24
25 namespace chromeos {
26
27 namespace {
28
29 class DeviceLogMessageHandler : public content::WebUIMessageHandler {
30 public:
DeviceLogMessageHandler()31 DeviceLogMessageHandler() {}
~DeviceLogMessageHandler()32 ~DeviceLogMessageHandler() override {}
33
34 // WebUIMessageHandler implementation.
RegisterMessages()35 void RegisterMessages() override {
36 web_ui()->RegisterMessageCallback(
37 "DeviceLog.getLog",
38 base::BindRepeating(&DeviceLogMessageHandler::GetLog,
39 base::Unretained(this)));
40 web_ui()->RegisterMessageCallback(
41 "DeviceLog.clearLog",
42 base::BindRepeating(&DeviceLogMessageHandler::ClearLog,
43 base::Unretained(this)));
44 }
45
46 private:
GetLog(const base::ListValue * value) const47 void GetLog(const base::ListValue* value) const {
48 base::Value data(device_event_log::GetAsString(
49 device_event_log::NEWEST_FIRST, "json", "",
50 device_event_log::LOG_LEVEL_DEBUG, 0));
51 web_ui()->CallJavascriptFunctionUnsafe("DeviceLogUI.getLogCallback", data);
52 }
53
ClearLog(const base::ListValue * value) const54 void ClearLog(const base::ListValue* value) const {
55 device_event_log::ClearAll();
56 }
57
58 DISALLOW_COPY_AND_ASSIGN(DeviceLogMessageHandler);
59 };
60
61 } // namespace
62
DeviceLogUI(content::WebUI * web_ui)63 DeviceLogUI::DeviceLogUI(content::WebUI* web_ui)
64 : content::WebUIController(web_ui) {
65 web_ui->AddMessageHandler(std::make_unique<DeviceLogMessageHandler>());
66
67 content::WebUIDataSource* html =
68 content::WebUIDataSource::Create(chrome::kChromeUIDeviceLogHost);
69
70 static constexpr webui::LocalizedString kStrings[] = {
71 {"titleText", IDS_DEVICE_LOG_TITLE},
72 {"autoRefreshText", IDS_DEVICE_AUTO_REFRESH},
73 {"logRefreshText", IDS_DEVICE_LOG_REFRESH},
74 {"logClearText", IDS_DEVICE_LOG_CLEAR},
75 {"logClearTypesText", IDS_DEVICE_LOG_CLEAR_TYPES},
76 {"logNoEntriesText", IDS_DEVICE_LOG_NO_ENTRIES},
77 {"logLevelLabel", IDS_DEVICE_LOG_LEVEL_LABEL},
78 {"logLevelErrorText", IDS_DEVICE_LOG_LEVEL_ERROR},
79 {"logLevelUserText", IDS_DEVICE_LOG_LEVEL_USER},
80 {"logLevelEventText", IDS_DEVICE_LOG_LEVEL_EVENT},
81 {"logLevelDebugText", IDS_DEVICE_LOG_LEVEL_DEBUG},
82 {"logLevelFileinfoText", IDS_DEVICE_LOG_FILEINFO},
83 {"logLevelTimeDetailText", IDS_DEVICE_LOG_TIME_DETAIL},
84 {"logTypeLoginText", IDS_DEVICE_LOG_TYPE_LOGIN},
85 {"logTypeNetworkText", IDS_DEVICE_LOG_TYPE_NETWORK},
86 {"logTypePowerText", IDS_DEVICE_LOG_TYPE_POWER},
87 {"logTypeBluetoothText", IDS_DEVICE_LOG_TYPE_BLUETOOTH},
88 {"logTypeUsbText", IDS_DEVICE_LOG_TYPE_USB},
89 {"logTypeHidText", IDS_DEVICE_LOG_TYPE_HID},
90 {"logTypePrinterText", IDS_DEVICE_LOG_TYPE_PRINTER},
91 {"logTypeFidoText", IDS_DEVICE_LOG_TYPE_FIDO},
92 {"logEntryFormat", IDS_DEVICE_LOG_ENTRY},
93 };
94 AddLocalizedStringsBulk(html, kStrings);
95
96 html->UseStringsJs();
97 html->AddResourcePath("device_log_ui.css", IDR_DEVICE_LOG_UI_CSS);
98 html->AddResourcePath("device_log_ui.js", IDR_DEVICE_LOG_UI_JS);
99 html->SetDefaultResource(IDR_DEVICE_LOG_UI_HTML);
100
101 content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
102 html);
103 }
104
~DeviceLogUI()105 DeviceLogUI::~DeviceLogUI() {
106 }
107
108 } // namespace chromeos
109