Home | History | Annotate | Download | only in system_logs
      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 
     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 
     58 TouchLogSource::TouchLogSource() {
     59 }
     60 
     61 TouchLogSource::~TouchLogSource() {
     62 }
     63 
     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