| OLD | NEW | 
|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #ifndef IPC_BROKERABLE_ATTACHMENT_H_ | 5 #ifndef IPC_BROKERABLE_ATTACHMENT_H_ | 
| 6 #define IPC_BROKERABLE_ATTACHMENT_H_ | 6 #define IPC_BROKERABLE_ATTACHMENT_H_ | 
| 7 | 7 | 
| 8 #include <stddef.h> | 8 #include <stddef.h> | 
| 9 #include <stdint.h> | 9 #include <stdint.h> | 
| 10 | 10 | 
| 11 #include <algorithm> | 11 #include <algorithm> | 
| 12 | 12 | 
| 13 #include "base/macros.h" | 13 #include "base/macros.h" | 
| 14 #include "build/build_config.h" | 14 #include "build/build_config.h" | 
| 15 #include "ipc/ipc_export.h" | 15 #include "ipc/ipc_export.h" | 
| 16 #include "ipc/ipc_message_attachment.h" | 16 #include "ipc/ipc_message_attachment.h" | 
| 17 | 17 | 
| 18 namespace IPC { | 18 namespace IPC { | 
| 19 | 19 | 
| 20 // This subclass of MessageAttachment requires an AttachmentBroker to be | 20 // This subclass of MessageAttachment requires an AttachmentBroker to be | 
| 21 // attached to a Chrome IPC message. | 21 // attached to a Chrome IPC message. | 
| 22 class IPC_EXPORT BrokerableAttachment : public MessageAttachment { | 22 class IPC_EXPORT BrokerableAttachment : public MessageAttachment { | 
| 23  public: | 23  public: | 
| 24   static const size_t kNonceSize = 16; |  | 
| 25   // An id uniquely identifies an attachment sent via a broker. |  | 
| 26   struct IPC_EXPORT AttachmentId { |  | 
| 27     uint8_t nonce[kNonceSize]; |  | 
| 28 |  | 
| 29     // Generates an AttachmentId with an unguessable, random nonce. |  | 
| 30     static AttachmentId CreateIdWithRandomNonce(); |  | 
| 31 |  | 
| 32     // Creates an AttachmentId with a zeroed nonce. This should only be used by |  | 
| 33     // the IPC translation system, which requires that classes have a default |  | 
| 34     // constructor. |  | 
| 35     AttachmentId(); |  | 
| 36 |  | 
| 37     // Constructs an AttachmentId from a buffer. |  | 
| 38     AttachmentId(const char* start_address, size_t size); |  | 
| 39 |  | 
| 40     // Writes the nonce into a buffer. |  | 
| 41     void SerializeToBuffer(char* start_address, size_t size); |  | 
| 42 |  | 
| 43     bool operator==(const AttachmentId& rhs) const { |  | 
| 44       return std::equal(nonce, nonce + kNonceSize, rhs.nonce); |  | 
| 45     } |  | 
| 46 |  | 
| 47     bool operator<(const AttachmentId& rhs) const { |  | 
| 48       return std::lexicographical_compare(nonce, nonce + kNonceSize, rhs.nonce, |  | 
| 49                                           rhs.nonce + kNonceSize); |  | 
| 50     } |  | 
| 51   }; |  | 
| 52 |  | 
| 53   enum BrokerableType { | 24   enum BrokerableType { | 
| 54     PLACEHOLDER, | 25     PLACEHOLDER, | 
| 55     WIN_HANDLE, | 26     WIN_HANDLE, | 
| 56     MACH_PORT, | 27     MACH_PORT, | 
| 57   }; | 28   }; | 
| 58 | 29 | 
| 59   // The identifier is unique across all Chrome processes. |  | 
| 60   AttachmentId GetIdentifier() const; |  | 
| 61 |  | 
| 62   // Whether the attachment still needs information from the broker before it | 30   // Whether the attachment still needs information from the broker before it | 
| 63   // can be used. | 31   // can be used. | 
| 64   bool NeedsBrokering() const; | 32   bool NeedsBrokering() const; | 
| 65 | 33 | 
| 66   // Returns TYPE_BROKERABLE_ATTACHMENT | 34   // Returns TYPE_BROKERABLE_ATTACHMENT | 
| 67   Type GetType() const override; | 35   Type GetType() const override; | 
| 68 | 36 | 
| 69   virtual BrokerableType GetBrokerableType() const = 0; | 37   virtual BrokerableType GetBrokerableType() const = 0; | 
| 70 | 38 | 
| 71 // MessageAttachment override. | 39 // MessageAttachment override. | 
| 72 #if defined(OS_POSIX) | 40 #if defined(OS_POSIX) | 
| 73   base::PlatformFile TakePlatformFile() override; | 41   base::PlatformFile TakePlatformFile() override; | 
| 74 #endif  // OS_POSIX | 42 #endif  // OS_POSIX | 
| 75 | 43 | 
| 76  protected: | 44  protected: | 
| 77   BrokerableAttachment(); | 45   BrokerableAttachment(); | 
| 78   BrokerableAttachment(const AttachmentId& id); |  | 
| 79   ~BrokerableAttachment() override; | 46   ~BrokerableAttachment() override; | 
| 80 | 47 | 
| 81  private: | 48  private: | 
| 82   // This member uniquely identifies a BrokerableAttachment across all Chrome |  | 
| 83   // processes. |  | 
| 84   const AttachmentId id_; |  | 
| 85 |  | 
| 86   DISALLOW_COPY_AND_ASSIGN(BrokerableAttachment); | 49   DISALLOW_COPY_AND_ASSIGN(BrokerableAttachment); | 
| 87 }; | 50 }; | 
| 88 | 51 | 
| 89 }  // namespace IPC | 52 }  // namespace IPC | 
| 90 | 53 | 
| 91 #endif  // IPC_BROKERABLE_ATTACHMENT_H_ | 54 #endif  // IPC_BROKERABLE_ATTACHMENT_H_ | 
| OLD | NEW | 
|---|