blob: 7f7137d87b20f7483fdcfbfc75406ed1beb1c5fc [file] [log] [blame]
Luis Hector Chavez645501c2016-12-28 10:56:26 -08001// 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
15namespace 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.
19class 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_