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 15 using content::BrowserThread; 16 17 namespace { 18 19 const char kHUDLogDataKey[] = "hud_log"; 20 21 void GetTouchLogs(chromeos::SystemLogsResponse* response) { 22 scoped_ptr<DictionaryValue> dictionary = 23 ash::internal::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 56 namespace chromeos { 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 chromeos 76