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_WIN_H_ 6*6777b538SAndroid Build Coastguard Worker #define IPC_HANDLE_WIN_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <windows.h> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include <string> 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker #include "ipc/ipc_message_support_export.h" 13*6777b538SAndroid Build Coastguard Worker #include "ipc/ipc_param_traits.h" 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace base { 16*6777b538SAndroid Build Coastguard Worker class Pickle; 17*6777b538SAndroid Build Coastguard Worker class PickleIterator; 18*6777b538SAndroid Build Coastguard Worker } // namespace base 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker namespace IPC { 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker // HandleWin is a wrapper around a Windows HANDLE that can be transported 23*6777b538SAndroid Build Coastguard Worker // across Chrome IPC channels that support attachment brokering. The HANDLE will 24*6777b538SAndroid Build Coastguard Worker // be duplicated into the destination process. 25*6777b538SAndroid Build Coastguard Worker // 26*6777b538SAndroid Build Coastguard Worker // The ownership semantics for the underlying |handle_| are complex. See 27*6777b538SAndroid Build Coastguard Worker // ipc/mach_port_mac.h (the OSX analog of this class) for an extensive 28*6777b538SAndroid Build Coastguard Worker // discussion. 29*6777b538SAndroid Build Coastguard Worker class IPC_MESSAGE_SUPPORT_EXPORT HandleWin { 30*6777b538SAndroid Build Coastguard Worker public: 31*6777b538SAndroid Build Coastguard Worker // Default constructor makes an invalid HANDLE. 32*6777b538SAndroid Build Coastguard Worker HandleWin(); 33*6777b538SAndroid Build Coastguard Worker explicit HandleWin(const HANDLE& handle); 34*6777b538SAndroid Build Coastguard Worker get_handle()35*6777b538SAndroid Build Coastguard Worker HANDLE get_handle() const { return handle_; } set_handle(HANDLE handle)36*6777b538SAndroid Build Coastguard Worker void set_handle(HANDLE handle) { handle_ = handle; } 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker private: 39*6777b538SAndroid Build Coastguard Worker HANDLE handle_; 40*6777b538SAndroid Build Coastguard Worker }; 41*6777b538SAndroid Build Coastguard Worker 42*6777b538SAndroid Build Coastguard Worker template <> 43*6777b538SAndroid Build Coastguard Worker struct IPC_MESSAGE_SUPPORT_EXPORT ParamTraits<HandleWin> { 44*6777b538SAndroid Build Coastguard Worker typedef HandleWin param_type; 45*6777b538SAndroid Build Coastguard Worker static void Write(base::Pickle* m, const param_type& p); 46*6777b538SAndroid Build Coastguard Worker static bool Read(const base::Pickle* m, 47*6777b538SAndroid Build Coastguard Worker base::PickleIterator* iter, 48*6777b538SAndroid Build Coastguard Worker param_type* p); 49*6777b538SAndroid Build Coastguard Worker static void Log(const param_type& p, std::string* l); 50*6777b538SAndroid Build Coastguard Worker }; 51*6777b538SAndroid Build Coastguard Worker 52*6777b538SAndroid Build Coastguard Worker } // namespace IPC 53*6777b538SAndroid Build Coastguard Worker 54*6777b538SAndroid Build Coastguard Worker #endif // IPC_HANDLE_WIN_H_ 55