Home | History | Annotate | Download | only in mojo
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef IPC_IPC_CHANNEL_MOJO_HOST_H_
      6 #define IPC_IPC_CHANNEL_MOJO_HOST_H_
      7 
      8 #include "base/memory/ref_counted.h"
      9 #include "base/memory/weak_ptr.h"
     10 #include "base/process/process_handle.h"
     11 #include "ipc/ipc_export.h"
     12 #include "ipc/mojo/ipc_channel_mojo.h"
     13 
     14 namespace base {
     15 class TaskRunner;
     16 }
     17 
     18 namespace IPC {
     19 
     20 // Through ChannelMojoHost, ChannelMojo gets extra information that
     21 // its client provides, including the child process's process handle. Every
     22 // server process that uses ChannelMojo must have a ChannelMojoHost
     23 // instance and call OnClientLaunched().
     24 class IPC_MOJO_EXPORT ChannelMojoHost {
     25  public:
     26   explicit ChannelMojoHost(scoped_refptr<base::TaskRunner> io_task_runner);
     27   ~ChannelMojoHost();
     28 
     29   void OnClientLaunched(base::ProcessHandle process);
     30   ChannelMojo::Delegate* channel_delegate() const;
     31 
     32  private:
     33   class ChannelDelegate;
     34 
     35   // Delegate talks to ChannelMojo, whch lives in IO thread, thus
     36   // the Delegate should also live and dies in the IO thread as well.
     37   class DelegateDeleter {
     38    public:
     39     void operator()(ChannelDelegate* ptr) const;
     40   };
     41 
     42   base::WeakPtrFactory<ChannelMojoHost> weak_factory_;
     43   const scoped_refptr<base::TaskRunner> io_task_runner_;
     44   scoped_ptr<ChannelDelegate, DelegateDeleter> channel_delegate_;
     45 
     46   DISALLOW_COPY_AND_ASSIGN(ChannelMojoHost);
     47 };
     48 
     49 }  // namespace IPC
     50 
     51 #endif  // IPC_IPC_CHANNEL_MOJO_HOST_H_
     52