Home | History | Annotate | Download | only in ipc
      1 // Copyright (c) 2015 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_MESSAGE_ATTACHMENT_H_
      6 #define IPC_IPC_MESSAGE_ATTACHMENT_H_
      7 
      8 #include "base/files/file.h"
      9 #include "base/macros.h"
     10 #include "base/memory/ref_counted.h"
     11 #include "base/pickle.h"
     12 #include "build/build_config.h"
     13 #include "ipc/ipc_message_support_export.h"
     14 #include "mojo/public/cpp/system/handle.h"
     15 
     16 namespace IPC {
     17 
     18 // Auxiliary data sent with |Message|. This can be a platform file descriptor
     19 // or a mojo |MessagePipe|. |GetType()| returns the type of the subclass.
     20 class IPC_MESSAGE_SUPPORT_EXPORT MessageAttachment
     21     : public base::Pickle::Attachment {
     22  public:
     23   enum class Type {
     24     MOJO_HANDLE,
     25     PLATFORM_FILE,
     26     WIN_HANDLE,
     27     MACH_PORT,
     28     FUCHSIA_HANDLE,
     29   };
     30 
     31   static scoped_refptr<MessageAttachment> CreateFromMojoHandle(
     32       mojo::ScopedHandle handle,
     33       Type type);
     34 
     35   virtual Type GetType() const = 0;
     36 
     37   mojo::ScopedHandle TakeMojoHandle();
     38 
     39  protected:
     40   friend class base::RefCountedThreadSafe<MessageAttachment>;
     41   MessageAttachment();
     42   ~MessageAttachment() override;
     43 
     44   DISALLOW_COPY_AND_ASSIGN(MessageAttachment);
     45 };
     46 
     47 }  // namespace IPC
     48 
     49 #endif  // IPC_IPC_MESSAGE_ATTACHMENT_H_
     50