Index: components/arc/arc_bridge_service.cc |
diff --git a/components/arc/arc_bridge_service.cc b/components/arc/arc_bridge_service.cc |
index 2bb34aca41a679786bbf0abbeee5696692d734aa..00e163268d9cbd5c2fa12fc8943bdb3dd1da6b38 100644 |
--- a/components/arc/arc_bridge_service.cc |
+++ b/components/arc/arc_bridge_service.cc |
@@ -129,16 +129,39 @@ void ArcBridgeService::RemoveObserver(Observer* observer) { |
observer_list_.RemoveObserver(observer); |
} |
-bool ArcBridgeService::RegisterInputDevice(const std::string& name, |
- const std::string& device_type, |
- base::ScopedFD fd) { |
- DCHECK(ipc_task_runner_->RunsTasksOnCurrentThread()); |
- if (state_ != State::READY) { |
- LOG(ERROR) << "Called RegisterInputDevice when the service is not ready"; |
- return false; |
+base::ScopedFD ArcBridgeService::CreateBridgeInputDevice( |
+ const std::string& name, |
+ const std::string& device_type) { |
+ // Create file descriptor pair for communication |
+ int fd[2]; |
+ if (pipe(fd) < 0) { |
+ PLOG(ERROR) << "Cannot create pipe"; |
Luis Héctor Chávez
2015/11/17 17:51:53
At this point the operation cannot continue. retur
denniskempin
2015/11/19 19:22:09
Done.
|
+ } |
+ |
+ // The read end is sent to the instance |
+ ipc_channel_->Send(new ArcInstanceMsg_RegisterInputDevice( |
Luis Héctor Chávez
2015/11/17 17:51:53
What if this fails (returns false)? Shouldn't you
denniskempin
2015/11/19 19:22:09
Done. I'm checking for errors and return -1 as a f
|
+ name, device_type, base::FileDescriptor(fd[0], true))); |
+ |
+ // return the write end |
+ return base::ScopedFD(fd[1]); |
+} |
+ |
+void ArcBridgeService::SetupBridgeInputDevices() { |
+ bridge_devices_.push_back(new TouchscreenBridgeInputDevice( |
+ CreateBridgeInputDevice("ChromeOS Touchscreen", "touchscreen"))); |
+ bridge_devices_.push_back(new MouseBridgeInputDevice( |
+ CreateBridgeInputDevice("ChromeOS Mouse", "mouse"))); |
+ bridge_devices_.push_back(new KeyboardBridgeInputDevice( |
+ CreateBridgeInputDevice("ChromeOS Keyboard", "keyboard"))); |
+} |
+ |
+void ArcBridgeService::SendInputEvent(ui::Event* event) { |
+ if (bridge_devices_.empty()) { |
denniskempin
2015/11/16 18:55:49
NOTE: this is temporary until we have a CL that al
denniskempin
2015/11/19 19:22:09
removed.
|
+ SetupBridgeInputDevices(); |
+ } |
+ for (BridgeInputDevice* device : bridge_devices_) { |
+ device->OnEvent(event); |
} |
- return ipc_channel_->Send(new ArcInstanceMsg_RegisterInputDevice( |
- name, device_type, base::FileDescriptor(fd.Pass()))); |
} |
void ArcBridgeService::SocketConnect(const base::FilePath& socket_path) { |
@@ -168,7 +191,6 @@ void ArcBridgeService::SocketConnectAfterEnsureParentDirectory( |
StopInstance(); |
return; |
} |
- |
if (!Connect(IPC::ChannelHandle(socket_path.value()), |
IPC::Channel::MODE_OPEN_NAMED_SERVER)) { |
LOG(ERROR) << "Error connecting to " << socket_path.value(); |