• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2013 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/chromeos/system_logs/touch_log_source.h"
6 
7 #include "ash/touch/touch_hud_debug.h"
8 #include "base/bind.h"
9 #include "base/command_line.h"
10 #include "base/json/json_string_value_serializer.h"
11 #include "base/process/launch.h"
12 #include "components/feedback/feedback_util.h"
13 #include "content/public/browser/browser_thread.h"
14 
15 using content::BrowserThread;
16 
17 namespace {
18 
19 const char kHUDLogDataKey[] = "hud_log";
20 
GetTouchLogs(system_logs::SystemLogsResponse * response)21 void GetTouchLogs(system_logs::SystemLogsResponse* response) {
22   scoped_ptr<base::DictionaryValue> dictionary =
23       ash::TouchHudDebug::GetAllAsDictionary();
24   if (!dictionary->empty()) {
25     std::string touch_log;
26     JSONStringValueSerializer json(&touch_log);
27     json.set_pretty_print(true);
28     if (json.Serialize(*dictionary) && !touch_log.empty())
29       (*response)[kHUDLogDataKey] = touch_log;
30   }
31 
32   std::vector<std::pair<std::string, CommandLine> > commands;
33   CommandLine command =
34     CommandLine(base::FilePath("/opt/google/input/inputcontrol"));
35   command.AppendArg("--status");
36   commands.push_back(std::make_pair("hack-33025-touchpad", command));
37 
38   command =
39     CommandLine(base::FilePath("/opt/google/input/cmt_feedback"));
40   commands.push_back(std::make_pair("hack-33025-touchpad_activity", command));
41 
42   command = CommandLine(
43       base::FilePath("/opt/google/input/evdev_feedback"));
44   commands.push_back(
45       std::make_pair("hack-33025-touchscreen_activity", command));
46 
47   for (size_t i = 0; i < commands.size(); ++i) {
48     std::string output;
49     base::GetAppOutput(commands[i].second, &output);
50     (*response)[commands[i].first] = output;
51   }
52 }
53 
54 }  // namespace
55 
56 namespace system_logs {
57 
TouchLogSource()58 TouchLogSource::TouchLogSource() {
59 }
60 
~TouchLogSource()61 TouchLogSource::~TouchLogSource() {
62 }
63 
Fetch(const SysLogsSourceCallback & callback)64 void TouchLogSource::Fetch(const SysLogsSourceCallback& callback) {
65   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
66   DCHECK(!callback.is_null());
67 
68   SystemLogsResponse* response = new SystemLogsResponse;
69   BrowserThread::PostBlockingPoolTaskAndReply(
70       FROM_HERE,
71       base::Bind(&GetTouchLogs, response),
72       base::Bind(callback, base::Owned(response)));
73 }
74 
75 }  // namespace system_logs
76