| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MOJO_SHELL_CHILD_PROCESS_H_ |
| #define MOJO_SHELL_CHILD_PROCESS_H_ |
| |
| #include "base/macros.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "mojo/embedder/scoped_platform_handle.h" |
| |
| namespace base { |
| class CommandLine; |
| } |
| |
| namespace mojo { |
| namespace shell { |
| |
| // A base class for child processes -- i.e., code that is actually run within |
| // the child process. (Instances are manufactured by |Create()|.) |
| class ChildProcess { |
| public: |
| enum Type { |
| TYPE_TEST, |
| // Hosts a single app (see app_child_process(_host).*). |
| TYPE_APP |
| }; |
| |
| virtual ~ChildProcess(); |
| |
| // Returns null if the command line doesn't indicate that this is a child |
| // process. |main()| should call this, and if it returns non-null it should |
| // call |Main()| (without a message loop on the current thread). |
| static scoped_ptr<ChildProcess> Create(const base::CommandLine& command_line); |
| |
| // To be implemented by subclasses. This is the "entrypoint" for a child |
| // process. Run with no message loop for the main thread. |
| virtual void Main() = 0; |
| |
| protected: |
| ChildProcess(); |
| |
| embedder::ScopedPlatformHandle* platform_channel() { |
| return &platform_channel_; |
| } |
| |
| private: |
| // Available in |Main()| (after a successful |Create()|). |
| embedder::ScopedPlatformHandle platform_channel_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ChildProcess); |
| }; |
| |
| } // namespace shell |
| } // namespace mojo |
| |
| #endif // MOJO_SHELL_CHILD_PROCESS_H_ |