| Index: mojo/system/message_in_transit.cc
|
| diff --git a/mojo/system/message_in_transit.cc b/mojo/system/message_in_transit.cc
|
| index 944e12b19ae68b8613e30bb1020dc51f4915ff2e..5ac07547aac9c0c67336741dcb65b082a1808658 100644
|
| --- a/mojo/system/message_in_transit.cc
|
| +++ b/mojo/system/message_in_transit.cc
|
| @@ -92,19 +92,7 @@ MessageInTransit::MessageInTransit(Type type,
|
| : main_buffer_size_(RoundUpMessageAlignment(sizeof(Header) + num_bytes)),
|
| main_buffer_(static_cast<char*>(base::AlignedAlloc(main_buffer_size_,
|
| kMessageAlignment))) {
|
| - DCHECK_LE(num_bytes, kMaxMessageNumBytes);
|
| -
|
| - // |total_size| is updated below, from the other values.
|
| - header()->type = type;
|
| - header()->subtype = subtype;
|
| - header()->source_id = kInvalidEndpointId;
|
| - header()->destination_id = kInvalidEndpointId;
|
| - header()->num_bytes = num_bytes;
|
| - header()->unused = 0;
|
| - // Note: If dispatchers are subsequently attached, then |total_size| will have
|
| - // to be adjusted.
|
| - UpdateTotalSize();
|
| -
|
| + ConstructorHelper(type, subtype, num_bytes);
|
| if (bytes) {
|
| memcpy(MessageInTransit::bytes(), bytes, num_bytes);
|
| memset(static_cast<char*>(MessageInTransit::bytes()) + num_bytes, 0,
|
| @@ -114,6 +102,17 @@ MessageInTransit::MessageInTransit(Type type,
|
| }
|
| }
|
|
|
| +MessageInTransit::MessageInTransit(Type type,
|
| + Subtype subtype,
|
| + uint32_t num_bytes,
|
| + UserPointer<const void> bytes)
|
| + : main_buffer_size_(RoundUpMessageAlignment(sizeof(Header) + num_bytes)),
|
| + main_buffer_(static_cast<char*>(base::AlignedAlloc(main_buffer_size_,
|
| + kMessageAlignment))) {
|
| + ConstructorHelper(type, subtype, num_bytes);
|
| + bytes.GetArray(MessageInTransit::bytes(), num_bytes);
|
| +}
|
| +
|
| MessageInTransit::MessageInTransit(const View& message_view)
|
| : main_buffer_size_(message_view.main_buffer_size()),
|
| main_buffer_(static_cast<char*>(base::AlignedAlloc(main_buffer_size_,
|
| @@ -193,6 +192,23 @@ void MessageInTransit::SerializeAndCloseDispatchers(Channel* channel) {
|
| UpdateTotalSize();
|
| }
|
|
|
| +void MessageInTransit::ConstructorHelper(Type type,
|
| + Subtype subtype,
|
| + uint32_t num_bytes) {
|
| + DCHECK_LE(num_bytes, kMaxMessageNumBytes);
|
| +
|
| + // |total_size| is updated below, from the other values.
|
| + header()->type = type;
|
| + header()->subtype = subtype;
|
| + header()->source_id = kInvalidEndpointId;
|
| + header()->destination_id = kInvalidEndpointId;
|
| + header()->num_bytes = num_bytes;
|
| + header()->unused = 0;
|
| + // Note: If dispatchers are subsequently attached, then |total_size| will have
|
| + // to be adjusted.
|
| + UpdateTotalSize();
|
| +}
|
| +
|
| void MessageInTransit::UpdateTotalSize() {
|
| DCHECK_EQ(main_buffer_size_ % kMessageAlignment, 0u);
|
| header()->total_size = static_cast<uint32_t>(main_buffer_size_);
|
|
|