// Copyright (c) 2019 GitHub, Inc. // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. #ifndef ELECTRON_SHELL_BROWSER_API_ELECTRON_API_DATA_PIPE_HOLDER_H_ #define ELECTRON_SHELL_BROWSER_API_ELECTRON_API_DATA_PIPE_HOLDER_H_ #include #include "gin/wrappable.h" #include "mojo/public/cpp/bindings/remote.h" #include "services/network/public/cpp/data_element.h" #include "services/network/public/mojom/data_pipe_getter.mojom.h" namespace gin { template class Handle; } // namespace gin namespace electron::api { // Retains reference to the data pipe. class DataPipeHolder final : public gin::Wrappable { public: // gin::Wrappable static gin::WrapperInfo kWrapperInfo; const char* GetTypeName() override; static gin::Handle Create( v8::Isolate* isolate, const network::DataElement& element); static gin::Handle From(v8::Isolate* isolate, const std::string& id); // Read all data at once. // // TODO(zcbenz): This is apparently not suitable for really large data, but // no one has complained about it yet. v8::Local ReadAll(v8::Isolate* isolate); // The unique ID that can be used to receive the object. const std::string& id() const { return id_; } // disable copy DataPipeHolder(const DataPipeHolder&) = delete; DataPipeHolder& operator=(const DataPipeHolder&) = delete; private: explicit DataPipeHolder(const network::DataElement& element); ~DataPipeHolder() override; std::string id_; mojo::Remote data_pipe_; }; } // namespace electron::api #endif // ELECTRON_SHELL_BROWSER_API_ELECTRON_API_DATA_PIPE_HOLDER_H_