electron/shell/browser/api/electron_api_data_pipe_holder.h
Robo 9d05454dc7
chore: move gin::DeprecatedWrappable to gin_helper (#47958)
* chore: move gin::DeprecatedWrappable to gin_helper

This is in preparation for migrating to gin::Wrappable
based on cppgc #47922
The upstream class will be deleted soon via roller PR but
the cppgc migration should happen outside the roll, this
change retains the current functionality by copying the
implementation into //electron/shell/common/gin_helper.
The class can be deleted once the cppgc migration is complete.

* chore: fix lint:cpp
2025-08-04 23:28:01 +09:00

59 lines
1.8 KiB
C++

// 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 <string>
#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"
#include "shell/common/gin_helper/wrappable.h"
namespace gin {
template <typename T>
class Handle;
} // namespace gin
namespace electron::api {
// Retains reference to the data pipe.
class DataPipeHolder final
: public gin_helper::DeprecatedWrappable<DataPipeHolder> {
public:
// gin_helper::Wrappable
static gin::DeprecatedWrapperInfo kWrapperInfo;
const char* GetTypeName() override;
static gin::Handle<DataPipeHolder> Create(
v8::Isolate* isolate,
const network::DataElement& element);
static gin::Handle<DataPipeHolder> 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<v8::Promise> 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<network::mojom::DataPipeGetter> data_pipe_;
};
} // namespace electron::api
#endif // ELECTRON_SHELL_BROWSER_API_ELECTRON_API_DATA_PIPE_HOLDER_H_