Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6030)

Unified Diff: chrome/browser/chromeos/system/input_device_settings.cc

Issue 397063004: wip: not complete. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/system/input_device_settings.cc
diff --git a/chrome/browser/chromeos/system/input_device_settings.cc b/chrome/browser/chromeos/system/input_device_settings.cc
deleted file mode 100644
index 744c92634aa75f4ec8f318a9b90b82085ac53252..0000000000000000000000000000000000000000
--- a/chrome/browser/chromeos/system/input_device_settings.cc
+++ /dev/null
@@ -1,430 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/chromeos/system/input_device_settings.h"
-
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/file_util.h"
-#include "base/files/file_path.h"
-#include "base/memory/ref_counted.h"
-#include "base/message_loop/message_loop.h"
-#include "base/process/kill.h"
-#include "base/process/launch.h"
-#include "base/process/process_handle.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "base/sys_info.h"
-#include "base/task_runner.h"
-#include "base/threading/sequenced_worker_pool.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
-#include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h"
-#include "chrome/common/pref_names.h"
-#include "chromeos/system/statistics_provider.h"
-#include "content/public/browser/browser_thread.h"
-
-namespace chromeos {
-namespace system {
-
-namespace {
-
-InputDeviceSettings* g_instance_;
-InputDeviceSettings* g_test_instance_;
-
-const char kDeviceTypeTouchpad[] = "touchpad";
-const char kDeviceTypeMouse[] = "mouse";
-const char kInputControl[] = "/opt/google/input/inputcontrol";
-
-typedef base::RefCountedData<bool> RefCountedBool;
-
-bool ScriptExists(const std::string& script) {
- DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
- return base::PathExists(base::FilePath(script));
-}
-
-// Executes the input control script asynchronously, if it exists.
-void ExecuteScriptOnFileThread(const std::vector<std::string>& argv) {
- DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
- DCHECK(!argv.empty());
- const std::string& script(argv[0]);
-
- // Script must exist on device.
- DCHECK(!base::SysInfo::IsRunningOnChromeOS() || ScriptExists(script));
-
- if (!ScriptExists(script))
- return;
-
- base::ProcessHandle handle;
- base::LaunchProcess(CommandLine(argv), base::LaunchOptions(), &handle);
- base::EnsureProcessGetsReaped(handle);
-}
-
-void ExecuteScript(const std::vector<std::string>& argv) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-
- if (argv.size() == 1)
- return;
-
- VLOG(1) << "About to launch: \""
- << CommandLine(argv).GetCommandLineString() << "\"";
-
- // Control scripts can take long enough to cause SIGART during shutdown
- // (http://crbug.com/261426). Run the blocking pool task with
- // CONTINUE_ON_SHUTDOWN so it won't be joined when Chrome shuts down.
- base::SequencedWorkerPool* pool = content::BrowserThread::GetBlockingPool();
- scoped_refptr<base::TaskRunner> runner =
- pool->GetTaskRunnerWithShutdownBehavior(
- base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN);
- runner->PostTask(FROM_HERE, base::Bind(&ExecuteScriptOnFileThread, argv));
-}
-
-void AddSensitivityArguments(const char* device_type, int value,
- std::vector<std::string>* argv) {
- DCHECK(value >= kMinPointerSensitivity && value <= kMaxPointerSensitivity);
- argv->push_back(base::StringPrintf("--%s_sensitivity=%d",
- device_type, value));
-}
-
-void AddTPControlArguments(const char* control,
- bool enabled,
- std::vector<std::string>* argv) {
- argv->push_back(base::StringPrintf("--%s=%d", control, enabled ? 1 : 0));
-}
-
-void DeviceExistsBlockingPool(const char* device_type,
- scoped_refptr<RefCountedBool> exists) {
- DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
- exists->data = false;
- if (!ScriptExists(kInputControl))
- return;
-
- std::vector<std::string> argv;
- argv.push_back(kInputControl);
- argv.push_back(base::StringPrintf("--type=%s", device_type));
- argv.push_back("--list");
- std::string output;
- // Output is empty if the device is not found.
- exists->data = base::GetAppOutput(CommandLine(argv), &output) &&
- !output.empty();
- DVLOG(1) << "DeviceExistsBlockingPool:" << device_type << "=" << exists->data;
-}
-
-void RunCallbackUIThread(
- scoped_refptr<RefCountedBool> exists,
- const InputDeviceSettings::DeviceExistsCallback& callback) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
- DVLOG(1) << "RunCallbackUIThread " << exists->data;
- callback.Run(exists->data);
-}
-
-void DeviceExists(const char* script,
- const InputDeviceSettings::DeviceExistsCallback& callback) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-
- // One or both of the control scripts can apparently hang during shutdown
- // (http://crbug.com/255546). Run the blocking pool task with
- // CONTINUE_ON_SHUTDOWN so it won't be joined when Chrome shuts down.
- scoped_refptr<RefCountedBool> exists(new RefCountedBool(false));
- base::SequencedWorkerPool* pool = content::BrowserThread::GetBlockingPool();
- scoped_refptr<base::TaskRunner> runner =
- pool->GetTaskRunnerWithShutdownBehavior(
- base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN);
- runner->PostTaskAndReply(FROM_HERE,
- base::Bind(&DeviceExistsBlockingPool, script, exists),
- base::Bind(&RunCallbackUIThread, exists, callback));
-}
-
-class InputDeviceSettingsImpl : public InputDeviceSettings {
- public:
- InputDeviceSettingsImpl();
-
- private:
- // Overridden from InputDeviceSettings.
- virtual void TouchpadExists(const DeviceExistsCallback& callback) OVERRIDE;
- virtual void UpdateTouchpadSettings(const TouchpadSettings& settings)
- OVERRIDE;
- virtual void SetTouchpadSensitivity(int value) OVERRIDE;
- virtual void SetTapToClick(bool enabled) OVERRIDE;
- virtual void SetThreeFingerClick(bool enabled) OVERRIDE;
- virtual void SetTapDragging(bool enabled) OVERRIDE;
- virtual void SetNaturalScroll(bool enabled) OVERRIDE;
- virtual void MouseExists(const DeviceExistsCallback& callback) OVERRIDE;
- virtual void UpdateMouseSettings(const MouseSettings& update) OVERRIDE;
- virtual void SetMouseSensitivity(int value) OVERRIDE;
- virtual void SetPrimaryButtonRight(bool right) OVERRIDE;
- virtual bool ForceKeyboardDrivenUINavigation() OVERRIDE;
- virtual void ReapplyTouchpadSettings() OVERRIDE;
- virtual void ReapplyMouseSettings() OVERRIDE;
-
- private:
- TouchpadSettings current_touchpad_settings_;
- MouseSettings current_mouse_settings_;
-
- DISALLOW_COPY_AND_ASSIGN(InputDeviceSettingsImpl);
-};
-
-InputDeviceSettingsImpl::InputDeviceSettingsImpl() {}
-
-void InputDeviceSettingsImpl::TouchpadExists(
- const DeviceExistsCallback& callback) {
- DeviceExists(kDeviceTypeTouchpad, callback);
-}
-
-void InputDeviceSettingsImpl::UpdateTouchpadSettings(
- const TouchpadSettings& settings) {
- std::vector<std::string> argv;
- if (current_touchpad_settings_.Update(settings, &argv))
- ExecuteScript(argv);
-}
-
-void InputDeviceSettingsImpl::SetTouchpadSensitivity(int value) {
- TouchpadSettings settings;
- settings.SetSensitivity(value);
- UpdateTouchpadSettings(settings);
-}
-
-void InputDeviceSettingsImpl::SetNaturalScroll(bool enabled) {
- TouchpadSettings settings;
- settings.SetNaturalScroll(enabled);
- UpdateTouchpadSettings(settings);
-}
-
-void InputDeviceSettingsImpl::SetTapToClick(bool enabled) {
- TouchpadSettings settings;
- settings.SetTapToClick(enabled);
- UpdateTouchpadSettings(settings);
-}
-
-void InputDeviceSettingsImpl::SetThreeFingerClick(bool enabled) {
- // For Alex/ZGB.
- TouchpadSettings settings;
- settings.SetThreeFingerClick(enabled);
- UpdateTouchpadSettings(settings);
-}
-
-void InputDeviceSettingsImpl::SetTapDragging(bool enabled) {
- TouchpadSettings settings;
- settings.SetTapDragging(enabled);
- UpdateTouchpadSettings(settings);
-}
-
-void InputDeviceSettingsImpl::MouseExists(
- const DeviceExistsCallback& callback) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
- DeviceExists(kDeviceTypeMouse, callback);
-}
-
-void InputDeviceSettingsImpl::UpdateMouseSettings(const MouseSettings& update) {
- std::vector<std::string> argv;
- if (current_mouse_settings_.Update(update, &argv))
- ExecuteScript(argv);
-}
-
-void InputDeviceSettingsImpl::SetMouseSensitivity(int value) {
- MouseSettings settings;
- settings.SetSensitivity(value);
- UpdateMouseSettings(settings);
-}
-
-void InputDeviceSettingsImpl::SetPrimaryButtonRight(bool right) {
- MouseSettings settings;
- settings.SetPrimaryButtonRight(right);
- UpdateMouseSettings(settings);
-}
-
-bool InputDeviceSettingsImpl::ForceKeyboardDrivenUINavigation() {
- policy::BrowserPolicyConnectorChromeOS* connector =
- g_browser_process->platform_part()->browser_policy_connector_chromeos();
- if (!connector)
- return false;
-
- policy::DeviceCloudPolicyManagerChromeOS* policy_manager =
- connector->GetDeviceCloudPolicyManager();
- if (!policy_manager)
- return false;
-
- if (policy_manager->IsRemoraRequisition() ||
- policy_manager->IsSharkRequisition()) {
- return true;
- }
-
- bool keyboard_driven = false;
- if (chromeos::system::StatisticsProvider::GetInstance()->GetMachineFlag(
- kOemKeyboardDrivenOobeKey, &keyboard_driven)) {
- return keyboard_driven;
- }
-
- return false;
-}
-
-void InputDeviceSettingsImpl::ReapplyTouchpadSettings() {
- TouchpadSettings settings = current_touchpad_settings_;
- current_touchpad_settings_ = TouchpadSettings();
- UpdateTouchpadSettings(settings);
-}
-
-void InputDeviceSettingsImpl::ReapplyMouseSettings() {
- MouseSettings settings = current_mouse_settings_;
- current_mouse_settings_ = MouseSettings();
- UpdateMouseSettings(settings);
-}
-
-} // namespace
-
-TouchpadSettings::TouchpadSettings() {}
-
-TouchpadSettings& TouchpadSettings::operator=(const TouchpadSettings& other) {
- if (&other != this) {
- sensitivity_ = other.sensitivity_;
- tap_to_click_ = other.tap_to_click_;
- three_finger_click_ = other.three_finger_click_;
- tap_dragging_ = other.tap_dragging_;
- natural_scroll_ = other.natural_scroll_;
- }
- return *this;
-}
-
-void TouchpadSettings::SetSensitivity(int value) {
- sensitivity_.Set(value);
-}
-
-int TouchpadSettings::GetSensitivity() const {
- return sensitivity_.value();
-}
-
-void TouchpadSettings::SetTapToClick(bool enabled) {
- tap_to_click_.Set(enabled);
-}
-
-bool TouchpadSettings::GetTapToClick() const {
- return tap_to_click_.value();
-}
-
-void TouchpadSettings::SetNaturalScroll(bool enabled) {
- natural_scroll_.Set(enabled);
-}
-
-bool TouchpadSettings::GetNaturalScroll() const {
- return natural_scroll_.value();
-}
-
-void TouchpadSettings::SetThreeFingerClick(bool enabled) {
- three_finger_click_.Set(enabled);
-}
-
-bool TouchpadSettings::GetThreeFingerClick() const {
- return three_finger_click_.value();
-}
-
-void TouchpadSettings::SetTapDragging(bool enabled) {
- tap_dragging_.Set(enabled);
-}
-
-bool TouchpadSettings::GetTapDragging() const {
- return tap_dragging_.value();
-}
-
-bool TouchpadSettings::Update(const TouchpadSettings& settings,
- std::vector<std::string>* argv) {
- if (argv)
- argv->push_back(kInputControl);
- bool updated = false;
- if (sensitivity_.Update(settings.sensitivity_)) {
- updated = true;
- if (argv)
- AddSensitivityArguments(kDeviceTypeTouchpad, sensitivity_.value(), argv);
- }
- if (tap_to_click_.Update(settings.tap_to_click_)) {
- updated = true;
- if (argv)
- AddTPControlArguments("tapclick", tap_to_click_.value(), argv);
- }
- if (three_finger_click_.Update(settings.three_finger_click_)) {
- updated = true;
- if (argv)
- AddTPControlArguments("t5r2_three_finger_click",
- three_finger_click_.value(),
- argv);
- }
- if (tap_dragging_.Update(settings.tap_dragging_)) {
- updated = true;
- if (argv)
- AddTPControlArguments("tapdrag", tap_dragging_.value(), argv);
- }
- if (natural_scroll_.Update(settings.natural_scroll_)) {
- updated = true;
- if (argv)
- AddTPControlArguments("australian_scrolling", natural_scroll_.value(),
- argv);
- }
- return updated;
-}
-
-MouseSettings::MouseSettings() {}
-
-MouseSettings& MouseSettings::operator=(const MouseSettings& other) {
- if (&other != this) {
- sensitivity_ = other.sensitivity_;
- primary_button_right_ = other.primary_button_right_;
- }
- return *this;
-}
-
-void MouseSettings::SetSensitivity(int value) {
- sensitivity_.Set(value);
-}
-
-int MouseSettings::GetSensitivity() const {
- return sensitivity_.value();
-}
-
-void MouseSettings::SetPrimaryButtonRight(bool right) {
- primary_button_right_.Set(right);
-}
-
-bool MouseSettings::GetPrimaryButtonRight() const {
- return primary_button_right_.value();
-}
-
-bool MouseSettings::Update(const MouseSettings& settings,
- std::vector<std::string>* argv) {
- if (argv)
- argv->push_back(kInputControl);
- bool updated = false;
- if (sensitivity_.Update(settings.sensitivity_)) {
- updated = true;
- if (argv)
- AddSensitivityArguments(kDeviceTypeMouse, sensitivity_.value(), argv);
- }
- if (primary_button_right_.Update(settings.primary_button_right_)) {
- updated = true;
- if (argv) {
- AddTPControlArguments("mouse_swap_lr", primary_button_right_.value(),
- argv);
- }
- }
- return updated;
-}
-
-// static
-InputDeviceSettings* InputDeviceSettings::Get() {
- if (g_test_instance_)
- return g_test_instance_;
- if (!g_instance_)
- g_instance_ = new InputDeviceSettingsImpl;
- return g_instance_;
-}
-
-// static
-void InputDeviceSettings::SetSettingsForTesting(
- InputDeviceSettings* test_settings) {
- if (g_test_instance_ == test_settings)
- return;
- delete g_test_instance_;
- g_test_instance_ = test_settings;
-}
-
-} // namespace system
-} // namespace chromeos
« no previous file with comments | « chrome/browser/chromeos/system/input_device_settings.h ('k') | chrome/browser/chromeos/system/input_device_settings_ozone.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698