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 { namespace api {
class App : public ElectronBrowserClient::Delegate, class App final : public ElectronBrowserClient::Delegate,
public gin::Wrappable<App>, public gin::Wrappable<App>,
public gin_helper::EventEmitterMixin<App>, public gin_helper::EventEmitterMixin<App>,
public BrowserObserver, public BrowserObserver,

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -36,7 +36,7 @@ class Process;
namespace electron::api { namespace electron::api {
class UtilityProcessWrapper class UtilityProcessWrapper final
: public gin::Wrappable<UtilityProcessWrapper>, : public gin::Wrappable<UtilityProcessWrapper>,
public gin_helper::Pinnable<UtilityProcessWrapper>, public gin_helper::Pinnable<UtilityProcessWrapper>,
public gin_helper::EventEmitterMixin<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 // 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, // 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. // 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: public:
using InvokeCallback = electron::mojom::ElectronApiIPC::InvokeCallback; using InvokeCallback = electron::mojom::ElectronApiIPC::InvokeCallback;
static gin::Handle<ReplyChannel> Create(v8::Isolate* isolate, static gin::Handle<ReplyChannel> Create(v8::Isolate* isolate,

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -19,7 +19,7 @@ class ObjectTemplate;
namespace gin_helper::internal { 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<Event> {
public: public:
// gin_helper::Constructible // gin_helper::Constructible

View file

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

View file

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

View file

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