// Copyright 2018 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. #ifndef IPC_MESSAGE_VIEW_H_ #define IPC_MESSAGE_VIEW_H_ #include #include "base/component_export.h" #include "base/containers/span.h" #include "base/macros.h" #include "ipc/ipc_message.h" #include "mojo/public/cpp/base/big_buffer.h" #include "mojo/public/interfaces/bindings/native_struct.mojom.h" namespace IPC { class COMPONENT_EXPORT(IPC_MOJOM) MessageView { public: MessageView(); MessageView( const Message& message, base::Optional> handles); MessageView( mojo_base::BigBufferView buffer_view, base::Optional> handles); MessageView(MessageView&&); ~MessageView(); MessageView& operator=(MessageView&&); const char* data() const { return reinterpret_cast(buffer_view_.data().data()); } uint32_t size() const { return static_cast(buffer_view_.data().size()); } mojo_base::BigBufferView TakeBufferView() { return std::move(buffer_view_); } base::Optional> TakeHandles() { return std::move(handles_); } private: mojo_base::BigBufferView buffer_view_; base::Optional> handles_; DISALLOW_COPY_AND_ASSIGN(MessageView); }; } // namespace IPC #endif // IPC_MESSAGE_VIEW_H_