refactor: use gin::Wrappable in electron::api::PowerSaveBlocker (#49381)

* refactor: PowerSaveBlocker subclasses gin::Wrappable

* chore: update chore_add_electron_objects_to_wrappablepointertag.patch

* chore: e patches all
This commit is contained in:
Charles Kerr
2026-01-22 17:31:38 -06:00
committed by GitHub
parent d689f76ff9
commit d76608b945
3 changed files with 43 additions and 33 deletions

View File

@@ -16,6 +16,8 @@
#include "shell/browser/javascript_environment.h"
#include "shell/common/gin_helper/handle.h"
#include "shell/common/node_includes.h"
#include "v8/include/cppgc/allocation.h"
#include "v8/include/v8-cppgc.h"
namespace gin {
@@ -41,14 +43,39 @@ struct Converter<device::mojom::WakeLockType> {
namespace electron::api {
gin::DeprecatedWrapperInfo PowerSaveBlocker::kWrapperInfo = {
gin::kEmbedderNativeGin};
const gin::WrapperInfo PowerSaveBlocker::kWrapperInfo = {
{gin::kEmbedderNativeGin},
gin::kElectronPowerSaveBlocker};
PowerSaveBlocker::PowerSaveBlocker(v8::Isolate* isolate)
: current_lock_type_(device::mojom::WakeLockType::kPreventAppSuspension) {}
PowerSaveBlocker::~PowerSaveBlocker() = default;
// static
gin_helper::Handle<PowerSaveBlocker> PowerSaveBlocker::Create(
v8::Isolate* isolate) {
return gin_helper::CreateHandle(
isolate, cppgc::MakeGarbageCollected<PowerSaveBlocker>(
isolate->GetCppHeap()->GetAllocationHandle(), isolate));
}
const gin::WrapperInfo* PowerSaveBlocker::wrapper_info() const {
return &kWrapperInfo;
}
const char* PowerSaveBlocker::GetHumanReadableName() const {
return "Electron / PowerSaveBlocker";
}
gin::ObjectTemplateBuilder PowerSaveBlocker::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return gin::Wrappable<PowerSaveBlocker>::GetObjectTemplateBuilder(isolate)
.SetMethod("start", &PowerSaveBlocker::Start)
.SetMethod("stop", &PowerSaveBlocker::Stop)
.SetMethod("isStarted", &PowerSaveBlocker::IsStarted);
}
void PowerSaveBlocker::UpdatePowerSaveBlocker() {
if (wake_lock_types_.empty()) {
if (is_wake_lock_active_) {
@@ -66,6 +93,7 @@ void PowerSaveBlocker::UpdatePowerSaveBlocker() {
// Only the highest-precedence blocker type takes effect.
device::mojom::WakeLockType new_lock_type =
device::mojom::WakeLockType::kPreventAppSuspension;
for (const auto& element : wake_lock_types_) {
if (element.second == device::mojom::WakeLockType::kPreventDisplaySleep) {
new_lock_type = device::mojom::WakeLockType::kPreventDisplaySleep;
@@ -114,25 +142,6 @@ bool PowerSaveBlocker::IsStarted(int id) const {
return wake_lock_types_.contains(id);
}
// static
gin_helper::Handle<PowerSaveBlocker> PowerSaveBlocker::Create(
v8::Isolate* isolate) {
return gin_helper::CreateHandle(isolate, new PowerSaveBlocker(isolate));
}
gin::ObjectTemplateBuilder PowerSaveBlocker::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return gin_helper::DeprecatedWrappable<
PowerSaveBlocker>::GetObjectTemplateBuilder(isolate)
.SetMethod("start", &PowerSaveBlocker::Start)
.SetMethod("stop", &PowerSaveBlocker::Stop)
.SetMethod("isStarted", &PowerSaveBlocker::IsStarted);
}
const char* PowerSaveBlocker::GetTypeName() {
return "PowerSaveBlocker";
}
} // namespace electron::api
namespace {

View File

@@ -6,9 +6,9 @@
#define ELECTRON_SHELL_BROWSER_API_ELECTRON_API_POWER_SAVE_BLOCKER_H_
#include "base/containers/flat_map.h"
#include "gin/wrappable.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/device/public/mojom/wake_lock.mojom.h"
#include "shell/common/gin_helper/wrappable.h"
namespace gin {
class ObjectTemplateBuilder;
@@ -21,25 +21,25 @@ class Handle;
namespace electron::api {
class PowerSaveBlocker final
: public gin_helper::DeprecatedWrappable<PowerSaveBlocker> {
class PowerSaveBlocker final : public gin::Wrappable<PowerSaveBlocker> {
public:
static gin_helper::Handle<PowerSaveBlocker> Create(v8::Isolate* isolate);
// gin_helper::Wrappable
static gin::DeprecatedWrapperInfo kWrapperInfo;
// gin::Wrappable
static const gin::WrapperInfo kWrapperInfo;
const gin::WrapperInfo* wrapper_info() const override;
const char* GetHumanReadableName() const override;
gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) override;
const char* GetTypeName() override;
// Make public for cppgc::MakeGarbageCollected.
explicit PowerSaveBlocker(v8::Isolate* isolate);
~PowerSaveBlocker() override;
// disable copy
PowerSaveBlocker(const PowerSaveBlocker&) = delete;
PowerSaveBlocker& operator=(const PowerSaveBlocker&) = delete;
protected:
explicit PowerSaveBlocker(v8::Isolate* isolate);
~PowerSaveBlocker() override;
private:
void UpdatePowerSaveBlocker();
int Start(device::mojom::WakeLockType type);