Home | History | Annotate | Download | only in terminal
      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 
     12 namespace extensions {
     13 // Base class for all terminalPrivate function classes. Main purpose is to run
     14 // permission check before calling actual function implementation.
     15 class 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.
     30 class 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.
     52 class 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.
     69 class 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.
     86 class 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