| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/system/input_device_settings.h" | 5 #include "chrome/browser/chromeos/system/input_device_settings.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 if (!ScriptExists(script)) | 55 if (!ScriptExists(script)) |
| 56 return; | 56 return; |
| 57 | 57 |
| 58 base::Process process = | 58 base::Process process = |
| 59 base::LaunchProcess(base::CommandLine(argv), base::LaunchOptions()); | 59 base::LaunchProcess(base::CommandLine(argv), base::LaunchOptions()); |
| 60 if (process.IsValid()) | 60 if (process.IsValid()) |
| 61 base::EnsureProcessGetsReaped(process.Pid()); | 61 base::EnsureProcessGetsReaped(process.Pid()); |
| 62 } | 62 } |
| 63 | 63 |
| 64 void ExecuteScript(const std::vector<std::string>& argv) { | 64 void ExecuteScript(const std::vector<std::string>& argv) { |
| 65 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 65 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 66 | 66 |
| 67 if (argv.size() == 1) | 67 if (argv.size() == 1) |
| 68 return; | 68 return; |
| 69 | 69 |
| 70 VLOG(1) << "About to launch: \"" | 70 VLOG(1) << "About to launch: \"" |
| 71 << base::CommandLine(argv).GetCommandLineString() << "\""; | 71 << base::CommandLine(argv).GetCommandLineString() << "\""; |
| 72 | 72 |
| 73 // Control scripts can take long enough to cause SIGART during shutdown | 73 // Control scripts can take long enough to cause SIGART during shutdown |
| 74 // (http://crbug.com/261426). Run the blocking pool task with | 74 // (http://crbug.com/261426). Run the blocking pool task with |
| 75 // CONTINUE_ON_SHUTDOWN so it won't be joined when Chrome shuts down. | 75 // CONTINUE_ON_SHUTDOWN so it won't be joined when Chrome shuts down. |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 std::string output; | 108 std::string output; |
| 109 // Output is empty if the device is not found. | 109 // Output is empty if the device is not found. |
| 110 exists->data = | 110 exists->data = |
| 111 base::GetAppOutput(base::CommandLine(argv), &output) && !output.empty(); | 111 base::GetAppOutput(base::CommandLine(argv), &output) && !output.empty(); |
| 112 DVLOG(1) << "DeviceExistsBlockingPool:" << device_type << "=" << exists->data; | 112 DVLOG(1) << "DeviceExistsBlockingPool:" << device_type << "=" << exists->data; |
| 113 } | 113 } |
| 114 | 114 |
| 115 void RunCallbackUIThread( | 115 void RunCallbackUIThread( |
| 116 scoped_refptr<RefCountedBool> exists, | 116 scoped_refptr<RefCountedBool> exists, |
| 117 const InputDeviceSettings::DeviceExistsCallback& callback) { | 117 const InputDeviceSettings::DeviceExistsCallback& callback) { |
| 118 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 118 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 119 DVLOG(1) << "RunCallbackUIThread " << exists->data; | 119 DVLOG(1) << "RunCallbackUIThread " << exists->data; |
| 120 callback.Run(exists->data); | 120 callback.Run(exists->data); |
| 121 } | 121 } |
| 122 | 122 |
| 123 void DeviceExists(const char* script, | 123 void DeviceExists(const char* script, |
| 124 const InputDeviceSettings::DeviceExistsCallback& callback) { | 124 const InputDeviceSettings::DeviceExistsCallback& callback) { |
| 125 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 125 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 126 | 126 |
| 127 // One or both of the control scripts can apparently hang during shutdown | 127 // One or both of the control scripts can apparently hang during shutdown |
| 128 // (http://crbug.com/255546). Run the blocking pool task with | 128 // (http://crbug.com/255546). Run the blocking pool task with |
| 129 // CONTINUE_ON_SHUTDOWN so it won't be joined when Chrome shuts down. | 129 // CONTINUE_ON_SHUTDOWN so it won't be joined when Chrome shuts down. |
| 130 scoped_refptr<RefCountedBool> exists(new RefCountedBool(false)); | 130 scoped_refptr<RefCountedBool> exists(new RefCountedBool(false)); |
| 131 base::SequencedWorkerPool* pool = content::BrowserThread::GetBlockingPool(); | 131 base::SequencedWorkerPool* pool = content::BrowserThread::GetBlockingPool(); |
| 132 scoped_refptr<base::TaskRunner> runner = | 132 scoped_refptr<base::TaskRunner> runner = |
| 133 pool->GetTaskRunnerWithShutdownBehavior( | 133 pool->GetTaskRunnerWithShutdownBehavior( |
| 134 base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN); | 134 base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN); |
| 135 runner->PostTaskAndReply( | 135 runner->PostTaskAndReply( |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 void InputDeviceSettings::SetSettingsForTesting( | 315 void InputDeviceSettings::SetSettingsForTesting( |
| 316 InputDeviceSettings* test_settings) { | 316 InputDeviceSettings* test_settings) { |
| 317 if (g_test_instance == test_settings) | 317 if (g_test_instance == test_settings) |
| 318 return; | 318 return; |
| 319 delete g_test_instance; | 319 delete g_test_instance; |
| 320 g_test_instance = test_settings; | 320 g_test_instance = test_settings; |
| 321 } | 321 } |
| 322 | 322 |
| 323 } // namespace system | 323 } // namespace system |
| 324 } // namespace chromeos | 324 } // namespace chromeos |
| OLD | NEW |