1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "remoting/host/win/session_action_executor.h"
6 
7 #include "base/bind.h"
8 #include "base/callback.h"
9 #include "base/location.h"
10 #include "base/macros.h"
11 #include "base/single_thread_task_runner.h"
12 #include "remoting/proto/action.pb.h"
13 
14 namespace remoting {
15 
16 using protocol::ActionRequest;
17 
SessionActionExecutor(scoped_refptr<base::SingleThreadTaskRunner> execute_action_task_runner,const base::RepeatingClosure & inject_sas,const base::RepeatingClosure & lock_workstation)18 SessionActionExecutor::SessionActionExecutor(
19     scoped_refptr<base::SingleThreadTaskRunner> execute_action_task_runner,
20     const base::RepeatingClosure& inject_sas,
21     const base::RepeatingClosure& lock_workstation)
22     : execute_action_task_runner_(execute_action_task_runner),
23       inject_sas_(inject_sas),
24       lock_workstation_(lock_workstation) {}
25 
26 SessionActionExecutor::~SessionActionExecutor() = default;
27 
ExecuteAction(const ActionRequest & request)28 void SessionActionExecutor::ExecuteAction(const ActionRequest& request) {
29   DCHECK(request.has_action());
30 
31   switch (request.action()) {
32     case ActionRequest::SEND_ATTENTION_SEQUENCE:
33       execute_action_task_runner_->PostTask(FROM_HERE, inject_sas_);
34       break;
35 
36     case ActionRequest::LOCK_WORKSTATION:
37       execute_action_task_runner_->PostTask(FROM_HERE, lock_workstation_);
38       break;
39 
40     default:
41       NOTREACHED() << "Unknown action type: " << request.action();
42   }
43 }
44 
45 }  // namespace remoting
46