| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef MOJO_EDK_EMBEDDER_EMBEDDER_H_ | 5 #ifndef MOJO_EDK_EMBEDDER_EMBEDDER_H_ |
| 6 #define MOJO_EDK_EMBEDDER_EMBEDDER_H_ | 6 #define MOJO_EDK_EMBEDDER_EMBEDDER_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 | 9 |
| 10 #include <memory> | 10 #include <memory> |
| 11 #include <string> | 11 #include <string> |
| 12 | 12 |
| 13 #include "base/callback.h" | 13 #include "base/callback.h" |
| 14 #include "base/command_line.h" | 14 #include "base/command_line.h" |
| 15 #include "base/memory/ref_counted.h" | 15 #include "base/memory/ref_counted.h" |
| 16 #include "base/memory/shared_memory_handle.h" | 16 #include "base/memory/shared_memory_handle.h" |
| 17 #include "base/process/process_handle.h" | 17 #include "base/process/process_handle.h" |
| 18 #include "base/task_runner.h" | 18 #include "base/task_runner.h" |
| 19 #include "mojo/edk/embedder/pending_process_connection.h" |
| 19 #include "mojo/edk/embedder/scoped_platform_handle.h" | 20 #include "mojo/edk/embedder/scoped_platform_handle.h" |
| 20 #include "mojo/edk/system/system_impl_export.h" | 21 #include "mojo/edk/system/system_impl_export.h" |
| 21 #include "mojo/public/cpp/system/message_pipe.h" | 22 #include "mojo/public/cpp/system/message_pipe.h" |
| 22 | 23 |
| 23 namespace base { | 24 namespace base { |
| 24 class PortProvider; | 25 class PortProvider; |
| 25 } | 26 } |
| 26 | 27 |
| 27 namespace mojo { | 28 namespace mojo { |
| 28 namespace edk { | 29 namespace edk { |
| 29 | 30 |
| 30 using ProcessErrorCallback = base::Callback<void(const std::string& error)>; | |
| 31 | |
| 32 // Basic configuration/initialization ------------------------------------------ | 31 // Basic configuration/initialization ------------------------------------------ |
| 33 | 32 |
| 34 // |Init()| sets up the basic Mojo system environment, making the |Mojo...()| | 33 // |Init()| sets up the basic Mojo system environment, making the |Mojo...()| |
| 35 // functions available and functional. This is never shut down (except in tests | 34 // functions available and functional. This is never shut down (except in tests |
| 36 // -- see test_embedder.h). | 35 // -- see test_embedder.h). |
| 37 | 36 |
| 38 // Allows changing the default max message size. Must be called before Init. | 37 // Allows changing the default max message size. Must be called before Init. |
| 39 MOJO_SYSTEM_IMPL_EXPORT void SetMaxMessageSize(size_t bytes); | 38 MOJO_SYSTEM_IMPL_EXPORT void SetMaxMessageSize(size_t bytes); |
| 40 | 39 |
| 41 // Called in the parent process for each child process that is launched. | 40 // Should be called as early as possible in a child process with a handle to the |
| 42 MOJO_SYSTEM_IMPL_EXPORT void ChildProcessLaunched( | 41 // other end of a pipe provided in the parent to |
| 43 base::ProcessHandle child_process, | 42 // PendingProcessConnection::Connect. |
| 44 ScopedPlatformHandle server_pipe, | |
| 45 const std::string& child_token); | |
| 46 | |
| 47 // Called in the parent process for each child process that is launched. | |
| 48 // |process_error_callback| is called if the system becomes aware of some | |
| 49 // internal error related to this process, e.g., if the system is notified of a | |
| 50 // bad message from this process via the |MojoNotifyBadMessage()| API. | |
| 51 MOJO_SYSTEM_IMPL_EXPORT void ChildProcessLaunched( | |
| 52 base::ProcessHandle child_process, | |
| 53 ScopedPlatformHandle server_pipe, | |
| 54 const std::string& child_token, | |
| 55 const ProcessErrorCallback& error_callback); | |
| 56 | |
| 57 // Called in the parent process when a child process fails to launch. | |
| 58 // Exactly one of ChildProcessLaunched() or ChildProcessLaunchFailed() must be | |
| 59 // called per child process launch attempt. | |
| 60 MOJO_SYSTEM_IMPL_EXPORT void ChildProcessLaunchFailed( | |
| 61 const std::string& child_token); | |
| 62 | |
| 63 // Should be called as early as possible in the child process with the handle | |
| 64 // that the parent received from ChildProcessLaunched. | |
| 65 MOJO_SYSTEM_IMPL_EXPORT void SetParentPipeHandle(ScopedPlatformHandle pipe); | 43 MOJO_SYSTEM_IMPL_EXPORT void SetParentPipeHandle(ScopedPlatformHandle pipe); |
| 66 | 44 |
| 67 // Same as above but extracts the pipe handle from the command line. See | 45 // Same as above but extracts the pipe handle from the command line. See |
| 68 // PlatformChannelPair for details. | 46 // PlatformChannelPair for details. |
| 69 MOJO_SYSTEM_IMPL_EXPORT void SetParentPipeHandleFromCommandLine(); | 47 MOJO_SYSTEM_IMPL_EXPORT void SetParentPipeHandleFromCommandLine(); |
| 70 | 48 |
| 71 // Called to connect to a peer process. This should be called only if there | 49 // Called to connect to a peer process. This should be called only if there |
| 72 // is no common ancestor for the processes involved within this mojo system. | 50 // is no common ancestor for the processes involved within this mojo system. |
| 73 // Both processes must call this function, each passing one end of a platform | 51 // Both processes must call this function, each passing one end of a platform |
| 74 // channel. This returns one end of a message pipe to each process. | 52 // channel. This returns one end of a message pipe to each process. |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 // arbitrary thread. | 141 // arbitrary thread. |
| 164 MOJO_SYSTEM_IMPL_EXPORT void ShutdownIPCSupport(const base::Closure& callback); | 142 MOJO_SYSTEM_IMPL_EXPORT void ShutdownIPCSupport(const base::Closure& callback); |
| 165 | 143 |
| 166 #if defined(OS_MACOSX) && !defined(OS_IOS) | 144 #if defined(OS_MACOSX) && !defined(OS_IOS) |
| 167 // Set the |base::PortProvider| for this process. Can be called on any thread, | 145 // Set the |base::PortProvider| for this process. Can be called on any thread, |
| 168 // but must be set in the root process before any Mach ports can be transferred. | 146 // but must be set in the root process before any Mach ports can be transferred. |
| 169 MOJO_SYSTEM_IMPL_EXPORT void SetMachPortProvider( | 147 MOJO_SYSTEM_IMPL_EXPORT void SetMachPortProvider( |
| 170 base::PortProvider* port_provider); | 148 base::PortProvider* port_provider); |
| 171 #endif | 149 #endif |
| 172 | 150 |
| 173 // Creates a message pipe from a token. A child embedder must also have this | 151 // Creates a message pipe from a token in a child process. This token must have |
| 174 // token and call CreateChildMessagePipe() with it in order for the pipe to get | 152 // been acquired by a corresponding call to |
| 175 // connected. |child_token| identifies the child process and should be the same | 153 // PendingProcessConnection::CreateMessagePipe. |
| 176 // as the token passed into ChildProcessLaunched(). If they are different, the | |
| 177 // returned message pipe will not be signaled of peer closure if the child | |
| 178 // process dies before establishing connection to the pipe. | |
| 179 MOJO_SYSTEM_IMPL_EXPORT ScopedMessagePipeHandle | |
| 180 CreateParentMessagePipe(const std::string& token, | |
| 181 const std::string& child_token); | |
| 182 | |
| 183 // Creates a message pipe from a token in a child process. The parent must also | |
| 184 // have this token and call CreateParentMessagePipe() with it in order for the | |
| 185 // pipe to get connected. | |
| 186 MOJO_SYSTEM_IMPL_EXPORT ScopedMessagePipeHandle | 154 MOJO_SYSTEM_IMPL_EXPORT ScopedMessagePipeHandle |
| 187 CreateChildMessagePipe(const std::string& token); | 155 CreateChildMessagePipe(const std::string& token); |
| 188 | 156 |
| 189 // Generates a random ASCII token string for use with CreateParentMessagePipe() | 157 // Generates a random ASCII token string for use with various APIs that expect |
| 190 // and CreateChildMessagePipe() above. The generated token is suitably random so | 158 // a globally unique token string. |
| 191 // as to not have to worry about collisions with other generated tokens. | |
| 192 MOJO_SYSTEM_IMPL_EXPORT std::string GenerateRandomToken(); | 159 MOJO_SYSTEM_IMPL_EXPORT std::string GenerateRandomToken(); |
| 193 | 160 |
| 194 // Sets system properties that can be read by the MojoGetProperty() API. See the | 161 // Sets system properties that can be read by the MojoGetProperty() API. See the |
| 195 // documentation for MojoPropertyType for supported property types and their | 162 // documentation for MojoPropertyType for supported property types and their |
| 196 // corresponding value type. | 163 // corresponding value type. |
| 197 // | 164 // |
| 198 // Default property values: | 165 // Default property values: |
| 199 // |MOJO_PROPERTY_TYPE_SYNC_CALL_ALLOWED| - true | 166 // |MOJO_PROPERTY_TYPE_SYNC_CALL_ALLOWED| - true |
| 200 MOJO_SYSTEM_IMPL_EXPORT MojoResult SetProperty(MojoPropertyType type, | 167 MOJO_SYSTEM_IMPL_EXPORT MojoResult SetProperty(MojoPropertyType type, |
| 201 const void* value); | 168 const void* value); |
| 202 | 169 |
| 203 } // namespace edk | 170 } // namespace edk |
| 204 } // namespace mojo | 171 } // namespace mojo |
| 205 | 172 |
| 206 #endif // MOJO_EDK_EMBEDDER_EMBEDDER_H_ | 173 #endif // MOJO_EDK_EMBEDDER_EMBEDDER_H_ |
| OLD | NEW |