Index: remoting/host/session_event_executor_win.cc |
diff --git a/remoting/host/session_event_executor_win.cc b/remoting/host/session_event_executor_win.cc |
deleted file mode 100644 |
index 9fc28349e8e53ec3c7e671b40bce609d6e931c5d..0000000000000000000000000000000000000000 |
--- a/remoting/host/session_event_executor_win.cc |
+++ /dev/null |
@@ -1,155 +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 "remoting/host/session_event_executor_win.h" |
- |
-#include <string> |
- |
-#include "base/bind.h" |
-#include "base/compiler_specific.h" |
-#include "base/location.h" |
-#include "base/single_thread_task_runner.h" |
-#include "base/win/windows_version.h" |
-#include "remoting/host/sas_injector.h" |
-#include "remoting/host/win/desktop.h" |
-#include "remoting/proto/event.pb.h" |
- |
-namespace { |
- |
-const uint32 kUsbLeftControl = 0x0700e0; |
-const uint32 kUsbRightControl = 0x0700e4; |
-const uint32 kUsbLeftAlt = 0x0700e2; |
-const uint32 kUsbRightAlt = 0x0700e6; |
-const uint32 kUsbDelete = 0x07004c; |
- |
-bool CheckCtrlAndAltArePressed(const std::set<uint32>& pressed_keys) { |
- size_t ctrl_keys = pressed_keys.count(kUsbLeftControl) + |
- pressed_keys.count(kUsbRightControl); |
- size_t alt_keys = pressed_keys.count(kUsbLeftAlt) + |
- pressed_keys.count(kUsbRightAlt); |
- return ctrl_keys != 0 && alt_keys != 0 && |
- (ctrl_keys + alt_keys == pressed_keys.size()); |
-} |
- |
-} // namespace |
- |
-namespace remoting { |
- |
-using protocol::ClipboardEvent; |
-using protocol::MouseEvent; |
-using protocol::KeyEvent; |
- |
-SessionEventExecutorWin::SessionEventExecutorWin( |
- scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
- scoped_ptr<EventExecutor> nested_executor) |
- : nested_executor_(nested_executor.Pass()), |
- task_runner_(main_task_runner), |
- ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)), |
- weak_ptr_(weak_ptr_factory_.GetWeakPtr()) { |
- // Let |weak_ptr_| be used on the |task_runner_| thread. |
- // |weak_ptr_| and |weak_ptr_factory_| share a ThreadChecker, so the |
- // following line affects both of them. |
- weak_ptr_factory_.DetachFromThread(); |
-} |
- |
-SessionEventExecutorWin::~SessionEventExecutorWin() { |
-} |
- |
-void SessionEventExecutorWin::OnSessionStarted( |
- scoped_ptr<protocol::ClipboardStub> client_clipboard) { |
- if (!task_runner_->BelongsToCurrentThread()) { |
- task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&SessionEventExecutorWin::OnSessionStarted, |
- weak_ptr_, base::Passed(&client_clipboard))); |
- return; |
- } |
- |
- nested_executor_->OnSessionStarted(client_clipboard.Pass()); |
-} |
- |
-void SessionEventExecutorWin::OnSessionFinished() { |
- if (!task_runner_->BelongsToCurrentThread()) { |
- task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&SessionEventExecutorWin::OnSessionFinished, |
- weak_ptr_)); |
- return; |
- } |
- |
- nested_executor_->OnSessionFinished(); |
-} |
- |
-void SessionEventExecutorWin::InjectClipboardEvent( |
- const ClipboardEvent& event) { |
- if (!task_runner_->BelongsToCurrentThread()) { |
- task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&SessionEventExecutorWin::InjectClipboardEvent, |
- weak_ptr_, event)); |
- return; |
- } |
- |
- nested_executor_->InjectClipboardEvent(event); |
-} |
- |
-void SessionEventExecutorWin::InjectKeyEvent(const KeyEvent& event) { |
- if (!task_runner_->BelongsToCurrentThread()) { |
- task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&SessionEventExecutorWin::InjectKeyEvent, |
- weak_ptr_, event)); |
- return; |
- } |
- |
- // HostEventDispatcher should drop events lacking the pressed field. |
- DCHECK(event.has_pressed()); |
- |
- if (event.has_usb_keycode()) { |
- if (event.pressed()) { |
- // Simulate secure attention sequence if Ctrl-Alt-Del was just pressed. |
- if (event.usb_keycode() == kUsbDelete && |
- CheckCtrlAndAltArePressed(pressed_keys_)) { |
- VLOG(3) << "Sending Secure Attention Sequence to console"; |
- |
- if (sas_injector_.get() == NULL) |
- sas_injector_ = SasInjector::Create(); |
- sas_injector_->InjectSas(); |
- } |
- |
- pressed_keys_.insert(event.usb_keycode()); |
- } else { |
- pressed_keys_.erase(event.usb_keycode()); |
- } |
- } |
- |
- SwitchToInputDesktop(); |
- nested_executor_->InjectKeyEvent(event); |
-} |
- |
-void SessionEventExecutorWin::InjectMouseEvent(const MouseEvent& event) { |
- if (!task_runner_->BelongsToCurrentThread()) { |
- task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&SessionEventExecutorWin::InjectMouseEvent, |
- weak_ptr_, event)); |
- return; |
- } |
- |
- SwitchToInputDesktop(); |
- nested_executor_->InjectMouseEvent(event); |
-} |
- |
-void SessionEventExecutorWin::SwitchToInputDesktop() { |
- // Switch to the desktop receiving user input if different from the current |
- // one. |
- scoped_ptr<Desktop> input_desktop = Desktop::GetInputDesktop(); |
- if (input_desktop.get() != NULL && !desktop_.IsSame(*input_desktop)) { |
- // If SetThreadDesktop() fails, the thread is still assigned a desktop. |
- // So we can continue capture screen bits, just from a diffected desktop. |
- desktop_.SetThreadDesktop(input_desktop.Pass()); |
- } |
-} |
- |
-} // namespace remoting |