1// Copyright (c) 2012 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#ifndef CHROME_BROWSER_EXTENSIONS_API_TERMINAL_TERMINAL_PRIVATE_API_H_
6#define CHROME_BROWSER_EXTENSIONS_API_TERMINAL_TERMINAL_PRIVATE_API_H_
7
8#include <string>
9
10#include "chrome/browser/extensions/chrome_extension_function.h"
11
12namespace extensions {
13// Base class for all terminalPrivate function classes. Main purpose is to run
14// permission check before calling actual function implementation.
15class TerminalPrivateFunction : public ChromeAsyncExtensionFunction {
16 public:
17  TerminalPrivateFunction();
18
19 protected:
20  virtual ~TerminalPrivateFunction();
21
22  // ExtensionFunction:
23  virtual bool RunAsync() OVERRIDE;
24
25  // Override with actual extension function implementation.
26  virtual bool RunTerminalFunction() = 0;
27};
28
29// Opens new terminal process. Returns the new process id.
30class TerminalPrivateOpenTerminalProcessFunction
31    : public TerminalPrivateFunction {
32 public:
33  DECLARE_EXTENSION_FUNCTION("terminalPrivate.openTerminalProcess",
34                             TERMINALPRIVATE_OPENTERMINALPROCESS)
35
36  TerminalPrivateOpenTerminalProcessFunction();
37
38 protected:
39  virtual ~TerminalPrivateOpenTerminalProcessFunction();
40
41  // TerminalPrivateFunction:
42  virtual bool RunTerminalFunction() OVERRIDE;
43
44 private:
45  void OpenOnFileThread();
46  void RespondOnUIThread(pid_t pid);
47
48  const char* command_;
49};
50
51// Send input to the terminal process specified by the pid sent as an argument.
52class TerminalPrivateSendInputFunction : public TerminalPrivateFunction {
53 public:
54  DECLARE_EXTENSION_FUNCTION("terminalPrivate.sendInput",
55                             TERMINALPRIVATE_SENDINPUT)
56
57 protected:
58  virtual ~TerminalPrivateSendInputFunction();
59
60  // TerminalPrivateFunction:
61  virtual bool RunTerminalFunction() OVERRIDE;
62
63 private:
64  void SendInputOnFileThread(pid_t pid, const std::string& input);
65  void RespondOnUIThread(bool success);
66};
67
68// Closes terminal process with given pid.
69class TerminalPrivateCloseTerminalProcessFunction
70    : public TerminalPrivateFunction {
71 public:
72  DECLARE_EXTENSION_FUNCTION("terminalPrivate.closeTerminalProcess",
73                             TERMINALPRIVATE_CLOSETERMINALPROCESS)
74
75 protected:
76  virtual ~TerminalPrivateCloseTerminalProcessFunction();
77
78  virtual bool RunTerminalFunction() OVERRIDE;
79
80 private:
81  void CloseOnFileThread(pid_t pid);
82  void RespondOnUIThread(bool success);
83};
84
85// Called by extension when terminal size changes.
86class TerminalPrivateOnTerminalResizeFunction : public TerminalPrivateFunction {
87 public:
88  DECLARE_EXTENSION_FUNCTION("terminalPrivate.onTerminalResize",
89                             TERMINALPRIVATE_ONTERMINALRESIZE)
90
91 protected:
92  virtual ~TerminalPrivateOnTerminalResizeFunction();
93
94  virtual bool RunTerminalFunction() OVERRIDE;
95
96 private:
97  void OnResizeOnFileThread(pid_t pid, int width, int height);
98  void RespondOnUIThread(bool success);
99};
100
101}  // namespace extensions
102
103#endif  // CHROME_BROWSER_EXTENSIONS_API_TERMINAL_TERMINAL_PRIVATE_API_H_
104