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

Unified Diff: mojo/edk/system/message_in_transit.cc

Issue 814543006: Move //mojo/{public, edk} underneath //third_party (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 11 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/edk/system/message_in_transit.h ('k') | mojo/edk/system/message_in_transit_queue.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/edk/system/message_in_transit.cc
diff --git a/mojo/edk/system/message_in_transit.cc b/mojo/edk/system/message_in_transit.cc
deleted file mode 100644
index 68919f2f48a8da1a5e0d9f38055ee97ac7dc2221..0000000000000000000000000000000000000000
--- a/mojo/edk/system/message_in_transit.cc
+++ /dev/null
@@ -1,223 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/edk/system/message_in_transit.h"
-
-#include <string.h>
-
-#include "base/compiler_specific.h"
-#include "base/logging.h"
-#include "mojo/edk/system/configuration.h"
-#include "mojo/edk/system/transport_data.h"
-
-namespace mojo {
-namespace system {
-
-STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Type
- MessageInTransit::kTypeEndpoint;
-STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Type
- MessageInTransit::kTypeChannel;
-STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Type
- MessageInTransit::kTypeRawChannel;
-STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype
- MessageInTransit::kSubtypeEndpointData;
-STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype
- MessageInTransit::kSubtypeChannelAttachAndRunEndpoint;
-STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype
- MessageInTransit::kSubtypeChannelRemoveEndpoint;
-STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype
- MessageInTransit::kSubtypeChannelRemoveEndpointAck;
-STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype
- MessageInTransit::kSubtypeRawChannelPosixExtraPlatformHandles;
-STATIC_CONST_MEMBER_DEFINITION const size_t MessageInTransit::kMessageAlignment;
-
-struct MessageInTransit::PrivateStructForCompileAsserts {
- // The size of |Header| must be a multiple of the alignment.
- static_assert(sizeof(Header) % kMessageAlignment == 0,
- "sizeof(MessageInTransit::Header) invalid");
-};
-
-MessageInTransit::View::View(size_t message_size, const void* buffer)
- : buffer_(buffer) {
- size_t next_message_size = 0;
- DCHECK(MessageInTransit::GetNextMessageSize(buffer_, message_size,
- &next_message_size));
- DCHECK_EQ(message_size, next_message_size);
- // This should be equivalent.
- DCHECK_EQ(message_size, total_size());
-}
-
-bool MessageInTransit::View::IsValid(size_t serialized_platform_handle_size,
- const char** error_message) const {
- size_t max_message_num_bytes = GetConfiguration().max_message_num_bytes;
- // Avoid dangerous situations, but making sure that the size of the "header" +
- // the size of the data fits into a 31-bit number.
- DCHECK_LE(static_cast<uint64_t>(sizeof(Header)) + max_message_num_bytes,
- 0x7fffffffULL)
- << "GetConfiguration().max_message_num_bytes too big";
-
- // We assume (to avoid extra rounding code) that the maximum message (data)
- // size is a multiple of the alignment.
- DCHECK_EQ(max_message_num_bytes % kMessageAlignment, 0U)
- << "GetConfiguration().max_message_num_bytes not a multiple of alignment";
-
- // Note: This also implies a check on the |main_buffer_size()|, which is just
- // |RoundUpMessageAlignment(sizeof(Header) + num_bytes())|.
- if (num_bytes() > max_message_num_bytes) {
- *error_message = "Message data payload too large";
- return false;
- }
-
- if (transport_data_buffer_size() > 0) {
- const char* e = TransportData::ValidateBuffer(
- serialized_platform_handle_size, transport_data_buffer(),
- transport_data_buffer_size());
- if (e) {
- *error_message = e;
- return false;
- }
- }
-
- return true;
-}
-
-MessageInTransit::MessageInTransit(Type type,
- Subtype subtype,
- uint32_t num_bytes,
- 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);
- if (bytes) {
- memcpy(MessageInTransit::bytes(), bytes, num_bytes);
- memset(static_cast<char*>(MessageInTransit::bytes()) + num_bytes, 0,
- main_buffer_size_ - sizeof(Header) - num_bytes);
- } else {
- memset(MessageInTransit::bytes(), 0, main_buffer_size_ - sizeof(Header));
- }
-}
-
-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);
- memset(static_cast<char*>(MessageInTransit::bytes()) + num_bytes, 0,
- main_buffer_size_ - sizeof(Header) - 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_, kMessageAlignment))) {
- DCHECK_GE(main_buffer_size_, sizeof(Header));
- DCHECK_EQ(main_buffer_size_ % kMessageAlignment, 0u);
-
- memcpy(main_buffer_.get(), message_view.main_buffer(), main_buffer_size_);
- DCHECK_EQ(main_buffer_size_,
- RoundUpMessageAlignment(sizeof(Header) + num_bytes()));
-}
-
-MessageInTransit::~MessageInTransit() {
- if (dispatchers_) {
- for (size_t i = 0; i < dispatchers_->size(); i++) {
- if (!(*dispatchers_)[i])
- continue;
-
- DCHECK((*dispatchers_)[i]->HasOneRef());
- (*dispatchers_)[i]->Close();
- }
- }
-}
-
-// static
-bool MessageInTransit::GetNextMessageSize(const void* buffer,
- size_t buffer_size,
- size_t* next_message_size) {
- DCHECK(next_message_size);
- if (!buffer_size)
- return false;
- DCHECK(buffer);
- DCHECK_EQ(
- reinterpret_cast<uintptr_t>(buffer) % MessageInTransit::kMessageAlignment,
- 0u);
-
- if (buffer_size < sizeof(Header))
- return false;
-
- const Header* header = static_cast<const Header*>(buffer);
- *next_message_size = header->total_size;
- DCHECK_EQ(*next_message_size % kMessageAlignment, 0u);
- return true;
-}
-
-void MessageInTransit::SetDispatchers(
- scoped_ptr<DispatcherVector> dispatchers) {
- DCHECK(dispatchers);
- DCHECK(!dispatchers_);
- DCHECK(!transport_data_);
-
- dispatchers_ = dispatchers.Pass();
-#ifndef NDEBUG
- for (size_t i = 0; i < dispatchers_->size(); i++)
- DCHECK(!(*dispatchers_)[i] || (*dispatchers_)[i]->HasOneRef());
-#endif
-}
-
-void MessageInTransit::SetTransportData(
- scoped_ptr<TransportData> transport_data) {
- DCHECK(transport_data);
- DCHECK(!transport_data_);
- DCHECK(!dispatchers_);
-
- transport_data_ = transport_data.Pass();
- UpdateTotalSize();
-}
-
-void MessageInTransit::SerializeAndCloseDispatchers(Channel* channel) {
- DCHECK(channel);
- DCHECK(!transport_data_);
-
- if (!dispatchers_ || !dispatchers_->size())
- return;
-
- transport_data_.reset(new TransportData(dispatchers_.Pass(), channel));
-
- // Update the sizes in the message header.
- UpdateTotalSize();
-}
-
-void MessageInTransit::ConstructorHelper(Type type,
- Subtype subtype,
- uint32_t num_bytes) {
- DCHECK_LE(num_bytes, GetConfiguration().max_message_num_bytes);
-
- // |total_size| is updated below, from the other values.
- header()->type = type;
- header()->subtype = subtype;
- header()->source_id = ChannelEndpointId();
- header()->destination_id = ChannelEndpointId();
- 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_);
- if (transport_data_) {
- header()->total_size +=
- static_cast<uint32_t>(transport_data_->buffer_size());
- }
-}
-
-} // namespace system
-} // namespace mojo
« no previous file with comments | « mojo/edk/system/message_in_transit.h ('k') | mojo/edk/system/message_in_transit_queue.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698