summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorachuith@chromium.org <achuith@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-17 09:13:32 +0000
committerachuith@chromium.org <achuith@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-17 09:13:32 +0000
commitdd7e33ec3ac74ef2313f0b81cdb2a2750eae5a04 (patch)
tree17f961a8298efac75fcccba47837f4d870122222
parent482a0b54a4edbc389446d393a0362071704b3256 (diff)
downloadchromium_src-dd7e33ec3ac74ef2313f0b81cdb2a2750eae5a04.zip
chromium_src-dd7e33ec3ac74ef2313f0b81cdb2a2750eae5a04.tar.gz
chromium_src-dd7e33ec3ac74ef2313f0b81cdb2a2750eae5a04.tar.bz2
Disable touchpad settings for non-touchpad devices in 912
BUG=chromium-os:21361 TEST=System options on non-touchpad device should not show touchpad settings. Review URL: http://codereview.chromium.org/8564023 git-svn-id: svn://svn.chromium.org/chrome/branches/912/src@110474 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/system/touchpad_settings.cc38
-rw-r--r--chrome/browser/chromeos/system/touchpad_settings.h2
-rw-r--r--chrome/browser/resources/options/chromeos/system_options.html2
-rw-r--r--chrome/browser/resources/options/chromeos/system_options.js7
-rw-r--r--chrome/browser/ui/webui/options/chromeos/system_options_handler.cc21
-rw-r--r--chrome/browser/ui/webui/options/chromeos/system_options_handler.h8
6 files changed, 65 insertions, 13 deletions
diff --git a/chrome/browser/chromeos/system/touchpad_settings.cc b/chrome/browser/chromeos/system/touchpad_settings.cc
index 0257cc1..449bdc5 100644
--- a/chrome/browser/chromeos/system/touchpad_settings.cc
+++ b/chrome/browser/chromeos/system/touchpad_settings.cc
@@ -19,24 +19,40 @@ namespace system {
namespace touchpad_settings {
namespace {
const char* kTpControl = "/opt/google/touchpad/tpcontrol";
-} // namespace
+
+bool TPCtrlExists() {
+ return file_util::PathExists(FilePath(kTpControl));
+}
// Launches the tpcontrol command asynchronously, if it exists.
void LaunchTpControl(const std::vector<std::string>& argv) {
- if (!system::runtime_environment::IsRunningOnChromeOS()) {
- // Do nothing on Linux desktop, as the command does not exist.
+ if (!TPCtrlExists())
return;
- }
- if (!file_util::PathExists(FilePath(argv[0]))) {
- LOG(ERROR) << argv[0] << " not found";
- return;
- }
+ base::LaunchProcess(CommandLine(argv), base::LaunchOptions(), NULL);
+}
- base::LaunchOptions options;
- options.wait = false; // Launch asynchronously.
+} // namespace
+
+bool TouchpadExists() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+ static bool init = false;
+ static bool exists = false;
+
+ if (init)
+ return exists;
- base::LaunchProcess(CommandLine(argv), options, NULL);
+ init = true;
+ if (!TPCtrlExists())
+ return exists;
+
+ std::vector<std::string> argv;
+ argv.push_back(kTpControl);
+ argv.push_back("status");
+ std::string output;
+ // On devices with no touchpad, output is empty.
+ exists = base::GetAppOutput(CommandLine(argv), &output) && !output.empty();
+ return exists;
}
void SetSensitivity(int value) {
diff --git a/chrome/browser/chromeos/system/touchpad_settings.h b/chrome/browser/chromeos/system/touchpad_settings.h
index acb940d..ed8b310 100644
--- a/chrome/browser/chromeos/system/touchpad_settings.h
+++ b/chrome/browser/chromeos/system/touchpad_settings.h
@@ -10,6 +10,8 @@ namespace chromeos {
namespace system {
namespace touchpad_settings {
+bool TouchpadExists();
+
// Sets the touchpad sensitivity in range from 1 to 5.
void SetSensitivity(int value);
diff --git a/chrome/browser/resources/options/chromeos/system_options.html b/chrome/browser/resources/options/chromeos/system_options.html
index b870812..a6c2563 100644
--- a/chrome/browser/resources/options/chromeos/system_options.html
+++ b/chrome/browser/resources/options/chromeos/system_options.html
@@ -33,7 +33,7 @@
</div>
</section>
</if>
- <section>
+ <section id="touchpad-controls" hidden>
<h3 i18n-content="touchpad"></h3>
<div class="option-control-table">
<span class="option-name" i18n-content="sensitivity"></span>
diff --git a/chrome/browser/resources/options/chromeos/system_options.js b/chrome/browser/resources/options/chromeos/system_options.js
index 75c8777..0b4e9dd 100644
--- a/chrome/browser/resources/options/chromeos/system_options.js
+++ b/chrome/browser/resources/options/chromeos/system_options.js
@@ -163,6 +163,13 @@ cr.define('options', function() {
}, 2000);
}
+ /**
+ * Displays the Touchpad Controls section when we detect a touchpad.
+ */
+ SystemOptions.showTouchpadControls = function() {
+ $('touchpad-controls').hidden = false;
+ };
+
// Export
return {
SystemOptions: SystemOptions
diff --git a/chrome/browser/ui/webui/options/chromeos/system_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/system_options_handler.cc
index d465645..89f3e0f 100644
--- a/chrome/browser/ui/webui/options/chromeos/system_options_handler.cc
+++ b/chrome/browser/ui/webui/options/chromeos/system_options_handler.cc
@@ -20,6 +20,7 @@
#include "chrome/browser/chromeos/dbus/dbus_thread_manager.h"
#include "chrome/browser/chromeos/dbus/power_manager_client.h"
#include "chrome/browser/chromeos/language_preferences.h"
+#include "chrome/browser/chromeos/system/touchpad_settings.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
@@ -35,6 +36,14 @@
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
+namespace {
+
+void TouchpadExistsFileThread(bool* exists) {
+ *exists = chromeos::system::touchpad_settings::TouchpadExists();
+}
+
+}
+
SystemOptionsHandler::SystemOptionsHandler()
: chromeos::CrosOptionsPageUIHandler(
new chromeos::SystemSettingsProvider()) {
@@ -128,6 +137,18 @@ void SystemOptionsHandler::Initialize() {
web_ui_->CallJavascriptFunction(
"options.SystemOptions.showBluetoothSettings");
}
+
+ bool* exists = new bool;
+ BrowserThread::PostTaskAndReply(BrowserThread::FILE, FROM_HERE,
+ base::Bind(&TouchpadExistsFileThread, exists),
+ base::Bind(&SystemOptionsHandler::TouchpadExists, AsWeakPtr(), exists));
+}
+
+void SystemOptionsHandler::TouchpadExists(bool* exists) {
+ if (*exists)
+ web_ui_->CallJavascriptFunction(
+ "options.SystemOptions.showTouchpadControls");
+ delete exists;
}
void SystemOptionsHandler::RegisterMessages() {
diff --git a/chrome/browser/ui/webui/options/chromeos/system_options_handler.h b/chrome/browser/ui/webui/options/chromeos/system_options_handler.h
index 082e6df..ff2a76c 100644
--- a/chrome/browser/ui/webui/options/chromeos/system_options_handler.h
+++ b/chrome/browser/ui/webui/options/chromeos/system_options_handler.h
@@ -6,6 +6,7 @@
#define CHROME_BROWSER_UI_WEBUI_OPTIONS_CHROMEOS_SYSTEM_OPTIONS_HANDLER_H_
#pragma once
+#include "base/memory/weak_ptr.h"
#include "chrome/browser/ui/webui/options/chromeos/cros_options_page_ui_handler.h"
namespace base {
@@ -13,7 +14,9 @@ class DictionaryValue;
}
// ChromeOS system options page UI handler.
-class SystemOptionsHandler : public chromeos::CrosOptionsPageUIHandler {
+class SystemOptionsHandler
+ : public chromeos::CrosOptionsPageUIHandler,
+ public base::SupportsWeakPtr<SystemOptionsHandler> {
public:
SystemOptionsHandler();
virtual ~SystemOptionsHandler();
@@ -56,6 +59,9 @@ class SystemOptionsHandler : public chromeos::CrosOptionsPageUIHandler {
// Called when emulating ChromeOS from a desktop environment.
void GenerateFakeDeviceList();
+ // Callback for TouchpadHelper.
+ void TouchpadExists(bool* exists);
+
DISALLOW_COPY_AND_ASSIGN(SystemOptionsHandler);
};