1*6777b538SAndroid Build Coastguard Worker // Copyright 2015 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef IPC_HANDLE_ATTACHMENT_WIN_H_ 6*6777b538SAndroid Build Coastguard Worker #define IPC_HANDLE_ATTACHMENT_WIN_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "base/win/scoped_handle.h" 11*6777b538SAndroid Build Coastguard Worker #include "ipc/handle_win.h" 12*6777b538SAndroid Build Coastguard Worker #include "ipc/ipc_message_attachment.h" 13*6777b538SAndroid Build Coastguard Worker #include "ipc/ipc_message_support_export.h" 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace IPC { 16*6777b538SAndroid Build Coastguard Worker namespace internal { 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker // This class represents a Windows HANDLE attached to a Chrome IPC message. 19*6777b538SAndroid Build Coastguard Worker class IPC_MESSAGE_SUPPORT_EXPORT HandleAttachmentWin 20*6777b538SAndroid Build Coastguard Worker : public MessageAttachment { 21*6777b538SAndroid Build Coastguard Worker public: 22*6777b538SAndroid Build Coastguard Worker // This constructor makes a copy of |handle| and takes ownership of the 23*6777b538SAndroid Build Coastguard Worker // result. Should only be called by the sender of a Chrome IPC message. 24*6777b538SAndroid Build Coastguard Worker explicit HandleAttachmentWin(const HANDLE& handle); 25*6777b538SAndroid Build Coastguard Worker 26*6777b538SAndroid Build Coastguard Worker enum FromWire { 27*6777b538SAndroid Build Coastguard Worker FROM_WIRE, 28*6777b538SAndroid Build Coastguard Worker }; 29*6777b538SAndroid Build Coastguard Worker // This constructor takes ownership of |handle|. Should only be called by the 30*6777b538SAndroid Build Coastguard Worker // receiver of a Chrome IPC message. 31*6777b538SAndroid Build Coastguard Worker HandleAttachmentWin(const HANDLE& handle, FromWire from_wire); 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker // MessageAttachment interface. 34*6777b538SAndroid Build Coastguard Worker Type GetType() const override; 35*6777b538SAndroid Build Coastguard Worker Take()36*6777b538SAndroid Build Coastguard Worker HANDLE Take() { return handle_.Take(); } 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker private: 39*6777b538SAndroid Build Coastguard Worker ~HandleAttachmentWin() override; 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker base::win::ScopedHandle handle_; 42*6777b538SAndroid Build Coastguard Worker }; 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Worker } // namespace internal 45*6777b538SAndroid Build Coastguard Worker } // namespace IPC 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard Worker #endif // IPC_HANDLE_ATTACHMENT_WIN_H_ 48