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
3 // found in the LICENSE file.
5 #include "ipc/handle_attachment_win.h"
12 HandleAttachmentWin::HandleAttachmentWin(const HANDLE
& handle
,
13 HandleWin::Permissions permissions
)
14 : handle_(handle
), permissions_(permissions
) {}
16 HandleAttachmentWin::HandleAttachmentWin(const WireFormat
& wire_format
)
17 : BrokerableAttachment(wire_format
.attachment_id
, false),
18 handle_(LongToHandle(wire_format
.handle
)),
19 permissions_(wire_format
.permissions
) {}
21 HandleAttachmentWin::HandleAttachmentWin(
22 const BrokerableAttachment::AttachmentId
& id
)
23 : BrokerableAttachment(id
, true),
24 handle_(INVALID_HANDLE_VALUE
),
25 permissions_(HandleWin::INVALID
) {}
27 HandleAttachmentWin::~HandleAttachmentWin() {
30 HandleAttachmentWin::BrokerableType
HandleAttachmentWin::GetBrokerableType()
35 void HandleAttachmentWin::PopulateWithAttachment(
36 const BrokerableAttachment
* attachment
) {
37 DCHECK(NeedsBrokering());
38 DCHECK(!attachment
->NeedsBrokering());
39 DCHECK(GetIdentifier() == attachment
->GetIdentifier());
40 DCHECK_EQ(GetBrokerableType(), attachment
->GetBrokerableType());
42 const HandleAttachmentWin
* handle_attachment
=
43 static_cast<const HandleAttachmentWin
*>(attachment
);
44 handle_
= handle_attachment
->handle_
;
45 SetNeedsBrokering(false);
48 HandleAttachmentWin::WireFormat
HandleAttachmentWin::GetWireFormat(
49 const base::ProcessId
& destination
) const {
51 format
.handle
= HandleToLong(handle_
);
52 format
.attachment_id
= GetIdentifier();
53 format
.destination_process
= destination
;
54 format
.permissions
= permissions_
;
58 } // namespace internal