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