Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(269)

Side by Side Diff: ipc/ipc_channel_mojo.cc

Issue 2504063002: Revert of Remove IPC::BrokerableAttachment. (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ipc/handle_win.cc ('k') | ipc/ipc_channel_mojo_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 #include "ipc/ipc_channel_mojo.h" 5 #include "ipc/ipc_channel_mojo.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 119
120 base::ScopedFD TakeOrDupFile(internal::PlatformFileAttachment* attachment) { 120 base::ScopedFD TakeOrDupFile(internal::PlatformFileAttachment* attachment) {
121 return attachment->Owns() ? base::ScopedFD(attachment->TakePlatformFile()) 121 return attachment->Owns() ? base::ScopedFD(attachment->TakePlatformFile())
122 : base::ScopedFD(dup(attachment->file())); 122 : base::ScopedFD(dup(attachment->file()));
123 } 123 }
124 124
125 #endif 125 #endif
126 126
127 MojoResult WrapAttachmentImpl(MessageAttachment* attachment, 127 MojoResult WrapAttachmentImpl(MessageAttachment* attachment,
128 mojom::SerializedHandlePtr* serialized) { 128 mojom::SerializedHandlePtr* serialized) {
129 if (attachment->GetType() == MessageAttachment::Type::MOJO_HANDLE) { 129 if (attachment->GetType() == MessageAttachment::TYPE_MOJO_HANDLE) {
130 *serialized = CreateSerializedHandle( 130 *serialized = CreateSerializedHandle(
131 static_cast<internal::MojoHandleAttachment&>(*attachment).TakeHandle(), 131 static_cast<internal::MojoHandleAttachment&>(*attachment).TakeHandle(),
132 mojom::SerializedHandle::Type::MOJO_HANDLE); 132 mojom::SerializedHandle::Type::MOJO_HANDLE);
133 return MOJO_RESULT_OK; 133 return MOJO_RESULT_OK;
134 } 134 }
135 #if defined(OS_POSIX) 135 #if defined(OS_POSIX)
136 if (attachment->GetType() == MessageAttachment::Type::PLATFORM_FILE) { 136 if (attachment->GetType() == MessageAttachment::TYPE_PLATFORM_FILE) {
137 // We dup() the handles in IPC::Message to transmit. 137 // We dup() the handles in IPC::Message to transmit.
138 // IPC::MessageAttachmentSet has intricate lifecycle semantics 138 // IPC::MessageAttachmentSet has intricate lifecycle semantics
139 // of FDs, so just to dup()-and-own them is the safest option. 139 // of FDs, so just to dup()-and-own them is the safest option.
140 base::ScopedFD file = TakeOrDupFile( 140 base::ScopedFD file = TakeOrDupFile(
141 static_cast<IPC::internal::PlatformFileAttachment*>(attachment)); 141 static_cast<IPC::internal::PlatformFileAttachment*>(attachment));
142 if (!file.is_valid()) { 142 if (!file.is_valid()) {
143 DPLOG(WARNING) << "Failed to dup FD to transmit."; 143 DPLOG(WARNING) << "Failed to dup FD to transmit.";
144 return MOJO_RESULT_UNKNOWN; 144 return MOJO_RESULT_UNKNOWN;
145 } 145 }
146 146
147 return WrapPlatformHandle(file.release(), 147 return WrapPlatformHandle(file.release(),
148 mojom::SerializedHandle::Type::PLATFORM_FILE, 148 mojom::SerializedHandle::Type::PLATFORM_FILE,
149 serialized); 149 serialized);
150 } 150 }
151 #endif 151 #endif
152 #if defined(OS_MACOSX) 152 #if defined(OS_MACOSX)
153 DCHECK_EQ(attachment->GetType(), MessageAttachment::Type::MACH_PORT); 153 DCHECK_EQ(attachment->GetType(),
154 MessageAttachment::TYPE_BROKERABLE_ATTACHMENT);
155 DCHECK_EQ(static_cast<BrokerableAttachment&>(*attachment).GetBrokerableType(),
156 BrokerableAttachment::MACH_PORT);
154 internal::MachPortAttachmentMac& mach_port_attachment = 157 internal::MachPortAttachmentMac& mach_port_attachment =
155 static_cast<internal::MachPortAttachmentMac&>(*attachment); 158 static_cast<internal::MachPortAttachmentMac&>(*attachment);
156 MojoResult result = WrapMachPort(mach_port_attachment.get_mach_port(), 159 MojoResult result = WrapMachPort(mach_port_attachment.get_mach_port(),
157 serialized); 160 serialized);
158 mach_port_attachment.reset_mach_port_ownership(); 161 mach_port_attachment.reset_mach_port_ownership();
159 return result; 162 return result;
160 #elif defined(OS_WIN) 163 #elif defined(OS_WIN)
161 DCHECK_EQ(attachment->GetType(), MessageAttachment::Type::WIN_HANDLE); 164 DCHECK_EQ(attachment->GetType(),
165 MessageAttachment::TYPE_BROKERABLE_ATTACHMENT);
166 DCHECK_EQ(static_cast<BrokerableAttachment&>(*attachment).GetBrokerableType(),
167 BrokerableAttachment::WIN_HANDLE);
162 internal::HandleAttachmentWin& handle_attachment = 168 internal::HandleAttachmentWin& handle_attachment =
163 static_cast<internal::HandleAttachmentWin&>(*attachment); 169 static_cast<internal::HandleAttachmentWin&>(*attachment);
164 MojoResult result = WrapPlatformHandle( 170 MojoResult result = WrapPlatformHandle(
165 handle_attachment.get_handle(), 171 handle_attachment.get_handle(),
166 mojom::SerializedHandle::Type::WIN_HANDLE, serialized); 172 mojom::SerializedHandle::Type::WIN_HANDLE, serialized);
167 handle_attachment.reset_handle_ownership(); 173 handle_attachment.reset_handle_ownership();
168 return result; 174 return result;
169 #else 175 #else
170 NOTREACHED(); 176 NOTREACHED();
171 return MOJO_RESULT_UNKNOWN; 177 return MOJO_RESULT_UNKNOWN;
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 base::Optional<std::vector<mojom::SerializedHandlePtr>>* handles) { 404 base::Optional<std::vector<mojom::SerializedHandlePtr>>* handles) {
399 DCHECK(!*handles); 405 DCHECK(!*handles);
400 406
401 MojoResult result = MOJO_RESULT_OK; 407 MojoResult result = MOJO_RESULT_OK;
402 if (!message->HasAttachments()) 408 if (!message->HasAttachments())
403 return result; 409 return result;
404 410
405 std::vector<mojom::SerializedHandlePtr> output_handles; 411 std::vector<mojom::SerializedHandlePtr> output_handles;
406 MessageAttachmentSet* set = message->attachment_set(); 412 MessageAttachmentSet* set = message->attachment_set();
407 413
408 for (unsigned i = 0; result == MOJO_RESULT_OK && i < set->size(); ++i) { 414 for (unsigned i = 0;
409 result = WrapAttachment(set->GetAttachmentAt(i).get(), &output_handles); 415 result == MOJO_RESULT_OK && i < set->num_non_brokerable_attachments();
416 ++i) {
417 result = WrapAttachment(set->GetNonBrokerableAttachmentAt(i).get(),
418 &output_handles);
410 } 419 }
420 for (unsigned i = 0;
421 result == MOJO_RESULT_OK && i < set->num_brokerable_attachments(); ++i) {
422 result = WrapAttachment(set->GetBrokerableAttachmentAt(i).get(),
423 &output_handles);
424 }
425
411 set->CommitAllDescriptors(); 426 set->CommitAllDescriptors();
412 427
413 if (!output_handles.empty()) 428 if (!output_handles.empty())
414 *handles = std::move(output_handles); 429 *handles = std::move(output_handles);
415 430
416 return result; 431 return result;
417 } 432 }
418 433
419 // static 434 // static
420 MojoResult ChannelMojo::WriteToMessageAttachmentSet( 435 MojoResult ChannelMojo::WriteToMessageAttachmentSet(
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 } 473 }
459 474
460 void ChannelMojo::GetGenericRemoteAssociatedInterface( 475 void ChannelMojo::GetGenericRemoteAssociatedInterface(
461 const std::string& name, 476 const std::string& name,
462 mojo::ScopedInterfaceEndpointHandle handle) { 477 mojo::ScopedInterfaceEndpointHandle handle) {
463 if (message_reader_) 478 if (message_reader_)
464 message_reader_->GetRemoteInterface(name, std::move(handle)); 479 message_reader_->GetRemoteInterface(name, std::move(handle));
465 } 480 }
466 481
467 } // namespace IPC 482 } // namespace IPC
OLDNEW
« no previous file with comments | « ipc/handle_win.cc ('k') | ipc/ipc_channel_mojo_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698