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_export.h"
     14 
     15 namespace IPC {
     16 
     17 // Auxiliary data sent with |Message|. This can be a platform file descriptor
     18 // or a mojo |MessagePipe|. |GetType()| returns the type of the subclass.
     19 class IPC_EXPORT MessageAttachment : public base::Pickle::Attachment {
     20  public:
     21   enum Type {
     22     TYPE_PLATFORM_FILE,          // The instance is |PlatformFileAttachment|.
     23     TYPE_MOJO_HANDLE,            // The instance is |MojoHandleAttachment|.
     24     TYPE_BROKERABLE_ATTACHMENT,  // The instance is |BrokerableAttachment|.
     25   };
     26 
     27   virtual Type GetType() const = 0;
     28 
     29 #if defined(OS_POSIX)
     30   virtual base::PlatformFile TakePlatformFile() = 0;
     31 #endif  // OS_POSIX
     32 
     33  protected:
     34   friend class base::RefCountedThreadSafe<MessageAttachment>;
     35   MessageAttachment();
     36   ~MessageAttachment() override;
     37 
     38   DISALLOW_COPY_AND_ASSIGN(MessageAttachment);
     39 };
     40 
     41 }  // namespace IPC
     42 
     43 #endif  // IPC_IPC_MESSAGE_ATTACHMENT_H_
     44