refactor: declare gin::Wrapper subclasses as final (#43783)

refactor: declare gin::Wrapper subclasses as final (#43527)

As per the gin docs: "Wrappable<T> explicitly does not support further
subclassing of T. Subclasses of Wrappable<T> should be declared final."
This commit is contained in:
Charles Kerr 2024-09-19 02:57:24 -05:00 committed by GitHub
parent ea3c48e7c1
commit e62c322b2d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
35 changed files with 106 additions and 103 deletions

View file

@ -47,7 +47,7 @@ enum class JumpListResult : int;
namespace api {
class App : public ElectronBrowserClient::Delegate,
class App final : public ElectronBrowserClient::Delegate,
public gin::Wrappable<App>,
public gin_helper::EventEmitterMixin<App>,
public BrowserObserver,

View file

@ -15,7 +15,7 @@
namespace electron::api {
class AutoUpdater : public gin::Wrappable<AutoUpdater>,
class AutoUpdater final : public gin::Wrappable<AutoUpdater>,
public gin_helper::EventEmitterMixin<AutoUpdater>,
public auto_updater::Delegate,
public WindowListObserver {

View file

@ -27,7 +27,7 @@ class ElectronBrowserContext;
namespace api {
class Cookies : public gin::Wrappable<Cookies>,
class Cookies final : public gin::Wrappable<Cookies>,
public gin_helper::EventEmitterMixin<Cookies> {
public:
static gin::Handle<Cookies> Create(v8::Isolate* isolate,

View file

@ -16,7 +16,7 @@
namespace electron::api {
// Retains reference to the data pipe.
class DataPipeHolder : public gin::Wrappable<DataPipeHolder> {
class DataPipeHolder final : public gin::Wrappable<DataPipeHolder> {
public:
// gin::Wrappable
static gin::WrapperInfo kWrapperInfo;

View file

@ -25,7 +25,7 @@ class WebContents;
namespace electron::api {
class Debugger : public gin::Wrappable<Debugger>,
class Debugger final : public gin::Wrappable<Debugger>,
public gin_helper::EventEmitterMixin<Debugger>,
public content::DevToolsAgentHostClient,
public content::WebContentsObserver {

View file

@ -17,7 +17,7 @@
namespace electron::api {
class DesktopCapturer : public gin::Wrappable<DesktopCapturer>,
class DesktopCapturer final : public gin::Wrappable<DesktopCapturer>,
public gin_helper::Pinnable<DesktopCapturer>,
public DesktopMediaListObserver {
public:

View file

@ -21,7 +21,7 @@ class GURL;
namespace electron::api {
class DownloadItem : public gin::Wrappable<DownloadItem>,
class DownloadItem final : public gin::Wrappable<DownloadItem>,
public gin_helper::Pinnable<DownloadItem>,
public gin_helper::EventEmitterMixin<DownloadItem>,
public download::DownloadItem::Observer {

View file

@ -16,7 +16,8 @@
namespace electron::api {
class GlobalShortcut : public extensions::GlobalShortcutListener::Observer,
class GlobalShortcut final
: public extensions::GlobalShortcutListener::Observer,
public gin::Wrappable<GlobalShortcut> {
public:
static gin::Handle<GlobalShortcut> Create(v8::Isolate* isolate);

View file

@ -18,7 +18,7 @@
namespace electron::api {
class InAppPurchase : public gin::Wrappable<InAppPurchase>,
class InAppPurchase final : public gin::Wrappable<InAppPurchase>,
public gin_helper::EventEmitterMixin<InAppPurchase>,
public in_app_purchase::TransactionObserver {
public:

View file

@ -14,7 +14,7 @@
namespace electron::api {
class NativeTheme : public gin::Wrappable<NativeTheme>,
class NativeTheme final : public gin::Wrappable<NativeTheme>,
public gin_helper::EventEmitterMixin<NativeTheme>,
public ui::NativeThemeObserver {
public:

View file

@ -30,7 +30,7 @@ class ElectronBrowserContext;
namespace api {
// The code is referenced from the net_log::NetExportFileWriter class.
class NetLog : public gin::Wrappable<NetLog> {
class NetLog final : public gin::Wrappable<NetLog> {
public:
static gin::Handle<NetLog> Create(v8::Isolate* isolate,
ElectronBrowserContext* browser_context);

View file

@ -28,7 +28,7 @@ class Handle;
namespace electron::api {
class Notification : public gin::Wrappable<Notification>,
class Notification final : public gin::Wrappable<Notification>,
public gin_helper::EventEmitterMixin<Notification>,
public gin_helper::Constructible<Notification>,
public gin_helper::CleanedUpAtExit,

View file

@ -17,7 +17,7 @@
namespace electron::api {
class PowerMonitor : public gin::Wrappable<PowerMonitor>,
class PowerMonitor final : public gin::Wrappable<PowerMonitor>,
public gin_helper::EventEmitterMixin<PowerMonitor>,
public gin_helper::Pinnable<PowerMonitor>,
public base::PowerStateObserver,

View file

@ -14,7 +14,7 @@
namespace electron::api {
class PowerSaveBlocker : public gin::Wrappable<PowerSaveBlocker> {
class PowerSaveBlocker final : public gin::Wrappable<PowerSaveBlocker> {
public:
static gin::Handle<PowerSaveBlocker> Create(v8::Isolate* isolate);

View file

@ -40,7 +40,7 @@ enum class ProtocolError {
};
// Protocol implementation based on network services.
class Protocol : public gin::Wrappable<Protocol>,
class Protocol final : public gin::Wrappable<Protocol>,
public gin_helper::Constructible<Protocol> {
public:
static gin::Handle<Protocol> Create(v8::Isolate* isolate,

View file

@ -17,7 +17,7 @@
namespace electron::api {
class PushNotifications
class PushNotifications final
: public ElectronBrowserClient::Delegate,
public gin::Wrappable<PushNotifications>,
public gin_helper::EventEmitterMixin<PushNotifications>,

View file

@ -22,7 +22,7 @@ class Screen;
namespace electron::api {
class Screen : public gin::Wrappable<Screen>,
class Screen final : public gin::Wrappable<Screen>,
public gin_helper::EventEmitterMixin<Screen>,
public display::DisplayObserver {
public:

View file

@ -18,7 +18,7 @@ class ElectronBrowserContext;
namespace api {
class ServiceWorkerContext
class ServiceWorkerContext final
: public gin::Wrappable<ServiceWorkerContext>,
public gin_helper::EventEmitterMixin<ServiceWorkerContext>,
public content::ServiceWorkerContextObserver {

View file

@ -60,7 +60,7 @@ class ElectronBrowserContext;
namespace api {
class Session : public gin::Wrappable<Session>,
class Session final : public gin::Wrappable<Session>,
public gin_helper::Pinnable<Session>,
public gin_helper::Constructible<Session>,
public gin_helper::EventEmitterMixin<Session>,

View file

@ -31,7 +31,7 @@ enum class NotificationCenterKind {
};
#endif
class SystemPreferences
class SystemPreferences final
: public gin::Wrappable<SystemPreferences>,
public gin_helper::EventEmitterMixin<SystemPreferences>
#if BUILDFLAG(IS_WIN)

View file

@ -34,7 +34,7 @@ namespace electron::api {
class Menu;
class Tray : public gin::Wrappable<Tray>,
class Tray final : public gin::Wrappable<Tray>,
public gin_helper::EventEmitterMixin<Tray>,
public gin_helper::Constructible<Tray>,
public gin_helper::CleanedUpAtExit,

View file

@ -36,7 +36,7 @@ class Process;
namespace electron::api {
class UtilityProcessWrapper
class UtilityProcessWrapper final
: public gin::Wrappable<UtilityProcessWrapper>,
public gin_helper::Pinnable<UtilityProcessWrapper>,
public gin_helper::EventEmitterMixin<UtilityProcessWrapper>,

View file

@ -1896,7 +1896,7 @@ void WebContents::OnFirstNonEmptyLayout(
// This object wraps the InvokeCallback so that if it gets GC'd by V8, we can
// still call the callback and send an error. Not doing so causes a Mojo DCHECK,
// since Mojo requires callbacks to be called before they are destroyed.
class ReplyChannel : public gin::Wrappable<ReplyChannel> {
class ReplyChannel final : public gin::Wrappable<ReplyChannel> {
public:
using InvokeCallback = electron::mojom::ElectronApiIPC::InvokeCallback;
static gin::Handle<ReplyChannel> Create(v8::Isolate* isolate,

View file

@ -103,7 +103,7 @@ namespace api {
class BaseWindow;
// Wrapper around the content::WebContents.
class WebContents : public ExclusiveAccessContext,
class WebContents final : public ExclusiveAccessContext,
public gin::Wrappable<WebContents>,
public gin_helper::EventEmitterMixin<WebContents>,
public gin_helper::Constructible<WebContents>,

View file

@ -35,7 +35,7 @@ namespace electron::api {
class WebContents;
// Bindings for accessing frames from the main process.
class WebFrameMain : public gin::Wrappable<WebFrameMain>,
class WebFrameMain final : public gin::Wrappable<WebFrameMain>,
public gin_helper::EventEmitterMixin<WebFrameMain>,
public gin_helper::Pinnable<WebFrameMain>,
public gin_helper::Constructible<WebFrameMain> {

View file

@ -22,7 +22,8 @@ class BrowserContext;
namespace electron::api {
class WebRequest : public gin::Wrappable<WebRequest>, public WebRequestAPI {
class WebRequest final : public gin::Wrappable<WebRequest>,
public WebRequestAPI {
public:
// Return the WebRequest object attached to |browser_context|, create if there
// is no one.

View file

@ -24,7 +24,7 @@ class Handle;
namespace electron {
// A non-blink version of blink::MessagePort.
class MessagePort : public gin::Wrappable<MessagePort>,
class MessagePort final : public gin::Wrappable<MessagePort>,
public gin_helper::CleanedUpAtExit,
public mojo::MessageReceiver {
public:

View file

@ -43,7 +43,7 @@ class Arguments;
namespace electron::api {
class NativeImage : public gin::Wrappable<NativeImage> {
class NativeImage final : public gin::Wrappable<NativeImage> {
public:
NativeImage(v8::Isolate* isolate, const gfx::Image& image);
#if BUILDFLAG(IS_WIN)

View file

@ -160,7 +160,8 @@ class BufferDataSource : public mojo::DataPipeProducer::DataSource {
std::vector<char> buffer_;
};
class JSChunkedDataPipeGetter : public gin::Wrappable<JSChunkedDataPipeGetter>,
class JSChunkedDataPipeGetter final
: public gin::Wrappable<JSChunkedDataPipeGetter>,
public network::mojom::ChunkedDataPipeGetter {
public:
static gin::Handle<JSChunkedDataPipeGetter> Create(

View file

@ -43,7 +43,7 @@ class ElectronBrowserContext;
namespace electron::api {
/** Wraps a SimpleURLLoader to make it usable from JavaScript */
class SimpleURLLoaderWrapper
class SimpleURLLoaderWrapper final
: public gin::Wrappable<SimpleURLLoaderWrapper>,
public gin_helper::EventEmitterMixin<SimpleURLLoaderWrapper>,
public network::SimpleURLLoaderStreamConsumer,

View file

@ -252,7 +252,7 @@ bool Converter<net::HttpRequestHeaders>::FromV8(v8::Isolate* isolate,
return true;
}
class ChunkedDataPipeReadableStream
class ChunkedDataPipeReadableStream final
: public gin::Wrappable<ChunkedDataPipeReadableStream> {
public:
static gin::Handle<ChunkedDataPipeReadableStream> Create(

View file

@ -19,7 +19,7 @@ class ObjectTemplate;
namespace gin_helper::internal {
class Event : public gin::Wrappable<Event>,
class Event final : public gin::Wrappable<Event>,
public gin_helper::Constructible<Event> {
public:
// gin_helper::Constructible

View file

@ -41,7 +41,7 @@ RenderFrame* GetCurrentRenderFrame() {
return RenderFrame::FromWebFrame(frame);
}
class IPCRenderer : public gin::Wrappable<IPCRenderer>,
class IPCRenderer final : public gin::Wrappable<IPCRenderer>,
public content::RenderFrameObserver {
public:
static gin::WrapperInfo kWrapperInfo;

View file

@ -329,7 +329,7 @@ class SpellCheckerHolder final : public content::RenderFrameObserver {
} // namespace
class WebFrameRenderer : public gin::Wrappable<WebFrameRenderer>,
class WebFrameRenderer final : public gin::Wrappable<WebFrameRenderer>,
public content::RenderFrameObserver {
public:
static gin::WrapperInfo kWrapperInfo;

View file

@ -30,7 +30,7 @@ namespace electron {
// There is only a single instance of this class
// for the lifetime of a Utility Process which
// also means that GC lifecycle is ignored by this class.
class ParentPort : public gin::Wrappable<ParentPort>,
class ParentPort final : public gin::Wrappable<ParentPort>,
public mojo::MessageReceiver {
public:
static ParentPort* GetInstance();