// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef SERVICES_NETWORK_PUBLIC_CPP_NET_ADAPTERS_H_ #define SERVICES_NETWORK_PUBLIC_CPP_NET_ADAPTERS_H_ #include <stdint.h> #include "base/component_export.h" #include "base/containers/span.h" #include "mojo/public/cpp/system/data_pipe.h" #include "net/base/io_buffer.h" namespace network { // These adapters are used to transfer data between a Mojo pipe and the net // library. // // Mojo pipe Data flow Network library // ---------------------------------------------------------- // MojoToNetPendingBuffer ---> MojoToNetIOBuffer // NetToMojoPendingBuffer <--- NetToMojoIOBuffer // // While the operation is in progress, the Mojo-side objects keep ownership // of the Mojo pipe, which in turn is kept alive by the IOBuffer. This allows // the request to potentially outlive the object managing the translation. // Mojo side of a Net -> Mojo copy. The buffer is allocated by Mojo. class COMPONENT_EXPORT(NETWORK_CPP) NetToMojoPendingBuffer : public base::RefCountedThreadSafe<NetToMojoPendingBuffer> { … }; // Net side of a Net -> Mojo copy. The data will be read from the network and // copied into the buffer associated with the pending mojo write. class COMPONENT_EXPORT(NETWORK_CPP) NetToMojoIOBuffer : public net::WrappedIOBuffer { … }; class COMPONENT_EXPORT(NETWORK_CPP) MojoToNetPendingBuffer : public base::RefCountedThreadSafe<MojoToNetPendingBuffer> { … }; // Net side of a Mojo -> Net copy. The data will already be in the // MojoToNetPendingBuffer's buffer. class COMPONENT_EXPORT(NETWORK_CPP) MojoToNetIOBuffer : public net::WrappedIOBuffer { … }; } // namespace network #endif // SERVICES_NETWORK_PUBLIC_CPP_NET_ADAPTERS_H_