Movatterモバイル変換


[0]ホーム

URL:


Google Git
Sign in
chromium /chromium /src /refs/heads/main /. /components /named_mojo_ipc_server
tree: 7b3855754ab0a7f0498ef66d97bf369a914d49d9 [path history][tgz]
  1. BUILD.gn
  2. connection_info.cc
  3. connection_info.h
  4. DEPS
  5. endpoint_options.cc
  6. endpoint_options.h
  7. fake_ipc_server.cc
  8. fake_ipc_server.h
  9. ipc_server.h
  10. named_mojo_ipc_server.cc
  11. named_mojo_ipc_server.h
  12. named_mojo_ipc_server_client_util.cc
  13. named_mojo_ipc_server_client_util.h
  14. named_mojo_ipc_server_unittest.cc
  15. named_mojo_ipc_test_util.cc
  16. named_mojo_ipc_test_util.h
  17. named_mojo_ipc_util.cc
  18. named_mojo_ipc_util.h
  19. named_mojo_message_pipe_server.cc
  20. named_mojo_message_pipe_server.h
  21. named_mojo_server_endpoint_connector.cc
  22. named_mojo_server_endpoint_connector.h
  23. named_mojo_server_endpoint_connector_linux.cc
  24. named_mojo_server_endpoint_connector_mac.cc
  25. named_mojo_server_endpoint_connector_unsupported.cc
  26. named_mojo_server_endpoint_connector_win.cc
  27. OWNERS
  28. README.md
  29. testing.test-mojom
components/named_mojo_ipc_server/README.md

This component provides a helper that allows a server process to handle multiple concurrent IPCs coming through aNamedPlatformChannel.

Example usage

In the server process:

staticconstuint64_t kMessagePipeId=0u;classMyInterfaceImpl:public mojom::MyInterface{voidStart(){    server_.set_disconnect_handler(        base::BindRepeating(&MyInterfaceImpl::OnDisconnected,this));    server_.StartServer();}voidOnDisconnected(){    LOG(INFO)<<"Receiver disconnected: "<< server_.current_receiver();}// mojom::MyInterface Implementation.voidDoWork() override{// Do something...// If you want to close the connection:    server_.Close(server_.current_receiver());}NamedMojoIpcServer<mojom::MyInterface> server_{{.server_name="my_server_name",.message_pipe_id= kMessagePipeId,// Other options when necessary...},this,      base::BindRepeating([](mojom::MyInterface* impl, base::ProcessId caller){// Verify the calling process, returning nullptr if unverified.return impl;// impl must outlive NamedMojoIpcServer.},this)};};

Note: In unittestsbase::test:TaskEnvironment should run until idle afterNamedMojoIpcServer is shutdown. Otherwise, memory may leak. E.g:

voidMyTestFixture::TearDown(){   ipc_server_->StopServer();   task_environment_.RunUntilIdle();}

In the client:

voidConnectToServer(){mojo::PlatformChannelEndpoint endpoint=      named_mojo_ipc_server::ConnectToServer(server_name);auto invitation= mojo::IncomingInvitation::Accept(std::move(endpoint));mojo::Remote<mojom::MyInterface> remote(  mojo::PendingRemote<mojom::MyInterface>(    invitation.ExtractMessagePipe(kMessagePipeId),0));}

Note that for compatibility with all supported platforms clients should usenamed_mojo_ipc_server::ConnectToServer instead ofmojo::NamedPlatformChannel::ConnectToServer. Some platforms require additional connection brokerage steps which are abstracted by the former.

On Windows, the server needs to have the following access rights on the client process:PROCESS_DUP_HANDLE | PROCESS_QUERY_INFORMATION.

It is possible to bind a different implementation of the interface to each connection by returning differentmojom::MyInterface* values rather thanthis. All implementations must outlive the NamedMojoIpcServer.


[8]ページ先頭

©2009-2025 Movatter.jp