touch_log_source.cc revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
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 "chrome/browser/feedback/feedback_util.h"
13#include "content/public/browser/browser_thread.h"
14
15using content::BrowserThread;
16
17namespace {
18
19const char kHUDLogDataKey[] = "hud_log";
20
21void 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/touchpad/tpcontrol"));
35  command.AppendArg("status");
36  commands.push_back(std::make_pair("hack-33025-touchpad", command));
37
38  command =
39    CommandLine(base::FilePath("/opt/google/touchpad/generate_userfeedback"));
40  commands.push_back(std::make_pair("hack-33025-touchpad_activity", command));
41
42  command = CommandLine(
43      base::FilePath("/opt/google/touchscreen/touchscreen_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
56namespace system_logs {
57
58TouchLogSource::TouchLogSource() {
59}
60
61TouchLogSource::~TouchLogSource() {
62}
63
64void 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