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

Unified Diff: remoting/host/win/session_input_injector.cc

Issue 1930473003: Adding support for Win+L key combo in Windows host. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing CR feedback Created 4 years, 8 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
« no previous file with comments | « remoting/host/win/session_input_injector.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/host/win/session_input_injector.cc
diff --git a/remoting/host/win/session_input_injector.cc b/remoting/host/win/session_input_injector.cc
index 9b685186c1f90c2c4d06d2dc90227c1412dbc7a4..0acccbe49d28ecca301613f8deb3617b3c8c187f 100644
--- a/remoting/host/win/session_input_injector.cc
+++ b/remoting/host/win/session_input_injector.cc
@@ -34,6 +34,12 @@ bool CheckCtrlAndAltArePressed(const std::set<ui::DomCode>& pressed_keys) {
(ctrl_keys + alt_keys == pressed_keys.size());
}
+bool IsWinKeyPressed(const std::set<ui::DomCode>& pressed_keys) {
+ size_t win_keys = pressed_keys.count(ui::DomCode::META_LEFT) +
+ pressed_keys.count(ui::DomCode::META_RIGHT);
+ return win_keys != 0 && win_keys == pressed_keys.size();
+}
+
} // namespace
namespace remoting {
@@ -51,7 +57,8 @@ class SessionInputInjectorWin::Core
Core(scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
std::unique_ptr<InputInjector> nested_executor,
scoped_refptr<base::SingleThreadTaskRunner> inject_sas_task_runner,
- const base::Closure& inject_sas);
+ const base::Closure& inject_sas,
+ const base::Closure& lock_workstation);
// InputInjector implementation.
void Start(std::unique_ptr<ClipboardStub> client_clipboard) override;
@@ -78,17 +85,20 @@ class SessionInputInjectorWin::Core
// Pointer to the next event executor.
std::unique_ptr<InputInjector> nested_executor_;
- scoped_refptr<base::SingleThreadTaskRunner> inject_sas_task_runner_;
+ scoped_refptr<base::SingleThreadTaskRunner> execute_action_task_runner_;
webrtc::ScopedThreadDesktop desktop_;
// Used to inject Secure Attention Sequence on Vista+.
base::Closure inject_sas_;
+ // Used to lock the current session on non-home SKUs of Windows.
+ base::Closure lock_workstation_;
+
// Used to inject Secure Attention Sequence on XP.
std::unique_ptr<SasInjector> sas_injector_;
- // Keys currently pressed by the client, used to detect Ctrl-Alt-Del.
+ // Keys currently pressed by the client, used to detect key sequences.
std::set<ui::DomCode> pressed_keys_;
DISALLOW_COPY_AND_ASSIGN(Core);
@@ -97,12 +107,14 @@ class SessionInputInjectorWin::Core
SessionInputInjectorWin::Core::Core(
scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
std::unique_ptr<InputInjector> nested_executor,
- scoped_refptr<base::SingleThreadTaskRunner> inject_sas_task_runner,
- const base::Closure& inject_sas)
+ scoped_refptr<base::SingleThreadTaskRunner> execute_action_task_runner,
+ const base::Closure& inject_sas,
+ const base::Closure& lock_workstation)
: input_task_runner_(input_task_runner),
nested_executor_(std::move(nested_executor)),
- inject_sas_task_runner_(inject_sas_task_runner),
- inject_sas_(inject_sas) {}
+ execute_action_task_runner_(execute_action_task_runner),
+ inject_sas_(inject_sas),
+ lock_workstation_(lock_workstation) {}
void SessionInputInjectorWin::Core::Start(
std::unique_ptr<protocol::ClipboardStub> client_clipboard) {
@@ -151,8 +163,11 @@ void SessionInputInjectorWin::Core::InjectKeyEvent(const KeyEvent& event) {
if (!sas_injector_->InjectSas())
LOG(ERROR) << "Failed to inject Secure Attention Sequence.";
} else {
- inject_sas_task_runner_->PostTask(FROM_HERE, inject_sas_);
+ execute_action_task_runner_->PostTask(FROM_HERE, inject_sas_);
}
+ } else if (dom_code == ui::DomCode::US_L &&
+ IsWinKeyPressed(pressed_keys_)) {
+ execute_action_task_runner_->PostTask(FROM_HERE, lock_workstation_);
}
pressed_keys_.insert(dom_code);
@@ -217,9 +232,10 @@ SessionInputInjectorWin::SessionInputInjectorWin(
scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
std::unique_ptr<InputInjector> nested_executor,
scoped_refptr<base::SingleThreadTaskRunner> inject_sas_task_runner,
- const base::Closure& inject_sas) {
+ const base::Closure& inject_sas,
+ const base::Closure& lock_workstation) {
core_ = new Core(input_task_runner, std::move(nested_executor),
- inject_sas_task_runner, inject_sas);
+ inject_sas_task_runner, inject_sas, lock_workstation);
}
SessionInputInjectorWin::~SessionInputInjectorWin() {
« no previous file with comments | « remoting/host/win/session_input_injector.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698