The final game: mark everything final.

Then revert the ones that break compilation.
Fix one IWYU noticed during presubmit.

Change-Id: I881a8a72818e55dbc4816247e35ff5e3015194e7
Reviewed-on: https://pdfium-review.googlesource.com/41470
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/edit/cpdf_creator.cpp b/core/fpdfapi/edit/cpdf_creator.cpp
index 11b0628..7af6280 100644
--- a/core/fpdfapi/edit/cpdf_creator.cpp
+++ b/core/fpdfapi/edit/cpdf_creator.cpp
@@ -28,7 +28,7 @@
 
 const size_t kArchiveBufferSize = 32768;
 
-class CFX_FileBufferArchive : public IFX_ArchiveStream {
+class CFX_FileBufferArchive final : public IFX_ArchiveStream {
  public:
   explicit CFX_FileBufferArchive(const RetainPtr<IFX_WriteStream>& archive);
   ~CFX_FileBufferArchive() override;
diff --git a/core/fpdfapi/edit/cpdf_creator_embeddertest.cpp b/core/fpdfapi/edit/cpdf_creator_embeddertest.cpp
index 2d431b8..1f8f788 100644
--- a/core/fpdfapi/edit/cpdf_creator_embeddertest.cpp
+++ b/core/fpdfapi/edit/cpdf_creator_embeddertest.cpp
@@ -20,7 +20,7 @@
 
 namespace {
 
-class FileAccess : public FPDF_FILEACCESS {
+class FileAccess final : public FPDF_FILEACCESS {
  public:
   explicit FileAccess(const std::string& file_name) {
     std::string file_path;
diff --git a/core/fpdfapi/edit/cpdf_stringarchivestream.h b/core/fpdfapi/edit/cpdf_stringarchivestream.h
index bb5481e..aa744a9 100644
--- a/core/fpdfapi/edit/cpdf_stringarchivestream.h
+++ b/core/fpdfapi/edit/cpdf_stringarchivestream.h
@@ -7,7 +7,7 @@
 
 #include "core/fxcrt/fx_stream.h"
 
-class CPDF_StringArchiveStream : public IFX_ArchiveStream {
+class CPDF_StringArchiveStream final : public IFX_ArchiveStream {
  public:
   explicit CPDF_StringArchiveStream(std::ostringstream* stream);
   ~CPDF_StringArchiveStream() override;
diff --git a/core/fpdfapi/font/cfx_cttgsubtable.h b/core/fpdfapi/font/cfx_cttgsubtable.h
index ff488a5..6b23a8d 100644
--- a/core/fpdfapi/font/cfx_cttgsubtable.h
+++ b/core/fpdfapi/font/cfx_cttgsubtable.h
@@ -64,14 +64,14 @@
     uint16_t CoverageFormat;
   };
 
-  struct TCoverageFormat1 : public TCoverageFormatBase {
+  struct TCoverageFormat1 final : public TCoverageFormatBase {
     TCoverageFormat1();
     ~TCoverageFormat1() override;
 
     std::vector<uint16_t> GlyphArray;
   };
 
-  struct TCoverageFormat2 : public TCoverageFormatBase {
+  struct TCoverageFormat2 final : public TCoverageFormatBase {
     TCoverageFormat2();
     ~TCoverageFormat2() override;
 
@@ -94,14 +94,14 @@
     uint16_t SubstFormat;
   };
 
-  struct TSubTable1 : public TSubTableBase {
+  struct TSubTable1 final : public TSubTableBase {
     TSubTable1();
     ~TSubTable1() override;
 
     int16_t DeltaGlyphID;
   };
 
-  struct TSubTable2 : public TSubTableBase {
+  struct TSubTable2 final : public TSubTableBase {
     TSubTable2();
     ~TSubTable2() override;
 
diff --git a/core/fpdfapi/font/cpdf_cidfont.h b/core/fpdfapi/font/cpdf_cidfont.h
index 9dde95d..7aeb54b 100644
--- a/core/fpdfapi/font/cpdf_cidfont.h
+++ b/core/fpdfapi/font/cpdf_cidfont.h
@@ -32,7 +32,7 @@
 class CPDF_CMap;
 class CPDF_StreamAcc;
 
-class CPDF_CIDFont : public CPDF_Font {
+class CPDF_CIDFont final : public CPDF_Font {
  public:
   CPDF_CIDFont(CPDF_Document* pDocument, CPDF_Dictionary* pFontDict);
   ~CPDF_CIDFont() override;
diff --git a/core/fpdfapi/font/cpdf_cmap.h b/core/fpdfapi/font/cpdf_cmap.h
index 45053bd..228c207 100644
--- a/core/fpdfapi/font/cpdf_cmap.h
+++ b/core/fpdfapi/font/cpdf_cmap.h
@@ -27,7 +27,7 @@
   CIDCODING_UTF16,
 };
 
-class CPDF_CMap : public Retainable {
+class CPDF_CMap final : public Retainable {
  public:
   enum CodingScheme : uint8_t {
     OneByte,
diff --git a/core/fpdfapi/font/cpdf_truetypefont.h b/core/fpdfapi/font/cpdf_truetypefont.h
index d63e8f1..a3066d7 100644
--- a/core/fpdfapi/font/cpdf_truetypefont.h
+++ b/core/fpdfapi/font/cpdf_truetypefont.h
@@ -10,7 +10,7 @@
 #include "core/fpdfapi/font/cpdf_simplefont.h"
 #include "core/fxcrt/fx_system.h"
 
-class CPDF_TrueTypeFont : public CPDF_SimpleFont {
+class CPDF_TrueTypeFont final : public CPDF_SimpleFont {
  public:
   CPDF_TrueTypeFont(CPDF_Document* pDocument, CPDF_Dictionary* pFontDict);
   ~CPDF_TrueTypeFont() override;
diff --git a/core/fpdfapi/font/cpdf_type1font.h b/core/fpdfapi/font/cpdf_type1font.h
index cbcb9af..0fdfa80 100644
--- a/core/fpdfapi/font/cpdf_type1font.h
+++ b/core/fpdfapi/font/cpdf_type1font.h
@@ -10,7 +10,7 @@
 #include "core/fpdfapi/font/cpdf_simplefont.h"
 #include "core/fxcrt/fx_system.h"
 
-class CPDF_Type1Font : public CPDF_SimpleFont {
+class CPDF_Type1Font final : public CPDF_SimpleFont {
  public:
   CPDF_Type1Font(CPDF_Document* pDocument, CPDF_Dictionary* pFontDict);
   ~CPDF_Type1Font() override;
diff --git a/core/fpdfapi/font/cpdf_type3font.h b/core/fpdfapi/font/cpdf_type3font.h
index 0be1fa3..d85bf70 100644
--- a/core/fpdfapi/font/cpdf_type3font.h
+++ b/core/fpdfapi/font/cpdf_type3font.h
@@ -17,7 +17,7 @@
 class CPDF_Dictionary;
 class CPDF_Type3Char;
 
-class CPDF_Type3Font : public CPDF_SimpleFont {
+class CPDF_Type3Font final : public CPDF_SimpleFont {
  public:
   CPDF_Type3Font(CPDF_Document* pDocument, CPDF_Dictionary* pFontDict);
   ~CPDF_Type3Font() override;
diff --git a/core/fpdfapi/page/cpdf_allstates.h b/core/fpdfapi/page/cpdf_allstates.h
index 730003a..e388b94 100644
--- a/core/fpdfapi/page/cpdf_allstates.h
+++ b/core/fpdfapi/page/cpdf_allstates.h
@@ -15,7 +15,7 @@
 class CPDF_Dictionary;
 class CPDF_StreamContentParser;
 
-class CPDF_AllStates : public CPDF_GraphicStates {
+class CPDF_AllStates final : public CPDF_GraphicStates {
  public:
   CPDF_AllStates();
   ~CPDF_AllStates() override;
diff --git a/core/fpdfapi/page/cpdf_clippath.h b/core/fpdfapi/page/cpdf_clippath.h
index 91a25cd..c0b5ce5 100644
--- a/core/fpdfapi/page/cpdf_clippath.h
+++ b/core/fpdfapi/page/cpdf_clippath.h
@@ -44,7 +44,7 @@
   void Transform(const CFX_Matrix& matrix);
 
  private:
-  class PathData : public Retainable {
+  class PathData final : public Retainable {
    public:
     using PathAndTypeData = std::pair<CPDF_Path, uint8_t>;
 
diff --git a/core/fpdfapi/page/cpdf_colorspace.cpp b/core/fpdfapi/page/cpdf_colorspace.cpp
index a3b88b0..882b565 100644
--- a/core/fpdfapi/page/cpdf_colorspace.cpp
+++ b/core/fpdfapi/page/cpdf_colorspace.cpp
@@ -105,7 +105,7 @@
   return pPoints[0] > 0.0f && pPoints[1] == 1.0f && pPoints[2] > 0.0f;
 }
 
-class CPDF_CalGray : public CPDF_ColorSpace {
+class CPDF_CalGray final : public CPDF_ColorSpace {
  public:
   explicit CPDF_CalGray(CPDF_Document* pDoc);
   ~CPDF_CalGray() override {}
@@ -130,7 +130,7 @@
   float m_BlackPoint[kBlackWhitePointCount];
 };
 
-class CPDF_CalRGB : public CPDF_ColorSpace {
+class CPDF_CalRGB final : public CPDF_ColorSpace {
  public:
   explicit CPDF_CalRGB(CPDF_Document* pDoc);
   ~CPDF_CalRGB() override {}
@@ -160,7 +160,7 @@
   bool m_bMatrix = false;
 };
 
-class CPDF_LabCS : public CPDF_ColorSpace {
+class CPDF_LabCS final : public CPDF_ColorSpace {
  public:
   explicit CPDF_LabCS(CPDF_Document* pDoc);
   ~CPDF_LabCS() override {}
@@ -190,7 +190,7 @@
   float m_Ranges[kRangesCount];
 };
 
-class CPDF_ICCBasedCS : public CPDF_ColorSpace {
+class CPDF_ICCBasedCS final : public CPDF_ColorSpace {
  public:
   explicit CPDF_ICCBasedCS(CPDF_Document* pDoc);
   ~CPDF_ICCBasedCS() override;
@@ -226,7 +226,7 @@
   std::vector<float> m_pRanges;
 };
 
-class CPDF_IndexedCS : public CPDF_ColorSpace {
+class CPDF_IndexedCS final : public CPDF_ColorSpace {
  public:
   explicit CPDF_IndexedCS(CPDF_Document* pDoc);
   ~CPDF_IndexedCS() override;
@@ -248,7 +248,7 @@
   std::vector<float> m_pCompMinMax;
 };
 
-class CPDF_SeparationCS : public CPDF_ColorSpace {
+class CPDF_SeparationCS final : public CPDF_ColorSpace {
  public:
   explicit CPDF_SeparationCS(CPDF_Document* pDoc);
   ~CPDF_SeparationCS() override;
@@ -270,7 +270,7 @@
   enum { None, All, Colorant } m_Type;
 };
 
-class CPDF_DeviceNCS : public CPDF_ColorSpace {
+class CPDF_DeviceNCS final : public CPDF_ColorSpace {
  public:
   explicit CPDF_DeviceNCS(CPDF_Document* pDoc);
   ~CPDF_DeviceNCS() override;
diff --git a/core/fpdfapi/page/cpdf_colorstate.h b/core/fpdfapi/page/cpdf_colorstate.h
index 49416db..7b72a2a 100644
--- a/core/fpdfapi/page/cpdf_colorstate.h
+++ b/core/fpdfapi/page/cpdf_colorstate.h
@@ -50,7 +50,7 @@
   bool HasRef() const { return !!m_Ref; }
 
  private:
-  class ColorData : public Retainable {
+  class ColorData final : public Retainable {
    public:
     ColorData();
     ColorData(const ColorData& src);
diff --git a/core/fpdfapi/page/cpdf_contentmark.h b/core/fpdfapi/page/cpdf_contentmark.h
index dc4cc08..1395db1 100644
--- a/core/fpdfapi/page/cpdf_contentmark.h
+++ b/core/fpdfapi/page/cpdf_contentmark.h
@@ -40,7 +40,7 @@
   size_t FindFirstDifference(const CPDF_ContentMark* other) const;
 
  private:
-  class MarkData : public Retainable {
+  class MarkData final : public Retainable {
    public:
     MarkData();
     MarkData(const MarkData& src);
diff --git a/core/fpdfapi/page/cpdf_contentmarkitem.h b/core/fpdfapi/page/cpdf_contentmarkitem.h
index 435aef4..a0a92db 100644
--- a/core/fpdfapi/page/cpdf_contentmarkitem.h
+++ b/core/fpdfapi/page/cpdf_contentmarkitem.h
@@ -17,7 +17,7 @@
 
 class CPDF_Dictionary;
 
-class CPDF_ContentMarkItem : public Retainable {
+class CPDF_ContentMarkItem final : public Retainable {
  public:
   enum ParamType { None, PropertiesDict, DirectDict };
 
diff --git a/core/fpdfapi/page/cpdf_devicecs.h b/core/fpdfapi/page/cpdf_devicecs.h
index bf668c3..ab88d74 100644
--- a/core/fpdfapi/page/cpdf_devicecs.h
+++ b/core/fpdfapi/page/cpdf_devicecs.h
@@ -11,7 +11,7 @@
 
 #include "core/fpdfapi/page/cpdf_colorspace.h"
 
-class CPDF_DeviceCS : public CPDF_ColorSpace {
+class CPDF_DeviceCS final : public CPDF_ColorSpace {
  public:
   explicit CPDF_DeviceCS(int family);
   ~CPDF_DeviceCS() override;
diff --git a/core/fpdfapi/page/cpdf_expintfunc.h b/core/fpdfapi/page/cpdf_expintfunc.h
index c93cc86..95bdab6 100644
--- a/core/fpdfapi/page/cpdf_expintfunc.h
+++ b/core/fpdfapi/page/cpdf_expintfunc.h
@@ -12,7 +12,7 @@
 
 #include "core/fpdfapi/page/cpdf_function.h"
 
-class CPDF_ExpIntFunc : public CPDF_Function {
+class CPDF_ExpIntFunc final : public CPDF_Function {
  public:
   CPDF_ExpIntFunc();
   ~CPDF_ExpIntFunc() override;
diff --git a/core/fpdfapi/page/cpdf_form.h b/core/fpdfapi/page/cpdf_form.h
index 63cc4a9..abb5c40 100644
--- a/core/fpdfapi/page/cpdf_form.h
+++ b/core/fpdfapi/page/cpdf_form.h
@@ -19,7 +19,7 @@
 class CFX_Matrix;
 class CPDF_Type3Char;
 
-class CPDF_Form : public CPDF_PageObjectHolder {
+class CPDF_Form final : public CPDF_PageObjectHolder {
  public:
   CPDF_Form(CPDF_Document* pDocument,
             CPDF_Dictionary* pPageResources,
diff --git a/core/fpdfapi/page/cpdf_formobject.h b/core/fpdfapi/page/cpdf_formobject.h
index b229dce..dc53c45 100644
--- a/core/fpdfapi/page/cpdf_formobject.h
+++ b/core/fpdfapi/page/cpdf_formobject.h
@@ -14,7 +14,7 @@
 
 class CPDF_Form;
 
-class CPDF_FormObject : public CPDF_PageObject {
+class CPDF_FormObject final : public CPDF_PageObject {
  public:
   CPDF_FormObject(int32_t content_stream,
                   std::unique_ptr<CPDF_Form> pForm,
diff --git a/core/fpdfapi/page/cpdf_generalstate.h b/core/fpdfapi/page/cpdf_generalstate.h
index 4a101b9..9ee20db 100644
--- a/core/fpdfapi/page/cpdf_generalstate.h
+++ b/core/fpdfapi/page/cpdf_generalstate.h
@@ -77,7 +77,7 @@
   CFX_Matrix* GetMutableMatrix();
 
  private:
-  class StateData : public Retainable {
+  class StateData final : public Retainable {
    public:
     StateData();
     StateData(const StateData& that);
diff --git a/core/fpdfapi/page/cpdf_iccprofile.h b/core/fpdfapi/page/cpdf_iccprofile.h
index a9e1170..0f13b0b 100644
--- a/core/fpdfapi/page/cpdf_iccprofile.h
+++ b/core/fpdfapi/page/cpdf_iccprofile.h
@@ -16,7 +16,7 @@
 class CLcmsCmm;
 class CPDF_Stream;
 
-class CPDF_IccProfile : public Retainable {
+class CPDF_IccProfile final : public Retainable {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
diff --git a/core/fpdfapi/page/cpdf_image.h b/core/fpdfapi/page/cpdf_image.h
index 4306109..1be9b4d 100644
--- a/core/fpdfapi/page/cpdf_image.h
+++ b/core/fpdfapi/page/cpdf_image.h
@@ -22,7 +22,7 @@
 class PauseIndicatorIface;
 class IFX_SeekableReadStream;
 
-class CPDF_Image : public Retainable {
+class CPDF_Image final : public Retainable {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
diff --git a/core/fpdfapi/page/cpdf_imageobject.h b/core/fpdfapi/page/cpdf_imageobject.h
index d54ef8d..2e01598 100644
--- a/core/fpdfapi/page/cpdf_imageobject.h
+++ b/core/fpdfapi/page/cpdf_imageobject.h
@@ -14,7 +14,7 @@
 
 class CPDF_Image;
 
-class CPDF_ImageObject : public CPDF_PageObject {
+class CPDF_ImageObject final : public CPDF_PageObject {
  public:
   explicit CPDF_ImageObject(int32_t content_stream);
   CPDF_ImageObject();
diff --git a/core/fpdfapi/page/cpdf_page.h b/core/fpdfapi/page/cpdf_page.h
index 44bb6d8..b641253 100644
--- a/core/fpdfapi/page/cpdf_page.h
+++ b/core/fpdfapi/page/cpdf_page.h
@@ -23,7 +23,7 @@
 class CPDF_PageRenderCache;
 class CPDF_PageRenderContext;
 
-class CPDF_Page : public IPDF_Page, public CPDF_PageObjectHolder {
+class CPDF_Page final : public IPDF_Page, public CPDF_PageObjectHolder {
  public:
   class View {};  // Caller implements as desired, empty here due to layering.
 
diff --git a/core/fpdfapi/page/cpdf_pageobjectlist.h b/core/fpdfapi/page/cpdf_pageobjectlist.h
index 77c7d81..1b4bf8f 100644
--- a/core/fpdfapi/page/cpdf_pageobjectlist.h
+++ b/core/fpdfapi/page/cpdf_pageobjectlist.h
@@ -12,7 +12,7 @@
 
 class CPDF_PageObject;
 
-class CPDF_PageObjectList
+class CPDF_PageObjectList final
     : public std::deque<std::unique_ptr<CPDF_PageObject>> {
  public:
   CPDF_PageObject* GetPageObjectByIndex(int index) const;
diff --git a/core/fpdfapi/page/cpdf_pathobject.h b/core/fpdfapi/page/cpdf_pathobject.h
index 5155c40..0a1e4d0 100644
--- a/core/fpdfapi/page/cpdf_pathobject.h
+++ b/core/fpdfapi/page/cpdf_pathobject.h
@@ -12,7 +12,7 @@
 #include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/fx_system.h"
 
-class CPDF_PathObject : public CPDF_PageObject {
+class CPDF_PathObject final : public CPDF_PageObject {
  public:
   explicit CPDF_PathObject(int32_t content_stream);
   CPDF_PathObject();
diff --git a/core/fpdfapi/page/cpdf_patterncs.h b/core/fpdfapi/page/cpdf_patterncs.h
index 23735fd..5de9875 100644
--- a/core/fpdfapi/page/cpdf_patterncs.h
+++ b/core/fpdfapi/page/cpdf_patterncs.h
@@ -13,7 +13,7 @@
 
 class CPDF_Document;
 
-class CPDF_PatternCS : public CPDF_ColorSpace {
+class CPDF_PatternCS final : public CPDF_ColorSpace {
  public:
   explicit CPDF_PatternCS(CPDF_Document* pDoc);
   ~CPDF_PatternCS() override;
diff --git a/core/fpdfapi/page/cpdf_psfunc.h b/core/fpdfapi/page/cpdf_psfunc.h
index 1274c21..b81c2e7 100644
--- a/core/fpdfapi/page/cpdf_psfunc.h
+++ b/core/fpdfapi/page/cpdf_psfunc.h
@@ -14,7 +14,7 @@
 
 class CPDF_Object;
 
-class CPDF_PSFunc : public CPDF_Function {
+class CPDF_PSFunc final : public CPDF_Function {
  public:
   CPDF_PSFunc();
   ~CPDF_PSFunc() override;
diff --git a/core/fpdfapi/page/cpdf_sampledfunc.h b/core/fpdfapi/page/cpdf_sampledfunc.h
index bd12966..579fdce 100644
--- a/core/fpdfapi/page/cpdf_sampledfunc.h
+++ b/core/fpdfapi/page/cpdf_sampledfunc.h
@@ -14,7 +14,7 @@
 #include "core/fpdfapi/parser/cpdf_stream_acc.h"
 #include "core/fxcrt/retain_ptr.h"
 
-class CPDF_SampledFunc : public CPDF_Function {
+class CPDF_SampledFunc final : public CPDF_Function {
  public:
   struct SampleEncodeInfo {
     float encode_max;
diff --git a/core/fpdfapi/page/cpdf_shadingobject.h b/core/fpdfapi/page/cpdf_shadingobject.h
index af88128..c246870 100644
--- a/core/fpdfapi/page/cpdf_shadingobject.h
+++ b/core/fpdfapi/page/cpdf_shadingobject.h
@@ -13,7 +13,7 @@
 
 class CPDF_ShadingPattern;
 
-class CPDF_ShadingObject : public CPDF_PageObject {
+class CPDF_ShadingObject final : public CPDF_PageObject {
  public:
   CPDF_ShadingObject(int32_t content_stream,
                      CPDF_ShadingPattern* pattern,
diff --git a/core/fpdfapi/page/cpdf_shadingpattern.h b/core/fpdfapi/page/cpdf_shadingpattern.h
index d7aa1cb..dbf8087 100644
--- a/core/fpdfapi/page/cpdf_shadingpattern.h
+++ b/core/fpdfapi/page/cpdf_shadingpattern.h
@@ -33,7 +33,7 @@
 class CPDF_Function;
 class CPDF_Object;
 
-class CPDF_ShadingPattern : public CPDF_Pattern {
+class CPDF_ShadingPattern final : public CPDF_Pattern {
  public:
   CPDF_ShadingPattern(CPDF_Document* pDoc,
                       CPDF_Object* pPatternObj,
diff --git a/core/fpdfapi/page/cpdf_stitchfunc.h b/core/fpdfapi/page/cpdf_stitchfunc.h
index 20dac6c..022bd4e 100644
--- a/core/fpdfapi/page/cpdf_stitchfunc.h
+++ b/core/fpdfapi/page/cpdf_stitchfunc.h
@@ -13,7 +13,7 @@
 
 #include "core/fpdfapi/page/cpdf_function.h"
 
-class CPDF_StitchFunc : public CPDF_Function {
+class CPDF_StitchFunc final : public CPDF_Function {
  public:
   CPDF_StitchFunc();
   ~CPDF_StitchFunc() override;
diff --git a/core/fpdfapi/page/cpdf_textobject.h b/core/fpdfapi/page/cpdf_textobject.h
index ac17c6d..9ed5ff7 100644
--- a/core/fpdfapi/page/cpdf_textobject.h
+++ b/core/fpdfapi/page/cpdf_textobject.h
@@ -23,7 +23,7 @@
   CFX_PointF m_Origin;
 };
 
-class CPDF_TextObject : public CPDF_PageObject {
+class CPDF_TextObject final : public CPDF_PageObject {
  public:
   explicit CPDF_TextObject(int32_t content_stream);
   CPDF_TextObject();
diff --git a/core/fpdfapi/page/cpdf_textstate.h b/core/fpdfapi/page/cpdf_textstate.h
index aa12807..c1c3ba8 100644
--- a/core/fpdfapi/page/cpdf_textstate.h
+++ b/core/fpdfapi/page/cpdf_textstate.h
@@ -59,7 +59,7 @@
   float* GetMutableCTM();
 
  private:
-  class TextData : public Retainable {
+  class TextData final : public Retainable {
    public:
     TextData();
     TextData(const TextData& src);
diff --git a/core/fpdfapi/page/cpdf_tilingpattern.h b/core/fpdfapi/page/cpdf_tilingpattern.h
index d9450d7..c79708d 100644
--- a/core/fpdfapi/page/cpdf_tilingpattern.h
+++ b/core/fpdfapi/page/cpdf_tilingpattern.h
@@ -17,7 +17,7 @@
 class CPDF_Form;
 class CPDF_Object;
 
-class CPDF_TilingPattern : public CPDF_Pattern {
+class CPDF_TilingPattern final : public CPDF_Pattern {
  public:
   CPDF_TilingPattern(CPDF_Document* pDoc,
                      CPDF_Object* pPatternObj,
diff --git a/core/fpdfapi/parser/cfdf_document.h b/core/fpdfapi/parser/cfdf_document.h
index 6efaa4c..6ab751e 100644
--- a/core/fpdfapi/parser/cfdf_document.h
+++ b/core/fpdfapi/parser/cfdf_document.h
@@ -17,7 +17,7 @@
 class CPDF_Dictionary;
 class IFX_SeekableReadStream;
 
-class CFDF_Document : public CPDF_IndirectObjectHolder {
+class CFDF_Document final : public CPDF_IndirectObjectHolder {
  public:
   static std::unique_ptr<CFDF_Document> CreateNewDoc();
   static std::unique_ptr<CFDF_Document> ParseMemory(
diff --git a/core/fpdfapi/parser/cpdf_array.h b/core/fpdfapi/parser/cpdf_array.h
index 1e63983..0c9251c 100644
--- a/core/fpdfapi/parser/cpdf_array.h
+++ b/core/fpdfapi/parser/cpdf_array.h
@@ -18,7 +18,7 @@
 #include "core/fxcrt/fx_coordinates.h"
 #include "third_party/base/ptr_util.h"
 
-class CPDF_Array : public CPDF_Object {
+class CPDF_Array final : public CPDF_Object {
  public:
   using const_iterator =
       std::vector<std::unique_ptr<CPDF_Object>>::const_iterator;
diff --git a/core/fpdfapi/parser/cpdf_boolean.h b/core/fpdfapi/parser/cpdf_boolean.h
index 61c213b..406381b 100644
--- a/core/fpdfapi/parser/cpdf_boolean.h
+++ b/core/fpdfapi/parser/cpdf_boolean.h
@@ -13,7 +13,7 @@
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
 
-class CPDF_Boolean : public CPDF_Object {
+class CPDF_Boolean final : public CPDF_Object {
  public:
   CPDF_Boolean();
   explicit CPDF_Boolean(bool value);
diff --git a/core/fpdfapi/parser/cpdf_dictionary.h b/core/fpdfapi/parser/cpdf_dictionary.h
index 5cd0e8b..4930e5e 100644
--- a/core/fpdfapi/parser/cpdf_dictionary.h
+++ b/core/fpdfapi/parser/cpdf_dictionary.h
@@ -21,7 +21,7 @@
 
 class CPDF_IndirectObjectHolder;
 
-class CPDF_Dictionary : public CPDF_Object {
+class CPDF_Dictionary final : public CPDF_Object {
  public:
   using const_iterator =
       std::map<ByteString, std::unique_ptr<CPDF_Object>>::const_iterator;
diff --git a/core/fpdfapi/parser/cpdf_document_unittest.cpp b/core/fpdfapi/parser/cpdf_document_unittest.cpp
index c64da63..daaab5d 100644
--- a/core/fpdfapi/parser/cpdf_document_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_document_unittest.cpp
@@ -47,7 +47,7 @@
   return page;
 }
 
-class CPDF_TestDocumentForPages : public CPDF_Document {
+class CPDF_TestDocumentForPages final : public CPDF_Document {
  public:
   CPDF_TestDocumentForPages() : CPDF_Document() {
     // Set up test
@@ -99,7 +99,7 @@
   }
 };
 
-class CPDF_TestDocumentWithPageWithoutPageNum : public CPDF_Document {
+class CPDF_TestDocumentWithPageWithoutPageNum final : public CPDF_Document {
  public:
   CPDF_TestDocumentWithPageWithoutPageNum() : CPDF_Document() {
     // Set up test
@@ -124,13 +124,13 @@
   const CPDF_Object* inlined_page_;
 };
 
-class TestLinearized : public CPDF_LinearizedHeader {
+class TestLinearized final : public CPDF_LinearizedHeader {
  public:
   explicit TestLinearized(CPDF_Dictionary* dict)
       : CPDF_LinearizedHeader(dict, 0) {}
 };
 
-class CPDF_TestDocPagesWithoutKids : public CPDF_Document {
+class CPDF_TestDocPagesWithoutKids final : public CPDF_Document {
  public:
   CPDF_TestDocPagesWithoutKids() : CPDF_Document() {
     CPDF_Dictionary* pagesDict = NewIndirect<CPDF_Dictionary>();
@@ -143,7 +143,7 @@
   }
 };
 
-class CPDF_TestDocumentAllowSetParser : public CPDF_Document {
+class CPDF_TestDocumentAllowSetParser final : public CPDF_Document {
  public:
   using CPDF_Document::SetParser;
 };
diff --git a/core/fpdfapi/parser/cpdf_hint_tables_unittest.cpp b/core/fpdfapi/parser/cpdf_hint_tables_unittest.cpp
index c372d74..c3b05ac 100644
--- a/core/fpdfapi/parser/cpdf_hint_tables_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_hint_tables_unittest.cpp
@@ -40,7 +40,7 @@
       nullptr, MakeValidatorFromFile(file_name), true);
 }
 
-class TestLinearizedHeader : public CPDF_LinearizedHeader {
+class TestLinearizedHeader final : public CPDF_LinearizedHeader {
  public:
   TestLinearizedHeader(const CPDF_Dictionary* pDict,
                        FX_FILESIZE szLastXRefOffset)
diff --git a/core/fpdfapi/parser/cpdf_indirect_object_holder_unittest.cpp b/core/fpdfapi/parser/cpdf_indirect_object_holder_unittest.cpp
index 666264f..6f913ca 100644
--- a/core/fpdfapi/parser/cpdf_indirect_object_holder_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_indirect_object_holder_unittest.cpp
@@ -14,7 +14,7 @@
 
 namespace {
 
-class MockIndirectObjectHolder : public CPDF_IndirectObjectHolder {
+class MockIndirectObjectHolder final : public CPDF_IndirectObjectHolder {
  public:
   MockIndirectObjectHolder() {}
   ~MockIndirectObjectHolder() override {}
diff --git a/core/fpdfapi/parser/cpdf_name.h b/core/fpdfapi/parser/cpdf_name.h
index eef6bca..1ef6c64 100644
--- a/core/fpdfapi/parser/cpdf_name.h
+++ b/core/fpdfapi/parser/cpdf_name.h
@@ -13,7 +13,7 @@
 #include "core/fxcrt/string_pool_template.h"
 #include "core/fxcrt/weak_ptr.h"
 
-class CPDF_Name : public CPDF_Object {
+class CPDF_Name final : public CPDF_Object {
  public:
   CPDF_Name(WeakPtr<ByteStringPool> pPool, const ByteString& str);
   ~CPDF_Name() override;
diff --git a/core/fpdfapi/parser/cpdf_null.h b/core/fpdfapi/parser/cpdf_null.h
index 003ad2f..c72d3b0 100644
--- a/core/fpdfapi/parser/cpdf_null.h
+++ b/core/fpdfapi/parser/cpdf_null.h
@@ -11,7 +11,7 @@
 
 #include "core/fpdfapi/parser/cpdf_object.h"
 
-class CPDF_Null : public CPDF_Object {
+class CPDF_Null final : public CPDF_Object {
  public:
   CPDF_Null();
 
diff --git a/core/fpdfapi/parser/cpdf_number.h b/core/fpdfapi/parser/cpdf_number.h
index 4681bb2..b5faf82 100644
--- a/core/fpdfapi/parser/cpdf_number.h
+++ b/core/fpdfapi/parser/cpdf_number.h
@@ -13,7 +13,7 @@
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
 
-class CPDF_Number : public CPDF_Object {
+class CPDF_Number final : public CPDF_Object {
  public:
   CPDF_Number();
   explicit CPDF_Number(int value);
diff --git a/core/fpdfapi/parser/cpdf_object_avail_unittest.cpp b/core/fpdfapi/parser/cpdf_object_avail_unittest.cpp
index 5c3da70..e2b23d4 100644
--- a/core/fpdfapi/parser/cpdf_object_avail_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_object_avail_unittest.cpp
@@ -20,7 +20,7 @@
 
 namespace {
 
-class TestReadValidator : public CPDF_ReadValidator {
+class TestReadValidator final : public CPDF_ReadValidator {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
@@ -35,7 +35,7 @@
   ~TestReadValidator() override {}
 };
 
-class TestHolder : public CPDF_IndirectObjectHolder {
+class TestHolder final : public CPDF_IndirectObjectHolder {
  public:
   enum class ObjectState {
     Unavailable,
@@ -93,7 +93,7 @@
   RetainPtr<TestReadValidator> validator_;
 };
 
-class CPDF_ObjectAvailFailOnExclude : public CPDF_ObjectAvail {
+class CPDF_ObjectAvailFailOnExclude final : public CPDF_ObjectAvail {
  public:
   using CPDF_ObjectAvail::CPDF_ObjectAvail;
   ~CPDF_ObjectAvailFailOnExclude() override {}
@@ -103,7 +103,7 @@
   }
 };
 
-class CPDF_ObjectAvailExcludeArray : public CPDF_ObjectAvail {
+class CPDF_ObjectAvailExcludeArray final : public CPDF_ObjectAvail {
  public:
   using CPDF_ObjectAvail::CPDF_ObjectAvail;
   ~CPDF_ObjectAvailExcludeArray() override {}
@@ -112,7 +112,7 @@
   }
 };
 
-class CPDF_ObjectAvailExcludeTypeKey : public CPDF_ObjectAvail {
+class CPDF_ObjectAvailExcludeTypeKey final : public CPDF_ObjectAvail {
  public:
   using CPDF_ObjectAvail::CPDF_ObjectAvail;
   ~CPDF_ObjectAvailExcludeTypeKey() override {}
diff --git a/core/fpdfapi/parser/cpdf_object_walker.cpp b/core/fpdfapi/parser/cpdf_object_walker.cpp
index 8424c0f..9163866 100644
--- a/core/fpdfapi/parser/cpdf_object_walker.cpp
+++ b/core/fpdfapi/parser/cpdf_object_walker.cpp
@@ -12,7 +12,7 @@
 
 namespace {
 
-class StreamIterator : public CPDF_ObjectWalker::SubobjectIterator {
+class StreamIterator final : public CPDF_ObjectWalker::SubobjectIterator {
  public:
   explicit StreamIterator(const CPDF_Stream* stream)
       : SubobjectIterator(stream) {}
@@ -33,7 +33,7 @@
   bool is_finished_ = false;
 };
 
-class DictionaryIterator : public CPDF_ObjectWalker::SubobjectIterator {
+class DictionaryIterator final : public CPDF_ObjectWalker::SubobjectIterator {
  public:
   explicit DictionaryIterator(const CPDF_Dictionary* dictionary)
       : SubobjectIterator(dictionary) {}
@@ -64,7 +64,7 @@
   ByteString dict_key_;
 };
 
-class ArrayIterator : public CPDF_ObjectWalker::SubobjectIterator {
+class ArrayIterator final : public CPDF_ObjectWalker::SubobjectIterator {
  public:
   explicit ArrayIterator(const CPDF_Array* array) : SubobjectIterator(array) {}
 
diff --git a/core/fpdfapi/parser/cpdf_object_walker.h b/core/fpdfapi/parser/cpdf_object_walker.h
index 57506b9..e0fd35d 100644
--- a/core/fpdfapi/parser/cpdf_object_walker.h
+++ b/core/fpdfapi/parser/cpdf_object_walker.h
@@ -55,7 +55,7 @@
   std::stack<std::unique_ptr<SubobjectIterator>> stack_;
 };
 
-class CPDF_NonConstObjectWalker : public CPDF_ObjectWalker {
+class CPDF_NonConstObjectWalker final : public CPDF_ObjectWalker {
  public:
   explicit CPDF_NonConstObjectWalker(CPDF_Object* root)
       : CPDF_ObjectWalker(root) {}
diff --git a/core/fpdfapi/parser/cpdf_page_object_avail.h b/core/fpdfapi/parser/cpdf_page_object_avail.h
index 8c740ed..b62ca4c 100644
--- a/core/fpdfapi/parser/cpdf_page_object_avail.h
+++ b/core/fpdfapi/parser/cpdf_page_object_avail.h
@@ -9,7 +9,7 @@
 
 // Helper for check availability of page's object tree.
 // Exclude references to pages.
-class CPDF_PageObjectAvail : public CPDF_ObjectAvail {
+class CPDF_PageObjectAvail final : public CPDF_ObjectAvail {
  public:
   using CPDF_ObjectAvail::CPDF_ObjectAvail;
   ~CPDF_PageObjectAvail() override;
diff --git a/core/fpdfapi/parser/cpdf_page_object_avail_unittest.cpp b/core/fpdfapi/parser/cpdf_page_object_avail_unittest.cpp
index 14ba0e3..f278b6e 100644
--- a/core/fpdfapi/parser/cpdf_page_object_avail_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_page_object_avail_unittest.cpp
@@ -21,8 +21,7 @@
 
 namespace {
 
-
-class TestReadValidator : public CPDF_ReadValidator {
+class TestReadValidator final : public CPDF_ReadValidator {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
@@ -37,7 +36,7 @@
   ~TestReadValidator() override {}
 };
 
-class TestHolder : public CPDF_IndirectObjectHolder {
+class TestHolder final : public CPDF_IndirectObjectHolder {
  public:
   enum class ObjectState {
     Unavailable,
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index 0298515..32629bc 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -47,7 +47,7 @@
   return result;
 }
 
-class ObjectsHolderStub : public CPDF_Parser::ParsedObjectsHolder {
+class ObjectsHolderStub final : public CPDF_Parser::ParsedObjectsHolder {
  public:
   ObjectsHolderStub() = default;
   ~ObjectsHolderStub() override = default;
diff --git a/core/fpdfapi/parser/cpdf_parser_unittest.cpp b/core/fpdfapi/parser/cpdf_parser_unittest.cpp
index 00f3770..28c907a 100644
--- a/core/fpdfapi/parser/cpdf_parser_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_parser_unittest.cpp
@@ -29,7 +29,7 @@
 }  // namespace
 
 // A wrapper class to help test member functions of CPDF_Parser.
-class CPDF_TestParser : public CPDF_Parser {
+class CPDF_TestParser final : public CPDF_Parser {
  public:
   CPDF_TestParser() {}
   ~CPDF_TestParser() {}
diff --git a/core/fpdfapi/parser/cpdf_read_validator_unittest.cpp b/core/fpdfapi/parser/cpdf_read_validator_unittest.cpp
index 6402698..cf8b9b6 100644
--- a/core/fpdfapi/parser/cpdf_read_validator_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_read_validator_unittest.cpp
@@ -20,7 +20,7 @@
   return std::pair<FX_FILESIZE, FX_FILESIZE>(start, end);
 }
 
-class MockFileAvail : public CPDF_DataAvail::FileAvail {
+class MockFileAvail final : public CPDF_DataAvail::FileAvail {
  public:
   MockFileAvail() : available_range_(0, 0) {}
   ~MockFileAvail() override {}
@@ -42,7 +42,7 @@
   std::pair<FX_FILESIZE, FX_FILESIZE> available_range_;
 };
 
-class MockDownloadHints : public CPDF_DataAvail::DownloadHints {
+class MockDownloadHints final : public CPDF_DataAvail::DownloadHints {
  public:
   MockDownloadHints() : last_requested_range_(0, 0) {}
   ~MockDownloadHints() override {}
diff --git a/core/fpdfapi/parser/cpdf_reference.h b/core/fpdfapi/parser/cpdf_reference.h
index cdb5d5e..cb9c6ed 100644
--- a/core/fpdfapi/parser/cpdf_reference.h
+++ b/core/fpdfapi/parser/cpdf_reference.h
@@ -15,7 +15,7 @@
 
 class CPDF_IndirectObjectHolder;
 
-class CPDF_Reference : public CPDF_Object {
+class CPDF_Reference final : public CPDF_Object {
  public:
   CPDF_Reference(CPDF_IndirectObjectHolder* pDoc, uint32_t objnum);
   ~CPDF_Reference() override;
diff --git a/core/fpdfapi/parser/cpdf_stream.h b/core/fpdfapi/parser/cpdf_stream.h
index 3deb9cd..9d8cf6d 100644
--- a/core/fpdfapi/parser/cpdf_stream.h
+++ b/core/fpdfapi/parser/cpdf_stream.h
@@ -15,7 +15,7 @@
 #include "core/fpdfapi/parser/cpdf_object.h"
 #include "core/fxcrt/fx_stream.h"
 
-class CPDF_Stream : public CPDF_Object {
+class CPDF_Stream final : public CPDF_Object {
  public:
   CPDF_Stream();
   CPDF_Stream(std::unique_ptr<uint8_t, FxFreeDeleter> pData,
diff --git a/core/fpdfapi/parser/cpdf_stream_acc.h b/core/fpdfapi/parser/cpdf_stream_acc.h
index 5d18723..fae8ba0 100644
--- a/core/fpdfapi/parser/cpdf_stream_acc.h
+++ b/core/fpdfapi/parser/cpdf_stream_acc.h
@@ -16,7 +16,7 @@
 #include "core/fxcrt/retain_ptr.h"
 #include "third_party/base/span.h"
 
-class CPDF_StreamAcc : public Retainable {
+class CPDF_StreamAcc final : public Retainable {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
diff --git a/core/fpdfapi/parser/cpdf_stream_acc_unittest.cpp b/core/fpdfapi/parser/cpdf_stream_acc_unittest.cpp
index dcebf0b..1fbb342 100644
--- a/core/fpdfapi/parser/cpdf_stream_acc_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_stream_acc_unittest.cpp
@@ -12,7 +12,7 @@
 
 namespace {
 
-class InvalidStream : public IFX_SeekableReadStream {
+class InvalidStream final : public IFX_SeekableReadStream {
  public:
   InvalidStream() = default;
   ~InvalidStream() override = default;
diff --git a/core/fpdfapi/parser/cpdf_string.h b/core/fpdfapi/parser/cpdf_string.h
index 144fe64..75cc3c4 100644
--- a/core/fpdfapi/parser/cpdf_string.h
+++ b/core/fpdfapi/parser/cpdf_string.h
@@ -15,7 +15,7 @@
 #include "core/fxcrt/string_pool_template.h"
 #include "core/fxcrt/weak_ptr.h"
 
-class CPDF_String : public CPDF_Object {
+class CPDF_String final : public CPDF_Object {
  public:
   CPDF_String();
   CPDF_String(WeakPtr<ByteStringPool> pPool, const ByteString& str, bool bHex);
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.cpp b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
index 65a8d78..bba96d9 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
@@ -34,7 +34,7 @@
 
 enum class ReadStatus { Normal, Backslash, Octal, FinishOctal, CarriageReturn };
 
-class ReadableSubStream : public IFX_SeekableReadStream {
+class ReadableSubStream final : public IFX_SeekableReadStream {
  public:
   ReadableSubStream(const RetainPtr<IFX_SeekableReadStream>& pFileRead,
                     FX_FILESIZE part_offset,
diff --git a/core/fpdfapi/render/cpdf_dibbase.h b/core/fpdfapi/render/cpdf_dibbase.h
index a100847..423069d 100644
--- a/core/fpdfapi/render/cpdf_dibbase.h
+++ b/core/fpdfapi/render/cpdf_dibbase.h
@@ -39,7 +39,7 @@
 
 #define FPDF_HUGE_IMAGE_SIZE 60000000
 
-class CPDF_DIBBase : public CFX_DIBBase {
+class CPDF_DIBBase final : public CFX_DIBBase {
  public:
   enum class LoadState : uint8_t { kFail, kSuccess, kContinue };
 
diff --git a/core/fpdfapi/render/cpdf_dibtransferfunc.h b/core/fpdfapi/render/cpdf_dibtransferfunc.h
index 61abd2e..62e0157 100644
--- a/core/fpdfapi/render/cpdf_dibtransferfunc.h
+++ b/core/fpdfapi/render/cpdf_dibtransferfunc.h
@@ -15,7 +15,7 @@
 
 class CPDF_TransferFunc;
 
-class CPDF_DIBTransferFunc : public CFX_FilteredDIB {
+class CPDF_DIBTransferFunc final : public CFX_FilteredDIB {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
diff --git a/core/fpdfapi/render/cpdf_transferfunc.h b/core/fpdfapi/render/cpdf_transferfunc.h
index e896472..d45184e 100644
--- a/core/fpdfapi/render/cpdf_transferfunc.h
+++ b/core/fpdfapi/render/cpdf_transferfunc.h
@@ -14,7 +14,7 @@
 class CPDF_Document;
 class CFX_DIBBase;
 
-class CPDF_TransferFunc : public Retainable {
+class CPDF_TransferFunc final : public Retainable {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
diff --git a/core/fpdfapi/render/cpdf_type3cache.h b/core/fpdfapi/render/cpdf_type3cache.h
index f0bfbd6..de802c5 100644
--- a/core/fpdfapi/render/cpdf_type3cache.h
+++ b/core/fpdfapi/render/cpdf_type3cache.h
@@ -18,7 +18,7 @@
 
 class CPDF_Type3Glyphs;
 
-class CPDF_Type3Cache : public Retainable {
+class CPDF_Type3Cache final : public Retainable {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
diff --git a/core/fpdfdoc/cpdf_occontext.h b/core/fpdfdoc/cpdf_occontext.h
index 6776361..16b28ba 100644
--- a/core/fpdfdoc/cpdf_occontext.h
+++ b/core/fpdfdoc/cpdf_occontext.h
@@ -17,7 +17,7 @@
 class CPDF_Document;
 class CPDF_PageObject;
 
-class CPDF_OCContext : public Retainable {
+class CPDF_OCContext final : public Retainable {
  public:
   enum UsageType { View = 0, Design, Print, Export };
 
diff --git a/core/fpdfdoc/cpdf_structelement.h b/core/fpdfdoc/cpdf_structelement.h
index 79e8dd9..355599f 100644
--- a/core/fpdfdoc/cpdf_structelement.h
+++ b/core/fpdfdoc/cpdf_structelement.h
@@ -34,7 +34,7 @@
   uint32_t m_ContentId;   // For PageContent, StreamContent.
 };
 
-class CPDF_StructElement : public Retainable {
+class CPDF_StructElement final : public Retainable {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
diff --git a/core/fpdfdoc/cpvt_floatrect.h b/core/fpdfdoc/cpvt_floatrect.h
index c5eb220..4dca3aa 100644
--- a/core/fpdfdoc/cpvt_floatrect.h
+++ b/core/fpdfdoc/cpvt_floatrect.h
@@ -9,7 +9,7 @@
 
 #include "core/fxcrt/fx_coordinates.h"
 
-class CPVT_FloatRect : public CFX_FloatRect {
+class CPVT_FloatRect final : public CFX_FloatRect {
  public:
   CPVT_FloatRect() { left = top = right = bottom = 0.0f; }
 
diff --git a/core/fpdfdoc/cpvt_fontmap.h b/core/fpdfdoc/cpvt_fontmap.h
index f1a2775..6d8ca06 100644
--- a/core/fpdfdoc/cpvt_fontmap.h
+++ b/core/fpdfdoc/cpvt_fontmap.h
@@ -17,7 +17,7 @@
 class CPDF_Dictionary;
 class CPDF_Font;
 
-class CPVT_FontMap : public IPVT_FontMap {
+class CPVT_FontMap final : public IPVT_FontMap {
  public:
   CPVT_FontMap(CPDF_Document* pDoc,
                CPDF_Dictionary* pResDict,
diff --git a/core/fpdftext/cpdf_linkextract_unittest.cpp b/core/fpdftext/cpdf_linkextract_unittest.cpp
index 30438e6..f4bd197 100644
--- a/core/fpdftext/cpdf_linkextract_unittest.cpp
+++ b/core/fpdftext/cpdf_linkextract_unittest.cpp
@@ -7,7 +7,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 // Class to help test functions in CPDF_LinkExtract class.
-class CPDF_TestLinkExtract : public CPDF_LinkExtract {
+class CPDF_TestLinkExtract final : public CPDF_LinkExtract {
  public:
   CPDF_TestLinkExtract() : CPDF_LinkExtract(nullptr) {}
 
diff --git a/core/fxcodec/bmp/cfx_bmpcontext.h b/core/fxcodec/bmp/cfx_bmpcontext.h
index 198d080..89e6463 100644
--- a/core/fxcodec/bmp/cfx_bmpcontext.h
+++ b/core/fxcodec/bmp/cfx_bmpcontext.h
@@ -10,7 +10,7 @@
 #include "core/fxcodec/bmp/cfx_bmpdecompressor.h"
 #include "core/fxcodec/bmp/fx_bmp.h"
 
-class CFX_BmpContext : public CCodec_BmpModule::Context {
+class CFX_BmpContext final : public CCodec_BmpModule::Context {
  public:
   CFX_BmpContext(CCodec_BmpModule* pModule,
                  CCodec_BmpModule::Delegate* pDelegate);
diff --git a/core/fxcodec/codec/ccodec_pngmodule.cpp b/core/fxcodec/codec/ccodec_pngmodule.cpp
index 98db4e2..2c22f6b 100644
--- a/core/fxcodec/codec/ccodec_pngmodule.cpp
+++ b/core/fxcodec/codec/ccodec_pngmodule.cpp
@@ -23,7 +23,7 @@
 
 #define PNG_ERROR_SIZE 256
 
-class CPngContext : public CCodec_PngModule::Context {
+class CPngContext final : public CCodec_PngModule::Context {
  public:
   CPngContext(CCodec_PngModule* pModule, CCodec_PngModule::Delegate* pDelegate);
   ~CPngContext() override;
diff --git a/core/fxcodec/codec/ccodec_tiffmodule.cpp b/core/fxcodec/codec/ccodec_tiffmodule.cpp
index 5f74b28..78f631c 100644
--- a/core/fxcodec/codec/ccodec_tiffmodule.cpp
+++ b/core/fxcodec/codec/ccodec_tiffmodule.cpp
@@ -32,7 +32,7 @@
 
 }  // namespace
 
-class CTiffContext : public CCodec_TiffModule::Context {
+class CTiffContext final : public CCodec_TiffModule::Context {
  public:
   CTiffContext() = default;
   ~CTiffContext() override = default;
diff --git a/core/fxcodec/codec/cfx_codec_memory.h b/core/fxcodec/codec/cfx_codec_memory.h
index e726dc5..2907e89 100644
--- a/core/fxcodec/codec/cfx_codec_memory.h
+++ b/core/fxcodec/codec/cfx_codec_memory.h
@@ -8,7 +8,7 @@
 #include "core/fxcrt/retain_ptr.h"
 #include "third_party/base/span.h"
 
-class CFX_CodecMemory : public Retainable {
+class CFX_CodecMemory final : public Retainable {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
diff --git a/core/fxcodec/codec/fx_codec.cpp b/core/fxcodec/codec/fx_codec.cpp
index 54245a5..053aa71 100644
--- a/core/fxcodec/codec/fx_codec.cpp
+++ b/core/fxcodec/codec/fx_codec.cpp
@@ -1517,7 +1517,7 @@
 }
 #endif  // PDF_ENABLE_XFA
 
-class CCodec_RLScanlineDecoder : public CCodec_ScanlineDecoder {
+class CCodec_RLScanlineDecoder final : public CCodec_ScanlineDecoder {
  public:
   CCodec_RLScanlineDecoder();
   ~CCodec_RLScanlineDecoder() override;
diff --git a/core/fxcodec/codec/fx_codec_fax.cpp b/core/fxcodec/codec/fx_codec_fax.cpp
index aabc110..c6e71b6 100644
--- a/core/fxcodec/codec/fx_codec_fax.cpp
+++ b/core/fxcodec/codec/fx_codec_fax.cpp
@@ -447,7 +447,7 @@
 
 }  // namespace
 
-class CCodec_FaxDecoder : public CCodec_ScanlineDecoder {
+class CCodec_FaxDecoder final : public CCodec_ScanlineDecoder {
  public:
   CCodec_FaxDecoder(const uint8_t* src_buf,
                     uint32_t src_size,
diff --git a/core/fxcodec/codec/fx_codec_flate.cpp b/core/fxcodec/codec/fx_codec_flate.cpp
index 39d27a4..11bdf67 100644
--- a/core/fxcodec/codec/fx_codec_flate.cpp
+++ b/core/fxcodec/codec/fx_codec_flate.cpp
@@ -623,7 +623,7 @@
   return FlateGetPossiblyTruncatedTotalIn(m_pFlate.get());
 }
 
-class CCodec_FlatePredictorScanlineDecoder
+class CCodec_FlatePredictorScanlineDecoder final
     : public CCodec_FlateScanlineDecoder {
  public:
   CCodec_FlatePredictorScanlineDecoder(const uint8_t* src_buf,
diff --git a/core/fxcodec/codec/fx_codec_jpeg.cpp b/core/fxcodec/codec/fx_codec_jpeg.cpp
index 4c37465..d8e94b0 100644
--- a/core/fxcodec/codec/fx_codec_jpeg.cpp
+++ b/core/fxcodec/codec/fx_codec_jpeg.cpp
@@ -29,7 +29,7 @@
 #endif
 }  // extern "C"
 
-class CJpegContext : public CCodec_JpegModule::Context {
+class CJpegContext final : public CCodec_JpegModule::Context {
  public:
   CJpegContext();
   ~CJpegContext() override;
@@ -162,7 +162,7 @@
   return true;
 }
 
-class CCodec_JpegDecoder : public CCodec_ScanlineDecoder {
+class CCodec_JpegDecoder final : public CCodec_ScanlineDecoder {
  public:
   CCodec_JpegDecoder();
   ~CCodec_JpegDecoder() override;
diff --git a/core/fxcodec/gif/cfx_gifcontext_unittest.cpp b/core/fxcodec/gif/cfx_gifcontext_unittest.cpp
index 0d8941f..25f12b2 100644
--- a/core/fxcodec/gif/cfx_gifcontext_unittest.cpp
+++ b/core/fxcodec/gif/cfx_gifcontext_unittest.cpp
@@ -7,7 +7,7 @@
 #include "core/fxcrt/unowned_ptr.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-class CFX_GifContextForTest : public CFX_GifContext {
+class CFX_GifContextForTest final : public CFX_GifContext {
  public:
   CFX_GifContextForTest(CCodec_GifModule* gif_module,
                         CCodec_GifModule::Delegate* delegate)
diff --git a/core/fxcrt/cfx_fileaccess_posix.h b/core/fxcrt/cfx_fileaccess_posix.h
index 381f115..7b8230d 100644
--- a/core/fxcrt/cfx_fileaccess_posix.h
+++ b/core/fxcrt/cfx_fileaccess_posix.h
@@ -16,7 +16,7 @@
 #error "Included on the wrong platform"
 #endif
 
-class CFX_FileAccess_Posix : public FileAccessIface {
+class CFX_FileAccess_Posix final : public FileAccessIface {
  public:
   CFX_FileAccess_Posix();
   ~CFX_FileAccess_Posix() override;
diff --git a/core/fxcrt/cfx_fileaccess_windows.h b/core/fxcrt/cfx_fileaccess_windows.h
index 4352a2b..fad2ed6 100644
--- a/core/fxcrt/cfx_fileaccess_windows.h
+++ b/core/fxcrt/cfx_fileaccess_windows.h
@@ -14,7 +14,7 @@
 #error "Included on the wrong platform"
 #endif
 
-class CFX_FileAccess_Windows : public FileAccessIface {
+class CFX_FileAccess_Windows final : public FileAccessIface {
  public:
   CFX_FileAccess_Windows();
   ~CFX_FileAccess_Windows() override;
diff --git a/core/fxcrt/cfx_memorystream.h b/core/fxcrt/cfx_memorystream.h
index 99e39a8..c09c390 100644
--- a/core/fxcrt/cfx_memorystream.h
+++ b/core/fxcrt/cfx_memorystream.h
@@ -13,7 +13,7 @@
 #include "core/fxcrt/fx_stream.h"
 #include "core/fxcrt/retain_ptr.h"
 
-class CFX_MemoryStream : public IFX_SeekableStream {
+class CFX_MemoryStream final : public IFX_SeekableStream {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
diff --git a/core/fxcrt/cfx_seekablemultistream.h b/core/fxcrt/cfx_seekablemultistream.h
index 4bd26b9..ac15386 100644
--- a/core/fxcrt/cfx_seekablemultistream.h
+++ b/core/fxcrt/cfx_seekablemultistream.h
@@ -15,7 +15,7 @@
 class CPDF_Stream;
 class CPDF_StreamAcc;
 
-class CFX_SeekableMultiStream : public IFX_SeekableStream {
+class CFX_SeekableMultiStream final : public IFX_SeekableStream {
  public:
   explicit CFX_SeekableMultiStream(
       const std::vector<const CPDF_Stream*>& streams);
diff --git a/core/fxcrt/cfx_seekablestreamproxy.h b/core/fxcrt/cfx_seekablestreamproxy.h
index 9b6b3a1..b193b18 100644
--- a/core/fxcrt/cfx_seekablestreamproxy.h
+++ b/core/fxcrt/cfx_seekablestreamproxy.h
@@ -13,7 +13,7 @@
 #include "core/fxcrt/fx_system.h"
 #include "core/fxcrt/retain_ptr.h"
 
-class CFX_SeekableStreamProxy : public IFX_SeekableReadStream {
+class CFX_SeekableStreamProxy final : public IFX_SeekableReadStream {
  public:
   enum class From {
     Begin = 0,
diff --git a/core/fxcrt/cfx_widetextbuf.h b/core/fxcrt/cfx_widetextbuf.h
index 84553a3..483f75d 100644
--- a/core/fxcrt/cfx_widetextbuf.h
+++ b/core/fxcrt/cfx_widetextbuf.h
@@ -11,7 +11,7 @@
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
 
-class CFX_WideTextBuf : public CFX_BinaryBuf {
+class CFX_WideTextBuf final : public CFX_BinaryBuf {
  public:
   void AppendChar(wchar_t wch);
   size_t GetLength() const override;
diff --git a/core/fxcrt/css/cfx_csscolorvalue.h b/core/fxcrt/css/cfx_csscolorvalue.h
index f59c0c5..0156caa 100644
--- a/core/fxcrt/css/cfx_csscolorvalue.h
+++ b/core/fxcrt/css/cfx_csscolorvalue.h
@@ -9,7 +9,7 @@
 
 #include "core/fxcrt/css/cfx_cssvalue.h"
 
-class CFX_CSSColorValue : public CFX_CSSValue {
+class CFX_CSSColorValue final : public CFX_CSSValue {
  public:
   explicit CFX_CSSColorValue(FX_ARGB color);
   ~CFX_CSSColorValue() override;
diff --git a/core/fxcrt/css/cfx_csscomputedstyle.h b/core/fxcrt/css/cfx_csscomputedstyle.h
index 5080a7a..f97f3f1 100644
--- a/core/fxcrt/css/cfx_csscomputedstyle.h
+++ b/core/fxcrt/css/cfx_csscomputedstyle.h
@@ -15,7 +15,7 @@
 
 class CFX_CSSValueList;
 
-class CFX_CSSComputedStyle : public Retainable {
+class CFX_CSSComputedStyle final : public Retainable {
  public:
   class InheritedData {
    public:
diff --git a/core/fxcrt/css/cfx_cssenumvalue.h b/core/fxcrt/css/cfx_cssenumvalue.h
index 0d6b87e..c397761 100644
--- a/core/fxcrt/css/cfx_cssenumvalue.h
+++ b/core/fxcrt/css/cfx_cssenumvalue.h
@@ -9,7 +9,7 @@
 
 #include "core/fxcrt/css/cfx_cssvalue.h"
 
-class CFX_CSSEnumValue : public CFX_CSSValue {
+class CFX_CSSEnumValue final : public CFX_CSSValue {
  public:
   explicit CFX_CSSEnumValue(CFX_CSSPropertyValue value);
   ~CFX_CSSEnumValue() override;
diff --git a/core/fxcrt/css/cfx_cssnumbervalue.h b/core/fxcrt/css/cfx_cssnumbervalue.h
index a49328d..a977750 100644
--- a/core/fxcrt/css/cfx_cssnumbervalue.h
+++ b/core/fxcrt/css/cfx_cssnumbervalue.h
@@ -23,7 +23,7 @@
   Picas,
 };
 
-class CFX_CSSNumberValue : public CFX_CSSValue {
+class CFX_CSSNumberValue final : public CFX_CSSValue {
  public:
   CFX_CSSNumberValue(CFX_CSSNumberType type, float value);
   ~CFX_CSSNumberValue() override;
diff --git a/core/fxcrt/css/cfx_cssstringvalue.h b/core/fxcrt/css/cfx_cssstringvalue.h
index d72078a..d49393c 100644
--- a/core/fxcrt/css/cfx_cssstringvalue.h
+++ b/core/fxcrt/css/cfx_cssstringvalue.h
@@ -9,7 +9,7 @@
 
 #include "core/fxcrt/css/cfx_cssvalue.h"
 
-class CFX_CSSStringValue : public CFX_CSSValue {
+class CFX_CSSStringValue final : public CFX_CSSValue {
  public:
   explicit CFX_CSSStringValue(const WideString& value);
   ~CFX_CSSStringValue() override;
diff --git a/core/fxcrt/css/cfx_cssvaluelist.h b/core/fxcrt/css/cfx_cssvaluelist.h
index d2b0c6e..5e04c64 100644
--- a/core/fxcrt/css/cfx_cssvaluelist.h
+++ b/core/fxcrt/css/cfx_cssvaluelist.h
@@ -11,7 +11,7 @@
 
 #include "core/fxcrt/css/cfx_cssvalue.h"
 
-class CFX_CSSValueList : public CFX_CSSValue {
+class CFX_CSSValueList final : public CFX_CSSValue {
  public:
   explicit CFX_CSSValueList(std::vector<RetainPtr<CFX_CSSValue>>& list);
   ~CFX_CSSValueList() override;
diff --git a/core/fxcrt/fx_coordinates.h b/core/fxcrt/fx_coordinates.h
index f84c5ee..05e60c4 100644
--- a/core/fxcrt/fx_coordinates.h
+++ b/core/fxcrt/fx_coordinates.h
@@ -132,7 +132,7 @@
 using CFX_SizeF = CFX_STemplate<float>;
 
 template <class BaseType>
-class CFX_VTemplate : public CFX_PTemplate<BaseType> {
+class CFX_VTemplate final : public CFX_PTemplate<BaseType> {
  public:
   using CFX_PTemplate<BaseType>::x;
   using CFX_PTemplate<BaseType>::y;
diff --git a/core/fxcrt/observable_unittest.cpp b/core/fxcrt/observable_unittest.cpp
index 63e61b8..5c55805 100644
--- a/core/fxcrt/observable_unittest.cpp
+++ b/core/fxcrt/observable_unittest.cpp
@@ -12,7 +12,7 @@
 namespace fxcrt {
 namespace {
 
-class PseudoObservable : public Observable<PseudoObservable> {
+class PseudoObservable final : public Observable<PseudoObservable> {
  public:
   PseudoObservable() {}
   int SomeMethod() { return 42; }
diff --git a/core/fxcrt/shared_copy_on_write_unittest.cpp b/core/fxcrt/shared_copy_on_write_unittest.cpp
index 57e33d1..6764c69 100644
--- a/core/fxcrt/shared_copy_on_write_unittest.cpp
+++ b/core/fxcrt/shared_copy_on_write_unittest.cpp
@@ -29,7 +29,7 @@
   std::map<std::string, int> destruction_counts_;
 };
 
-class Object : public Retainable {
+class Object final : public Retainable {
  public:
   Object(Observer* observer, const std::string& name)
       : name_(name), observer_(observer) {
diff --git a/core/fxcrt/xml/cfx_xmlchardata.h b/core/fxcrt/xml/cfx_xmlchardata.h
index 9e5669a..71e9407 100644
--- a/core/fxcrt/xml/cfx_xmlchardata.h
+++ b/core/fxcrt/xml/cfx_xmlchardata.h
@@ -14,7 +14,7 @@
 
 class CFX_XMLDocument;
 
-class CFX_XMLCharData : public CFX_XMLText {
+class CFX_XMLCharData final : public CFX_XMLText {
  public:
   explicit CFX_XMLCharData(const WideString& wsCData);
   ~CFX_XMLCharData() override;
diff --git a/core/fxcrt/xml/cfx_xmlelement.h b/core/fxcrt/xml/cfx_xmlelement.h
index 3948660..f54587c 100644
--- a/core/fxcrt/xml/cfx_xmlelement.h
+++ b/core/fxcrt/xml/cfx_xmlelement.h
@@ -16,7 +16,7 @@
 
 class CFX_XMLDocument;
 
-class CFX_XMLElement : public CFX_XMLNode {
+class CFX_XMLElement final : public CFX_XMLNode {
  public:
   explicit CFX_XMLElement(const WideString& wsTag);
   ~CFX_XMLElement() override;
diff --git a/core/fxcrt/xml/cfx_xmlinstruction.h b/core/fxcrt/xml/cfx_xmlinstruction.h
index 8962d73..18f84c3 100644
--- a/core/fxcrt/xml/cfx_xmlinstruction.h
+++ b/core/fxcrt/xml/cfx_xmlinstruction.h
@@ -15,7 +15,7 @@
 
 class CFX_XMLDocument;
 
-class CFX_XMLInstruction : public CFX_XMLNode {
+class CFX_XMLInstruction final : public CFX_XMLNode {
  public:
   explicit CFX_XMLInstruction(const WideString& wsTarget);
   ~CFX_XMLInstruction() override;
diff --git a/core/fxge/agg/fx_agg_driver.h b/core/fxge/agg/fx_agg_driver.h
index 167b211..6d6b988 100644
--- a/core/fxge/agg/fx_agg_driver.h
+++ b/core/fxge/agg/fx_agg_driver.h
@@ -30,7 +30,7 @@
   agg::path_storage m_PathData;
 };
 
-class CFX_AggDeviceDriver : public RenderDeviceDriverIface {
+class CFX_AggDeviceDriver final : public RenderDeviceDriverIface {
  public:
   CFX_AggDeviceDriver(const RetainPtr<CFX_DIBitmap>& pBitmap,
                       bool bRgbByteOrder,
diff --git a/core/fxge/android/cfx_androidfontinfo.h b/core/fxge/android/cfx_androidfontinfo.h
index 62ad718..f671bfb 100644
--- a/core/fxge/android/cfx_androidfontinfo.h
+++ b/core/fxge/android/cfx_androidfontinfo.h
@@ -14,7 +14,7 @@
 
 class CFPF_SkiaFontMgr;
 
-class CFX_AndroidFontInfo : public SystemFontInfoIface {
+class CFX_AndroidFontInfo final : public SystemFontInfoIface {
  public:
   CFX_AndroidFontInfo();
   ~CFX_AndroidFontInfo() override;
diff --git a/core/fxge/apple/fx_mac_imp.cpp b/core/fxge/apple/fx_mac_imp.cpp
index f4a62a6..62ac33c 100644
--- a/core/fxge/apple/fx_mac_imp.cpp
+++ b/core/fxge/apple/fx_mac_imp.cpp
@@ -35,7 +35,7 @@
     {"Times-Italic", "Times New Roman Italic"},
 };
 
-class CFX_MacFontInfo : public CFX_FolderFontInfo {
+class CFX_MacFontInfo final : public CFX_FolderFontInfo {
  public:
   CFX_MacFontInfo() {}
   ~CFX_MacFontInfo() override {}
diff --git a/core/fxge/cfx_defaultrenderdevice.h b/core/fxge/cfx_defaultrenderdevice.h
index 07e3cc5..937088f 100644
--- a/core/fxge/cfx_defaultrenderdevice.h
+++ b/core/fxge/cfx_defaultrenderdevice.h
@@ -12,7 +12,7 @@
 
 class SkPictureRecorder;
 
-class CFX_DefaultRenderDevice : public CFX_RenderDevice {
+class CFX_DefaultRenderDevice final : public CFX_RenderDevice {
  public:
   CFX_DefaultRenderDevice();
   ~CFX_DefaultRenderDevice() override;
diff --git a/core/fxge/cfx_graphstatedata.h b/core/fxge/cfx_graphstatedata.h
index 1afff83..a907f2a 100644
--- a/core/fxge/cfx_graphstatedata.h
+++ b/core/fxge/cfx_graphstatedata.h
@@ -10,7 +10,7 @@
 #include "core/fxcrt/fx_system.h"
 #include "core/fxcrt/retain_ptr.h"
 
-class CFX_GraphStateData : public Retainable {
+class CFX_GraphStateData final : public Retainable {
  public:
   enum LineCap { LineCapButt = 0, LineCapRound = 1, LineCapSquare = 2 };
 
diff --git a/core/fxge/cfx_pathdata.h b/core/fxge/cfx_pathdata.h
index 5c2be62..9d96407 100644
--- a/core/fxge/cfx_pathdata.h
+++ b/core/fxge/cfx_pathdata.h
@@ -29,7 +29,7 @@
   bool m_CloseFigure;
 };
 
-class CFX_PathData : public Retainable {
+class CFX_PathData final : public Retainable {
  public:
   CFX_PathData();
   CFX_PathData(const CFX_PathData& src);
diff --git a/core/fxge/cfx_unicodeencodingex.h b/core/fxge/cfx_unicodeencodingex.h
index 5632d96..d9d349a 100644
--- a/core/fxge/cfx_unicodeencodingex.h
+++ b/core/fxge/cfx_unicodeencodingex.h
@@ -15,7 +15,7 @@
 #include "core/fxge/cfx_unicodeencoding.h"
 #include "core/fxge/fx_dib.h"
 
-class CFX_UnicodeEncodingEx : public CFX_UnicodeEncoding {
+class CFX_UnicodeEncodingEx final : public CFX_UnicodeEncoding {
  public:
   CFX_UnicodeEncodingEx(CFX_Font* pFont, uint32_t EncodingID);
   ~CFX_UnicodeEncodingEx() override;
diff --git a/core/fxge/cfx_windowsrenderdevice.h b/core/fxge/cfx_windowsrenderdevice.h
index 9701ca5..4470a74 100644
--- a/core/fxge/cfx_windowsrenderdevice.h
+++ b/core/fxge/cfx_windowsrenderdevice.h
@@ -36,7 +36,7 @@
 #endif
 extern WindowsPrintMode g_pdfium_print_mode;
 
-class CFX_WindowsRenderDevice : public CFX_RenderDevice {
+class CFX_WindowsRenderDevice final : public CFX_RenderDevice {
  public:
   static RenderDeviceDriverIface* CreateDriver(HDC hDC);
 
diff --git a/core/fxge/dib/cfx_bitmapcomposer.h b/core/fxge/dib/cfx_bitmapcomposer.h
index f1bf0e9..50a53db 100644
--- a/core/fxge/dib/cfx_bitmapcomposer.h
+++ b/core/fxge/dib/cfx_bitmapcomposer.h
@@ -18,7 +18,7 @@
 class CFX_ClipRgn;
 class CFX_DIBitmap;
 
-class CFX_BitmapComposer : public ScanlineComposerIface {
+class CFX_BitmapComposer final : public ScanlineComposerIface {
  public:
   CFX_BitmapComposer();
   ~CFX_BitmapComposer() override;
diff --git a/core/fxge/dib/cfx_bitmapstorer.h b/core/fxge/dib/cfx_bitmapstorer.h
index 7d3482f..3da1f70 100644
--- a/core/fxge/dib/cfx_bitmapstorer.h
+++ b/core/fxge/dib/cfx_bitmapstorer.h
@@ -16,7 +16,7 @@
 #include "core/fxge/dib/scanlinecomposer_iface.h"
 #include "third_party/base/stl_util.h"
 
-class CFX_BitmapStorer : public ScanlineComposerIface {
+class CFX_BitmapStorer final : public ScanlineComposerIface {
  public:
   CFX_BitmapStorer();
   ~CFX_BitmapStorer() override;
diff --git a/core/fxge/dib/cfx_imagetransformer.cpp b/core/fxge/dib/cfx_imagetransformer.cpp
index 0042462..66446ce 100644
--- a/core/fxge/dib/cfx_imagetransformer.cpp
+++ b/core/fxge/dib/cfx_imagetransformer.cpp
@@ -180,7 +180,7 @@
   const int f;
 };
 
-class CFX_BilinearMatrix : public CPDF_FixedMatrix {
+class CFX_BilinearMatrix final : public CPDF_FixedMatrix {
  public:
   explicit CFX_BilinearMatrix(const CFX_Matrix& src) : CPDF_FixedMatrix(src) {}
 
diff --git a/core/fxge/fx_ge_linux.cpp b/core/fxge/fx_ge_linux.cpp
index d2da781..4d4f4e6 100644
--- a/core/fxge/fx_ge_linux.cpp
+++ b/core/fxge/fx_ge_linux.cpp
@@ -66,7 +66,7 @@
   return 2;
 }
 
-class CFX_LinuxFontInfo : public CFX_FolderFontInfo {
+class CFX_LinuxFontInfo final : public CFX_FolderFontInfo {
  public:
   CFX_LinuxFontInfo() {}
   ~CFX_LinuxFontInfo() override {}
diff --git a/core/fxge/skia/fx_skia_device.h b/core/fxge/skia/fx_skia_device.h
index ce6ca6b..4baeacb 100644
--- a/core/fxge/skia/fx_skia_device.h
+++ b/core/fxge/skia/fx_skia_device.h
@@ -22,7 +22,7 @@
 class SkiaState;
 struct SkIRect;
 
-class CFX_SkiaDeviceDriver : public RenderDeviceDriverIface {
+class CFX_SkiaDeviceDriver final : public RenderDeviceDriverIface {
  public:
   CFX_SkiaDeviceDriver(const RetainPtr<CFX_DIBitmap>& pBitmap,
                        bool bRgbByteOrder,
diff --git a/core/fxge/win32/cfx_windowsdib.h b/core/fxge/win32/cfx_windowsdib.h
index c64fc7d..4b7de7d 100644
--- a/core/fxge/win32/cfx_windowsdib.h
+++ b/core/fxge/win32/cfx_windowsdib.h
@@ -24,7 +24,7 @@
   const wchar_t* path_name;
 };
 
-class CFX_WindowsDIB : public CFX_DIBitmap {
+class CFX_WindowsDIB final : public CFX_DIBitmap {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
diff --git a/core/fxge/win32/cpsoutput.h b/core/fxge/win32/cpsoutput.h
index 49317a6..04e5ac1 100644
--- a/core/fxge/win32/cpsoutput.h
+++ b/core/fxge/win32/cpsoutput.h
@@ -12,7 +12,7 @@
 #include "core/fxcrt/fx_stream.h"
 #include "core/fxcrt/fx_system.h"
 
-class CPSOutput : public IFX_WriteStream {
+class CPSOutput final : public IFX_WriteStream {
  public:
   enum class OutputMode { kExtEscape, kGdiComment };
 
diff --git a/core/fxge/win32/win32_int.h b/core/fxge/win32/win32_int.h
index 76a1d88..0bc68c4 100644
--- a/core/fxge/win32/win32_int.h
+++ b/core/fxge/win32/win32_int.h
@@ -188,7 +188,7 @@
   int m_RenderCaps;
 };
 
-class CGdiDisplayDriver : public CGdiDeviceDriver {
+class CGdiDisplayDriver final : public CGdiDeviceDriver {
  public:
   explicit CGdiDisplayDriver(HDC hDC);
   ~CGdiDisplayDriver() override;
@@ -229,7 +229,7 @@
                              int render_flags);
 };
 
-class CGdiPrinterDriver : public CGdiDeviceDriver {
+class CGdiPrinterDriver final : public CGdiDeviceDriver {
  public:
   explicit CGdiPrinterDriver(HDC hDC);
   ~CGdiPrinterDriver() override;
@@ -269,7 +269,7 @@
   const int m_VertSize;
 };
 
-class CPSPrinterDriver : public RenderDeviceDriverIface {
+class CPSPrinterDriver final : public RenderDeviceDriverIface {
  public:
   CPSPrinterDriver(HDC hDC, WindowsPrintMode mode, bool bCmykOutput);
   ~CPSPrinterDriver() override;
@@ -334,7 +334,7 @@
   CFX_PSRenderer m_PSRenderer;
 };
 
-class CTextOnlyPrinterDriver : public RenderDeviceDriverIface {
+class CTextOnlyPrinterDriver final : public RenderDeviceDriverIface {
  public:
   explicit CTextOnlyPrinterDriver(HDC hDC);
   ~CTextOnlyPrinterDriver() override;
diff --git a/fpdfsdk/cpdfsdk_baannothandler.h b/fpdfsdk/cpdfsdk_baannothandler.h
index 3369839..53c06f1 100644
--- a/fpdfsdk/cpdfsdk_baannothandler.h
+++ b/fpdfsdk/cpdfsdk_baannothandler.h
@@ -22,7 +22,7 @@
 class CXFA_FFWidget;
 #endif  // PDF_ENABLE_XFA
 
-class CPDFSDK_BAAnnotHandler : public IPDFSDK_AnnotHandler {
+class CPDFSDK_BAAnnotHandler final : public IPDFSDK_AnnotHandler {
  public:
   CPDFSDK_BAAnnotHandler();
   ~CPDFSDK_BAAnnotHandler() override;
diff --git a/fpdfsdk/cpdfsdk_filewriteadapter.h b/fpdfsdk/cpdfsdk_filewriteadapter.h
index 3d5dbfd..beae403 100644
--- a/fpdfsdk/cpdfsdk_filewriteadapter.h
+++ b/fpdfsdk/cpdfsdk_filewriteadapter.h
@@ -12,7 +12,7 @@
 #include "core/fxcrt/unowned_ptr.h"
 #include "public/fpdf_save.h"
 
-class CPDFSDK_FileWriteAdapter : public IFX_WriteStream {
+class CPDFSDK_FileWriteAdapter final : public IFX_WriteStream {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.h b/fpdfsdk/cpdfsdk_formfillenvironment.h
index 8590b34..7cdf32e 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.h
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.h
@@ -44,7 +44,7 @@
 // hierarcy back to the form fill environment itself, so as to flag any
 // lingering lifetime issues via the memory tools.
 
-class CPDFSDK_FormFillEnvironment
+class CPDFSDK_FormFillEnvironment final
     : public Observable<CPDFSDK_FormFillEnvironment> {
  public:
   CPDFSDK_FormFillEnvironment(CPDF_Document* pDoc, FPDF_FORMFILLINFO* pFFinfo);
diff --git a/fpdfsdk/cpdfsdk_helpers.cpp b/fpdfsdk/cpdfsdk_helpers.cpp
index 943e3a3..a0edb58 100644
--- a/fpdfsdk/cpdfsdk_helpers.cpp
+++ b/fpdfsdk/cpdfsdk_helpers.cpp
@@ -39,7 +39,7 @@
 }
 
 #ifdef PDF_ENABLE_XFA
-class FPDF_FileHandlerContext : public IFX_SeekableStream {
+class FPDF_FileHandlerContext final : public IFX_SeekableStream {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
diff --git a/fpdfsdk/cpdfsdk_interform.h b/fpdfsdk/cpdfsdk_interform.h
index c44688f..bd1a760 100644
--- a/fpdfsdk/cpdfsdk_interform.h
+++ b/fpdfsdk/cpdfsdk_interform.h
@@ -29,7 +29,7 @@
 class CXFA_FFWidget;
 #endif  // PDF_ENABLE_XFA
 
-class CPDFSDK_InterForm : public IPDF_FormNotify {
+class CPDFSDK_InterForm final : public IPDF_FormNotify {
  public:
   explicit CPDFSDK_InterForm(CPDFSDK_FormFillEnvironment* pFormFillEnv);
   ~CPDFSDK_InterForm() override;
diff --git a/fpdfsdk/cpdfsdk_widget.h b/fpdfsdk/cpdfsdk_widget.h
index f3bdc54..a1ff923 100644
--- a/fpdfsdk/cpdfsdk_widget.h
+++ b/fpdfsdk/cpdfsdk_widget.h
@@ -35,7 +35,7 @@
 class CXFA_FFWidgetHandler;
 #endif  // PDF_ENABLE_XFA
 
-class CPDFSDK_Widget : public CPDFSDK_BAAnnot {
+class CPDFSDK_Widget final : public CPDFSDK_BAAnnot {
  public:
 #ifdef PDF_ENABLE_XFA
   CXFA_FFWidget* GetMixXFAWidget() const;
diff --git a/fpdfsdk/cpdfsdk_widgethandler.h b/fpdfsdk/cpdfsdk_widgethandler.h
index 80323de..82ea549 100644
--- a/fpdfsdk/cpdfsdk_widgethandler.h
+++ b/fpdfsdk/cpdfsdk_widgethandler.h
@@ -23,7 +23,7 @@
 class CXFA_FFWidget;
 #endif  // PDF_ENABLE_XFA
 
-class CPDFSDK_WidgetHandler : public IPDFSDK_AnnotHandler {
+class CPDFSDK_WidgetHandler final : public IPDFSDK_AnnotHandler {
  public:
   explicit CPDFSDK_WidgetHandler(CPDFSDK_FormFillEnvironment* pApp);
   ~CPDFSDK_WidgetHandler() override;
diff --git a/fpdfsdk/cpdfsdk_xfawidget.h b/fpdfsdk/cpdfsdk_xfawidget.h
index 5db9f8d..5878051 100644
--- a/fpdfsdk/cpdfsdk_xfawidget.h
+++ b/fpdfsdk/cpdfsdk_xfawidget.h
@@ -16,7 +16,7 @@
 class CPDFSDK_PageView;
 class CXFA_FFWidget;
 
-class CPDFSDK_XFAWidget : public CPDFSDK_Annot {
+class CPDFSDK_XFAWidget final : public CPDFSDK_Annot {
  public:
   CPDFSDK_XFAWidget(CXFA_FFWidget* pAnnot,
                     CPDFSDK_PageView* pPageView,
diff --git a/fpdfsdk/cpdfsdk_xfawidgethandler.h b/fpdfsdk/cpdfsdk_xfawidgethandler.h
index b49c905..442d10b 100644
--- a/fpdfsdk/cpdfsdk_xfawidgethandler.h
+++ b/fpdfsdk/cpdfsdk_xfawidgethandler.h
@@ -20,7 +20,7 @@
 class CXFA_FFWidget;
 class CXFA_FFWidgetHandler;
 
-class CPDFSDK_XFAWidgetHandler : public IPDFSDK_AnnotHandler {
+class CPDFSDK_XFAWidgetHandler final : public IPDFSDK_AnnotHandler {
  public:
   explicit CPDFSDK_XFAWidgetHandler(CPDFSDK_FormFillEnvironment* pApp);
   ~CPDFSDK_XFAWidgetHandler() override;
diff --git a/fpdfsdk/formfiller/cba_fontmap.h b/fpdfsdk/formfiller/cba_fontmap.h
index 0ca07eb..aa41254 100644
--- a/fpdfsdk/formfiller/cba_fontmap.h
+++ b/fpdfsdk/formfiller/cba_fontmap.h
@@ -13,7 +13,7 @@
 class CPDF_Dictionary;
 class CPDFSDK_Annot;
 
-class CBA_FontMap : public CPWL_FontMap {
+class CBA_FontMap final : public CPWL_FontMap {
  public:
   CBA_FontMap(CPDFSDK_Annot* pAnnot, CFX_SystemHandler* pSystemHandler);
   ~CBA_FontMap() override;
diff --git a/fpdfsdk/formfiller/cffl_checkbox.h b/fpdfsdk/formfiller/cffl_checkbox.h
index 8ef3de6..b477fe7 100644
--- a/fpdfsdk/formfiller/cffl_checkbox.h
+++ b/fpdfsdk/formfiller/cffl_checkbox.h
@@ -11,7 +11,7 @@
 
 class CPWL_CheckBox;
 
-class CFFL_CheckBox : public CFFL_Button {
+class CFFL_CheckBox final : public CFFL_Button {
  public:
   CFFL_CheckBox(CPDFSDK_FormFillEnvironment* pApp, CPDFSDK_Widget* pWidget);
   ~CFFL_CheckBox() override;
diff --git a/fpdfsdk/formfiller/cffl_combobox.h b/fpdfsdk/formfiller/cffl_combobox.h
index 7a6390e..2769b53 100644
--- a/fpdfsdk/formfiller/cffl_combobox.h
+++ b/fpdfsdk/formfiller/cffl_combobox.h
@@ -19,8 +19,8 @@
   WideString sValue;
 };
 
-class CFFL_ComboBox : public CFFL_TextObject,
-                      public CPWL_Wnd::FocusHandlerIface {
+class CFFL_ComboBox final : public CFFL_TextObject,
+                            public CPWL_Wnd::FocusHandlerIface {
  public:
   CFFL_ComboBox(CPDFSDK_FormFillEnvironment* pApp, CPDFSDK_Widget* pWidget);
   ~CFFL_ComboBox() override;
diff --git a/fpdfsdk/formfiller/cffl_interactiveformfiller.h b/fpdfsdk/formfiller/cffl_interactiveformfiller.h
index 1f049d0..46248d6 100644
--- a/fpdfsdk/formfiller/cffl_interactiveformfiller.h
+++ b/fpdfsdk/formfiller/cffl_interactiveformfiller.h
@@ -21,7 +21,7 @@
 class CPDFSDK_PageView;
 class CPDFSDK_Widget;
 
-class CFFL_InteractiveFormFiller : public IPWL_Filler_Notify {
+class CFFL_InteractiveFormFiller final : public IPWL_Filler_Notify {
  public:
   explicit CFFL_InteractiveFormFiller(
       CPDFSDK_FormFillEnvironment* pFormFillEnv);
@@ -158,7 +158,7 @@
   bool m_bNotifying;
 };
 
-class CFFL_PrivateData : public CPWL_Wnd::PrivateData {
+class CFFL_PrivateData final : public CPWL_Wnd::PrivateData {
  public:
   CPDFSDK_Widget* pWidget;
   CPDFSDK_PageView* pPageView;
diff --git a/fpdfsdk/formfiller/cffl_listbox.h b/fpdfsdk/formfiller/cffl_listbox.h
index 9db3c5d..eda9561 100644
--- a/fpdfsdk/formfiller/cffl_listbox.h
+++ b/fpdfsdk/formfiller/cffl_listbox.h
@@ -14,7 +14,7 @@
 
 class CBA_FontMap;
 
-class CFFL_ListBox : public CFFL_TextObject {
+class CFFL_ListBox final : public CFFL_TextObject {
  public:
   CFFL_ListBox(CPDFSDK_FormFillEnvironment* pApp, CPDFSDK_Widget* pWidget);
   ~CFFL_ListBox() override;
diff --git a/fpdfsdk/formfiller/cffl_pushbutton.h b/fpdfsdk/formfiller/cffl_pushbutton.h
index 7ee0767..e2acfdc 100644
--- a/fpdfsdk/formfiller/cffl_pushbutton.h
+++ b/fpdfsdk/formfiller/cffl_pushbutton.h
@@ -9,7 +9,7 @@
 
 #include "fpdfsdk/formfiller/cffl_button.h"
 
-class CFFL_PushButton : public CFFL_Button {
+class CFFL_PushButton final : public CFFL_Button {
  public:
   CFFL_PushButton(CPDFSDK_FormFillEnvironment* pApp, CPDFSDK_Widget* pWidget);
   ~CFFL_PushButton() override;
diff --git a/fpdfsdk/formfiller/cffl_radiobutton.h b/fpdfsdk/formfiller/cffl_radiobutton.h
index 2838254..3c20be6 100644
--- a/fpdfsdk/formfiller/cffl_radiobutton.h
+++ b/fpdfsdk/formfiller/cffl_radiobutton.h
@@ -11,7 +11,7 @@
 
 class CPWL_RadioButton;
 
-class CFFL_RadioButton : public CFFL_Button {
+class CFFL_RadioButton final : public CFFL_Button {
  public:
   CFFL_RadioButton(CPDFSDK_FormFillEnvironment* pApp, CPDFSDK_Widget* pWidget);
   ~CFFL_RadioButton() override;
diff --git a/fpdfsdk/formfiller/cffl_textfield.h b/fpdfsdk/formfiller/cffl_textfield.h
index 4d34d05..a1e48b6 100644
--- a/fpdfsdk/formfiller/cffl_textfield.h
+++ b/fpdfsdk/formfiller/cffl_textfield.h
@@ -24,8 +24,8 @@
   WideString sValue;
 };
 
-class CFFL_TextField : public CFFL_TextObject,
-                       public CPWL_Wnd::FocusHandlerIface {
+class CFFL_TextField final : public CFFL_TextObject,
+                             public CPWL_Wnd::FocusHandlerIface {
  public:
   CFFL_TextField(CPDFSDK_FormFillEnvironment* pApp, CPDFSDK_Widget* pWidget);
   ~CFFL_TextField() override;
diff --git a/fpdfsdk/fpdf_catalog_unittest.cpp b/fpdfsdk/fpdf_catalog_unittest.cpp
index bd51257..425a1ae 100644
--- a/fpdfsdk/fpdf_catalog_unittest.cpp
+++ b/fpdfsdk/fpdf_catalog_unittest.cpp
@@ -16,7 +16,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/test_support.h"
 
-class CPDF_TestDocument : public CPDF_Document {
+class CPDF_TestDocument final : public CPDF_Document {
  public:
   CPDF_TestDocument() : CPDF_Document() {}
 
diff --git a/fpdfsdk/fpdf_dataavail.cpp b/fpdfsdk/fpdf_dataavail.cpp
index 1b5fbeb..17d501f 100644
--- a/fpdfsdk/fpdf_dataavail.cpp
+++ b/fpdfsdk/fpdf_dataavail.cpp
@@ -47,7 +47,7 @@
 
 namespace {
 
-class FPDF_FileAvailContext : public CPDF_DataAvail::FileAvail {
+class FPDF_FileAvailContext final : public CPDF_DataAvail::FileAvail {
  public:
   FPDF_FileAvailContext() : m_pfileAvail(nullptr) {}
   ~FPDF_FileAvailContext() override {}
@@ -63,7 +63,7 @@
   FX_FILEAVAIL* m_pfileAvail;
 };
 
-class FPDF_FileAccessContext : public IFX_SeekableReadStream {
+class FPDF_FileAccessContext final : public IFX_SeekableReadStream {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
@@ -85,7 +85,7 @@
   FPDF_FILEACCESS* m_pFileAccess;
 };
 
-class FPDF_DownloadHintsContext : public CPDF_DataAvail::DownloadHints {
+class FPDF_DownloadHintsContext final : public CPDF_DataAvail::DownloadHints {
  public:
   explicit FPDF_DownloadHintsContext(FX_DOWNLOADHINTS* pDownloadHints) {
     m_pDownloadHints = pDownloadHints;
diff --git a/fpdfsdk/fpdf_dataavail_embeddertest.cpp b/fpdfsdk/fpdf_dataavail_embeddertest.cpp
index ba77266..08bc6c0 100644
--- a/fpdfsdk/fpdf_dataavail_embeddertest.cpp
+++ b/fpdfsdk/fpdf_dataavail_embeddertest.cpp
@@ -20,7 +20,7 @@
 
 namespace {
 
-class MockDownloadHints : public FX_DOWNLOADHINTS {
+class MockDownloadHints final : public FX_DOWNLOADHINTS {
  public:
   static void SAddSegment(FX_DOWNLOADHINTS* pThis, size_t offset, size_t size) {
   }
@@ -33,7 +33,7 @@
   ~MockDownloadHints() {}
 };
 
-class TestAsyncLoader : public FX_DOWNLOADHINTS, FX_FILEAVAIL {
+class TestAsyncLoader final : public FX_DOWNLOADHINTS, FX_FILEAVAIL {
  public:
   explicit TestAsyncLoader(const std::string& file_name) {
     std::string file_path;
diff --git a/fpdfsdk/fpdf_doc_unittest.cpp b/fpdfsdk/fpdf_doc_unittest.cpp
index 8ef16aa..db9bcdc 100644
--- a/fpdfsdk/fpdf_doc_unittest.cpp
+++ b/fpdfsdk/fpdf_doc_unittest.cpp
@@ -23,7 +23,7 @@
 #include "testing/test_support.h"
 #include "third_party/base/ptr_util.h"
 
-class CPDF_TestDocument : public CPDF_Document {
+class CPDF_TestDocument final : public CPDF_Document {
  public:
   CPDF_TestDocument() : CPDF_Document() {}
 
diff --git a/fpdfsdk/fpdf_ppo.cpp b/fpdfsdk/fpdf_ppo.cpp
index 3c99304..6313e43 100644
--- a/fpdfsdk/fpdf_ppo.cpp
+++ b/fpdfsdk/fpdf_ppo.cpp
@@ -445,7 +445,7 @@
 
 // Copies pages from a source document into a destination document.
 // This class is intended to be used once via ExportPage() and then destroyed.
-class CPDF_PageExporter : public CPDF_PageOrganizer {
+class CPDF_PageExporter final : public CPDF_PageOrganizer {
  public:
   CPDF_PageExporter(CPDF_Document* pDestPDFDoc, CPDF_Document* pSrcPDFDoc);
   ~CPDF_PageExporter();
@@ -536,7 +536,7 @@
 // Copies pages from a source document into a destination document. Creates 1
 // page in the destination document for every N source pages. This class is
 // intended to be used once via ExportNPagesToOne() and then destroyed.
-class CPDF_NPageToOneExporter : public CPDF_PageOrganizer {
+class CPDF_NPageToOneExporter final : public CPDF_PageOrganizer {
  public:
   CPDF_NPageToOneExporter(CPDF_Document* pDestPDFDoc,
                           CPDF_Document* pSrcPDFDoc);
diff --git a/fpdfsdk/fpdf_sysfontinfo.cpp b/fpdfsdk/fpdf_sysfontinfo.cpp
index 564912b..0b91df8 100644
--- a/fpdfsdk/fpdf_sysfontinfo.cpp
+++ b/fpdfsdk/fpdf_sysfontinfo.cpp
@@ -128,7 +128,7 @@
   return reinterpret_cast<const FPDF_CharsetFontMap*>(CFX_Font::defaultTTFMap);
 }
 
-struct FPDF_SYSFONTINFO_DEFAULT : public FPDF_SYSFONTINFO {
+struct FPDF_SYSFONTINFO_DEFAULT final : public FPDF_SYSFONTINFO {
   UnownedPtr<SystemFontInfoIface> m_pFontInfo;
 };
 
diff --git a/fpdfsdk/fpdf_view_embeddertest.cpp b/fpdfsdk/fpdf_view_embeddertest.cpp
index 8cea7de..807462e 100644
--- a/fpdfsdk/fpdf_view_embeddertest.cpp
+++ b/fpdfsdk/fpdf_view_embeddertest.cpp
@@ -18,7 +18,7 @@
 
 namespace {
 
-class MockDownloadHints : public FX_DOWNLOADHINTS {
+class MockDownloadHints final : public FX_DOWNLOADHINTS {
  public:
   static void SAddSegment(FX_DOWNLOADHINTS* pThis, size_t offset, size_t size) {
   }
@@ -629,7 +629,7 @@
   UnloadPage(page);
 }
 
-class UnSupRecordDelegate : public EmbedderTest::Delegate {
+class UnSupRecordDelegate final : public EmbedderTest::Delegate {
  public:
   UnSupRecordDelegate() : type_(-1) {}
   ~UnSupRecordDelegate() override {}
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.h b/fpdfsdk/fpdfxfa/cpdfxfa_context.h
index 9648e8e..887f06d 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.h
@@ -33,8 +33,8 @@
   FXFA_LOADSTATUS_CLOSED
 };
 
-class CPDFXFA_Context : public CPDF_Document::Extension,
-                        public IXFA_AppProvider {
+class CPDFXFA_Context final : public CPDF_Document::Extension,
+                              public IXFA_AppProvider {
  public:
   explicit CPDFXFA_Context(CPDF_Document* pPDFDoc);
   ~CPDFXFA_Context() override;
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h
index dfc51e0..0613fc3 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h
@@ -14,7 +14,7 @@
 
 class CPDFXFA_Context;
 
-class CPDFXFA_DocEnvironment : public IXFA_DocEnvironment {
+class CPDFXFA_DocEnvironment final : public IXFA_DocEnvironment {
  public:
   explicit CPDFXFA_DocEnvironment(CPDFXFA_Context*);
   ~CPDFXFA_DocEnvironment() override;
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.h b/fpdfsdk/fpdfxfa/cpdfxfa_page.h
index b660869..769bdaa 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_page.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.h
@@ -22,7 +22,7 @@
 class CPDFXFA_Context;
 class CXFA_FFPageView;
 
-class CPDFXFA_Page : public IPDF_Page {
+class CPDFXFA_Page final : public IPDF_Page {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
diff --git a/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp b/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp
index adba260..8901394 100644
--- a/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp
+++ b/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp
@@ -14,7 +14,7 @@
 
 namespace {
 
-class CFWL_FWLAdapterTimerInfo : public CFWL_TimerInfo {
+class CFWL_FWLAdapterTimerInfo final : public CFWL_TimerInfo {
  public:
   CFWL_FWLAdapterTimerInfo(IFWL_AdapterTimerMgr* mgr,
                            int32_t event,
diff --git a/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h b/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h
index 96ccc1c..8bca0bd 100644
--- a/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h
+++ b/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h
@@ -15,7 +15,7 @@
 #include "xfa/fwl/cfwl_timerinfo.h"
 #include "xfa/fwl/ifwl_adaptertimermgr.h"
 
-class CXFA_FWLAdapterTimerMgr : public IFWL_AdapterTimerMgr {
+class CXFA_FWLAdapterTimerMgr final : public IFWL_AdapterTimerMgr {
  public:
   explicit CXFA_FWLAdapterTimerMgr(CPDFSDK_FormFillEnvironment* pFormFillEnv);
   ~CXFA_FWLAdapterTimerMgr() override;
diff --git a/fpdfsdk/pwl/cpwl_appstream.cpp b/fpdfsdk/pwl/cpwl_appstream.cpp
index 7d7f710..4175b8e 100644
--- a/fpdfsdk/pwl/cpwl_appstream.cpp
+++ b/fpdfsdk/pwl/cpwl_appstream.cpp
@@ -92,7 +92,7 @@
   ByteString close_;
 };
 
-class AutoClosedQCommand : public AutoClosedCommand {
+class AutoClosedQCommand final : public AutoClosedCommand {
  public:
   explicit AutoClosedQCommand(std::ostringstream* stream)
       : AutoClosedCommand(stream, kStateSaveOperator, kStateRestoreOperator) {}
diff --git a/fpdfsdk/pwl/cpwl_caret.h b/fpdfsdk/pwl/cpwl_caret.h
index d60a964..1f7c2b8 100644
--- a/fpdfsdk/pwl/cpwl_caret.h
+++ b/fpdfsdk/pwl/cpwl_caret.h
@@ -9,7 +9,7 @@
 
 #include "fpdfsdk/pwl/cpwl_wnd.h"
 
-class CPWL_Caret : public CPWL_Wnd {
+class CPWL_Caret final : public CPWL_Wnd {
  public:
   CPWL_Caret();
   ~CPWL_Caret() override;
diff --git a/fpdfsdk/pwl/cpwl_combo_box.h b/fpdfsdk/pwl/cpwl_combo_box.h
index a4e823c..d3c55c2 100644
--- a/fpdfsdk/pwl/cpwl_combo_box.h
+++ b/fpdfsdk/pwl/cpwl_combo_box.h
@@ -14,7 +14,7 @@
 #include "fpdfsdk/pwl/cpwl_list_box.h"
 #include "fpdfsdk/pwl/cpwl_wnd.h"
 
-class CPWL_CBListBox : public CPWL_ListBox {
+class CPWL_CBListBox final : public CPWL_ListBox {
  public:
   CPWL_CBListBox() {}
   ~CPWL_CBListBox() override {}
@@ -28,7 +28,7 @@
   bool OnCharNotify(uint16_t nChar, uint32_t nFlag);
 };
 
-class CPWL_CBButton : public CPWL_Wnd {
+class CPWL_CBButton final : public CPWL_Wnd {
  public:
   CPWL_CBButton() {}
   ~CPWL_CBButton() override {}
@@ -40,7 +40,7 @@
   bool OnLButtonUp(const CFX_PointF& point, uint32_t nFlag) override;
 };
 
-class CPWL_ComboBox : public CPWL_Wnd {
+class CPWL_ComboBox final : public CPWL_Wnd {
  public:
   CPWL_ComboBox();
   ~CPWL_ComboBox() override;
diff --git a/fpdfsdk/pwl/cpwl_edit.h b/fpdfsdk/pwl/cpwl_edit.h
index 4a17de4..f7429c9 100644
--- a/fpdfsdk/pwl/cpwl_edit.h
+++ b/fpdfsdk/pwl/cpwl_edit.h
@@ -41,7 +41,7 @@
 #endif  // PDF_ENABLE_XFA
 };
 
-class CPWL_Edit : public CPWL_EditCtrl {
+class CPWL_Edit final : public CPWL_EditCtrl {
  public:
   CPWL_Edit();
   ~CPWL_Edit() override;
diff --git a/fpdfsdk/pwl/cpwl_edit_impl.h b/fpdfsdk/pwl/cpwl_edit_impl.h
index 8680885..743afae 100644
--- a/fpdfsdk/pwl/cpwl_edit_impl.h
+++ b/fpdfsdk/pwl/cpwl_edit_impl.h
@@ -102,7 +102,7 @@
   virtual void Redo() = 0;
 };
 
-class CFXEU_InsertWord : public IFX_Edit_UndoItem {
+class CFXEU_InsertWord final : public IFX_Edit_UndoItem {
  public:
   CFXEU_InsertWord(CPWL_EditImpl* pEdit,
                    const CPVT_WordPlace& wpOldPlace,
@@ -124,7 +124,7 @@
   int32_t m_nCharset;
 };
 
-class CFXEU_InsertReturn : public IFX_Edit_UndoItem {
+class CFXEU_InsertReturn final : public IFX_Edit_UndoItem {
  public:
   CFXEU_InsertReturn(CPWL_EditImpl* pEdit,
                      const CPVT_WordPlace& wpOldPlace,
@@ -142,7 +142,7 @@
   CPVT_WordPlace m_wpNew;
 };
 
-class CFXEU_Backspace : public IFX_Edit_UndoItem {
+class CFXEU_Backspace final : public IFX_Edit_UndoItem {
  public:
   CFXEU_Backspace(CPWL_EditImpl* pEdit,
                   const CPVT_WordPlace& wpOldPlace,
@@ -164,7 +164,7 @@
   int32_t m_nCharset;
 };
 
-class CFXEU_Delete : public IFX_Edit_UndoItem {
+class CFXEU_Delete final : public IFX_Edit_UndoItem {
  public:
   CFXEU_Delete(CPWL_EditImpl* pEdit,
                const CPVT_WordPlace& wpOldPlace,
@@ -188,7 +188,7 @@
   bool m_bSecEnd;
 };
 
-class CFXEU_Clear : public IFX_Edit_UndoItem {
+class CFXEU_Clear final : public IFX_Edit_UndoItem {
  public:
   CFXEU_Clear(CPWL_EditImpl* pEdit,
               const CPVT_WordRange& wrSel,
@@ -206,7 +206,7 @@
   WideString m_swText;
 };
 
-class CFXEU_InsertText : public IFX_Edit_UndoItem {
+class CFXEU_InsertText final : public IFX_Edit_UndoItem {
  public:
   CFXEU_InsertText(CPWL_EditImpl* pEdit,
                    const CPVT_WordPlace& wpOldPlace,
@@ -415,7 +415,7 @@
   CPDF_VariableText::Iterator* m_pVTIterator;
 };
 
-class CPWL_EditImpl_Provider : public CPDF_VariableText::Provider {
+class CPWL_EditImpl_Provider final : public CPDF_VariableText::Provider {
  public:
   explicit CPWL_EditImpl_Provider(IPVT_FontMap* pFontMap);
   ~CPWL_EditImpl_Provider() override;
diff --git a/fpdfsdk/pwl/cpwl_icon.h b/fpdfsdk/pwl/cpwl_icon.h
index df88465..2cb84eb 100644
--- a/fpdfsdk/pwl/cpwl_icon.h
+++ b/fpdfsdk/pwl/cpwl_icon.h
@@ -13,7 +13,7 @@
 #include "core/fxcrt/unowned_ptr.h"
 #include "fpdfsdk/pwl/cpwl_wnd.h"
 
-class CPWL_Icon : public CPWL_Wnd {
+class CPWL_Icon final : public CPWL_Wnd {
  public:
   CPWL_Icon();
   ~CPWL_Icon() override;
diff --git a/fpdfsdk/pwl/cpwl_scroll_bar.h b/fpdfsdk/pwl/cpwl_scroll_bar.h
index 1437597..0b63bf2 100644
--- a/fpdfsdk/pwl/cpwl_scroll_bar.h
+++ b/fpdfsdk/pwl/cpwl_scroll_bar.h
@@ -42,7 +42,7 @@
 
 enum PWL_SBBUTTON_TYPE { PSBT_MIN, PSBT_MAX, PSBT_POS };
 
-class CPWL_SBButton : public CPWL_Wnd {
+class CPWL_SBButton final : public CPWL_Wnd {
  public:
   CPWL_SBButton(PWL_SCROLLBAR_TYPE eScrollBarType,
                 PWL_SBBUTTON_TYPE eButtonType);
@@ -115,7 +115,7 @@
   float fSmallStep;
 };
 
-class CPWL_ScrollBar : public CPWL_Wnd {
+class CPWL_ScrollBar final : public CPWL_Wnd {
  public:
   explicit CPWL_ScrollBar(PWL_SCROLLBAR_TYPE sbType);
   ~CPWL_ScrollBar() override;
diff --git a/fpdfsdk/pwl/cpwl_special_button.h b/fpdfsdk/pwl/cpwl_special_button.h
index 076b529..b980f84 100644
--- a/fpdfsdk/pwl/cpwl_special_button.h
+++ b/fpdfsdk/pwl/cpwl_special_button.h
@@ -9,7 +9,7 @@
 
 #include "fpdfsdk/pwl/cpwl_button.h"
 
-class CPWL_PushButton : public CPWL_Button {
+class CPWL_PushButton final : public CPWL_Button {
  public:
   CPWL_PushButton();
   ~CPWL_PushButton() override;
@@ -19,7 +19,7 @@
   CFX_FloatRect GetFocusRect() const override;
 };
 
-class CPWL_CheckBox : public CPWL_Button {
+class CPWL_CheckBox final : public CPWL_Button {
  public:
   CPWL_CheckBox();
   ~CPWL_CheckBox() override;
@@ -36,7 +36,7 @@
   bool m_bChecked;
 };
 
-class CPWL_RadioButton : public CPWL_Button {
+class CPWL_RadioButton final : public CPWL_Button {
  public:
   CPWL_RadioButton();
   ~CPWL_RadioButton() override;
diff --git a/fpdfsdk/pwl/cpwl_wnd.cpp b/fpdfsdk/pwl/cpwl_wnd.cpp
index 6b840f2..1cd9461 100644
--- a/fpdfsdk/pwl/cpwl_wnd.cpp
+++ b/fpdfsdk/pwl/cpwl_wnd.cpp
@@ -39,7 +39,7 @@
 
 CPWL_Wnd::CreateParams::~CreateParams() = default;
 
-class CPWL_MsgControl : public Observable<CPWL_MsgControl> {
+class CPWL_MsgControl final : public Observable<CPWL_MsgControl> {
  public:
   explicit CPWL_MsgControl(CPWL_Wnd* pWnd) : m_pCreatedWnd(pWnd) {}
   ~CPWL_MsgControl() {}
diff --git a/fxbarcode/cbc_codabar.h b/fxbarcode/cbc_codabar.h
index 827fc28..036c65f 100644
--- a/fxbarcode/cbc_codabar.h
+++ b/fxbarcode/cbc_codabar.h
@@ -14,7 +14,7 @@
 
 class CBC_OnedCodaBarWriter;
 
-class CBC_Codabar : public CBC_OneCode {
+class CBC_Codabar final : public CBC_OneCode {
  public:
   CBC_Codabar();
   ~CBC_Codabar() override;
diff --git a/fxbarcode/cbc_code128.h b/fxbarcode/cbc_code128.h
index b057aff..61bed6f 100644
--- a/fxbarcode/cbc_code128.h
+++ b/fxbarcode/cbc_code128.h
@@ -14,7 +14,7 @@
 
 class CBC_OnedCode128Writer;
 
-class CBC_Code128 : public CBC_OneCode {
+class CBC_Code128 final : public CBC_OneCode {
  public:
   explicit CBC_Code128(BC_TYPE type);
   ~CBC_Code128() override;
diff --git a/fxbarcode/cbc_code39.h b/fxbarcode/cbc_code39.h
index 937673c..83c8daa 100644
--- a/fxbarcode/cbc_code39.h
+++ b/fxbarcode/cbc_code39.h
@@ -15,7 +15,7 @@
 
 class CBC_OnedCode39Writer;
 
-class CBC_Code39 : public CBC_OneCode {
+class CBC_Code39 final : public CBC_OneCode {
  public:
   CBC_Code39();
   ~CBC_Code39() override;
diff --git a/fxbarcode/cbc_datamatrix.h b/fxbarcode/cbc_datamatrix.h
index 3fe1c09..b02da55 100644
--- a/fxbarcode/cbc_datamatrix.h
+++ b/fxbarcode/cbc_datamatrix.h
@@ -14,7 +14,7 @@
 
 class CBC_DataMatrixWriter;
 
-class CBC_DataMatrix : public CBC_CodeBase {
+class CBC_DataMatrix final : public CBC_CodeBase {
  public:
   CBC_DataMatrix();
   ~CBC_DataMatrix() override;
diff --git a/fxbarcode/cbc_ean13.h b/fxbarcode/cbc_ean13.h
index 609f8b0..da0fd85 100644
--- a/fxbarcode/cbc_ean13.h
+++ b/fxbarcode/cbc_ean13.h
@@ -15,7 +15,7 @@
 
 class CBC_OnedEAN13Writer;
 
-class CBC_EAN13 : public CBC_OneCode {
+class CBC_EAN13 final : public CBC_OneCode {
  public:
   CBC_EAN13();
   ~CBC_EAN13() override;
diff --git a/fxbarcode/cbc_ean8.h b/fxbarcode/cbc_ean8.h
index 4127650..53eed47 100644
--- a/fxbarcode/cbc_ean8.h
+++ b/fxbarcode/cbc_ean8.h
@@ -14,7 +14,7 @@
 
 class CBC_OnedEAN8Writer;
 
-class CBC_EAN8 : public CBC_OneCode {
+class CBC_EAN8 final : public CBC_OneCode {
  public:
   CBC_EAN8();
   ~CBC_EAN8() override;
diff --git a/fxbarcode/cbc_pdf417i.h b/fxbarcode/cbc_pdf417i.h
index 3cb73e3..ec68600 100644
--- a/fxbarcode/cbc_pdf417i.h
+++ b/fxbarcode/cbc_pdf417i.h
@@ -14,7 +14,7 @@
 
 class CBC_PDF417Writer;
 
-class CBC_PDF417I : public CBC_CodeBase {
+class CBC_PDF417I final : public CBC_CodeBase {
  public:
   CBC_PDF417I();
   ~CBC_PDF417I() override;
diff --git a/fxbarcode/cbc_qrcode.h b/fxbarcode/cbc_qrcode.h
index 509de8a..59d57ac 100644
--- a/fxbarcode/cbc_qrcode.h
+++ b/fxbarcode/cbc_qrcode.h
@@ -14,7 +14,7 @@
 
 class CBC_QRCodeWriter;
 
-class CBC_QRCode : public CBC_CodeBase {
+class CBC_QRCode final : public CBC_CodeBase {
  public:
   CBC_QRCode();
   ~CBC_QRCode() override;
diff --git a/fxbarcode/cbc_upca.h b/fxbarcode/cbc_upca.h
index 29c4d7d..de71581 100644
--- a/fxbarcode/cbc_upca.h
+++ b/fxbarcode/cbc_upca.h
@@ -14,7 +14,7 @@
 
 class CBC_OnedUPCAWriter;
 
-class CBC_UPCA : public CBC_OneCode {
+class CBC_UPCA final : public CBC_OneCode {
  public:
   CBC_UPCA();
   ~CBC_UPCA() override;
diff --git a/fxbarcode/datamatrix/BC_ASCIIEncoder.h b/fxbarcode/datamatrix/BC_ASCIIEncoder.h
index 35d4c5f..c9d8568 100644
--- a/fxbarcode/datamatrix/BC_ASCIIEncoder.h
+++ b/fxbarcode/datamatrix/BC_ASCIIEncoder.h
@@ -11,7 +11,7 @@
 
 class CBC_EncoderContext;
 
-class CBC_ASCIIEncoder : public CBC_Encoder {
+class CBC_ASCIIEncoder final : public CBC_Encoder {
  public:
   CBC_ASCIIEncoder();
   ~CBC_ASCIIEncoder() override;
diff --git a/fxbarcode/datamatrix/BC_Base256Encoder.h b/fxbarcode/datamatrix/BC_Base256Encoder.h
index 65abf59..e8756f9 100644
--- a/fxbarcode/datamatrix/BC_Base256Encoder.h
+++ b/fxbarcode/datamatrix/BC_Base256Encoder.h
@@ -9,7 +9,7 @@
 
 #include "fxbarcode/datamatrix/BC_Encoder.h"
 
-class CBC_Base256Encoder : public CBC_Encoder {
+class CBC_Base256Encoder final : public CBC_Encoder {
  public:
   CBC_Base256Encoder();
   ~CBC_Base256Encoder() override;
diff --git a/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.h b/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.h
index 0a1c529..45c30b6 100644
--- a/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.h
+++ b/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.h
@@ -9,7 +9,7 @@
 
 #include "fxbarcode/datamatrix/BC_SymbolInfo.h"
 
-class CBC_DataMatrixSymbolInfo144 : public CBC_SymbolInfo {
+class CBC_DataMatrixSymbolInfo144 final : public CBC_SymbolInfo {
  public:
   CBC_DataMatrixSymbolInfo144();
   ~CBC_DataMatrixSymbolInfo144() override;
diff --git a/fxbarcode/datamatrix/BC_DataMatrixWriter.h b/fxbarcode/datamatrix/BC_DataMatrixWriter.h
index ba2c547..6fa41c0 100644
--- a/fxbarcode/datamatrix/BC_DataMatrixWriter.h
+++ b/fxbarcode/datamatrix/BC_DataMatrixWriter.h
@@ -13,7 +13,7 @@
 class CBC_DefaultPlacement;
 class CBC_SymbolInfo;
 
-class CBC_DataMatrixWriter : public CBC_TwoDimWriter {
+class CBC_DataMatrixWriter final : public CBC_TwoDimWriter {
  public:
   CBC_DataMatrixWriter();
   ~CBC_DataMatrixWriter() override;
diff --git a/fxbarcode/datamatrix/BC_EdifactEncoder.h b/fxbarcode/datamatrix/BC_EdifactEncoder.h
index eb59222..8c72303 100644
--- a/fxbarcode/datamatrix/BC_EdifactEncoder.h
+++ b/fxbarcode/datamatrix/BC_EdifactEncoder.h
@@ -9,7 +9,7 @@
 
 #include "fxbarcode/datamatrix/BC_Encoder.h"
 
-class CBC_EdifactEncoder : public CBC_Encoder {
+class CBC_EdifactEncoder final : public CBC_Encoder {
  public:
   CBC_EdifactEncoder();
   ~CBC_EdifactEncoder() override;
diff --git a/fxbarcode/datamatrix/BC_TextEncoder.h b/fxbarcode/datamatrix/BC_TextEncoder.h
index 9d4cdaf..351772a 100644
--- a/fxbarcode/datamatrix/BC_TextEncoder.h
+++ b/fxbarcode/datamatrix/BC_TextEncoder.h
@@ -9,7 +9,7 @@
 
 #include "fxbarcode/datamatrix/BC_C40Encoder.h"
 
-class CBC_TextEncoder : public CBC_C40Encoder {
+class CBC_TextEncoder final : public CBC_C40Encoder {
  public:
   CBC_TextEncoder();
   ~CBC_TextEncoder() override;
diff --git a/fxbarcode/datamatrix/BC_X12Encoder.h b/fxbarcode/datamatrix/BC_X12Encoder.h
index 324b78b..7ef84d5 100644
--- a/fxbarcode/datamatrix/BC_X12Encoder.h
+++ b/fxbarcode/datamatrix/BC_X12Encoder.h
@@ -9,7 +9,7 @@
 
 #include "fxbarcode/datamatrix/BC_C40Encoder.h"
 
-class CBC_X12Encoder : public CBC_C40Encoder {
+class CBC_X12Encoder final : public CBC_C40Encoder {
  public:
   CBC_X12Encoder();
   ~CBC_X12Encoder() override;
diff --git a/fxbarcode/oned/BC_OnedCodaBarWriter.h b/fxbarcode/oned/BC_OnedCodaBarWriter.h
index ab354ef..d3f5224 100644
--- a/fxbarcode/oned/BC_OnedCodaBarWriter.h
+++ b/fxbarcode/oned/BC_OnedCodaBarWriter.h
@@ -12,7 +12,7 @@
 #include "fxbarcode/BC_Library.h"
 #include "fxbarcode/oned/BC_OneDimWriter.h"
 
-class CBC_OnedCodaBarWriter : public CBC_OneDimWriter {
+class CBC_OnedCodaBarWriter final : public CBC_OneDimWriter {
  public:
   CBC_OnedCodaBarWriter();
   ~CBC_OnedCodaBarWriter() override;
diff --git a/fxbarcode/oned/BC_OnedCode128Writer.h b/fxbarcode/oned/BC_OnedCode128Writer.h
index 3edb65a..f91874c 100644
--- a/fxbarcode/oned/BC_OnedCode128Writer.h
+++ b/fxbarcode/oned/BC_OnedCode128Writer.h
@@ -13,7 +13,7 @@
 #include "core/fxcrt/fx_system.h"
 #include "fxbarcode/oned/BC_OneDimWriter.h"
 
-class CBC_OnedCode128Writer : public CBC_OneDimWriter {
+class CBC_OnedCode128Writer final : public CBC_OneDimWriter {
  public:
   explicit CBC_OnedCode128Writer(BC_TYPE type);
   ~CBC_OnedCode128Writer() override;
diff --git a/fxbarcode/oned/BC_OnedCode39Writer.h b/fxbarcode/oned/BC_OnedCode39Writer.h
index 90611c0..5c4a4d5 100644
--- a/fxbarcode/oned/BC_OnedCode39Writer.h
+++ b/fxbarcode/oned/BC_OnedCode39Writer.h
@@ -10,7 +10,7 @@
 #include "fxbarcode/BC_Library.h"
 #include "fxbarcode/oned/BC_OneDimWriter.h"
 
-class CBC_OnedCode39Writer : public CBC_OneDimWriter {
+class CBC_OnedCode39Writer final : public CBC_OneDimWriter {
  public:
   CBC_OnedCode39Writer();
   ~CBC_OnedCode39Writer() override;
diff --git a/fxbarcode/oned/BC_OnedEAN13Writer.h b/fxbarcode/oned/BC_OnedEAN13Writer.h
index c874610..3c7ff2e 100644
--- a/fxbarcode/oned/BC_OnedEAN13Writer.h
+++ b/fxbarcode/oned/BC_OnedEAN13Writer.h
@@ -14,7 +14,7 @@
 class CFX_DIBitmap;
 class CFX_RenderDevice;
 
-class CBC_OnedEAN13Writer : public CBC_OneDimWriter {
+class CBC_OnedEAN13Writer final : public CBC_OneDimWriter {
  public:
   CBC_OnedEAN13Writer();
   ~CBC_OnedEAN13Writer() override;
diff --git a/fxbarcode/oned/BC_OnedEAN8Writer.h b/fxbarcode/oned/BC_OnedEAN8Writer.h
index 77a3602..dfef89e 100644
--- a/fxbarcode/oned/BC_OnedEAN8Writer.h
+++ b/fxbarcode/oned/BC_OnedEAN8Writer.h
@@ -15,7 +15,7 @@
 class CFX_DIBitmap;
 class CFX_RenderDevice;
 
-class CBC_OnedEAN8Writer : public CBC_OneDimWriter {
+class CBC_OnedEAN8Writer final : public CBC_OneDimWriter {
  public:
   CBC_OnedEAN8Writer();
   ~CBC_OnedEAN8Writer() override;
diff --git a/fxbarcode/oned/BC_OnedUPCAWriter.h b/fxbarcode/oned/BC_OnedUPCAWriter.h
index a854ef4..1a9f091 100644
--- a/fxbarcode/oned/BC_OnedUPCAWriter.h
+++ b/fxbarcode/oned/BC_OnedUPCAWriter.h
@@ -18,7 +18,7 @@
 class CFX_Matrix;
 class CFX_RenderDevice;
 
-class CBC_OnedUPCAWriter : public CBC_OneDimWriter {
+class CBC_OnedUPCAWriter final : public CBC_OneDimWriter {
  public:
   CBC_OnedUPCAWriter();
   ~CBC_OnedUPCAWriter() override;
diff --git a/fxbarcode/pdf417/BC_PDF417Writer.h b/fxbarcode/pdf417/BC_PDF417Writer.h
index 05e85c7..1af9d74 100644
--- a/fxbarcode/pdf417/BC_PDF417Writer.h
+++ b/fxbarcode/pdf417/BC_PDF417Writer.h
@@ -13,7 +13,7 @@
 #include "core/fxcrt/fx_system.h"
 #include "fxbarcode/BC_TwoDimWriter.h"
 
-class CBC_PDF417Writer : public CBC_TwoDimWriter {
+class CBC_PDF417Writer final : public CBC_TwoDimWriter {
  public:
   CBC_PDF417Writer();
   ~CBC_PDF417Writer() override;
diff --git a/fxbarcode/qrcode/BC_QRCodeWriter.h b/fxbarcode/qrcode/BC_QRCodeWriter.h
index 3b3efc9..192b465 100644
--- a/fxbarcode/qrcode/BC_QRCodeWriter.h
+++ b/fxbarcode/qrcode/BC_QRCodeWriter.h
@@ -10,7 +10,7 @@
 #include "fxbarcode/BC_TwoDimWriter.h"
 
 class CBC_TwoDimWriter;
-class CBC_QRCodeWriter : public CBC_TwoDimWriter {
+class CBC_QRCodeWriter final : public CBC_TwoDimWriter {
  public:
   CBC_QRCodeWriter();
   ~CBC_QRCodeWriter() override;
diff --git a/fxjs/cfx_v8.h b/fxjs/cfx_v8.h
index 04468d5..f7bed86 100644
--- a/fxjs/cfx_v8.h
+++ b/fxjs/cfx_v8.h
@@ -66,7 +66,7 @@
   UnownedPtr<v8::Isolate> m_pIsolate;
 };
 
-class CFX_V8ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
+class CFX_V8ArrayBufferAllocator final : public v8::ArrayBuffer::Allocator {
   static const size_t kMaxAllowedBytes = 0x10000000;
   void* Allocate(size_t length) override;
   void* AllocateUninitialized(size_t length) override;
diff --git a/fxjs/cfxjs_engine.cpp b/fxjs/cfxjs_engine.cpp
index 2a95e4c..a4a85df 100644
--- a/fxjs/cfxjs_engine.cpp
+++ b/fxjs/cfxjs_engine.cpp
@@ -24,7 +24,7 @@
 static wchar_t kPerObjectDataTag[] = L"CFXJS_PerObjectData";
 
 // Global weak map to save dynamic objects.
-class V8TemplateMapTraits
+class V8TemplateMapTraits final
     : public v8::StdMapTraits<CFXJS_PerObjectData*, v8::Object> {
  public:
   using WeakCallbackDataType = CFXJS_PerObjectData;
diff --git a/fxjs/cfxjse_engine.h b/fxjs/cfxjse_engine.h
index 01bce53..632010d 100644
--- a/fxjs/cfxjse_engine.h
+++ b/fxjs/cfxjse_engine.h
@@ -26,7 +26,7 @@
 class CJS_Runtime;
 class CXFA_List;
 
-class CFXJSE_Engine : public CFX_V8 {
+class CFXJSE_Engine final : public CFX_V8 {
  public:
   static CXFA_Object* ToObject(const v8::FunctionCallbackInfo<v8::Value>& info);
   static CXFA_Object* ToObject(CFXJSE_Value* pValue);
diff --git a/fxjs/cfxjse_formcalc_context.h b/fxjs/cfxjse_formcalc_context.h
index ef1cd34..a03c66f 100644
--- a/fxjs/cfxjse_formcalc_context.h
+++ b/fxjs/cfxjse_formcalc_context.h
@@ -18,7 +18,7 @@
 class CFX_WideTextBuf;
 class CXFA_Document;
 
-class CFXJSE_FormCalcContext : public CFXJSE_HostObject {
+class CFXJSE_FormCalcContext final : public CFXJSE_HostObject {
  public:
   CFXJSE_FormCalcContext(v8::Isolate* pScriptIsolate,
                          CFXJSE_Context* pScriptContext,
diff --git a/fxjs/cfxjse_isolatetracker.h b/fxjs/cfxjse_isolatetracker.h
index 103b275..4e95498 100644
--- a/fxjs/cfxjse_isolatetracker.h
+++ b/fxjs/cfxjse_isolatetracker.h
@@ -26,7 +26,7 @@
   v8::HandleScope m_hscope;
 };
 
-class CFXJSE_ScopeUtil_IsolateHandleRootContext
+class CFXJSE_ScopeUtil_IsolateHandleRootContext final
     : public CFXJSE_ScopeUtil_IsolateHandle {
  public:
   explicit CFXJSE_ScopeUtil_IsolateHandleRootContext(v8::Isolate* pIsolate);
diff --git a/fxjs/cjs_annot.h b/fxjs/cjs_annot.h
index 79b2663..ea2168e 100644
--- a/fxjs/cjs_annot.h
+++ b/fxjs/cjs_annot.h
@@ -10,7 +10,7 @@
 #include "fpdfsdk/cpdfsdk_baannot.h"
 #include "fxjs/js_define.h"
 
-class CJS_Annot : public CJS_Object {
+class CJS_Annot final : public CJS_Object {
  public:
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine);
diff --git a/fxjs/cjs_app.h b/fxjs/cjs_app.h
index 5690f47..5f211d7 100644
--- a/fxjs/cjs_app.h
+++ b/fxjs/cjs_app.h
@@ -16,7 +16,7 @@
 class CJS_Runtime;
 class GlobalTimer;
 
-class CJS_App : public CJS_Object {
+class CJS_App final : public CJS_Object {
  public:
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine);
diff --git a/fxjs/cjs_border.h b/fxjs/cjs_border.h
index 0d10a1f..8122934 100644
--- a/fxjs/cjs_border.h
+++ b/fxjs/cjs_border.h
@@ -9,7 +9,7 @@
 
 #include "fxjs/js_define.h"
 
-class CJS_Border : public CJS_Object {
+class CJS_Border final : public CJS_Object {
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
diff --git a/fxjs/cjs_color.h b/fxjs/cjs_color.h
index aff19d7..b1bd211 100644
--- a/fxjs/cjs_color.h
+++ b/fxjs/cjs_color.h
@@ -12,7 +12,7 @@
 #include "fpdfsdk/pwl/cpwl_wnd.h"
 #include "fxjs/js_define.h"
 
-class CJS_Color : public CJS_Object {
+class CJS_Color final : public CJS_Object {
  public:
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine);
diff --git a/fxjs/cjs_console.h b/fxjs/cjs_console.h
index 9ab2555..59276be 100644
--- a/fxjs/cjs_console.h
+++ b/fxjs/cjs_console.h
@@ -11,7 +11,7 @@
 
 #include "fxjs/js_define.h"
 
-class CJS_Console : public CJS_Object {
+class CJS_Console final : public CJS_Object {
  public:
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine);
diff --git a/fxjs/cjs_display.h b/fxjs/cjs_display.h
index 2336952..35eebba 100644
--- a/fxjs/cjs_display.h
+++ b/fxjs/cjs_display.h
@@ -9,7 +9,7 @@
 
 #include "fxjs/js_define.h"
 
-class CJS_Display : public CJS_Object {
+class CJS_Display final : public CJS_Object {
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
diff --git a/fxjs/cjs_document.h b/fxjs/cjs_document.h
index 69a0b65..0f25703 100644
--- a/fxjs/cjs_document.h
+++ b/fxjs/cjs_document.h
@@ -17,7 +17,7 @@
 class CPDF_TextObject;
 struct CJS_DelayData;
 
-class CJS_Document : public CJS_Object, public Observable<CJS_Document> {
+class CJS_Document final : public CJS_Object, public Observable<CJS_Document> {
  public:
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine);
diff --git a/fxjs/cjs_event.h b/fxjs/cjs_event.h
index 67bd3f5..a6308ec 100644
--- a/fxjs/cjs_event.h
+++ b/fxjs/cjs_event.h
@@ -9,7 +9,7 @@
 
 #include "fxjs/js_define.h"
 
-class CJS_Event : public CJS_Object {
+class CJS_Event final : public CJS_Object {
  public:
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine);
diff --git a/fxjs/cjs_event_context.h b/fxjs/cjs_event_context.h
index 29bbd5a..a9933e6 100644
--- a/fxjs/cjs_event_context.h
+++ b/fxjs/cjs_event_context.h
@@ -18,7 +18,7 @@
 class CJS_Runtime;
 class CPDFSDK_FormFillEnvironment;
 
-class CJS_EventContext : public IJS_EventContext {
+class CJS_EventContext final : public IJS_EventContext {
  public:
   explicit CJS_EventContext(CJS_Runtime* pRuntime);
   ~CJS_EventContext() override;
diff --git a/fxjs/cjs_field.h b/fxjs/cjs_field.h
index 69d6c8e..4f21710 100644
--- a/fxjs/cjs_field.h
+++ b/fxjs/cjs_field.h
@@ -27,7 +27,7 @@
   FP_VALUE
 };
 
-class CJS_Field : public CJS_Object {
+class CJS_Field final : public CJS_Object {
  public:
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine);
diff --git a/fxjs/cjs_font.h b/fxjs/cjs_font.h
index be677d4..56b3db0 100644
--- a/fxjs/cjs_font.h
+++ b/fxjs/cjs_font.h
@@ -9,7 +9,7 @@
 
 #include "fxjs/js_define.h"
 
-class CJS_Font : public CJS_Object {
+class CJS_Font final : public CJS_Object {
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
diff --git a/fxjs/cjs_global.h b/fxjs/cjs_global.h
index 491897a..6ecd6c0 100644
--- a/fxjs/cjs_global.h
+++ b/fxjs/cjs_global.h
@@ -16,7 +16,7 @@
 
 class CJS_GlobalData;
 
-class CJS_Global : public CJS_Object {
+class CJS_Global final : public CJS_Object {
  public:
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine);
diff --git a/fxjs/cjs_globalarrays.h b/fxjs/cjs_globalarrays.h
index 8e97273..cfd90af 100644
--- a/fxjs/cjs_globalarrays.h
+++ b/fxjs/cjs_globalarrays.h
@@ -9,7 +9,7 @@
 
 #include "fxjs/js_define.h"
 
-class CJS_GlobalArrays : public CJS_Object {
+class CJS_GlobalArrays final : public CJS_Object {
  public:
   static void DefineJSObjects(CJS_Runtime* pRuntmie);
 };
diff --git a/fxjs/cjs_globalconsts.h b/fxjs/cjs_globalconsts.h
index 1bef384..1846c41 100644
--- a/fxjs/cjs_globalconsts.h
+++ b/fxjs/cjs_globalconsts.h
@@ -9,7 +9,7 @@
 
 #include "fxjs/js_define.h"
 
-class CJS_GlobalConsts : public CJS_Object {
+class CJS_GlobalConsts final : public CJS_Object {
  public:
   static void DefineJSObjects(CJS_Runtime* pRuntime);
 };
diff --git a/fxjs/cjs_highlight.h b/fxjs/cjs_highlight.h
index a5fc21d..acf03e8 100644
--- a/fxjs/cjs_highlight.h
+++ b/fxjs/cjs_highlight.h
@@ -9,7 +9,7 @@
 
 #include "fxjs/js_define.h"
 
-class CJS_Highlight : public CJS_Object {
+class CJS_Highlight final : public CJS_Object {
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
diff --git a/fxjs/cjs_icon.h b/fxjs/cjs_icon.h
index 6df671b..a92509d 100644
--- a/fxjs/cjs_icon.h
+++ b/fxjs/cjs_icon.h
@@ -9,7 +9,7 @@
 
 #include "fxjs/js_define.h"
 
-class CJS_Icon : public CJS_Object {
+class CJS_Icon final : public CJS_Object {
  public:
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine);
diff --git a/fxjs/cjs_position.h b/fxjs/cjs_position.h
index 3e62bc9..3db83ff 100644
--- a/fxjs/cjs_position.h
+++ b/fxjs/cjs_position.h
@@ -9,7 +9,7 @@
 
 #include "fxjs/js_define.h"
 
-class CJS_Position : public CJS_Object {
+class CJS_Position final : public CJS_Object {
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
diff --git a/fxjs/cjs_printparamsobj.h b/fxjs/cjs_printparamsobj.h
index 572d7d8..69071e6 100644
--- a/fxjs/cjs_printparamsobj.h
+++ b/fxjs/cjs_printparamsobj.h
@@ -9,7 +9,7 @@
 
 #include "fxjs/js_define.h"
 
-class CJS_PrintParamsObj : public CJS_Object {
+class CJS_PrintParamsObj final : public CJS_Object {
  public:
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine);
diff --git a/fxjs/cjs_publicmethods.h b/fxjs/cjs_publicmethods.h
index 8ec3562..f83375c 100644
--- a/fxjs/cjs_publicmethods.h
+++ b/fxjs/cjs_publicmethods.h
@@ -12,7 +12,7 @@
 
 #include "fxjs/js_define.h"
 
-class CJS_PublicMethods : public CJS_Object {
+class CJS_PublicMethods final : public CJS_Object {
  public:
   CJS_PublicMethods(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
   ~CJS_PublicMethods() override;
diff --git a/fxjs/cjs_report.h b/fxjs/cjs_report.h
index a969b41..6606d14 100644
--- a/fxjs/cjs_report.h
+++ b/fxjs/cjs_report.h
@@ -11,7 +11,7 @@
 
 #include "fxjs/js_define.h"
 
-class CJS_Report : public CJS_Object {
+class CJS_Report final : public CJS_Object {
  public:
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine, FXJSOBJTYPE eObjType);
diff --git a/fxjs/cjs_runtime.h b/fxjs/cjs_runtime.h
index 73b722d..f7b2679 100644
--- a/fxjs/cjs_runtime.h
+++ b/fxjs/cjs_runtime.h
@@ -21,9 +21,9 @@
 
 class CJS_EventContext;
 
-class CJS_Runtime : public IJS_Runtime,
-                    public CFXJS_Engine,
-                    public Observable<CJS_Runtime> {
+class CJS_Runtime final : public IJS_Runtime,
+                          public CFXJS_Engine,
+                          public Observable<CJS_Runtime> {
  public:
   using FieldEvent = std::pair<WideString, JS_EVENT_T>;
 
diff --git a/fxjs/cjs_scalehow.h b/fxjs/cjs_scalehow.h
index a0d16b3..a5e4435 100644
--- a/fxjs/cjs_scalehow.h
+++ b/fxjs/cjs_scalehow.h
@@ -9,7 +9,7 @@
 
 #include "fxjs/js_define.h"
 
-class CJS_ScaleHow : public CJS_Object {
+class CJS_ScaleHow final : public CJS_Object {
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
diff --git a/fxjs/cjs_scalewhen.h b/fxjs/cjs_scalewhen.h
index f30a3bd..c0117ee 100644
--- a/fxjs/cjs_scalewhen.h
+++ b/fxjs/cjs_scalewhen.h
@@ -9,7 +9,7 @@
 
 #include "fxjs/js_define.h"
 
-class CJS_ScaleWhen : public CJS_Object {
+class CJS_ScaleWhen final : public CJS_Object {
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
diff --git a/fxjs/cjs_style.h b/fxjs/cjs_style.h
index dade59f..8ddd6a3 100644
--- a/fxjs/cjs_style.h
+++ b/fxjs/cjs_style.h
@@ -9,7 +9,7 @@
 
 #include "fxjs/js_define.h"
 
-class CJS_Style : public CJS_Object {
+class CJS_Style final : public CJS_Object {
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
diff --git a/fxjs/cjs_timerobj.h b/fxjs/cjs_timerobj.h
index d9dc881..5892849 100644
--- a/fxjs/cjs_timerobj.h
+++ b/fxjs/cjs_timerobj.h
@@ -11,7 +11,7 @@
 
 class GlobalTimer;
 
-class CJS_TimerObj : public CJS_Object {
+class CJS_TimerObj final : public CJS_Object {
  public:
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine);
diff --git a/fxjs/cjs_util.h b/fxjs/cjs_util.h
index f948afb..934a0f8 100644
--- a/fxjs/cjs_util.h
+++ b/fxjs/cjs_util.h
@@ -17,7 +17,7 @@
 #define UTIL_DOUBLE 1
 #define UTIL_STRING 2
 
-class CJS_Util : public CJS_Object {
+class CJS_Util final : public CJS_Object {
  public:
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine);
diff --git a/fxjs/cjs_zoomtype.h b/fxjs/cjs_zoomtype.h
index 5dda997..892f72e 100644
--- a/fxjs/cjs_zoomtype.h
+++ b/fxjs/cjs_zoomtype.h
@@ -9,7 +9,7 @@
 
 #include "fxjs/js_define.h"
 
-class CJS_Zoomtype : public CJS_Object {
+class CJS_Zoomtype final : public CJS_Object {
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
diff --git a/fxjs/xfa/cjx_arc.h b/fxjs/xfa/cjx_arc.h
index 2b62884..031b620 100644
--- a/fxjs/xfa/cjx_arc.h
+++ b/fxjs/xfa/cjx_arc.h
@@ -12,7 +12,7 @@
 
 class CXFA_Arc;
 
-class CJX_Arc : public CJX_Node {
+class CJX_Arc final : public CJX_Node {
  public:
   explicit CJX_Arc(CXFA_Arc* node);
   ~CJX_Arc() override;
diff --git a/fxjs/xfa/cjx_area.h b/fxjs/xfa/cjx_area.h
index 2814231..5958c8a 100644
--- a/fxjs/xfa/cjx_area.h
+++ b/fxjs/xfa/cjx_area.h
@@ -12,7 +12,7 @@
 
 class CXFA_Area;
 
-class CJX_Area : public CJX_Container {
+class CJX_Area final : public CJX_Container {
  public:
   explicit CJX_Area(CXFA_Area* node);
   ~CJX_Area() override;
diff --git a/fxjs/xfa/cjx_assist.h b/fxjs/xfa/cjx_assist.h
index c150a51..46aaade 100644
--- a/fxjs/xfa/cjx_assist.h
+++ b/fxjs/xfa/cjx_assist.h
@@ -12,7 +12,7 @@
 
 class CXFA_Assist;
 
-class CJX_Assist : public CJX_Node {
+class CJX_Assist final : public CJX_Node {
  public:
   explicit CJX_Assist(CXFA_Assist* node);
   ~CJX_Assist() override;
diff --git a/fxjs/xfa/cjx_barcode.h b/fxjs/xfa/cjx_barcode.h
index 3901bd6..551df42 100644
--- a/fxjs/xfa/cjx_barcode.h
+++ b/fxjs/xfa/cjx_barcode.h
@@ -12,7 +12,7 @@
 
 class CXFA_Barcode;
 
-class CJX_Barcode : public CJX_Node {
+class CJX_Barcode final : public CJX_Node {
  public:
   explicit CJX_Barcode(CXFA_Barcode* arc);
   ~CJX_Barcode() override;
diff --git a/fxjs/xfa/cjx_bind.h b/fxjs/xfa/cjx_bind.h
index ab22143..3ca9da7 100644
--- a/fxjs/xfa/cjx_bind.h
+++ b/fxjs/xfa/cjx_bind.h
@@ -12,7 +12,7 @@
 
 class CXFA_Bind;
 
-class CJX_Bind : public CJX_Node {
+class CJX_Bind final : public CJX_Node {
  public:
   explicit CJX_Bind(CXFA_Bind* node);
   ~CJX_Bind() override;
diff --git a/fxjs/xfa/cjx_binditems.h b/fxjs/xfa/cjx_binditems.h
index 1b27d44..1bbbb2b 100644
--- a/fxjs/xfa/cjx_binditems.h
+++ b/fxjs/xfa/cjx_binditems.h
@@ -12,7 +12,7 @@
 
 class CXFA_BindItems;
 
-class CJX_BindItems : public CJX_Node {
+class CJX_BindItems final : public CJX_Node {
  public:
   explicit CJX_BindItems(CXFA_BindItems* node);
   ~CJX_BindItems() override;
diff --git a/fxjs/xfa/cjx_bookend.h b/fxjs/xfa/cjx_bookend.h
index fa3f1ca..9015205 100644
--- a/fxjs/xfa/cjx_bookend.h
+++ b/fxjs/xfa/cjx_bookend.h
@@ -12,7 +12,7 @@
 
 class CXFA_Bookend;
 
-class CJX_Bookend : public CJX_Node {
+class CJX_Bookend final : public CJX_Node {
  public:
   explicit CJX_Bookend(CXFA_Bookend* node);
   ~CJX_Bookend() override;
diff --git a/fxjs/xfa/cjx_boolean.h b/fxjs/xfa/cjx_boolean.h
index 4242c55..380351d6 100644
--- a/fxjs/xfa/cjx_boolean.h
+++ b/fxjs/xfa/cjx_boolean.h
@@ -12,7 +12,7 @@
 
 class CXFA_Boolean;
 
-class CJX_Boolean : public CJX_Content {
+class CJX_Boolean final : public CJX_Content {
  public:
   explicit CJX_Boolean(CXFA_Boolean* node);
   ~CJX_Boolean() override;
diff --git a/fxjs/xfa/cjx_border.h b/fxjs/xfa/cjx_border.h
index abeb577..c89b546 100644
--- a/fxjs/xfa/cjx_border.h
+++ b/fxjs/xfa/cjx_border.h
@@ -12,7 +12,7 @@
 
 class CXFA_Border;
 
-class CJX_Border : public CJX_Node {
+class CJX_Border final : public CJX_Node {
  public:
   explicit CJX_Border(CXFA_Border* node);
   ~CJX_Border() override;
diff --git a/fxjs/xfa/cjx_break.h b/fxjs/xfa/cjx_break.h
index c9090d9..7391217 100644
--- a/fxjs/xfa/cjx_break.h
+++ b/fxjs/xfa/cjx_break.h
@@ -12,7 +12,7 @@
 
 class CXFA_Break;
 
-class CJX_Break : public CJX_Node {
+class CJX_Break final : public CJX_Node {
  public:
   explicit CJX_Break(CXFA_Break* node);
   ~CJX_Break() override;
diff --git a/fxjs/xfa/cjx_breakafter.h b/fxjs/xfa/cjx_breakafter.h
index 7028c51..cd89f34 100644
--- a/fxjs/xfa/cjx_breakafter.h
+++ b/fxjs/xfa/cjx_breakafter.h
@@ -12,7 +12,7 @@
 
 class CXFA_BreakAfter;
 
-class CJX_BreakAfter : public CJX_Node {
+class CJX_BreakAfter final : public CJX_Node {
  public:
   explicit CJX_BreakAfter(CXFA_BreakAfter* node);
   ~CJX_BreakAfter() override;
diff --git a/fxjs/xfa/cjx_breakbefore.h b/fxjs/xfa/cjx_breakbefore.h
index b4251c9..59f07c0 100644
--- a/fxjs/xfa/cjx_breakbefore.h
+++ b/fxjs/xfa/cjx_breakbefore.h
@@ -12,7 +12,7 @@
 
 class CXFA_BreakBefore;
 
-class CJX_BreakBefore : public CJX_Node {
+class CJX_BreakBefore final : public CJX_Node {
  public:
   explicit CJX_BreakBefore(CXFA_BreakBefore* node);
   ~CJX_BreakBefore() override;
diff --git a/fxjs/xfa/cjx_button.h b/fxjs/xfa/cjx_button.h
index bf38aa4..9fe5061 100644
--- a/fxjs/xfa/cjx_button.h
+++ b/fxjs/xfa/cjx_button.h
@@ -12,7 +12,7 @@
 
 class CXFA_Button;
 
-class CJX_Button : public CJX_Node {
+class CJX_Button final : public CJX_Node {
  public:
   explicit CJX_Button(CXFA_Button* node);
   ~CJX_Button() override;
diff --git a/fxjs/xfa/cjx_calculate.h b/fxjs/xfa/cjx_calculate.h
index 1b4c149..29dc732 100644
--- a/fxjs/xfa/cjx_calculate.h
+++ b/fxjs/xfa/cjx_calculate.h
@@ -12,7 +12,7 @@
 
 class CXFA_Calculate;
 
-class CJX_Calculate : public CJX_Node {
+class CJX_Calculate final : public CJX_Node {
  public:
   explicit CJX_Calculate(CXFA_Calculate* node);
   ~CJX_Calculate() override;
diff --git a/fxjs/xfa/cjx_caption.h b/fxjs/xfa/cjx_caption.h
index d924147..ae89ed0 100644
--- a/fxjs/xfa/cjx_caption.h
+++ b/fxjs/xfa/cjx_caption.h
@@ -12,7 +12,7 @@
 
 class CXFA_Caption;
 
-class CJX_Caption : public CJX_Node {
+class CJX_Caption final : public CJX_Node {
  public:
   explicit CJX_Caption(CXFA_Caption* node);
   ~CJX_Caption() override;
diff --git a/fxjs/xfa/cjx_certificate.h b/fxjs/xfa/cjx_certificate.h
index 8be791d..93a323a 100644
--- a/fxjs/xfa/cjx_certificate.h
+++ b/fxjs/xfa/cjx_certificate.h
@@ -12,7 +12,7 @@
 
 class CXFA_Certificate;
 
-class CJX_Certificate : public CJX_TextNode {
+class CJX_Certificate final : public CJX_TextNode {
  public:
   explicit CJX_Certificate(CXFA_Certificate* node);
   ~CJX_Certificate() override;
diff --git a/fxjs/xfa/cjx_certificates.h b/fxjs/xfa/cjx_certificates.h
index 42ce885..b792efb 100644
--- a/fxjs/xfa/cjx_certificates.h
+++ b/fxjs/xfa/cjx_certificates.h
@@ -12,7 +12,7 @@
 
 class CXFA_Certificates;
 
-class CJX_Certificates : public CJX_Node {
+class CJX_Certificates final : public CJX_Node {
  public:
   explicit CJX_Certificates(CXFA_Certificates* node);
   ~CJX_Certificates() override;
diff --git a/fxjs/xfa/cjx_checkbutton.h b/fxjs/xfa/cjx_checkbutton.h
index 3b78d71..82a96d4 100644
--- a/fxjs/xfa/cjx_checkbutton.h
+++ b/fxjs/xfa/cjx_checkbutton.h
@@ -12,7 +12,7 @@
 
 class CXFA_CheckButton;
 
-class CJX_CheckButton : public CJX_Node {
+class CJX_CheckButton final : public CJX_Node {
  public:
   explicit CJX_CheckButton(CXFA_CheckButton* node);
   ~CJX_CheckButton() override;
diff --git a/fxjs/xfa/cjx_choicelist.h b/fxjs/xfa/cjx_choicelist.h
index 3bf947c..e1add2d 100644
--- a/fxjs/xfa/cjx_choicelist.h
+++ b/fxjs/xfa/cjx_choicelist.h
@@ -12,7 +12,7 @@
 
 class CXFA_ChoiceList;
 
-class CJX_ChoiceList : public CJX_Node {
+class CJX_ChoiceList final : public CJX_Node {
  public:
   explicit CJX_ChoiceList(CXFA_ChoiceList* node);
   ~CJX_ChoiceList() override;
diff --git a/fxjs/xfa/cjx_color.h b/fxjs/xfa/cjx_color.h
index e048aca..d0816bb 100644
--- a/fxjs/xfa/cjx_color.h
+++ b/fxjs/xfa/cjx_color.h
@@ -12,7 +12,7 @@
 
 class CXFA_Color;
 
-class CJX_Color : public CJX_Node {
+class CJX_Color final : public CJX_Node {
  public:
   explicit CJX_Color(CXFA_Color* node);
   ~CJX_Color() override;
diff --git a/fxjs/xfa/cjx_comb.h b/fxjs/xfa/cjx_comb.h
index abcf8c0..073adf5 100644
--- a/fxjs/xfa/cjx_comb.h
+++ b/fxjs/xfa/cjx_comb.h
@@ -12,7 +12,7 @@
 
 class CXFA_Comb;
 
-class CJX_Comb : public CJX_Node {
+class CJX_Comb final : public CJX_Node {
  public:
   explicit CJX_Comb(CXFA_Comb* node);
   ~CJX_Comb() override;
diff --git a/fxjs/xfa/cjx_command.h b/fxjs/xfa/cjx_command.h
index e645baf..b876d69 100644
--- a/fxjs/xfa/cjx_command.h
+++ b/fxjs/xfa/cjx_command.h
@@ -12,7 +12,7 @@
 
 class CXFA_Command;
 
-class CJX_Command : public CJX_Node {
+class CJX_Command final : public CJX_Node {
  public:
   explicit CJX_Command(CXFA_Command* node);
   ~CJX_Command() override;
diff --git a/fxjs/xfa/cjx_connect.h b/fxjs/xfa/cjx_connect.h
index 77cee4f..5ebb93e 100644
--- a/fxjs/xfa/cjx_connect.h
+++ b/fxjs/xfa/cjx_connect.h
@@ -12,7 +12,7 @@
 
 class CXFA_Connect;
 
-class CJX_Connect : public CJX_Node {
+class CJX_Connect final : public CJX_Node {
  public:
   explicit CJX_Connect(CXFA_Connect* node);
   ~CJX_Connect() override;
diff --git a/fxjs/xfa/cjx_connectstring.h b/fxjs/xfa/cjx_connectstring.h
index f40a867..8a6beb3 100644
--- a/fxjs/xfa/cjx_connectstring.h
+++ b/fxjs/xfa/cjx_connectstring.h
@@ -12,7 +12,7 @@
 
 class CXFA_ConnectString;
 
-class CJX_ConnectString : public CJX_TextNode {
+class CJX_ConnectString final : public CJX_TextNode {
  public:
   explicit CJX_ConnectString(CXFA_ConnectString* node);
   ~CJX_ConnectString() override;
diff --git a/fxjs/xfa/cjx_contentarea.h b/fxjs/xfa/cjx_contentarea.h
index aeed6b6..82cbde1 100644
--- a/fxjs/xfa/cjx_contentarea.h
+++ b/fxjs/xfa/cjx_contentarea.h
@@ -12,7 +12,7 @@
 
 class CXFA_ContentArea;
 
-class CJX_ContentArea : public CJX_Container {
+class CJX_ContentArea final : public CJX_Container {
  public:
   explicit CJX_ContentArea(CXFA_ContentArea* node);
   ~CJX_ContentArea() override;
diff --git a/fxjs/xfa/cjx_corner.h b/fxjs/xfa/cjx_corner.h
index 8db2524..905c05c 100644
--- a/fxjs/xfa/cjx_corner.h
+++ b/fxjs/xfa/cjx_corner.h
@@ -12,7 +12,7 @@
 
 class CXFA_Corner;
 
-class CJX_Corner : public CJX_Node {
+class CJX_Corner final : public CJX_Node {
  public:
   explicit CJX_Corner(CXFA_Corner* node);
   ~CJX_Corner() override;
diff --git a/fxjs/xfa/cjx_datavalue.h b/fxjs/xfa/cjx_datavalue.h
index 00bf5cf..6368997 100644
--- a/fxjs/xfa/cjx_datavalue.h
+++ b/fxjs/xfa/cjx_datavalue.h
@@ -12,7 +12,7 @@
 
 class CXFA_DataValue;
 
-class CJX_DataValue : public CJX_Node {
+class CJX_DataValue final : public CJX_Node {
  public:
   explicit CJX_DataValue(CXFA_DataValue* node);
   ~CJX_DataValue() override;
diff --git a/fxjs/xfa/cjx_datawindow.h b/fxjs/xfa/cjx_datawindow.h
index d8e697d..c148cb9 100644
--- a/fxjs/xfa/cjx_datawindow.h
+++ b/fxjs/xfa/cjx_datawindow.h
@@ -14,7 +14,7 @@
 class CFXJSE_Value;
 class CScript_DataWindow;
 
-class CJX_DataWindow : public CJX_Object {
+class CJX_DataWindow final : public CJX_Object {
  public:
   explicit CJX_DataWindow(CScript_DataWindow* window);
   ~CJX_DataWindow() override;
diff --git a/fxjs/xfa/cjx_date.h b/fxjs/xfa/cjx_date.h
index c788937..95c188c 100644
--- a/fxjs/xfa/cjx_date.h
+++ b/fxjs/xfa/cjx_date.h
@@ -12,7 +12,7 @@
 
 class CXFA_Date;
 
-class CJX_Date : public CJX_Content {
+class CJX_Date final : public CJX_Content {
  public:
   explicit CJX_Date(CXFA_Date* node);
   ~CJX_Date() override;
diff --git a/fxjs/xfa/cjx_datetime.h b/fxjs/xfa/cjx_datetime.h
index 1079660..2b62a3b 100644
--- a/fxjs/xfa/cjx_datetime.h
+++ b/fxjs/xfa/cjx_datetime.h
@@ -12,7 +12,7 @@
 
 class CXFA_DateTime;
 
-class CJX_DateTime : public CJX_Node {
+class CJX_DateTime final : public CJX_Node {
  public:
   explicit CJX_DateTime(CXFA_DateTime* node);
   ~CJX_DateTime() override;
diff --git a/fxjs/xfa/cjx_datetimeedit.h b/fxjs/xfa/cjx_datetimeedit.h
index d90a4cf..449df36 100644
--- a/fxjs/xfa/cjx_datetimeedit.h
+++ b/fxjs/xfa/cjx_datetimeedit.h
@@ -12,7 +12,7 @@
 
 class CXFA_DateTimeEdit;
 
-class CJX_DateTimeEdit : public CJX_Node {
+class CJX_DateTimeEdit final : public CJX_Node {
  public:
   explicit CJX_DateTimeEdit(CXFA_DateTimeEdit* node);
   ~CJX_DateTimeEdit() override;
diff --git a/fxjs/xfa/cjx_decimal.h b/fxjs/xfa/cjx_decimal.h
index b7ddec9..7511040 100644
--- a/fxjs/xfa/cjx_decimal.h
+++ b/fxjs/xfa/cjx_decimal.h
@@ -12,7 +12,7 @@
 
 class CXFA_Decimal;
 
-class CJX_Decimal : public CJX_Content {
+class CJX_Decimal final : public CJX_Content {
  public:
   explicit CJX_Decimal(CXFA_Decimal* node);
   ~CJX_Decimal() override;
diff --git a/fxjs/xfa/cjx_defaultui.h b/fxjs/xfa/cjx_defaultui.h
index 29954fd..5e70109 100644
--- a/fxjs/xfa/cjx_defaultui.h
+++ b/fxjs/xfa/cjx_defaultui.h
@@ -12,7 +12,7 @@
 
 class CXFA_DefaultUi;
 
-class CJX_DefaultUi : public CJX_Node {
+class CJX_DefaultUi final : public CJX_Node {
  public:
   explicit CJX_DefaultUi(CXFA_DefaultUi* node);
   ~CJX_DefaultUi() override;
diff --git a/fxjs/xfa/cjx_delete.h b/fxjs/xfa/cjx_delete.h
index e89b1e4..c35cc14 100644
--- a/fxjs/xfa/cjx_delete.h
+++ b/fxjs/xfa/cjx_delete.h
@@ -12,7 +12,7 @@
 
 class CXFA_Delete;
 
-class CJX_Delete : public CJX_TextNode {
+class CJX_Delete final : public CJX_TextNode {
  public:
   explicit CJX_Delete(CXFA_Delete* node);
   ~CJX_Delete() override;
diff --git a/fxjs/xfa/cjx_delta.h b/fxjs/xfa/cjx_delta.h
index 9458599..c499681 100644
--- a/fxjs/xfa/cjx_delta.h
+++ b/fxjs/xfa/cjx_delta.h
@@ -12,7 +12,7 @@
 
 class CXFA_Delta;
 
-class CJX_Delta : public CJX_Object {
+class CJX_Delta final : public CJX_Object {
  public:
   explicit CJX_Delta(CXFA_Delta* delta);
   ~CJX_Delta() override;
diff --git a/fxjs/xfa/cjx_deltas.h b/fxjs/xfa/cjx_deltas.h
index c94753f..7b07a7c 100644
--- a/fxjs/xfa/cjx_deltas.h
+++ b/fxjs/xfa/cjx_deltas.h
@@ -11,7 +11,7 @@
 
 class CXFA_Deltas;
 
-class CJX_Deltas : public CJX_List {
+class CJX_Deltas final : public CJX_List {
  public:
   explicit CJX_Deltas(CXFA_Deltas* node);
   ~CJX_Deltas() override;
diff --git a/fxjs/xfa/cjx_desc.h b/fxjs/xfa/cjx_desc.h
index d30b222..99cb9ba 100644
--- a/fxjs/xfa/cjx_desc.h
+++ b/fxjs/xfa/cjx_desc.h
@@ -12,7 +12,7 @@
 
 class CXFA_Desc;
 
-class CJX_Desc : public CJX_Node {
+class CJX_Desc final : public CJX_Node {
  public:
   explicit CJX_Desc(CXFA_Desc* desc);
   ~CJX_Desc() override;
diff --git a/fxjs/xfa/cjx_digestmethod.h b/fxjs/xfa/cjx_digestmethod.h
index f4050f2..beb0cd2 100644
--- a/fxjs/xfa/cjx_digestmethod.h
+++ b/fxjs/xfa/cjx_digestmethod.h
@@ -12,7 +12,7 @@
 
 class CXFA_DigestMethod;
 
-class CJX_DigestMethod : public CJX_Node {
+class CJX_DigestMethod final : public CJX_Node {
  public:
   explicit CJX_DigestMethod(CXFA_DigestMethod* node);
   ~CJX_DigestMethod() override;
diff --git a/fxjs/xfa/cjx_digestmethods.h b/fxjs/xfa/cjx_digestmethods.h
index c616584..c011a3d 100644
--- a/fxjs/xfa/cjx_digestmethods.h
+++ b/fxjs/xfa/cjx_digestmethods.h
@@ -12,7 +12,7 @@
 
 class CXFA_DigestMethods;
 
-class CJX_DigestMethods : public CJX_Node {
+class CJX_DigestMethods final : public CJX_Node {
  public:
   explicit CJX_DigestMethods(CXFA_DigestMethods* node);
   ~CJX_DigestMethods() override;
diff --git a/fxjs/xfa/cjx_draw.h b/fxjs/xfa/cjx_draw.h
index 508d3e1..4f53bef 100644
--- a/fxjs/xfa/cjx_draw.h
+++ b/fxjs/xfa/cjx_draw.h
@@ -12,7 +12,7 @@
 
 class CXFA_Draw;
 
-class CJX_Draw : public CJX_Container {
+class CJX_Draw final : public CJX_Container {
  public:
   explicit CJX_Draw(CXFA_Draw* node);
   ~CJX_Draw() override;
diff --git a/fxjs/xfa/cjx_edge.h b/fxjs/xfa/cjx_edge.h
index c830a8d..ed3d7cc 100644
--- a/fxjs/xfa/cjx_edge.h
+++ b/fxjs/xfa/cjx_edge.h
@@ -12,7 +12,7 @@
 
 class CXFA_Edge;
 
-class CJX_Edge : public CJX_Node {
+class CJX_Edge final : public CJX_Node {
  public:
   explicit CJX_Edge(CXFA_Edge* node);
   ~CJX_Edge() override;
diff --git a/fxjs/xfa/cjx_encoding.h b/fxjs/xfa/cjx_encoding.h
index ade3e38..4c02df5 100644
--- a/fxjs/xfa/cjx_encoding.h
+++ b/fxjs/xfa/cjx_encoding.h
@@ -12,7 +12,7 @@
 
 class CXFA_Encoding;
 
-class CJX_Encoding : public CJX_Node {
+class CJX_Encoding final : public CJX_Node {
  public:
   explicit CJX_Encoding(CXFA_Encoding* node);
   ~CJX_Encoding() override;
diff --git a/fxjs/xfa/cjx_encodings.h b/fxjs/xfa/cjx_encodings.h
index e2f4376..b1642f7 100644
--- a/fxjs/xfa/cjx_encodings.h
+++ b/fxjs/xfa/cjx_encodings.h
@@ -12,7 +12,7 @@
 
 class CXFA_Encodings;
 
-class CJX_Encodings : public CJX_Node {
+class CJX_Encodings final : public CJX_Node {
  public:
   explicit CJX_Encodings(CXFA_Encodings* node);
   ~CJX_Encodings() override;
diff --git a/fxjs/xfa/cjx_encrypt.h b/fxjs/xfa/cjx_encrypt.h
index acbccf7..7bb31f7 100644
--- a/fxjs/xfa/cjx_encrypt.h
+++ b/fxjs/xfa/cjx_encrypt.h
@@ -12,7 +12,7 @@
 
 class CXFA_Encrypt;
 
-class CJX_Encrypt : public CJX_Node {
+class CJX_Encrypt final : public CJX_Node {
  public:
   explicit CJX_Encrypt(CXFA_Encrypt* node);
   ~CJX_Encrypt() override;
diff --git a/fxjs/xfa/cjx_event.h b/fxjs/xfa/cjx_event.h
index d8c8b03..64cd84b 100644
--- a/fxjs/xfa/cjx_event.h
+++ b/fxjs/xfa/cjx_event.h
@@ -12,7 +12,7 @@
 
 class CXFA_Event;
 
-class CJX_Event : public CJX_Node {
+class CJX_Event final : public CJX_Node {
  public:
   explicit CJX_Event(CXFA_Event* node);
   ~CJX_Event() override;
diff --git a/fxjs/xfa/cjx_eventpseudomodel.h b/fxjs/xfa/cjx_eventpseudomodel.h
index c52871e..3a51098 100644
--- a/fxjs/xfa/cjx_eventpseudomodel.h
+++ b/fxjs/xfa/cjx_eventpseudomodel.h
@@ -33,7 +33,7 @@
   CancelAction
 };
 
-class CJX_EventPseudoModel : public CJX_Object {
+class CJX_EventPseudoModel final : public CJX_Object {
  public:
   explicit CJX_EventPseudoModel(CScript_EventPseudoModel* model);
   ~CJX_EventPseudoModel() override;
diff --git a/fxjs/xfa/cjx_exclgroup.h b/fxjs/xfa/cjx_exclgroup.h
index 492fb12..2387079 100644
--- a/fxjs/xfa/cjx_exclgroup.h
+++ b/fxjs/xfa/cjx_exclgroup.h
@@ -12,7 +12,7 @@
 
 class CXFA_ExclGroup;
 
-class CJX_ExclGroup : public CJX_Node {
+class CJX_ExclGroup final : public CJX_Node {
  public:
   explicit CJX_ExclGroup(CXFA_ExclGroup* group);
   ~CJX_ExclGroup() override;
diff --git a/fxjs/xfa/cjx_exdata.h b/fxjs/xfa/cjx_exdata.h
index 06a5d21..b25ef07 100644
--- a/fxjs/xfa/cjx_exdata.h
+++ b/fxjs/xfa/cjx_exdata.h
@@ -12,7 +12,7 @@
 
 class CXFA_ExData;
 
-class CJX_ExData : public CJX_Content {
+class CJX_ExData final : public CJX_Content {
  public:
   explicit CJX_ExData(CXFA_ExData* node);
   ~CJX_ExData() override;
diff --git a/fxjs/xfa/cjx_execute.h b/fxjs/xfa/cjx_execute.h
index 338f8c3..29e4480 100644
--- a/fxjs/xfa/cjx_execute.h
+++ b/fxjs/xfa/cjx_execute.h
@@ -12,7 +12,7 @@
 
 class CXFA_Execute;
 
-class CJX_Execute : public CJX_Node {
+class CJX_Execute final : public CJX_Node {
  public:
   explicit CJX_Execute(CXFA_Execute* node);
   ~CJX_Execute() override;
diff --git a/fxjs/xfa/cjx_exobject.h b/fxjs/xfa/cjx_exobject.h
index 2e10362..2dc7e79 100644
--- a/fxjs/xfa/cjx_exobject.h
+++ b/fxjs/xfa/cjx_exobject.h
@@ -12,7 +12,7 @@
 
 class CXFA_ExObject;
 
-class CJX_ExObject : public CJX_Node {
+class CJX_ExObject final : public CJX_Node {
  public:
   explicit CJX_ExObject(CXFA_ExObject* node);
   ~CJX_ExObject() override;
diff --git a/fxjs/xfa/cjx_extras.h b/fxjs/xfa/cjx_extras.h
index 829aa9d..b236536 100644
--- a/fxjs/xfa/cjx_extras.h
+++ b/fxjs/xfa/cjx_extras.h
@@ -12,7 +12,7 @@
 
 class CXFA_Extras;
 
-class CJX_Extras : public CJX_Node {
+class CJX_Extras final : public CJX_Node {
  public:
   explicit CJX_Extras(CXFA_Extras* node);
   ~CJX_Extras() override;
diff --git a/fxjs/xfa/cjx_field.h b/fxjs/xfa/cjx_field.h
index bc8f2cf..0f9e299 100644
--- a/fxjs/xfa/cjx_field.h
+++ b/fxjs/xfa/cjx_field.h
@@ -12,7 +12,7 @@
 
 class CXFA_Field;
 
-class CJX_Field : public CJX_Container {
+class CJX_Field final : public CJX_Container {
  public:
   explicit CJX_Field(CXFA_Field* field);
   ~CJX_Field() override;
diff --git a/fxjs/xfa/cjx_fill.h b/fxjs/xfa/cjx_fill.h
index 064a249..b8377d3 100644
--- a/fxjs/xfa/cjx_fill.h
+++ b/fxjs/xfa/cjx_fill.h
@@ -12,7 +12,7 @@
 
 class CXFA_Fill;
 
-class CJX_Fill : public CJX_Node {
+class CJX_Fill final : public CJX_Node {
  public:
   explicit CJX_Fill(CXFA_Fill* node);
   ~CJX_Fill() override;
diff --git a/fxjs/xfa/cjx_filter.h b/fxjs/xfa/cjx_filter.h
index 6012123..c527286 100644
--- a/fxjs/xfa/cjx_filter.h
+++ b/fxjs/xfa/cjx_filter.h
@@ -12,7 +12,7 @@
 
 class CXFA_Filter;
 
-class CJX_Filter : public CJX_Node {
+class CJX_Filter final : public CJX_Node {
  public:
   explicit CJX_Filter(CXFA_Filter* node);
   ~CJX_Filter() override;
diff --git a/fxjs/xfa/cjx_float.h b/fxjs/xfa/cjx_float.h
index 2f8c934..12dbe57 100644
--- a/fxjs/xfa/cjx_float.h
+++ b/fxjs/xfa/cjx_float.h
@@ -12,7 +12,7 @@
 
 class CXFA_Float;
 
-class CJX_Float : public CJX_Content {
+class CJX_Float final : public CJX_Content {
  public:
   explicit CJX_Float(CXFA_Float* node);
   ~CJX_Float() override;
diff --git a/fxjs/xfa/cjx_font.h b/fxjs/xfa/cjx_font.h
index a5a1356..9cd8944 100644
--- a/fxjs/xfa/cjx_font.h
+++ b/fxjs/xfa/cjx_font.h
@@ -12,7 +12,7 @@
 
 class CXFA_Font;
 
-class CJX_Font : public CJX_Node {
+class CJX_Font final : public CJX_Node {
  public:
   explicit CJX_Font(CXFA_Font* node);
   ~CJX_Font() override;
diff --git a/fxjs/xfa/cjx_form.h b/fxjs/xfa/cjx_form.h
index f2325b3..67c7b10 100644
--- a/fxjs/xfa/cjx_form.h
+++ b/fxjs/xfa/cjx_form.h
@@ -12,7 +12,7 @@
 
 class CXFA_Form;
 
-class CJX_Form : public CJX_Model {
+class CJX_Form final : public CJX_Model {
  public:
   explicit CJX_Form(CXFA_Form* form);
   ~CJX_Form() override;
diff --git a/fxjs/xfa/cjx_format.h b/fxjs/xfa/cjx_format.h
index 3f4a42b..cb4a8cc 100644
--- a/fxjs/xfa/cjx_format.h
+++ b/fxjs/xfa/cjx_format.h
@@ -12,7 +12,7 @@
 
 class CXFA_Format;
 
-class CJX_Format : public CJX_Node {
+class CJX_Format final : public CJX_Node {
  public:
   explicit CJX_Format(CXFA_Format* node);
   ~CJX_Format() override;
diff --git a/fxjs/xfa/cjx_handler.h b/fxjs/xfa/cjx_handler.h
index feb0e6d..79aa3a1 100644
--- a/fxjs/xfa/cjx_handler.h
+++ b/fxjs/xfa/cjx_handler.h
@@ -12,7 +12,7 @@
 
 class CXFA_Handler;
 
-class CJX_Handler : public CJX_TextNode {
+class CJX_Handler final : public CJX_TextNode {
  public:
   explicit CJX_Handler(CXFA_Handler* node);
   ~CJX_Handler() override;
diff --git a/fxjs/xfa/cjx_hostpseudomodel.h b/fxjs/xfa/cjx_hostpseudomodel.h
index 7ef7d03..0991aec 100644
--- a/fxjs/xfa/cjx_hostpseudomodel.h
+++ b/fxjs/xfa/cjx_hostpseudomodel.h
@@ -14,7 +14,7 @@
 class CFXJSE_Value;
 class CScript_HostPseudoModel;
 
-class CJX_HostPseudoModel : public CJX_Object {
+class CJX_HostPseudoModel final : public CJX_Object {
  public:
   explicit CJX_HostPseudoModel(CScript_HostPseudoModel* model);
   ~CJX_HostPseudoModel() override;
diff --git a/fxjs/xfa/cjx_image.h b/fxjs/xfa/cjx_image.h
index 682ea31..71f859d 100644
--- a/fxjs/xfa/cjx_image.h
+++ b/fxjs/xfa/cjx_image.h
@@ -12,7 +12,7 @@
 
 class CXFA_Image;
 
-class CJX_Image : public CJX_Node {
+class CJX_Image final : public CJX_Node {
  public:
   explicit CJX_Image(CXFA_Image* node);
   ~CJX_Image() override;
diff --git a/fxjs/xfa/cjx_imageedit.h b/fxjs/xfa/cjx_imageedit.h
index 6b7f1d3..9fda373 100644
--- a/fxjs/xfa/cjx_imageedit.h
+++ b/fxjs/xfa/cjx_imageedit.h
@@ -12,7 +12,7 @@
 
 class CXFA_ImageEdit;
 
-class CJX_ImageEdit : public CJX_Node {
+class CJX_ImageEdit final : public CJX_Node {
  public:
   explicit CJX_ImageEdit(CXFA_ImageEdit* node);
   ~CJX_ImageEdit() override;
diff --git a/fxjs/xfa/cjx_insert.h b/fxjs/xfa/cjx_insert.h
index 888a246..a414526 100644
--- a/fxjs/xfa/cjx_insert.h
+++ b/fxjs/xfa/cjx_insert.h
@@ -12,7 +12,7 @@
 
 class CXFA_Insert;
 
-class CJX_Insert : public CJX_TextNode {
+class CJX_Insert final : public CJX_TextNode {
  public:
   explicit CJX_Insert(CXFA_Insert* node);
   ~CJX_Insert() override;
diff --git a/fxjs/xfa/cjx_instancemanager.h b/fxjs/xfa/cjx_instancemanager.h
index b151d71..139dbe3 100644
--- a/fxjs/xfa/cjx_instancemanager.h
+++ b/fxjs/xfa/cjx_instancemanager.h
@@ -12,7 +12,7 @@
 
 class CXFA_InstanceManager;
 
-class CJX_InstanceManager : public CJX_Node {
+class CJX_InstanceManager final : public CJX_Node {
  public:
   explicit CJX_InstanceManager(CXFA_InstanceManager* mgr);
   ~CJX_InstanceManager() override;
diff --git a/fxjs/xfa/cjx_integer.h b/fxjs/xfa/cjx_integer.h
index 426235b..e15deb9 100644
--- a/fxjs/xfa/cjx_integer.h
+++ b/fxjs/xfa/cjx_integer.h
@@ -12,7 +12,7 @@
 
 class CXFA_Integer;
 
-class CJX_Integer : public CJX_Content {
+class CJX_Integer final : public CJX_Content {
  public:
   explicit CJX_Integer(CXFA_Integer* node);
   ~CJX_Integer() override;
diff --git a/fxjs/xfa/cjx_issuers.h b/fxjs/xfa/cjx_issuers.h
index bdd777a..23a7457 100644
--- a/fxjs/xfa/cjx_issuers.h
+++ b/fxjs/xfa/cjx_issuers.h
@@ -12,7 +12,7 @@
 
 class CXFA_Issuers;
 
-class CJX_Issuers : public CJX_Node {
+class CJX_Issuers final : public CJX_Node {
  public:
   explicit CJX_Issuers(CXFA_Issuers* node);
   ~CJX_Issuers() override;
diff --git a/fxjs/xfa/cjx_items.h b/fxjs/xfa/cjx_items.h
index 039757f..d29fee7 100644
--- a/fxjs/xfa/cjx_items.h
+++ b/fxjs/xfa/cjx_items.h
@@ -12,7 +12,7 @@
 
 class CXFA_Items;
 
-class CJX_Items : public CJX_Node {
+class CJX_Items final : public CJX_Node {
  public:
   explicit CJX_Items(CXFA_Items* node);
   ~CJX_Items() override;
diff --git a/fxjs/xfa/cjx_keep.h b/fxjs/xfa/cjx_keep.h
index 3e1166f..c5fcb25 100644
--- a/fxjs/xfa/cjx_keep.h
+++ b/fxjs/xfa/cjx_keep.h
@@ -12,7 +12,7 @@
 
 class CXFA_Keep;
 
-class CJX_Keep : public CJX_Node {
+class CJX_Keep final : public CJX_Node {
  public:
   explicit CJX_Keep(CXFA_Keep* node);
   ~CJX_Keep() override;
diff --git a/fxjs/xfa/cjx_keyusage.h b/fxjs/xfa/cjx_keyusage.h
index 54ec8df..470ece6 100644
--- a/fxjs/xfa/cjx_keyusage.h
+++ b/fxjs/xfa/cjx_keyusage.h
@@ -12,7 +12,7 @@
 
 class CXFA_KeyUsage;
 
-class CJX_KeyUsage : public CJX_Node {
+class CJX_KeyUsage final : public CJX_Node {
  public:
   explicit CJX_KeyUsage(CXFA_KeyUsage* node);
   ~CJX_KeyUsage() override;
diff --git a/fxjs/xfa/cjx_layoutpseudomodel.h b/fxjs/xfa/cjx_layoutpseudomodel.h
index 3fd77ef..a252eaa 100644
--- a/fxjs/xfa/cjx_layoutpseudomodel.h
+++ b/fxjs/xfa/cjx_layoutpseudomodel.h
@@ -24,7 +24,7 @@
 class CXFA_LayoutProcessor;
 class CXFA_Node;
 
-class CJX_LayoutPseudoModel : public CJX_Object {
+class CJX_LayoutPseudoModel final : public CJX_Object {
  public:
   explicit CJX_LayoutPseudoModel(CScript_LayoutPseudoModel* model);
   ~CJX_LayoutPseudoModel() override;
diff --git a/fxjs/xfa/cjx_line.h b/fxjs/xfa/cjx_line.h
index 48e8a4e..e7b0e8e 100644
--- a/fxjs/xfa/cjx_line.h
+++ b/fxjs/xfa/cjx_line.h
@@ -12,7 +12,7 @@
 
 class CXFA_Line;
 
-class CJX_Line : public CJX_Node {
+class CJX_Line final : public CJX_Node {
  public:
   explicit CJX_Line(CXFA_Line* node);
   ~CJX_Line() override;
diff --git a/fxjs/xfa/cjx_linear.h b/fxjs/xfa/cjx_linear.h
index b1d3a88..979511c 100644
--- a/fxjs/xfa/cjx_linear.h
+++ b/fxjs/xfa/cjx_linear.h
@@ -12,7 +12,7 @@
 
 class CXFA_Linear;
 
-class CJX_Linear : public CJX_Node {
+class CJX_Linear final : public CJX_Node {
  public:
   explicit CJX_Linear(CXFA_Linear* node);
   ~CJX_Linear() override;
diff --git a/fxjs/xfa/cjx_logpseudomodel.h b/fxjs/xfa/cjx_logpseudomodel.h
index 3994411..dbf097f 100644
--- a/fxjs/xfa/cjx_logpseudomodel.h
+++ b/fxjs/xfa/cjx_logpseudomodel.h
@@ -14,7 +14,7 @@
 
 // TODO(dsinclair): This doesn't exist in the spec. Remove after
 // xfa_basic_data_element_script is removed.
-class CJX_LogPseudoModel : public CJX_Object {
+class CJX_LogPseudoModel final : public CJX_Object {
  public:
   explicit CJX_LogPseudoModel(CScript_LogPseudoModel* model);
   ~CJX_LogPseudoModel() override;
diff --git a/fxjs/xfa/cjx_manifest.h b/fxjs/xfa/cjx_manifest.h
index fa16b47..717e1f1 100644
--- a/fxjs/xfa/cjx_manifest.h
+++ b/fxjs/xfa/cjx_manifest.h
@@ -12,7 +12,7 @@
 
 class CXFA_Manifest;
 
-class CJX_Manifest : public CJX_Node {
+class CJX_Manifest final : public CJX_Node {
  public:
   explicit CJX_Manifest(CXFA_Manifest* manifest);
   ~CJX_Manifest() override;
diff --git a/fxjs/xfa/cjx_map.h b/fxjs/xfa/cjx_map.h
index 7a0eb37..8178384 100644
--- a/fxjs/xfa/cjx_map.h
+++ b/fxjs/xfa/cjx_map.h
@@ -12,7 +12,7 @@
 
 class CXFA_Map;
 
-class CJX_Map : public CJX_Node {
+class CJX_Map final : public CJX_Node {
  public:
   explicit CJX_Map(CXFA_Map* node);
   ~CJX_Map() override;
diff --git a/fxjs/xfa/cjx_margin.h b/fxjs/xfa/cjx_margin.h
index be0e220..6cac5a3 100644
--- a/fxjs/xfa/cjx_margin.h
+++ b/fxjs/xfa/cjx_margin.h
@@ -12,7 +12,7 @@
 
 class CXFA_Margin;
 
-class CJX_Margin : public CJX_Node {
+class CJX_Margin final : public CJX_Node {
  public:
   explicit CJX_Margin(CXFA_Margin* node);
   ~CJX_Margin() override;
diff --git a/fxjs/xfa/cjx_mdp.h b/fxjs/xfa/cjx_mdp.h
index a58dc82..833e2db 100644
--- a/fxjs/xfa/cjx_mdp.h
+++ b/fxjs/xfa/cjx_mdp.h
@@ -12,7 +12,7 @@
 
 class CXFA_Mdp;
 
-class CJX_Mdp : public CJX_Node {
+class CJX_Mdp final : public CJX_Node {
  public:
   explicit CJX_Mdp(CXFA_Mdp* node);
   ~CJX_Mdp() override;
diff --git a/fxjs/xfa/cjx_medium.h b/fxjs/xfa/cjx_medium.h
index 88daa1b..1efb34b 100644
--- a/fxjs/xfa/cjx_medium.h
+++ b/fxjs/xfa/cjx_medium.h
@@ -12,7 +12,7 @@
 
 class CXFA_Medium;
 
-class CJX_Medium : public CJX_Node {
+class CJX_Medium final : public CJX_Node {
  public:
   explicit CJX_Medium(CXFA_Medium* node);
   ~CJX_Medium() override;
diff --git a/fxjs/xfa/cjx_message.h b/fxjs/xfa/cjx_message.h
index 989a2de..f5c577c 100644
--- a/fxjs/xfa/cjx_message.h
+++ b/fxjs/xfa/cjx_message.h
@@ -12,7 +12,7 @@
 
 class CXFA_Message;
 
-class CJX_Message : public CJX_Node {
+class CJX_Message final : public CJX_Node {
  public:
   explicit CJX_Message(CXFA_Message* node);
   ~CJX_Message() override;
diff --git a/fxjs/xfa/cjx_numericedit.h b/fxjs/xfa/cjx_numericedit.h
index b83ccea..d74b0c8 100644
--- a/fxjs/xfa/cjx_numericedit.h
+++ b/fxjs/xfa/cjx_numericedit.h
@@ -12,7 +12,7 @@
 
 class CXFA_NumericEdit;
 
-class CJX_NumericEdit : public CJX_Node {
+class CJX_NumericEdit final : public CJX_Node {
  public:
   explicit CJX_NumericEdit(CXFA_NumericEdit* node);
   ~CJX_NumericEdit() override;
diff --git a/fxjs/xfa/cjx_occur.h b/fxjs/xfa/cjx_occur.h
index b67007c..114f5b3 100644
--- a/fxjs/xfa/cjx_occur.h
+++ b/fxjs/xfa/cjx_occur.h
@@ -12,7 +12,7 @@
 
 class CXFA_Occur;
 
-class CJX_Occur : public CJX_Node {
+class CJX_Occur final : public CJX_Node {
  public:
   explicit CJX_Occur(CXFA_Occur* node);
   ~CJX_Occur() override;
diff --git a/fxjs/xfa/cjx_oid.h b/fxjs/xfa/cjx_oid.h
index 8380d27..f3c528e 100644
--- a/fxjs/xfa/cjx_oid.h
+++ b/fxjs/xfa/cjx_oid.h
@@ -12,7 +12,7 @@
 
 class CXFA_Oid;
 
-class CJX_Oid : public CJX_TextNode {
+class CJX_Oid final : public CJX_TextNode {
  public:
   explicit CJX_Oid(CXFA_Oid* node);
   ~CJX_Oid() override;
diff --git a/fxjs/xfa/cjx_oids.h b/fxjs/xfa/cjx_oids.h
index 64d751b..a205fa0 100644
--- a/fxjs/xfa/cjx_oids.h
+++ b/fxjs/xfa/cjx_oids.h
@@ -12,7 +12,7 @@
 
 class CXFA_Oids;
 
-class CJX_Oids : public CJX_Node {
+class CJX_Oids final : public CJX_Node {
  public:
   explicit CJX_Oids(CXFA_Oids* node);
   ~CJX_Oids() override;
diff --git a/fxjs/xfa/cjx_operation.h b/fxjs/xfa/cjx_operation.h
index 36411f6..3d16997 100644
--- a/fxjs/xfa/cjx_operation.h
+++ b/fxjs/xfa/cjx_operation.h
@@ -12,7 +12,7 @@
 
 class CXFA_Operation;
 
-class CJX_Operation : public CJX_TextNode {
+class CJX_Operation final : public CJX_TextNode {
  public:
   explicit CJX_Operation(CXFA_Operation* node);
   ~CJX_Operation() override;
diff --git a/fxjs/xfa/cjx_overflow.h b/fxjs/xfa/cjx_overflow.h
index e0859ae..5bd9b6d 100644
--- a/fxjs/xfa/cjx_overflow.h
+++ b/fxjs/xfa/cjx_overflow.h
@@ -12,7 +12,7 @@
 
 class CXFA_Overflow;
 
-class CJX_Overflow : public CJX_Node {
+class CJX_Overflow final : public CJX_Node {
  public:
   explicit CJX_Overflow(CXFA_Overflow* node);
   ~CJX_Overflow() override;
diff --git a/fxjs/xfa/cjx_packet.h b/fxjs/xfa/cjx_packet.h
index 7950678..f1ad920 100644
--- a/fxjs/xfa/cjx_packet.h
+++ b/fxjs/xfa/cjx_packet.h
@@ -12,7 +12,7 @@
 
 class CXFA_Packet;
 
-class CJX_Packet : public CJX_Node {
+class CJX_Packet final : public CJX_Node {
  public:
   explicit CJX_Packet(CXFA_Packet* packet);
   ~CJX_Packet() override;
diff --git a/fxjs/xfa/cjx_pagearea.h b/fxjs/xfa/cjx_pagearea.h
index df3db36..8985a47 100644
--- a/fxjs/xfa/cjx_pagearea.h
+++ b/fxjs/xfa/cjx_pagearea.h
@@ -12,7 +12,7 @@
 
 class CXFA_PageArea;
 
-class CJX_PageArea : public CJX_Container {
+class CJX_PageArea final : public CJX_Container {
  public:
   explicit CJX_PageArea(CXFA_PageArea* node);
   ~CJX_PageArea() override;
diff --git a/fxjs/xfa/cjx_pageset.h b/fxjs/xfa/cjx_pageset.h
index d0cd12b..adffdc0 100644
--- a/fxjs/xfa/cjx_pageset.h
+++ b/fxjs/xfa/cjx_pageset.h
@@ -12,7 +12,7 @@
 
 class CXFA_PageSet;
 
-class CJX_PageSet : public CJX_Container {
+class CJX_PageSet final : public CJX_Container {
  public:
   explicit CJX_PageSet(CXFA_PageSet* node);
   ~CJX_PageSet() override;
diff --git a/fxjs/xfa/cjx_para.h b/fxjs/xfa/cjx_para.h
index 27e3189..0a527d6 100644
--- a/fxjs/xfa/cjx_para.h
+++ b/fxjs/xfa/cjx_para.h
@@ -12,7 +12,7 @@
 
 class CXFA_Para;
 
-class CJX_Para : public CJX_Node {
+class CJX_Para final : public CJX_Node {
  public:
   explicit CJX_Para(CXFA_Para* node);
   ~CJX_Para() override;
diff --git a/fxjs/xfa/cjx_password.h b/fxjs/xfa/cjx_password.h
index bd6b955..1cec53c 100644
--- a/fxjs/xfa/cjx_password.h
+++ b/fxjs/xfa/cjx_password.h
@@ -12,7 +12,7 @@
 
 class CXFA_Password;
 
-class CJX_Password : public CJX_TextNode {
+class CJX_Password final : public CJX_TextNode {
  public:
   explicit CJX_Password(CXFA_Password* node);
   ~CJX_Password() override;
diff --git a/fxjs/xfa/cjx_passwordedit.h b/fxjs/xfa/cjx_passwordedit.h
index df6d8eb..4f9ce1a 100644
--- a/fxjs/xfa/cjx_passwordedit.h
+++ b/fxjs/xfa/cjx_passwordedit.h
@@ -12,7 +12,7 @@
 
 class CXFA_PasswordEdit;
 
-class CJX_PasswordEdit : public CJX_Node {
+class CJX_PasswordEdit final : public CJX_Node {
  public:
   explicit CJX_PasswordEdit(CXFA_PasswordEdit* node);
   ~CJX_PasswordEdit() override;
diff --git a/fxjs/xfa/cjx_pattern.h b/fxjs/xfa/cjx_pattern.h
index bc3abd0..0bb975b 100644
--- a/fxjs/xfa/cjx_pattern.h
+++ b/fxjs/xfa/cjx_pattern.h
@@ -12,7 +12,7 @@
 
 class CXFA_Pattern;
 
-class CJX_Pattern : public CJX_Node {
+class CJX_Pattern final : public CJX_Node {
  public:
   explicit CJX_Pattern(CXFA_Pattern* node);
   ~CJX_Pattern() override;
diff --git a/fxjs/xfa/cjx_picture.h b/fxjs/xfa/cjx_picture.h
index a07cee7..e2dc063 100644
--- a/fxjs/xfa/cjx_picture.h
+++ b/fxjs/xfa/cjx_picture.h
@@ -12,7 +12,7 @@
 
 class CXFA_Picture;
 
-class CJX_Picture : public CJX_Node {
+class CJX_Picture final : public CJX_Node {
  public:
   explicit CJX_Picture(CXFA_Picture* node);
   ~CJX_Picture() override;
diff --git a/fxjs/xfa/cjx_query.h b/fxjs/xfa/cjx_query.h
index 7ad281a..893b2b7 100644
--- a/fxjs/xfa/cjx_query.h
+++ b/fxjs/xfa/cjx_query.h
@@ -12,7 +12,7 @@
 
 class CXFA_Query;
 
-class CJX_Query : public CJX_Node {
+class CJX_Query final : public CJX_Node {
  public:
   explicit CJX_Query(CXFA_Query* node);
   ~CJX_Query() override;
diff --git a/fxjs/xfa/cjx_radial.h b/fxjs/xfa/cjx_radial.h
index 0ac8386..d7ad871 100644
--- a/fxjs/xfa/cjx_radial.h
+++ b/fxjs/xfa/cjx_radial.h
@@ -12,7 +12,7 @@
 
 class CXFA_Radial;
 
-class CJX_Radial : public CJX_Node {
+class CJX_Radial final : public CJX_Node {
  public:
   explicit CJX_Radial(CXFA_Radial* node);
   ~CJX_Radial() override;
diff --git a/fxjs/xfa/cjx_reason.h b/fxjs/xfa/cjx_reason.h
index bfff550..b69c638 100644
--- a/fxjs/xfa/cjx_reason.h
+++ b/fxjs/xfa/cjx_reason.h
@@ -12,7 +12,7 @@
 
 class CXFA_Reason;
 
-class CJX_Reason : public CJX_TextNode {
+class CJX_Reason final : public CJX_TextNode {
  public:
   explicit CJX_Reason(CXFA_Reason* node);
   ~CJX_Reason() override;
diff --git a/fxjs/xfa/cjx_reasons.h b/fxjs/xfa/cjx_reasons.h
index c6a4b35..80cdcff 100644
--- a/fxjs/xfa/cjx_reasons.h
+++ b/fxjs/xfa/cjx_reasons.h
@@ -12,7 +12,7 @@
 
 class CXFA_Reasons;
 
-class CJX_Reasons : public CJX_Node {
+class CJX_Reasons final : public CJX_Node {
  public:
   explicit CJX_Reasons(CXFA_Reasons* node);
   ~CJX_Reasons() override;
diff --git a/fxjs/xfa/cjx_recordset.h b/fxjs/xfa/cjx_recordset.h
index da2319f..e4973f5 100644
--- a/fxjs/xfa/cjx_recordset.h
+++ b/fxjs/xfa/cjx_recordset.h
@@ -12,7 +12,7 @@
 
 class CXFA_RecordSet;
 
-class CJX_RecordSet : public CJX_Node {
+class CJX_RecordSet final : public CJX_Node {
  public:
   explicit CJX_RecordSet(CXFA_RecordSet* node);
   ~CJX_RecordSet() override;
diff --git a/fxjs/xfa/cjx_rectangle.h b/fxjs/xfa/cjx_rectangle.h
index e241b98..2aed046 100644
--- a/fxjs/xfa/cjx_rectangle.h
+++ b/fxjs/xfa/cjx_rectangle.h
@@ -12,7 +12,7 @@
 
 class CXFA_Rectangle;
 
-class CJX_Rectangle : public CJX_Node {
+class CJX_Rectangle final : public CJX_Node {
  public:
   explicit CJX_Rectangle(CXFA_Rectangle* node);
   ~CJX_Rectangle() override;
diff --git a/fxjs/xfa/cjx_ref.h b/fxjs/xfa/cjx_ref.h
index 9a36fc3..aaf4a5f 100644
--- a/fxjs/xfa/cjx_ref.h
+++ b/fxjs/xfa/cjx_ref.h
@@ -12,7 +12,7 @@
 
 class CXFA_Ref;
 
-class CJX_Ref : public CJX_TextNode {
+class CJX_Ref final : public CJX_TextNode {
  public:
   explicit CJX_Ref(CXFA_Ref* node);
   ~CJX_Ref() override;
diff --git a/fxjs/xfa/cjx_rootelement.h b/fxjs/xfa/cjx_rootelement.h
index 925f751..95e192f 100644
--- a/fxjs/xfa/cjx_rootelement.h
+++ b/fxjs/xfa/cjx_rootelement.h
@@ -12,7 +12,7 @@
 
 class CXFA_RootElement;
 
-class CJX_RootElement : public CJX_TextNode {
+class CJX_RootElement final : public CJX_TextNode {
  public:
   explicit CJX_RootElement(CXFA_RootElement* node);
   ~CJX_RootElement() override;
diff --git a/fxjs/xfa/cjx_script.h b/fxjs/xfa/cjx_script.h
index fe76df4..e1e9a83 100644
--- a/fxjs/xfa/cjx_script.h
+++ b/fxjs/xfa/cjx_script.h
@@ -12,7 +12,7 @@
 
 class CXFA_Script;
 
-class CJX_Script : public CJX_Node {
+class CJX_Script final : public CJX_Node {
  public:
   explicit CJX_Script(CXFA_Script* node);
   ~CJX_Script() override;
diff --git a/fxjs/xfa/cjx_select.h b/fxjs/xfa/cjx_select.h
index d59c1d6..ff81266 100644
--- a/fxjs/xfa/cjx_select.h
+++ b/fxjs/xfa/cjx_select.h
@@ -12,7 +12,7 @@
 
 class CXFA_Select;
 
-class CJX_Select : public CJX_TextNode {
+class CJX_Select final : public CJX_TextNode {
  public:
   explicit CJX_Select(CXFA_Select* node);
   ~CJX_Select() override;
diff --git a/fxjs/xfa/cjx_setproperty.h b/fxjs/xfa/cjx_setproperty.h
index 1d8441f..042f902 100644
--- a/fxjs/xfa/cjx_setproperty.h
+++ b/fxjs/xfa/cjx_setproperty.h
@@ -12,7 +12,7 @@
 
 class CXFA_SetProperty;
 
-class CJX_SetProperty : public CJX_Node {
+class CJX_SetProperty final : public CJX_Node {
  public:
   explicit CJX_SetProperty(CXFA_SetProperty* node);
   ~CJX_SetProperty() override;
diff --git a/fxjs/xfa/cjx_signature.h b/fxjs/xfa/cjx_signature.h
index 12a1478..e29c6c5 100644
--- a/fxjs/xfa/cjx_signature.h
+++ b/fxjs/xfa/cjx_signature.h
@@ -12,7 +12,7 @@
 
 class CXFA_Signature;
 
-class CJX_Signature : public CJX_Node {
+class CJX_Signature final : public CJX_Node {
  public:
   explicit CJX_Signature(CXFA_Signature* node);
   ~CJX_Signature() override;
diff --git a/fxjs/xfa/cjx_signatureproperties.h b/fxjs/xfa/cjx_signatureproperties.h
index 6fd59cf..beb8744 100644
--- a/fxjs/xfa/cjx_signatureproperties.h
+++ b/fxjs/xfa/cjx_signatureproperties.h
@@ -13,7 +13,7 @@
 class CXFA_SignatureProperties;
 
 /* Deprecated */
-class CJX_SignatureProperties : public CJX_Node {
+class CJX_SignatureProperties final : public CJX_Node {
  public:
   explicit CJX_SignatureProperties(CXFA_SignatureProperties* node);
   ~CJX_SignatureProperties() override;
diff --git a/fxjs/xfa/cjx_signaturepseudomodel.h b/fxjs/xfa/cjx_signaturepseudomodel.h
index 0184cba..84a8751 100644
--- a/fxjs/xfa/cjx_signaturepseudomodel.h
+++ b/fxjs/xfa/cjx_signaturepseudomodel.h
@@ -12,7 +12,7 @@
 
 class CScript_SignaturePseudoModel;
 
-class CJX_SignaturePseudoModel : public CJX_Object {
+class CJX_SignaturePseudoModel final : public CJX_Object {
  public:
   explicit CJX_SignaturePseudoModel(CScript_SignaturePseudoModel* model);
   ~CJX_SignaturePseudoModel() override;
diff --git a/fxjs/xfa/cjx_signdata.h b/fxjs/xfa/cjx_signdata.h
index 8b68877..ee841bc 100644
--- a/fxjs/xfa/cjx_signdata.h
+++ b/fxjs/xfa/cjx_signdata.h
@@ -12,7 +12,7 @@
 
 class CXFA_SignData;
 
-class CJX_SignData : public CJX_Node {
+class CJX_SignData final : public CJX_Node {
  public:
   explicit CJX_SignData(CXFA_SignData* node);
   ~CJX_SignData() override;
diff --git a/fxjs/xfa/cjx_signing.h b/fxjs/xfa/cjx_signing.h
index 428e92b..60e7739 100644
--- a/fxjs/xfa/cjx_signing.h
+++ b/fxjs/xfa/cjx_signing.h
@@ -12,7 +12,7 @@
 
 class CXFA_Signing;
 
-class CJX_Signing : public CJX_Node {
+class CJX_Signing final : public CJX_Node {
  public:
   explicit CJX_Signing(CXFA_Signing* node);
   ~CJX_Signing() override;
diff --git a/fxjs/xfa/cjx_soapaction.h b/fxjs/xfa/cjx_soapaction.h
index 3da3825..9523f5f 100644
--- a/fxjs/xfa/cjx_soapaction.h
+++ b/fxjs/xfa/cjx_soapaction.h
@@ -12,7 +12,7 @@
 
 class CXFA_SoapAction;
 
-class CJX_SoapAction : public CJX_TextNode {
+class CJX_SoapAction final : public CJX_TextNode {
  public:
   explicit CJX_SoapAction(CXFA_SoapAction* node);
   ~CJX_SoapAction() override;
diff --git a/fxjs/xfa/cjx_soapaddress.h b/fxjs/xfa/cjx_soapaddress.h
index 14e7abf..13137c1 100644
--- a/fxjs/xfa/cjx_soapaddress.h
+++ b/fxjs/xfa/cjx_soapaddress.h
@@ -12,7 +12,7 @@
 
 class CXFA_SoapAddress;
 
-class CJX_SoapAddress : public CJX_TextNode {
+class CJX_SoapAddress final : public CJX_TextNode {
  public:
   explicit CJX_SoapAddress(CXFA_SoapAddress* node);
   ~CJX_SoapAddress() override;
diff --git a/fxjs/xfa/cjx_solid.h b/fxjs/xfa/cjx_solid.h
index a6ecc7b..dab7ec3 100644
--- a/fxjs/xfa/cjx_solid.h
+++ b/fxjs/xfa/cjx_solid.h
@@ -12,7 +12,7 @@
 
 class CXFA_Solid;
 
-class CJX_Solid : public CJX_Node {
+class CJX_Solid final : public CJX_Node {
  public:
   explicit CJX_Solid(CXFA_Solid* node);
   ~CJX_Solid() override;
diff --git a/fxjs/xfa/cjx_source.h b/fxjs/xfa/cjx_source.h
index 66e61f0..32721fb 100644
--- a/fxjs/xfa/cjx_source.h
+++ b/fxjs/xfa/cjx_source.h
@@ -12,7 +12,7 @@
 
 class CXFA_Source;
 
-class CJX_Source : public CJX_Node {
+class CJX_Source final : public CJX_Node {
  public:
   explicit CJX_Source(CXFA_Source* src);
   ~CJX_Source() override;
diff --git a/fxjs/xfa/cjx_sourceset.h b/fxjs/xfa/cjx_sourceset.h
index 32018a9..f72a048 100644
--- a/fxjs/xfa/cjx_sourceset.h
+++ b/fxjs/xfa/cjx_sourceset.h
@@ -12,7 +12,7 @@
 
 class CXFA_SourceSet;
 
-class CJX_SourceSet : public CJX_Model {
+class CJX_SourceSet final : public CJX_Model {
  public:
   explicit CJX_SourceSet(CXFA_SourceSet* node);
   ~CJX_SourceSet() override;
diff --git a/fxjs/xfa/cjx_speak.h b/fxjs/xfa/cjx_speak.h
index 4e96b02..d5678a8 100644
--- a/fxjs/xfa/cjx_speak.h
+++ b/fxjs/xfa/cjx_speak.h
@@ -12,7 +12,7 @@
 
 class CXFA_Speak;
 
-class CJX_Speak : public CJX_TextNode {
+class CJX_Speak final : public CJX_TextNode {
  public:
   explicit CJX_Speak(CXFA_Speak* node);
   ~CJX_Speak() override;
diff --git a/fxjs/xfa/cjx_stipple.h b/fxjs/xfa/cjx_stipple.h
index db3ba1d..9b6f56d 100644
--- a/fxjs/xfa/cjx_stipple.h
+++ b/fxjs/xfa/cjx_stipple.h
@@ -12,7 +12,7 @@
 
 class CXFA_Stipple;
 
-class CJX_Stipple : public CJX_Node {
+class CJX_Stipple final : public CJX_Node {
  public:
   explicit CJX_Stipple(CXFA_Stipple* node);
   ~CJX_Stipple() override;
diff --git a/fxjs/xfa/cjx_subform.h b/fxjs/xfa/cjx_subform.h
index 2c2d19b..67947d8 100644
--- a/fxjs/xfa/cjx_subform.h
+++ b/fxjs/xfa/cjx_subform.h
@@ -12,7 +12,7 @@
 
 class CXFA_Delta;
 
-class CJX_Subform : public CJX_Container {
+class CJX_Subform final : public CJX_Container {
  public:
   explicit CJX_Subform(CXFA_Node* container);
   ~CJX_Subform() override;
diff --git a/fxjs/xfa/cjx_subformset.h b/fxjs/xfa/cjx_subformset.h
index f455156..71bb438 100644
--- a/fxjs/xfa/cjx_subformset.h
+++ b/fxjs/xfa/cjx_subformset.h
@@ -12,7 +12,7 @@
 
 class CXFA_SubformSet;
 
-class CJX_SubformSet : public CJX_Container {
+class CJX_SubformSet final : public CJX_Container {
  public:
   explicit CJX_SubformSet(CXFA_SubformSet* node);
   ~CJX_SubformSet() override;
diff --git a/fxjs/xfa/cjx_subjectdn.h b/fxjs/xfa/cjx_subjectdn.h
index 22b86b2..12e8e9a 100644
--- a/fxjs/xfa/cjx_subjectdn.h
+++ b/fxjs/xfa/cjx_subjectdn.h
@@ -12,7 +12,7 @@
 
 class CXFA_SubjectDN;
 
-class CJX_SubjectDN : public CJX_Node {
+class CJX_SubjectDN final : public CJX_Node {
  public:
   explicit CJX_SubjectDN(CXFA_SubjectDN* node);
   ~CJX_SubjectDN() override;
diff --git a/fxjs/xfa/cjx_subjectdns.h b/fxjs/xfa/cjx_subjectdns.h
index 1e3cd22..04af199 100644
--- a/fxjs/xfa/cjx_subjectdns.h
+++ b/fxjs/xfa/cjx_subjectdns.h
@@ -12,7 +12,7 @@
 
 class CXFA_SubjectDNs;
 
-class CJX_SubjectDNs : public CJX_Node {
+class CJX_SubjectDNs final : public CJX_Node {
  public:
   explicit CJX_SubjectDNs(CXFA_SubjectDNs* node);
   ~CJX_SubjectDNs() override;
diff --git a/fxjs/xfa/cjx_submit.h b/fxjs/xfa/cjx_submit.h
index 90aa8d2..0ec0cf4 100644
--- a/fxjs/xfa/cjx_submit.h
+++ b/fxjs/xfa/cjx_submit.h
@@ -12,7 +12,7 @@
 
 class CXFA_Submit;
 
-class CJX_Submit : public CJX_Node {
+class CJX_Submit final : public CJX_Node {
  public:
   explicit CJX_Submit(CXFA_Submit* node);
   ~CJX_Submit() override;
diff --git a/fxjs/xfa/cjx_template.h b/fxjs/xfa/cjx_template.h
index d54020d..ccaf084 100644
--- a/fxjs/xfa/cjx_template.h
+++ b/fxjs/xfa/cjx_template.h
@@ -12,7 +12,7 @@
 
 class CXFA_Template;
 
-class CJX_Template : public CJX_Model {
+class CJX_Template final : public CJX_Model {
  public:
   explicit CJX_Template(CXFA_Template* tmpl);
   ~CJX_Template() override;
diff --git a/fxjs/xfa/cjx_text.h b/fxjs/xfa/cjx_text.h
index a5c0e81..1a58b24 100644
--- a/fxjs/xfa/cjx_text.h
+++ b/fxjs/xfa/cjx_text.h
@@ -12,7 +12,7 @@
 
 class CXFA_Text;
 
-class CJX_Text : public CJX_Content {
+class CJX_Text final : public CJX_Content {
  public:
   explicit CJX_Text(CXFA_Text* node);
   ~CJX_Text() override;
diff --git a/fxjs/xfa/cjx_textedit.h b/fxjs/xfa/cjx_textedit.h
index 1c41b9e..bc408d2 100644
--- a/fxjs/xfa/cjx_textedit.h
+++ b/fxjs/xfa/cjx_textedit.h
@@ -12,7 +12,7 @@
 
 class CXFA_TextEdit;
 
-class CJX_TextEdit : public CJX_Node {
+class CJX_TextEdit final : public CJX_Node {
  public:
   explicit CJX_TextEdit(CXFA_TextEdit* node);
   ~CJX_TextEdit() override;
diff --git a/fxjs/xfa/cjx_time.h b/fxjs/xfa/cjx_time.h
index 32e75cb..0002029 100644
--- a/fxjs/xfa/cjx_time.h
+++ b/fxjs/xfa/cjx_time.h
@@ -12,7 +12,7 @@
 
 class CXFA_Time;
 
-class CJX_Time : public CJX_Content {
+class CJX_Time final : public CJX_Content {
  public:
   explicit CJX_Time(CXFA_Time* node);
   ~CJX_Time() override;
diff --git a/fxjs/xfa/cjx_timestamp.h b/fxjs/xfa/cjx_timestamp.h
index c8aab82..7183222 100644
--- a/fxjs/xfa/cjx_timestamp.h
+++ b/fxjs/xfa/cjx_timestamp.h
@@ -12,7 +12,7 @@
 
 class CXFA_TimeStamp;
 
-class CJX_TimeStamp : public CJX_Node {
+class CJX_TimeStamp final : public CJX_Node {
  public:
   explicit CJX_TimeStamp(CXFA_TimeStamp* node);
   ~CJX_TimeStamp() override;
diff --git a/fxjs/xfa/cjx_tooltip.h b/fxjs/xfa/cjx_tooltip.h
index 51c21d8..08bcd43 100644
--- a/fxjs/xfa/cjx_tooltip.h
+++ b/fxjs/xfa/cjx_tooltip.h
@@ -12,7 +12,7 @@
 
 class CXFA_ToolTip;
 
-class CJX_ToolTip : public CJX_TextNode {
+class CJX_ToolTip final : public CJX_TextNode {
  public:
   explicit CJX_ToolTip(CXFA_ToolTip* node);
   ~CJX_ToolTip() override;
diff --git a/fxjs/xfa/cjx_traversal.h b/fxjs/xfa/cjx_traversal.h
index f7e1258..0872cf7 100644
--- a/fxjs/xfa/cjx_traversal.h
+++ b/fxjs/xfa/cjx_traversal.h
@@ -12,7 +12,7 @@
 
 class CXFA_Traversal;
 
-class CJX_Traversal : public CJX_Node {
+class CJX_Traversal final : public CJX_Node {
  public:
   explicit CJX_Traversal(CXFA_Traversal* node);
   ~CJX_Traversal() override;
diff --git a/fxjs/xfa/cjx_traverse.h b/fxjs/xfa/cjx_traverse.h
index d6f43af..aa57334 100644
--- a/fxjs/xfa/cjx_traverse.h
+++ b/fxjs/xfa/cjx_traverse.h
@@ -12,7 +12,7 @@
 
 class CXFA_Traverse;
 
-class CJX_Traverse : public CJX_Node {
+class CJX_Traverse final : public CJX_Node {
  public:
   explicit CJX_Traverse(CXFA_Traverse* node);
   ~CJX_Traverse() override;
diff --git a/fxjs/xfa/cjx_treelist.h b/fxjs/xfa/cjx_treelist.h
index c6f2919..729a6d5 100644
--- a/fxjs/xfa/cjx_treelist.h
+++ b/fxjs/xfa/cjx_treelist.h
@@ -12,7 +12,7 @@
 
 class CXFA_TreeList;
 
-class CJX_TreeList : public CJX_List {
+class CJX_TreeList final : public CJX_List {
  public:
   explicit CJX_TreeList(CXFA_TreeList* list);
   ~CJX_TreeList() override;
diff --git a/fxjs/xfa/cjx_ui.h b/fxjs/xfa/cjx_ui.h
index e63fa47..4fb1990 100644
--- a/fxjs/xfa/cjx_ui.h
+++ b/fxjs/xfa/cjx_ui.h
@@ -12,7 +12,7 @@
 
 class CXFA_Ui;
 
-class CJX_Ui : public CJX_Node {
+class CJX_Ui final : public CJX_Node {
  public:
   explicit CJX_Ui(CXFA_Ui* node);
   ~CJX_Ui() override;
diff --git a/fxjs/xfa/cjx_update.h b/fxjs/xfa/cjx_update.h
index f603409..09c6812 100644
--- a/fxjs/xfa/cjx_update.h
+++ b/fxjs/xfa/cjx_update.h
@@ -12,7 +12,7 @@
 
 class CXFA_Update;
 
-class CJX_Update : public CJX_TextNode {
+class CJX_Update final : public CJX_TextNode {
  public:
   explicit CJX_Update(CXFA_Update* node);
   ~CJX_Update() override;
diff --git a/fxjs/xfa/cjx_uri.h b/fxjs/xfa/cjx_uri.h
index e7aa55f..062dcf0 100644
--- a/fxjs/xfa/cjx_uri.h
+++ b/fxjs/xfa/cjx_uri.h
@@ -12,7 +12,7 @@
 
 class CXFA_Uri;
 
-class CJX_Uri : public CJX_TextNode {
+class CJX_Uri final : public CJX_TextNode {
  public:
   explicit CJX_Uri(CXFA_Uri* node);
   ~CJX_Uri() override;
diff --git a/fxjs/xfa/cjx_user.h b/fxjs/xfa/cjx_user.h
index 85b0271..b378960 100644
--- a/fxjs/xfa/cjx_user.h
+++ b/fxjs/xfa/cjx_user.h
@@ -12,7 +12,7 @@
 
 class CXFA_User;
 
-class CJX_User : public CJX_TextNode {
+class CJX_User final : public CJX_TextNode {
  public:
   explicit CJX_User(CXFA_User* node);
   ~CJX_User() override;
diff --git a/fxjs/xfa/cjx_validate.h b/fxjs/xfa/cjx_validate.h
index 62eb83c..ea3d45c 100644
--- a/fxjs/xfa/cjx_validate.h
+++ b/fxjs/xfa/cjx_validate.h
@@ -12,7 +12,7 @@
 
 class CXFA_Validate;
 
-class CJX_Validate : public CJX_Node {
+class CJX_Validate final : public CJX_Node {
  public:
   explicit CJX_Validate(CXFA_Validate* node);
   ~CJX_Validate() override;
diff --git a/fxjs/xfa/cjx_value.h b/fxjs/xfa/cjx_value.h
index 71984c3..78ad2ed 100644
--- a/fxjs/xfa/cjx_value.h
+++ b/fxjs/xfa/cjx_value.h
@@ -12,7 +12,7 @@
 
 class CXFA_Value;
 
-class CJX_Value : public CJX_Node {
+class CJX_Value final : public CJX_Node {
  public:
   explicit CJX_Value(CXFA_Value* node);
   ~CJX_Value() override;
diff --git a/fxjs/xfa/cjx_variables.h b/fxjs/xfa/cjx_variables.h
index 302cd05..c12e3ae 100644
--- a/fxjs/xfa/cjx_variables.h
+++ b/fxjs/xfa/cjx_variables.h
@@ -12,7 +12,7 @@
 
 class CXFA_Variables;
 
-class CJX_Variables : public CJX_Container {
+class CJX_Variables final : public CJX_Container {
  public:
   explicit CJX_Variables(CXFA_Variables* node);
   ~CJX_Variables() override;
diff --git a/fxjs/xfa/cjx_wsdladdress.h b/fxjs/xfa/cjx_wsdladdress.h
index cbe8e72..5b6cda0 100644
--- a/fxjs/xfa/cjx_wsdladdress.h
+++ b/fxjs/xfa/cjx_wsdladdress.h
@@ -12,7 +12,7 @@
 
 class CXFA_WsdlAddress;
 
-class CJX_WsdlAddress : public CJX_TextNode {
+class CJX_WsdlAddress final : public CJX_TextNode {
  public:
   explicit CJX_WsdlAddress(CXFA_WsdlAddress* node);
   ~CJX_WsdlAddress() override;
diff --git a/fxjs/xfa/cjx_wsdlconnection.h b/fxjs/xfa/cjx_wsdlconnection.h
index 346b908..f5dc51b 100644
--- a/fxjs/xfa/cjx_wsdlconnection.h
+++ b/fxjs/xfa/cjx_wsdlconnection.h
@@ -12,7 +12,7 @@
 
 class CXFA_WsdlConnection;
 
-class CJX_WsdlConnection : public CJX_Node {
+class CJX_WsdlConnection final : public CJX_Node {
  public:
   explicit CJX_WsdlConnection(CXFA_WsdlConnection* connection);
   ~CJX_WsdlConnection() override;
diff --git a/fxjs/xfa/cjx_xfa.h b/fxjs/xfa/cjx_xfa.h
index 025e9a9..39ee84f 100644
--- a/fxjs/xfa/cjx_xfa.h
+++ b/fxjs/xfa/cjx_xfa.h
@@ -12,7 +12,7 @@
 
 class CXFA_Xfa;
 
-class CJX_Xfa : public CJX_Model {
+class CJX_Xfa final : public CJX_Model {
  public:
   explicit CJX_Xfa(CXFA_Xfa* node);
   ~CJX_Xfa() override;
diff --git a/fxjs/xfa/cjx_xmlconnection.h b/fxjs/xfa/cjx_xmlconnection.h
index cb63e75..6ec2b41 100644
--- a/fxjs/xfa/cjx_xmlconnection.h
+++ b/fxjs/xfa/cjx_xmlconnection.h
@@ -12,7 +12,7 @@
 
 class CXFA_XmlConnection;
 
-class CJX_XmlConnection : public CJX_Node {
+class CJX_XmlConnection final : public CJX_Node {
  public:
   explicit CJX_XmlConnection(CXFA_XmlConnection* node);
   ~CJX_XmlConnection() override;
diff --git a/fxjs/xfa/cjx_xsdconnection.h b/fxjs/xfa/cjx_xsdconnection.h
index ec5059a..4cfe519 100644
--- a/fxjs/xfa/cjx_xsdconnection.h
+++ b/fxjs/xfa/cjx_xsdconnection.h
@@ -12,7 +12,7 @@
 
 class CXFA_XsdConnection;
 
-class CJX_XsdConnection : public CJX_Node {
+class CJX_XsdConnection final : public CJX_Node {
  public:
   explicit CJX_XsdConnection(CXFA_XsdConnection* node);
   ~CJX_XsdConnection() override;
diff --git a/samples/pdfium_test.cc b/samples/pdfium_test.cc
index e808d64..2e8487e 100644
--- a/samples/pdfium_test.cc
+++ b/samples/pdfium_test.cc
@@ -135,7 +135,7 @@
 #endif  // WORDEXP_AVAILABLE
 }
 
-struct FPDF_FORMFILLINFO_PDFiumTest : public FPDF_FORMFILLINFO {
+struct FPDF_FORMFILLINFO_PDFiumTest final : public FPDF_FORMFILLINFO {
   // Hold a map of the currently loaded pages in order to avoid them
   // to get loaded twice.
   std::map<int, ScopedFPDFPage> loaded_pages;
diff --git a/testing/embedder_test_main.cpp b/testing/embedder_test_main.cpp
index 0c3ceb6..92990bf 100644
--- a/testing/embedder_test_main.cpp
+++ b/testing/embedder_test_main.cpp
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
 #include <string>
 
 #include "core/fxcrt/fx_memory.h"
@@ -28,7 +29,7 @@
 // The loading time of the CFGAS_FontMgr is linear in the number of times it is
 // loaded. So, if a test suite has a lot of tests that need a font manager they
 // can end up executing very, very slowly.
-class Environment : public testing::Environment {
+class Environment final : public testing::Environment {
  public:
   void SetUp() override {
 #ifdef PDF_ENABLE_V8
diff --git a/testing/embedder_test_mock_delegate.h b/testing/embedder_test_mock_delegate.h
index 4d43b5c..c3f2820 100644
--- a/testing/embedder_test_mock_delegate.h
+++ b/testing/embedder_test_mock_delegate.h
@@ -8,7 +8,7 @@
 #include "testing/embedder_test.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
-class EmbedderTestMockDelegate : public EmbedderTest::Delegate {
+class EmbedderTestMockDelegate final : public EmbedderTest::Delegate {
  public:
   MOCK_METHOD1(UnsupportedHandler, void(int type));
   MOCK_METHOD4(
diff --git a/testing/embedder_test_timer_handling_delegate.h b/testing/embedder_test_timer_handling_delegate.h
index 3196615..31ce1e2 100644
--- a/testing/embedder_test_timer_handling_delegate.h
+++ b/testing/embedder_test_timer_handling_delegate.h
@@ -13,7 +13,7 @@
 #include "testing/embedder_test.h"
 #include "testing/test_support.h"
 
-class EmbedderTestTimerHandlingDelegate : public EmbedderTest::Delegate {
+class EmbedderTestTimerHandlingDelegate final : public EmbedderTest::Delegate {
  public:
   struct AlertRecord {
     std::wstring message;
diff --git a/testing/fake_file_access.cpp b/testing/fake_file_access.cpp
index c69f278..9e0e6db 100644
--- a/testing/fake_file_access.cpp
+++ b/testing/fake_file_access.cpp
@@ -14,7 +14,7 @@
 
 namespace {
 
-class FileAccessWrapper : public FPDF_FILEACCESS {
+class FileAccessWrapper final : public FPDF_FILEACCESS {
  public:
   explicit FileAccessWrapper(FakeFileAccess* simulator)
       : simulator_(simulator) {
@@ -35,7 +35,7 @@
   fxcrt::UnownedPtr<FakeFileAccess> simulator_;
 };
 
-class FileAvailImpl : public FX_FILEAVAIL {
+class FileAvailImpl final : public FX_FILEAVAIL {
  public:
   explicit FileAvailImpl(FakeFileAccess* simulator) : simulator_(simulator) {
     version = 1;
@@ -53,7 +53,7 @@
   fxcrt::UnownedPtr<FakeFileAccess> simulator_;
 };
 
-class DownloadHintsImpl : public FX_DOWNLOADHINTS {
+class DownloadHintsImpl final : public FX_DOWNLOADHINTS {
  public:
   explicit DownloadHintsImpl(FakeFileAccess* simulator)
       : simulator_(simulator) {
diff --git a/testing/fuzzers/pdf_hint_table_fuzzer.cc b/testing/fuzzers/pdf_hint_table_fuzzer.cc
index 50ca5cd..19b18ac 100644
--- a/testing/fuzzers/pdf_hint_table_fuzzer.cc
+++ b/testing/fuzzers/pdf_hint_table_fuzzer.cc
@@ -22,7 +22,7 @@
   return *ret;
 }
 
-class HintTableForFuzzing : public CPDF_HintTables {
+class HintTableForFuzzing final : public CPDF_HintTables {
  public:
   HintTableForFuzzing(CPDF_LinearizedHeader* pLinearized,
                       int shared_hint_table_offset)
@@ -47,7 +47,7 @@
   int shared_hint_table_offset_;
 };
 
-class FakeLinearized : public CPDF_LinearizedHeader {
+class FakeLinearized final : public CPDF_LinearizedHeader {
  public:
   explicit FakeLinearized(CPDF_Dictionary* linearized_dict)
       : CPDF_LinearizedHeader(linearized_dict, 0) {}
diff --git a/testing/fx_string_testhelpers.h b/testing/fx_string_testhelpers.h
index a828d82..e4ed78d 100644
--- a/testing/fx_string_testhelpers.h
+++ b/testing/fx_string_testhelpers.h
@@ -14,7 +14,7 @@
 // Output stream operator so GTEST macros work with CFX_DateTime objects.
 std::ostream& operator<<(std::ostream& os, const CFX_DateTime& dt);
 
-class CFX_InvalidSeekableReadStream : public IFX_SeekableReadStream {
+class CFX_InvalidSeekableReadStream final : public IFX_SeekableReadStream {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
diff --git a/testing/string_write_stream.h b/testing/string_write_stream.h
index 7d28a82..a77e4f0 100644
--- a/testing/string_write_stream.h
+++ b/testing/string_write_stream.h
@@ -10,7 +10,7 @@
 
 #include "core/fxcrt/fx_stream.h"
 
-class StringWriteStream : public IFX_SeekableWriteStream {
+class StringWriteStream final : public IFX_SeekableWriteStream {
  public:
   StringWriteStream();
   ~StringWriteStream() override;
diff --git a/testing/unit_test_main.cpp b/testing/unit_test_main.cpp
index 70eb51a..2bc14b9 100644
--- a/testing/unit_test_main.cpp
+++ b/testing/unit_test_main.cpp
@@ -26,7 +26,7 @@
 // The loading time of the CFGAS_FontMgr is linear in the number of times it is
 // loaded. So, if a test suite has a lot of tests that need a font manager they
 // can end up executing very, very slowly.
-class Environment : public testing::Environment {
+class Environment final : public testing::Environment {
  public:
   void SetUp() override {
     // TODO(dsinclair): This font loading is slow. We should make a test font
diff --git a/xfa/fde/cfde_texteditengine.cpp b/xfa/fde/cfde_texteditengine.cpp
index ce9d0a5..cd6681f 100644
--- a/xfa/fde/cfde_texteditengine.cpp
+++ b/xfa/fde/cfde_texteditengine.cpp
@@ -19,7 +19,7 @@
 constexpr size_t kGapSize = 128;
 constexpr size_t kPageWidthMax = 0xffff;
 
-class InsertOperation : public CFDE_TextEditEngine::Operation {
+class InsertOperation final : public CFDE_TextEditEngine::Operation {
  public:
   InsertOperation(CFDE_TextEditEngine* engine,
                   size_t start_idx,
@@ -44,7 +44,7 @@
   WideString added_text_;
 };
 
-class DeleteOperation : public CFDE_TextEditEngine::Operation {
+class DeleteOperation final : public CFDE_TextEditEngine::Operation {
  public:
   DeleteOperation(CFDE_TextEditEngine* engine,
                   size_t start_idx,
@@ -69,7 +69,7 @@
   WideString removed_text_;
 };
 
-class ReplaceOperation : public CFDE_TextEditEngine::Operation {
+class ReplaceOperation final : public CFDE_TextEditEngine::Operation {
  public:
   ReplaceOperation(CFDE_TextEditEngine* engine,
                    size_t start_idx,
diff --git a/xfa/fde/cfde_texteditengine_unittest.cpp b/xfa/fde/cfde_texteditengine_unittest.cpp
index c5efe52..1de54ff 100644
--- a/xfa/fde/cfde_texteditengine_unittest.cpp
+++ b/xfa/fde/cfde_texteditengine_unittest.cpp
@@ -11,7 +11,7 @@
 
 class CFDE_TextEditEngineTest : public testing::Test {
  public:
-  class Delegate : public CFDE_TextEditEngine::Delegate {
+  class Delegate final : public CFDE_TextEditEngine::Delegate {
    public:
     void Reset() {
       text_is_full = false;
diff --git a/xfa/fgas/font/cfgas_fontmgr.h b/xfa/fgas/font/cfgas_fontmgr.h
index 72578be..6dda338 100644
--- a/xfa/fgas/font/cfgas_fontmgr.h
+++ b/xfa/fgas/font/cfgas_fontmgr.h
@@ -121,7 +121,7 @@
 
 #endif  // _FX_PLATFORM_ == _FX_PLATFORM_WINDOWS_
 
-class CFGAS_FontMgr : public Observable<CFGAS_FontMgr> {
+class CFGAS_FontMgr final : public Observable<CFGAS_FontMgr> {
  public:
   CFGAS_FontMgr();
   ~CFGAS_FontMgr();
diff --git a/xfa/fgas/font/cfgas_gefont.h b/xfa/fgas/font/cfgas_gefont.h
index bc24ceb..685fa68 100644
--- a/xfa/fgas/font/cfgas_gefont.h
+++ b/xfa/fgas/font/cfgas_gefont.h
@@ -20,7 +20,7 @@
 
 class CFX_UnicodeEncoding;
 
-class CFGAS_GEFont : public Retainable {
+class CFGAS_GEFont final : public Retainable {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
diff --git a/xfa/fgas/font/cfgas_pdffontmgr.h b/xfa/fgas/font/cfgas_pdffontmgr.h
index 235f883..6c42422 100644
--- a/xfa/fgas/font/cfgas_pdffontmgr.h
+++ b/xfa/fgas/font/cfgas_pdffontmgr.h
@@ -19,7 +19,7 @@
 class CFGAS_GEFont;
 class CPDF_Document;
 
-class CFGAS_PDFFontMgr : public Observable<CFGAS_PDFFontMgr> {
+class CFGAS_PDFFontMgr final : public Observable<CFGAS_PDFFontMgr> {
  public:
   explicit CFGAS_PDFFontMgr(CPDF_Document* pDoc, CFGAS_FontMgr* pFontMgr);
   ~CFGAS_PDFFontMgr();
diff --git a/xfa/fgas/layout/cfx_rtfbreak.h b/xfa/fgas/layout/cfx_rtfbreak.h
index c2320fa..ac29ef5 100644
--- a/xfa/fgas/layout/cfx_rtfbreak.h
+++ b/xfa/fgas/layout/cfx_rtfbreak.h
@@ -43,7 +43,7 @@
   int32_t iVerticalScale;
 };
 
-class CFX_RTFBreak : public CFX_Break {
+class CFX_RTFBreak final : public CFX_Break {
  public:
   explicit CFX_RTFBreak(uint32_t dwLayoutStyles);
   ~CFX_RTFBreak() override;
diff --git a/xfa/fgas/layout/cfx_txtbreak.h b/xfa/fgas/layout/cfx_txtbreak.h
index 250f582..47c6440 100644
--- a/xfa/fgas/layout/cfx_txtbreak.h
+++ b/xfa/fgas/layout/cfx_txtbreak.h
@@ -54,7 +54,7 @@
   bool bSkipSpace;
 };
 
-class CFX_TxtBreak : public CFX_Break {
+class CFX_TxtBreak final : public CFX_Break {
  public:
   CFX_TxtBreak();
   ~CFX_TxtBreak() override;
diff --git a/xfa/fwl/cfwl_barcode.h b/xfa/fwl/cfwl_barcode.h
index a4991d4..cd36cc3 100644
--- a/xfa/fwl/cfwl_barcode.h
+++ b/xfa/fwl/cfwl_barcode.h
@@ -36,7 +36,7 @@
   FWL_BCDATTRIBUTE_ECLEVEL = 1 << 10,
 };
 
-class CFWL_Barcode : public CFWL_Edit {
+class CFWL_Barcode final : public CFWL_Edit {
  public:
   explicit CFWL_Barcode(const CFWL_App* pApp);
   ~CFWL_Barcode() override;
diff --git a/xfa/fwl/cfwl_caret.h b/xfa/fwl/cfwl_caret.h
index 90d62d6..88bec75 100644
--- a/xfa/fwl/cfwl_caret.h
+++ b/xfa/fwl/cfwl_caret.h
@@ -16,7 +16,7 @@
 class CFWL_WidgetProperties;
 class CFWL_Widget;
 
-class CFWL_Caret : public CFWL_Widget {
+class CFWL_Caret final : public CFWL_Widget {
  public:
   CFWL_Caret(const CFWL_App* app,
              std::unique_ptr<CFWL_WidgetProperties> properties,
@@ -35,7 +35,7 @@
   void HideCaret();
 
  private:
-  class Timer : public CFWL_Timer {
+  class Timer final : public CFWL_Timer {
    public:
     explicit Timer(CFWL_Caret* pCaret);
     ~Timer() override {}
diff --git a/xfa/fwl/cfwl_checkbox.h b/xfa/fwl/cfwl_checkbox.h
index 9ae6590..f2413aa 100644
--- a/xfa/fwl/cfwl_checkbox.h
+++ b/xfa/fwl/cfwl_checkbox.h
@@ -33,7 +33,7 @@
 class CFWL_WidgetProperties;
 class CFWL_Widget;
 
-class CFWL_CheckBox : public CFWL_Widget {
+class CFWL_CheckBox final : public CFWL_Widget {
  public:
   explicit CFWL_CheckBox(const CFWL_App* pApp);
   ~CFWL_CheckBox() override;
diff --git a/xfa/fwl/cfwl_combobox.h b/xfa/fwl/cfwl_combobox.h
index a5ea2d0..f247d93 100644
--- a/xfa/fwl/cfwl_combobox.h
+++ b/xfa/fwl/cfwl_combobox.h
@@ -36,7 +36,7 @@
 #define FWL_STYLEEXT_CMB_ListItemAlignMask (3L << 10)
 #define FWL_STYLEEXT_CMB_ReadOnly (1L << 13)
 
-class CFWL_ComboBox : public CFWL_Widget {
+class CFWL_ComboBox final : public CFWL_Widget {
  public:
   explicit CFWL_ComboBox(const CFWL_App* pApp);
   ~CFWL_ComboBox() override;
diff --git a/xfa/fwl/cfwl_comboedit.h b/xfa/fwl/cfwl_comboedit.h
index efdabd3..daaa8a9 100644
--- a/xfa/fwl/cfwl_comboedit.h
+++ b/xfa/fwl/cfwl_comboedit.h
@@ -15,7 +15,7 @@
 
 class CFWL_ComboBox;
 
-class CFWL_ComboEdit : public CFWL_Edit {
+class CFWL_ComboEdit final : public CFWL_Edit {
  public:
   CFWL_ComboEdit(const CFWL_App* app,
                  std::unique_ptr<CFWL_WidgetProperties> properties,
diff --git a/xfa/fwl/cfwl_combolist.h b/xfa/fwl/cfwl_combolist.h
index a4d5135..0444a93 100644
--- a/xfa/fwl/cfwl_combolist.h
+++ b/xfa/fwl/cfwl_combolist.h
@@ -13,7 +13,7 @@
 #include "xfa/fwl/cfwl_widget.h"
 #include "xfa/fwl/cfwl_widgetproperties.h"
 
-class CFWL_ComboList : public CFWL_ListBox {
+class CFWL_ComboList final : public CFWL_ListBox {
  public:
   CFWL_ComboList(const CFWL_App* app,
                  std::unique_ptr<CFWL_WidgetProperties> properties,
diff --git a/xfa/fwl/cfwl_datetimeedit.h b/xfa/fwl/cfwl_datetimeedit.h
index dcbebd2..cc80b9e 100644
--- a/xfa/fwl/cfwl_datetimeedit.h
+++ b/xfa/fwl/cfwl_datetimeedit.h
@@ -13,7 +13,7 @@
 #include "xfa/fwl/cfwl_widget.h"
 #include "xfa/fwl/cfwl_widgetproperties.h"
 
-class CFWL_DateTimeEdit : public CFWL_Edit {
+class CFWL_DateTimeEdit final : public CFWL_Edit {
  public:
   CFWL_DateTimeEdit(const CFWL_App* app,
                     std::unique_ptr<CFWL_WidgetProperties> properties,
diff --git a/xfa/fwl/cfwl_datetimepicker.h b/xfa/fwl/cfwl_datetimepicker.h
index f80f09d..8e05dde 100644
--- a/xfa/fwl/cfwl_datetimepicker.h
+++ b/xfa/fwl/cfwl_datetimepicker.h
@@ -30,7 +30,7 @@
 
 class CFWL_DateTimeEdit;
 
-class CFWL_DateTimePicker : public CFWL_Widget {
+class CFWL_DateTimePicker final : public CFWL_Widget {
  public:
   explicit CFWL_DateTimePicker(const CFWL_App* pApp);
   ~CFWL_DateTimePicker() override;
diff --git a/xfa/fwl/cfwl_eventmouse.h b/xfa/fwl/cfwl_eventmouse.h
index a5caa93..170f39a 100644
--- a/xfa/fwl/cfwl_eventmouse.h
+++ b/xfa/fwl/cfwl_eventmouse.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fwl/cfwl_event.h"
 
-class CFWL_EventMouse : public CFWL_Event {
+class CFWL_EventMouse final : public CFWL_Event {
  public:
   explicit CFWL_EventMouse(CFWL_Widget* pSrcTarget);
   CFWL_EventMouse(CFWL_Widget* pSrcTarget, CFWL_Widget* pDstTarget);
diff --git a/xfa/fwl/cfwl_eventscroll.h b/xfa/fwl/cfwl_eventscroll.h
index a13eeef..0491ad7 100644
--- a/xfa/fwl/cfwl_eventscroll.h
+++ b/xfa/fwl/cfwl_eventscroll.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fwl/cfwl_event.h"
 
-class CFWL_EventScroll : public CFWL_Event {
+class CFWL_EventScroll final : public CFWL_Event {
  public:
   enum class Code {
     None = 1,
diff --git a/xfa/fwl/cfwl_eventselectchanged.h b/xfa/fwl/cfwl_eventselectchanged.h
index 30f1e2d..176cb87 100644
--- a/xfa/fwl/cfwl_eventselectchanged.h
+++ b/xfa/fwl/cfwl_eventselectchanged.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fwl/cfwl_event.h"
 
-class CFWL_EventSelectChanged : public CFWL_Event {
+class CFWL_EventSelectChanged final : public CFWL_Event {
  public:
   explicit CFWL_EventSelectChanged(CFWL_Widget* pSrcTarget);
   ~CFWL_EventSelectChanged() override;
diff --git a/xfa/fwl/cfwl_eventtextwillchange.h b/xfa/fwl/cfwl_eventtextwillchange.h
index 4b2781f..a1bfe8c 100644
--- a/xfa/fwl/cfwl_eventtextwillchange.h
+++ b/xfa/fwl/cfwl_eventtextwillchange.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fwl/cfwl_event.h"
 
-class CFWL_EventTextWillChange : public CFWL_Event {
+class CFWL_EventTextWillChange final : public CFWL_Event {
  public:
   explicit CFWL_EventTextWillChange(CFWL_Widget* pSrcTarget);
   ~CFWL_EventTextWillChange() override;
diff --git a/xfa/fwl/cfwl_eventvalidate.h b/xfa/fwl/cfwl_eventvalidate.h
index b8feff1..7d88b97 100644
--- a/xfa/fwl/cfwl_eventvalidate.h
+++ b/xfa/fwl/cfwl_eventvalidate.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fwl/cfwl_event.h"
 
-class CFWL_EventValidate : public CFWL_Event {
+class CFWL_EventValidate final : public CFWL_Event {
  public:
   explicit CFWL_EventValidate(CFWL_Widget* pSrcTarget);
   ~CFWL_EventValidate() override;
diff --git a/xfa/fwl/cfwl_form.h b/xfa/fwl/cfwl_form.h
index 01ae9be..4e13001 100644
--- a/xfa/fwl/cfwl_form.h
+++ b/xfa/fwl/cfwl_form.h
@@ -20,7 +20,7 @@
 class CFWL_Widget;
 class IFWL_ThemeProvider;
 
-class CFWL_Form : public CFWL_Widget {
+class CFWL_Form final : public CFWL_Widget {
  public:
   CFWL_Form(const CFWL_App* app,
             std::unique_ptr<CFWL_WidgetProperties> properties,
diff --git a/xfa/fwl/cfwl_messagekey.h b/xfa/fwl/cfwl_messagekey.h
index bf430d3..1835774 100644
--- a/xfa/fwl/cfwl_messagekey.h
+++ b/xfa/fwl/cfwl_messagekey.h
@@ -13,7 +13,7 @@
 
 enum class FWL_KeyCommand { KeyDown, KeyUp, Char };
 
-class CFWL_MessageKey : public CFWL_Message {
+class CFWL_MessageKey final : public CFWL_Message {
  public:
   CFWL_MessageKey(CFWL_Widget* pSrcTarget, CFWL_Widget* pDstTarget);
   ~CFWL_MessageKey() override;
diff --git a/xfa/fwl/cfwl_messagekillfocus.h b/xfa/fwl/cfwl_messagekillfocus.h
index 79aaebe..56cfc39 100644
--- a/xfa/fwl/cfwl_messagekillfocus.h
+++ b/xfa/fwl/cfwl_messagekillfocus.h
@@ -12,7 +12,7 @@
 #include "core/fxcrt/unowned_ptr.h"
 #include "xfa/fwl/cfwl_message.h"
 
-class CFWL_MessageKillFocus : public CFWL_Message {
+class CFWL_MessageKillFocus final : public CFWL_Message {
  public:
   explicit CFWL_MessageKillFocus(CFWL_Widget* pSrcTarget);
   CFWL_MessageKillFocus(CFWL_Widget* pSrcTarget, CFWL_Widget* pDstTarget);
diff --git a/xfa/fwl/cfwl_messagemouse.h b/xfa/fwl/cfwl_messagemouse.h
index a2b0d39..ae9711f 100644
--- a/xfa/fwl/cfwl_messagemouse.h
+++ b/xfa/fwl/cfwl_messagemouse.h
@@ -25,7 +25,7 @@
   Hover
 };
 
-class CFWL_MessageMouse : public CFWL_Message {
+class CFWL_MessageMouse final : public CFWL_Message {
  public:
   CFWL_MessageMouse(CFWL_Widget* pSrcTarget, CFWL_Widget* pDstTarget);
   CFWL_MessageMouse(const CFWL_MessageMouse& other);
diff --git a/xfa/fwl/cfwl_messagemousewheel.h b/xfa/fwl/cfwl_messagemousewheel.h
index f969b9a..8fc3a63 100644
--- a/xfa/fwl/cfwl_messagemousewheel.h
+++ b/xfa/fwl/cfwl_messagemousewheel.h
@@ -12,7 +12,7 @@
 #include "core/fxcrt/fx_coordinates.h"
 #include "xfa/fwl/cfwl_message.h"
 
-class CFWL_MessageMouseWheel : public CFWL_Message {
+class CFWL_MessageMouseWheel final : public CFWL_Message {
  public:
   CFWL_MessageMouseWheel(CFWL_Widget* pSrcTarget, CFWL_Widget* pDstTarget);
   CFWL_MessageMouseWheel(const CFWL_MessageMouseWheel&);
diff --git a/xfa/fwl/cfwl_messagesetfocus.h b/xfa/fwl/cfwl_messagesetfocus.h
index 05616fb..b9f0f0f 100644
--- a/xfa/fwl/cfwl_messagesetfocus.h
+++ b/xfa/fwl/cfwl_messagesetfocus.h
@@ -11,7 +11,7 @@
 
 #include "xfa/fwl/cfwl_message.h"
 
-class CFWL_MessageSetFocus : public CFWL_Message {
+class CFWL_MessageSetFocus final : public CFWL_Message {
  public:
   CFWL_MessageSetFocus(CFWL_Widget* pSrcTarget, CFWL_Widget* pDstTarget);
   ~CFWL_MessageSetFocus() override;
diff --git a/xfa/fwl/cfwl_monthcalendar.h b/xfa/fwl/cfwl_monthcalendar.h
index bdf66a0..1bb0bd2 100644
--- a/xfa/fwl/cfwl_monthcalendar.h
+++ b/xfa/fwl/cfwl_monthcalendar.h
@@ -20,7 +20,7 @@
 
 class CFWL_MessageMouse;
 
-class CFWL_MonthCalendar : public CFWL_Widget {
+class CFWL_MonthCalendar final : public CFWL_Widget {
  public:
   CFWL_MonthCalendar(const CFWL_App* app,
                      std::unique_ptr<CFWL_WidgetProperties> properties,
diff --git a/xfa/fwl/cfwl_picturebox.h b/xfa/fwl/cfwl_picturebox.h
index 363db8a..3823a59 100644
--- a/xfa/fwl/cfwl_picturebox.h
+++ b/xfa/fwl/cfwl_picturebox.h
@@ -15,7 +15,7 @@
 class CFX_DIBitmap;
 class CFWL_Widget;
 
-class CFWL_PictureBox : public CFWL_Widget {
+class CFWL_PictureBox final : public CFWL_Widget {
  public:
   explicit CFWL_PictureBox(const CFWL_App* pApp);
   ~CFWL_PictureBox() override;
diff --git a/xfa/fwl/cfwl_pushbutton.h b/xfa/fwl/cfwl_pushbutton.h
index 5c509fb..275f9b5 100644
--- a/xfa/fwl/cfwl_pushbutton.h
+++ b/xfa/fwl/cfwl_pushbutton.h
@@ -19,7 +19,7 @@
 class CFX_DIBitmap;
 class CFWL_Widget;
 
-class CFWL_PushButton : public CFWL_Widget {
+class CFWL_PushButton final : public CFWL_Widget {
  public:
   explicit CFWL_PushButton(const CFWL_App*);
   ~CFWL_PushButton() override;
diff --git a/xfa/fwl/cfwl_scrollbar.h b/xfa/fwl/cfwl_scrollbar.h
index de394ed..fc5248f 100644
--- a/xfa/fwl/cfwl_scrollbar.h
+++ b/xfa/fwl/cfwl_scrollbar.h
@@ -21,7 +21,7 @@
 #define FWL_STYLEEXT_SCB_Horz (0L << 0)
 #define FWL_STYLEEXT_SCB_Vert (1L << 0)
 
-class CFWL_ScrollBar : public CFWL_Widget {
+class CFWL_ScrollBar final : public CFWL_Widget {
  public:
   CFWL_ScrollBar(const CFWL_App* app,
                  std::unique_ptr<CFWL_WidgetProperties> properties,
@@ -55,7 +55,7 @@
   void SetTrackPos(float fTrackPos);
 
  private:
-  class Timer : public CFWL_Timer {
+  class Timer final : public CFWL_Timer {
    public:
     explicit Timer(CFWL_ScrollBar* pToolTip);
     ~Timer() override {}
diff --git a/xfa/fwl/cfwl_themebackground.h b/xfa/fwl/cfwl_themebackground.h
index 37103ae..46df73c 100644
--- a/xfa/fwl/cfwl_themebackground.h
+++ b/xfa/fwl/cfwl_themebackground.h
@@ -13,7 +13,7 @@
 class CXFA_Graphics;
 class CXFA_GEPath;
 
-class CFWL_ThemeBackground : public CFWL_ThemePart {
+class CFWL_ThemeBackground final : public CFWL_ThemePart {
  public:
   CFWL_ThemeBackground();
   ~CFWL_ThemeBackground();
diff --git a/xfa/fwl/cfwl_themetext.h b/xfa/fwl/cfwl_themetext.h
index 91a3f38..a63b8bf 100644
--- a/xfa/fwl/cfwl_themetext.h
+++ b/xfa/fwl/cfwl_themetext.h
@@ -11,7 +11,7 @@
 #include "core/fxcrt/fx_system.h"
 #include "xfa/fwl/cfwl_themepart.h"
 
-class CFWL_ThemeText : public CFWL_ThemePart {
+class CFWL_ThemeText final : public CFWL_ThemePart {
  public:
   CFWL_ThemeText() : m_pGraphics(nullptr) {}
 
diff --git a/xfa/fwl/theme/cfwl_barcodetp.h b/xfa/fwl/theme/cfwl_barcodetp.h
index 42b41e7..3fb9d3d 100644
--- a/xfa/fwl/theme/cfwl_barcodetp.h
+++ b/xfa/fwl/theme/cfwl_barcodetp.h
@@ -10,7 +10,7 @@
 #include "xfa/fwl/theme/cfwl_utils.h"
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
-class CFWL_BarcodeTP : public CFWL_WidgetTP {
+class CFWL_BarcodeTP final : public CFWL_WidgetTP {
  public:
   CFWL_BarcodeTP();
   ~CFWL_BarcodeTP() override;
diff --git a/xfa/fwl/theme/cfwl_carettp.h b/xfa/fwl/theme/cfwl_carettp.h
index 64bf51b..a71afc9 100644
--- a/xfa/fwl/theme/cfwl_carettp.h
+++ b/xfa/fwl/theme/cfwl_carettp.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
-class CFWL_CaretTP : public CFWL_WidgetTP {
+class CFWL_CaretTP final : public CFWL_WidgetTP {
  public:
   CFWL_CaretTP();
   ~CFWL_CaretTP() override;
diff --git a/xfa/fwl/theme/cfwl_checkboxtp.h b/xfa/fwl/theme/cfwl_checkboxtp.h
index c4341ed..fa06c7e 100644
--- a/xfa/fwl/theme/cfwl_checkboxtp.h
+++ b/xfa/fwl/theme/cfwl_checkboxtp.h
@@ -12,7 +12,7 @@
 #include "xfa/fwl/theme/cfwl_utils.h"
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
-class CFWL_CheckBoxTP : public CFWL_WidgetTP {
+class CFWL_CheckBoxTP final : public CFWL_WidgetTP {
  public:
   CFWL_CheckBoxTP();
   ~CFWL_CheckBoxTP() override;
diff --git a/xfa/fwl/theme/cfwl_comboboxtp.h b/xfa/fwl/theme/cfwl_comboboxtp.h
index 183d3a0..dd8311c 100644
--- a/xfa/fwl/theme/cfwl_comboboxtp.h
+++ b/xfa/fwl/theme/cfwl_comboboxtp.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
-class CFWL_ComboBoxTP : public CFWL_WidgetTP {
+class CFWL_ComboBoxTP final : public CFWL_WidgetTP {
  public:
   CFWL_ComboBoxTP();
   ~CFWL_ComboBoxTP() override;
diff --git a/xfa/fwl/theme/cfwl_datetimepickertp.h b/xfa/fwl/theme/cfwl_datetimepickertp.h
index 11536a3..5a54851 100644
--- a/xfa/fwl/theme/cfwl_datetimepickertp.h
+++ b/xfa/fwl/theme/cfwl_datetimepickertp.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
-class CFWL_DateTimePickerTP : public CFWL_WidgetTP {
+class CFWL_DateTimePickerTP final : public CFWL_WidgetTP {
  public:
   CFWL_DateTimePickerTP();
   ~CFWL_DateTimePickerTP() override;
diff --git a/xfa/fwl/theme/cfwl_edittp.h b/xfa/fwl/theme/cfwl_edittp.h
index e1c6ac9..7d00560 100644
--- a/xfa/fwl/theme/cfwl_edittp.h
+++ b/xfa/fwl/theme/cfwl_edittp.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
-class CFWL_EditTP : public CFWL_WidgetTP {
+class CFWL_EditTP final : public CFWL_WidgetTP {
  public:
   CFWL_EditTP();
   ~CFWL_EditTP() override;
diff --git a/xfa/fwl/theme/cfwl_listboxtp.h b/xfa/fwl/theme/cfwl_listboxtp.h
index cc4691c..95ce01c 100644
--- a/xfa/fwl/theme/cfwl_listboxtp.h
+++ b/xfa/fwl/theme/cfwl_listboxtp.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
-class CFWL_ListBoxTP : public CFWL_WidgetTP {
+class CFWL_ListBoxTP final : public CFWL_WidgetTP {
  public:
   CFWL_ListBoxTP();
   ~CFWL_ListBoxTP() override;
diff --git a/xfa/fwl/theme/cfwl_monthcalendartp.h b/xfa/fwl/theme/cfwl_monthcalendartp.h
index 6a1b9be..95e2a19 100644
--- a/xfa/fwl/theme/cfwl_monthcalendartp.h
+++ b/xfa/fwl/theme/cfwl_monthcalendartp.h
@@ -11,7 +11,7 @@
 
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
-class CFWL_MonthCalendarTP : public CFWL_WidgetTP {
+class CFWL_MonthCalendarTP final : public CFWL_WidgetTP {
  public:
   CFWL_MonthCalendarTP();
   ~CFWL_MonthCalendarTP() override;
diff --git a/xfa/fwl/theme/cfwl_pictureboxtp.h b/xfa/fwl/theme/cfwl_pictureboxtp.h
index 4a118f2..1bb3486 100644
--- a/xfa/fwl/theme/cfwl_pictureboxtp.h
+++ b/xfa/fwl/theme/cfwl_pictureboxtp.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
-class CFWL_PictureBoxTP : public CFWL_WidgetTP {
+class CFWL_PictureBoxTP final : public CFWL_WidgetTP {
  public:
   CFWL_PictureBoxTP();
   ~CFWL_PictureBoxTP() override;
diff --git a/xfa/fwl/theme/cfwl_pushbuttontp.h b/xfa/fwl/theme/cfwl_pushbuttontp.h
index b2372bb..2e1782a 100644
--- a/xfa/fwl/theme/cfwl_pushbuttontp.h
+++ b/xfa/fwl/theme/cfwl_pushbuttontp.h
@@ -11,7 +11,7 @@
 
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
-class CFWL_PushButtonTP : public CFWL_WidgetTP {
+class CFWL_PushButtonTP final : public CFWL_WidgetTP {
  public:
   CFWL_PushButtonTP();
   ~CFWL_PushButtonTP() override;
diff --git a/xfa/fwl/theme/cfwl_scrollbartp.h b/xfa/fwl/theme/cfwl_scrollbartp.h
index 8398706..53cbb38 100644
--- a/xfa/fwl/theme/cfwl_scrollbartp.h
+++ b/xfa/fwl/theme/cfwl_scrollbartp.h
@@ -11,7 +11,7 @@
 
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
-class CFWL_ScrollBarTP : public CFWL_WidgetTP {
+class CFWL_ScrollBarTP final : public CFWL_WidgetTP {
  public:
   CFWL_ScrollBarTP();
   ~CFWL_ScrollBarTP() override;
diff --git a/xfa/fxfa/cxfa_ffarc.h b/xfa/fxfa/cxfa_ffarc.h
index 8e8b292..908ba0a 100644
--- a/xfa/fxfa/cxfa_ffarc.h
+++ b/xfa/fxfa/cxfa_ffarc.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/cxfa_ffwidget.h"
 
-class CXFA_FFArc : public CXFA_FFWidget {
+class CXFA_FFArc final : public CXFA_FFWidget {
  public:
   explicit CXFA_FFArc(CXFA_Node* pnode);
   ~CXFA_FFArc() override;
diff --git a/xfa/fxfa/cxfa_ffbarcode.h b/xfa/fxfa/cxfa_ffbarcode.h
index 672f89c..5b55062 100644
--- a/xfa/fxfa/cxfa_ffbarcode.h
+++ b/xfa/fxfa/cxfa_ffbarcode.h
@@ -86,7 +86,7 @@
 
 class CXFA_Barcode;
 
-class CXFA_FFBarcode : public CXFA_FFTextEdit {
+class CXFA_FFBarcode final : public CXFA_FFTextEdit {
  public:
   static const BarCodeInfo* GetBarcodeTypeByName(const WideString& wsName);
 
diff --git a/xfa/fxfa/cxfa_ffcheckbutton.h b/xfa/fxfa/cxfa_ffcheckbutton.h
index 0bbec75..0d34cf9 100644
--- a/xfa/fxfa/cxfa_ffcheckbutton.h
+++ b/xfa/fxfa/cxfa_ffcheckbutton.h
@@ -14,7 +14,7 @@
 
 class CXFA_CheckButton;
 
-class CXFA_FFCheckButton : public CXFA_FFField {
+class CXFA_FFCheckButton final : public CXFA_FFField {
  public:
   CXFA_FFCheckButton(CXFA_Node* pNode, CXFA_CheckButton* button);
   ~CXFA_FFCheckButton() override;
diff --git a/xfa/fxfa/cxfa_ffcombobox.h b/xfa/fxfa/cxfa_ffcombobox.h
index ed68df0..9ed8c40 100644
--- a/xfa/fxfa/cxfa_ffcombobox.h
+++ b/xfa/fxfa/cxfa_ffcombobox.h
@@ -12,7 +12,7 @@
 
 class CXFA_EventParam;
 
-class CXFA_FFComboBox : public CXFA_FFDropDown {
+class CXFA_FFComboBox final : public CXFA_FFDropDown {
  public:
   explicit CXFA_FFComboBox(CXFA_Node* pNode);
   ~CXFA_FFComboBox() override;
diff --git a/xfa/fxfa/cxfa_ffdatetimeedit.h b/xfa/fxfa/cxfa_ffdatetimeedit.h
index 3a60ada..64a6ef0 100644
--- a/xfa/fxfa/cxfa_ffdatetimeedit.h
+++ b/xfa/fxfa/cxfa_ffdatetimeedit.h
@@ -20,7 +20,7 @@
 class CFWL_Event;
 class CFWL_Widget;
 
-class CXFA_FFDateTimeEdit : public CXFA_FFTextEdit {
+class CXFA_FFDateTimeEdit final : public CXFA_FFTextEdit {
  public:
   explicit CXFA_FFDateTimeEdit(CXFA_Node* pNode);
   ~CXFA_FFDateTimeEdit() override;
diff --git a/xfa/fxfa/cxfa_ffexclgroup.h b/xfa/fxfa/cxfa_ffexclgroup.h
index b904301..7b16248 100644
--- a/xfa/fxfa/cxfa_ffexclgroup.h
+++ b/xfa/fxfa/cxfa_ffexclgroup.h
@@ -10,7 +10,7 @@
 #include "xfa/fxfa/cxfa_ffpageview.h"
 #include "xfa/fxfa/cxfa_ffwidget.h"
 
-class CXFA_FFExclGroup : public CXFA_FFWidget {
+class CXFA_FFExclGroup final : public CXFA_FFWidget {
  public:
   explicit CXFA_FFExclGroup(CXFA_Node* pNode);
   ~CXFA_FFExclGroup() override;
diff --git a/xfa/fxfa/cxfa_ffimage.h b/xfa/fxfa/cxfa_ffimage.h
index 7859f10..655c679f 100644
--- a/xfa/fxfa/cxfa_ffimage.h
+++ b/xfa/fxfa/cxfa_ffimage.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/cxfa_ffwidget.h"
 
-class CXFA_FFImage : public CXFA_FFWidget {
+class CXFA_FFImage final : public CXFA_FFWidget {
  public:
   explicit CXFA_FFImage(CXFA_Node* pNode);
   ~CXFA_FFImage() override;
diff --git a/xfa/fxfa/cxfa_ffimageedit.h b/xfa/fxfa/cxfa_ffimageedit.h
index c2fd7f7..0339448 100644
--- a/xfa/fxfa/cxfa_ffimageedit.h
+++ b/xfa/fxfa/cxfa_ffimageedit.h
@@ -10,7 +10,7 @@
 #include "core/fxcrt/unowned_ptr.h"
 #include "xfa/fxfa/cxfa_fffield.h"
 
-class CXFA_FFImageEdit : public CXFA_FFField {
+class CXFA_FFImageEdit final : public CXFA_FFField {
  public:
   explicit CXFA_FFImageEdit(CXFA_Node* pNode);
   ~CXFA_FFImageEdit() override;
diff --git a/xfa/fxfa/cxfa_ffline.h b/xfa/fxfa/cxfa_ffline.h
index ff8d461..f5c8247 100644
--- a/xfa/fxfa/cxfa_ffline.h
+++ b/xfa/fxfa/cxfa_ffline.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/cxfa_ffwidget.h"
 
-class CXFA_FFLine : public CXFA_FFWidget {
+class CXFA_FFLine final : public CXFA_FFWidget {
  public:
   explicit CXFA_FFLine(CXFA_Node* pNode);
   ~CXFA_FFLine() override;
diff --git a/xfa/fxfa/cxfa_fflistbox.h b/xfa/fxfa/cxfa_fflistbox.h
index 4b12b59..d65dd8f 100644
--- a/xfa/fxfa/cxfa_fflistbox.h
+++ b/xfa/fxfa/cxfa_fflistbox.h
@@ -10,7 +10,7 @@
 #include "core/fxcrt/unowned_ptr.h"
 #include "xfa/fxfa/cxfa_ffdropdown.h"
 
-class CXFA_FFListBox : public CXFA_FFDropDown {
+class CXFA_FFListBox final : public CXFA_FFDropDown {
  public:
   explicit CXFA_FFListBox(CXFA_Node* pNode);
   ~CXFA_FFListBox() override;
diff --git a/xfa/fxfa/cxfa_ffnumericedit.h b/xfa/fxfa/cxfa_ffnumericedit.h
index 8982ee0..b2c39ce 100644
--- a/xfa/fxfa/cxfa_ffnumericedit.h
+++ b/xfa/fxfa/cxfa_ffnumericedit.h
@@ -13,7 +13,7 @@
 class CFWL_Event;
 class CFWL_Widget;
 
-class CXFA_FFNumericEdit : public CXFA_FFTextEdit {
+class CXFA_FFNumericEdit final : public CXFA_FFTextEdit {
  public:
   explicit CXFA_FFNumericEdit(CXFA_Node* pNode);
   ~CXFA_FFNumericEdit() override;
diff --git a/xfa/fxfa/cxfa_ffpageview.h b/xfa/fxfa/cxfa_ffpageview.h
index 31ce63f..a745b06 100644
--- a/xfa/fxfa/cxfa_ffpageview.h
+++ b/xfa/fxfa/cxfa_ffpageview.h
@@ -17,7 +17,7 @@
 class CXFA_FFWidget;
 class CXFA_FFDocView;
 
-class CXFA_FFPageView : public CXFA_ContainerLayoutItem {
+class CXFA_FFPageView final : public CXFA_ContainerLayoutItem {
  public:
   CXFA_FFPageView(CXFA_FFDocView* pDocView, CXFA_Node* pPageArea);
   ~CXFA_FFPageView() override;
@@ -33,7 +33,7 @@
   UnownedPtr<CXFA_FFDocView> const m_pDocView;
 };
 
-class CXFA_FFPageWidgetIterator : public IXFA_WidgetIterator {
+class CXFA_FFPageWidgetIterator final : public IXFA_WidgetIterator {
  public:
   CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView, uint32_t dwFilter);
   ~CXFA_FFPageWidgetIterator() override;
@@ -71,7 +71,7 @@
   std::vector<CXFA_FFWidget*> m_Children;
 };
 
-class CXFA_FFTabOrderPageWidgetIterator : public IXFA_WidgetIterator {
+class CXFA_FFTabOrderPageWidgetIterator final : public IXFA_WidgetIterator {
  public:
   CXFA_FFTabOrderPageWidgetIterator(CXFA_FFPageView* pPageView,
                                     uint32_t dwFilter);
diff --git a/xfa/fxfa/cxfa_ffpasswordedit.h b/xfa/fxfa/cxfa_ffpasswordedit.h
index 8f5093f..3af4f96 100644
--- a/xfa/fxfa/cxfa_ffpasswordedit.h
+++ b/xfa/fxfa/cxfa_ffpasswordedit.h
@@ -12,7 +12,7 @@
 
 class CXFA_PasswordEdit;
 
-class CXFA_FFPasswordEdit : public CXFA_FFTextEdit {
+class CXFA_FFPasswordEdit final : public CXFA_FFTextEdit {
  public:
   CXFA_FFPasswordEdit(CXFA_Node* pNode, CXFA_PasswordEdit* password_node);
   ~CXFA_FFPasswordEdit() override;
diff --git a/xfa/fxfa/cxfa_ffpushbutton.h b/xfa/fxfa/cxfa_ffpushbutton.h
index 9c12dacc..604497a 100644
--- a/xfa/fxfa/cxfa_ffpushbutton.h
+++ b/xfa/fxfa/cxfa_ffpushbutton.h
@@ -20,7 +20,7 @@
 class CXFA_TextLayout;
 class CXFA_TextProvider;
 
-class CXFA_FFPushButton : public CXFA_FFField {
+class CXFA_FFPushButton final : public CXFA_FFField {
  public:
   CXFA_FFPushButton(CXFA_Node* pNode, CXFA_Button* button);
   ~CXFA_FFPushButton() override;
diff --git a/xfa/fxfa/cxfa_ffrectangle.h b/xfa/fxfa/cxfa_ffrectangle.h
index d05f4d7..c1f5864 100644
--- a/xfa/fxfa/cxfa_ffrectangle.h
+++ b/xfa/fxfa/cxfa_ffrectangle.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/cxfa_ffwidget.h"
 
-class CXFA_FFRectangle : public CXFA_FFWidget {
+class CXFA_FFRectangle final : public CXFA_FFWidget {
  public:
   explicit CXFA_FFRectangle(CXFA_Node* pNode);
   ~CXFA_FFRectangle() override;
diff --git a/xfa/fxfa/cxfa_fftext.h b/xfa/fxfa/cxfa_fftext.h
index 9da39d4..7561fdc 100644
--- a/xfa/fxfa/cxfa_fftext.h
+++ b/xfa/fxfa/cxfa_fftext.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/cxfa_ffwidget.h"
 
-class CXFA_FFText : public CXFA_FFWidget {
+class CXFA_FFText final : public CXFA_FFWidget {
  public:
   explicit CXFA_FFText(CXFA_Node* pNode);
   ~CXFA_FFText() override;
diff --git a/xfa/fxfa/cxfa_linkuserdata.h b/xfa/fxfa/cxfa_linkuserdata.h
index f62bd3c..baa39aa 100644
--- a/xfa/fxfa/cxfa_linkuserdata.h
+++ b/xfa/fxfa/cxfa_linkuserdata.h
@@ -11,7 +11,7 @@
 #include "core/fxcrt/fx_system.h"
 #include "core/fxcrt/retain_ptr.h"
 
-class CXFA_LinkUserData : public Retainable {
+class CXFA_LinkUserData final : public Retainable {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
diff --git a/xfa/fxfa/cxfa_textparser_unittest.cpp b/xfa/fxfa/cxfa_textparser_unittest.cpp
index bd748cd..5198638 100644
--- a/xfa/fxfa/cxfa_textparser_unittest.cpp
+++ b/xfa/fxfa/cxfa_textparser_unittest.cpp
@@ -6,7 +6,7 @@
 
 #include "testing/gtest/include/gtest/gtest.h"
 
-class CXFA_TestTextParser : public CXFA_TextParser {
+class CXFA_TestTextParser final : public CXFA_TextParser {
  public:
   CXFA_TestTextParser() : CXFA_TextParser() {}
 
diff --git a/xfa/fxfa/cxfa_textuserdata.h b/xfa/fxfa/cxfa_textuserdata.h
index c1af217..1fe4fae 100644
--- a/xfa/fxfa/cxfa_textuserdata.h
+++ b/xfa/fxfa/cxfa_textuserdata.h
@@ -12,7 +12,7 @@
 class CFX_CSSComputedStyle;
 class CXFA_LinkUserData;
 
-class CXFA_TextUserData : public Retainable {
+class CXFA_TextUserData final : public Retainable {
  public:
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
diff --git a/xfa/fxfa/fm2js/cxfa_fmexpression.h b/xfa/fxfa/fm2js/cxfa_fmexpression.h
index bff62c1..c20d76b 100644
--- a/xfa/fxfa/fm2js/cxfa_fmexpression.h
+++ b/xfa/fxfa/fm2js/cxfa_fmexpression.h
@@ -23,7 +23,7 @@
   CXFA_FMExpression();
 };
 
-class CXFA_FMFunctionDefinition : public CXFA_FMExpression {
+class CXFA_FMFunctionDefinition final : public CXFA_FMExpression {
  public:
   CXFA_FMFunctionDefinition(
       const WideStringView& wsName,
@@ -51,7 +51,7 @@
   std::vector<std::unique_ptr<CXFA_FMExpression>> expressions_;
 };
 
-class CXFA_FMVarExpression : public CXFA_FMExpression {
+class CXFA_FMVarExpression final : public CXFA_FMExpression {
  public:
   CXFA_FMVarExpression(const WideStringView& wsName,
                        std::unique_ptr<CXFA_FMSimpleExpression> pInit);
@@ -64,7 +64,7 @@
   std::unique_ptr<CXFA_FMSimpleExpression> m_pInit;
 };
 
-class CXFA_FMExpExpression : public CXFA_FMExpression {
+class CXFA_FMExpExpression final : public CXFA_FMExpression {
  public:
   explicit CXFA_FMExpExpression(
       std::unique_ptr<CXFA_FMSimpleExpression> pExpression);
@@ -76,7 +76,7 @@
   std::unique_ptr<CXFA_FMSimpleExpression> m_pExpression;
 };
 
-class CXFA_FMBlockExpression : public CXFA_FMExpression {
+class CXFA_FMBlockExpression final : public CXFA_FMExpression {
  public:
   CXFA_FMBlockExpression(
       std::vector<std::unique_ptr<CXFA_FMExpression>>&& pExpressionList);
@@ -88,7 +88,7 @@
   std::vector<std::unique_ptr<CXFA_FMExpression>> m_ExpressionList;
 };
 
-class CXFA_FMDoExpression : public CXFA_FMExpression {
+class CXFA_FMDoExpression final : public CXFA_FMExpression {
  public:
   explicit CXFA_FMDoExpression(std::unique_ptr<CXFA_FMExpression> pList);
   ~CXFA_FMDoExpression() override;
@@ -99,7 +99,7 @@
   std::unique_ptr<CXFA_FMExpression> m_pList;
 };
 
-class CXFA_FMIfExpression : public CXFA_FMExpression {
+class CXFA_FMIfExpression final : public CXFA_FMExpression {
  public:
   CXFA_FMIfExpression(
       std::unique_ptr<CXFA_FMSimpleExpression> pExpression,
@@ -117,7 +117,7 @@
   std::unique_ptr<CXFA_FMExpression> m_pElseExpression;
 };
 
-class CXFA_FMWhileExpression : public CXFA_FMExpression {
+class CXFA_FMWhileExpression final : public CXFA_FMExpression {
  public:
   CXFA_FMWhileExpression(std::unique_ptr<CXFA_FMSimpleExpression> pCodition,
                          std::unique_ptr<CXFA_FMExpression> pExpression);
@@ -130,7 +130,7 @@
   std::unique_ptr<CXFA_FMExpression> m_pExpression;
 };
 
-class CXFA_FMBreakExpression : public CXFA_FMExpression {
+class CXFA_FMBreakExpression final : public CXFA_FMExpression {
  public:
   CXFA_FMBreakExpression();
   ~CXFA_FMBreakExpression() override;
@@ -138,7 +138,7 @@
   bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override;
 };
 
-class CXFA_FMContinueExpression : public CXFA_FMExpression {
+class CXFA_FMContinueExpression final : public CXFA_FMExpression {
  public:
   CXFA_FMContinueExpression();
   ~CXFA_FMContinueExpression() override;
@@ -146,7 +146,7 @@
   bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override;
 };
 
-class CXFA_FMForExpression : public CXFA_FMExpression {
+class CXFA_FMForExpression final : public CXFA_FMExpression {
  public:
   CXFA_FMForExpression(const WideStringView& wsVariant,
                        std::unique_ptr<CXFA_FMSimpleExpression> pAssignment,
@@ -167,7 +167,7 @@
   std::unique_ptr<CXFA_FMExpression> m_pList;
 };
 
-class CXFA_FMForeachExpression : public CXFA_FMExpression {
+class CXFA_FMForeachExpression final : public CXFA_FMExpression {
  public:
   // Takes ownership of |pAccessors|.
   CXFA_FMForeachExpression(
diff --git a/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h
index 0f3df31..275d7d4 100644
--- a/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h
+++ b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h
@@ -36,7 +36,7 @@
   const XFA_FM_TOKEN m_op;
 };
 
-class CXFA_FMNullExpression : public CXFA_FMSimpleExpression {
+class CXFA_FMNullExpression final : public CXFA_FMSimpleExpression {
  public:
   CXFA_FMNullExpression();
   ~CXFA_FMNullExpression() override {}
@@ -44,7 +44,7 @@
   bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override;
 };
 
-class CXFA_FMNumberExpression : public CXFA_FMSimpleExpression {
+class CXFA_FMNumberExpression final : public CXFA_FMSimpleExpression {
  public:
   explicit CXFA_FMNumberExpression(WideStringView wsNumber);
   ~CXFA_FMNumberExpression() override;
@@ -55,7 +55,7 @@
   WideStringView m_wsNumber;
 };
 
-class CXFA_FMStringExpression : public CXFA_FMSimpleExpression {
+class CXFA_FMStringExpression final : public CXFA_FMSimpleExpression {
  public:
   explicit CXFA_FMStringExpression(WideStringView wsString);
   ~CXFA_FMStringExpression() override;
@@ -66,7 +66,7 @@
   WideStringView m_wsString;
 };
 
-class CXFA_FMIdentifierExpression : public CXFA_FMSimpleExpression {
+class CXFA_FMIdentifierExpression final : public CXFA_FMSimpleExpression {
  public:
   explicit CXFA_FMIdentifierExpression(WideStringView wsIdentifier);
   ~CXFA_FMIdentifierExpression() override;
@@ -77,7 +77,7 @@
   WideStringView m_wsIdentifier;
 };
 
-class CXFA_FMAssignExpression : public CXFA_FMSimpleExpression {
+class CXFA_FMAssignExpression final : public CXFA_FMSimpleExpression {
  public:
   CXFA_FMAssignExpression(XFA_FM_TOKEN op,
                           std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
@@ -109,7 +109,7 @@
   std::unique_ptr<CXFA_FMSimpleExpression> m_pExp2;
 };
 
-class CXFA_FMLogicalOrExpression : public CXFA_FMBinExpression {
+class CXFA_FMLogicalOrExpression final : public CXFA_FMBinExpression {
  public:
   CXFA_FMLogicalOrExpression(XFA_FM_TOKEN op,
                              std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
@@ -117,7 +117,7 @@
   ~CXFA_FMLogicalOrExpression() override {}
 };
 
-class CXFA_FMLogicalAndExpression : public CXFA_FMBinExpression {
+class CXFA_FMLogicalAndExpression final : public CXFA_FMBinExpression {
  public:
   CXFA_FMLogicalAndExpression(XFA_FM_TOKEN op,
                               std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
@@ -125,7 +125,7 @@
   ~CXFA_FMLogicalAndExpression() override {}
 };
 
-class CXFA_FMEqualExpression : public CXFA_FMBinExpression {
+class CXFA_FMEqualExpression final : public CXFA_FMBinExpression {
  public:
   CXFA_FMEqualExpression(XFA_FM_TOKEN op,
                          std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
@@ -133,7 +133,7 @@
   ~CXFA_FMEqualExpression() override {}
 };
 
-class CXFA_FMNotEqualExpression : public CXFA_FMBinExpression {
+class CXFA_FMNotEqualExpression final : public CXFA_FMBinExpression {
  public:
   CXFA_FMNotEqualExpression(XFA_FM_TOKEN op,
                             std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
@@ -141,7 +141,7 @@
   ~CXFA_FMNotEqualExpression() override {}
 };
 
-class CXFA_FMGtExpression : public CXFA_FMBinExpression {
+class CXFA_FMGtExpression final : public CXFA_FMBinExpression {
  public:
   CXFA_FMGtExpression(XFA_FM_TOKEN op,
                       std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
@@ -149,7 +149,7 @@
   ~CXFA_FMGtExpression() override {}
 };
 
-class CXFA_FMGeExpression : public CXFA_FMBinExpression {
+class CXFA_FMGeExpression final : public CXFA_FMBinExpression {
  public:
   CXFA_FMGeExpression(XFA_FM_TOKEN op,
                       std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
@@ -157,7 +157,7 @@
   ~CXFA_FMGeExpression() override {}
 };
 
-class CXFA_FMLtExpression : public CXFA_FMBinExpression {
+class CXFA_FMLtExpression final : public CXFA_FMBinExpression {
  public:
   CXFA_FMLtExpression(XFA_FM_TOKEN op,
                       std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
@@ -165,7 +165,7 @@
   ~CXFA_FMLtExpression() override {}
 };
 
-class CXFA_FMLeExpression : public CXFA_FMBinExpression {
+class CXFA_FMLeExpression final : public CXFA_FMBinExpression {
  public:
   CXFA_FMLeExpression(XFA_FM_TOKEN op,
                       std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
@@ -173,7 +173,7 @@
   ~CXFA_FMLeExpression() override {}
 };
 
-class CXFA_FMPlusExpression : public CXFA_FMBinExpression {
+class CXFA_FMPlusExpression final : public CXFA_FMBinExpression {
  public:
   CXFA_FMPlusExpression(XFA_FM_TOKEN op,
                         std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
@@ -181,7 +181,7 @@
   ~CXFA_FMPlusExpression() override {}
 };
 
-class CXFA_FMMinusExpression : public CXFA_FMBinExpression {
+class CXFA_FMMinusExpression final : public CXFA_FMBinExpression {
  public:
   CXFA_FMMinusExpression(XFA_FM_TOKEN op,
                          std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
@@ -189,7 +189,7 @@
   ~CXFA_FMMinusExpression() override {}
 };
 
-class CXFA_FMMulExpression : public CXFA_FMBinExpression {
+class CXFA_FMMulExpression final : public CXFA_FMBinExpression {
  public:
   CXFA_FMMulExpression(XFA_FM_TOKEN op,
                        std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
@@ -197,7 +197,7 @@
   ~CXFA_FMMulExpression() override {}
 };
 
-class CXFA_FMDivExpression : public CXFA_FMBinExpression {
+class CXFA_FMDivExpression final : public CXFA_FMBinExpression {
  public:
   CXFA_FMDivExpression(XFA_FM_TOKEN op,
                        std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
@@ -221,25 +221,25 @@
   std::unique_ptr<CXFA_FMSimpleExpression> m_pExp;
 };
 
-class CXFA_FMPosExpression : public CXFA_FMUnaryExpression {
+class CXFA_FMPosExpression final : public CXFA_FMUnaryExpression {
  public:
   explicit CXFA_FMPosExpression(std::unique_ptr<CXFA_FMSimpleExpression> pExp);
   ~CXFA_FMPosExpression() override {}
 };
 
-class CXFA_FMNegExpression : public CXFA_FMUnaryExpression {
+class CXFA_FMNegExpression final : public CXFA_FMUnaryExpression {
  public:
   explicit CXFA_FMNegExpression(std::unique_ptr<CXFA_FMSimpleExpression> pExp);
   ~CXFA_FMNegExpression() override {}
 };
 
-class CXFA_FMNotExpression : public CXFA_FMUnaryExpression {
+class CXFA_FMNotExpression final : public CXFA_FMUnaryExpression {
  public:
   explicit CXFA_FMNotExpression(std::unique_ptr<CXFA_FMSimpleExpression> pExp);
   ~CXFA_FMNotExpression() override {}
 };
 
-class CXFA_FMCallExpression : public CXFA_FMSimpleExpression {
+class CXFA_FMCallExpression final : public CXFA_FMSimpleExpression {
  public:
   CXFA_FMCallExpression(
       std::unique_ptr<CXFA_FMSimpleExpression> pExp,
@@ -257,7 +257,7 @@
   std::vector<std::unique_ptr<CXFA_FMSimpleExpression>> m_Arguments;
 };
 
-class CXFA_FMDotAccessorExpression : public CXFA_FMSimpleExpression {
+class CXFA_FMDotAccessorExpression final : public CXFA_FMSimpleExpression {
  public:
   CXFA_FMDotAccessorExpression(
       std::unique_ptr<CXFA_FMSimpleExpression> pAccessor,
@@ -274,7 +274,7 @@
   std::unique_ptr<CXFA_FMSimpleExpression> m_pExp2;
 };
 
-class CXFA_FMIndexExpression : public CXFA_FMSimpleExpression {
+class CXFA_FMIndexExpression final : public CXFA_FMSimpleExpression {
  public:
   CXFA_FMIndexExpression(XFA_FM_AccessorIndex accessorIndex,
                          std::unique_ptr<CXFA_FMSimpleExpression> pIndexExp,
@@ -289,7 +289,7 @@
   bool m_bIsStarIndex;
 };
 
-class CXFA_FMDotDotAccessorExpression : public CXFA_FMSimpleExpression {
+class CXFA_FMDotDotAccessorExpression final : public CXFA_FMSimpleExpression {
  public:
   CXFA_FMDotDotAccessorExpression(
       std::unique_ptr<CXFA_FMSimpleExpression> pAccessor,
@@ -306,7 +306,7 @@
   std::unique_ptr<CXFA_FMSimpleExpression> m_pExp2;
 };
 
-class CXFA_FMMethodCallExpression : public CXFA_FMSimpleExpression {
+class CXFA_FMMethodCallExpression final : public CXFA_FMSimpleExpression {
  public:
   CXFA_FMMethodCallExpression(
       std::unique_ptr<CXFA_FMSimpleExpression> pAccessorExp1,
diff --git a/xfa/fxfa/parser/cscript_datawindow.h b/xfa/fxfa/parser/cscript_datawindow.h
index 85a0a93..ceed58e 100644
--- a/xfa/fxfa/parser/cscript_datawindow.h
+++ b/xfa/fxfa/parser/cscript_datawindow.h
@@ -11,7 +11,7 @@
 
 class CXFA_Document;
 
-class CScript_DataWindow : public CXFA_Object {
+class CScript_DataWindow final : public CXFA_Object {
  public:
   explicit CScript_DataWindow(CXFA_Document* pDocument);
   ~CScript_DataWindow() override;
diff --git a/xfa/fxfa/parser/cscript_eventpseudomodel.h b/xfa/fxfa/parser/cscript_eventpseudomodel.h
index 22957f3..8104162 100644
--- a/xfa/fxfa/parser/cscript_eventpseudomodel.h
+++ b/xfa/fxfa/parser/cscript_eventpseudomodel.h
@@ -11,7 +11,7 @@
 
 class CXFA_Document;
 
-class CScript_EventPseudoModel : public CXFA_Object {
+class CScript_EventPseudoModel final : public CXFA_Object {
  public:
   explicit CScript_EventPseudoModel(CXFA_Document* pDocument);
   ~CScript_EventPseudoModel() override;
diff --git a/xfa/fxfa/parser/cscript_hostpseudomodel.h b/xfa/fxfa/parser/cscript_hostpseudomodel.h
index 8fb06c5..c8af249 100644
--- a/xfa/fxfa/parser/cscript_hostpseudomodel.h
+++ b/xfa/fxfa/parser/cscript_hostpseudomodel.h
@@ -11,7 +11,7 @@
 
 class CXFA_Document;
 
-class CScript_HostPseudoModel : public CXFA_Object {
+class CScript_HostPseudoModel final : public CXFA_Object {
  public:
   explicit CScript_HostPseudoModel(CXFA_Document* pDocument);
   ~CScript_HostPseudoModel() override;
diff --git a/xfa/fxfa/parser/cscript_layoutpseudomodel.h b/xfa/fxfa/parser/cscript_layoutpseudomodel.h
index 0b49505..e88a6aa 100644
--- a/xfa/fxfa/parser/cscript_layoutpseudomodel.h
+++ b/xfa/fxfa/parser/cscript_layoutpseudomodel.h
@@ -11,7 +11,7 @@
 
 class CXFA_Document;
 
-class CScript_LayoutPseudoModel : public CXFA_Object {
+class CScript_LayoutPseudoModel final : public CXFA_Object {
  public:
   explicit CScript_LayoutPseudoModel(CXFA_Document* pDocument);
   ~CScript_LayoutPseudoModel() override;
diff --git a/xfa/fxfa/parser/cscript_logpseudomodel.h b/xfa/fxfa/parser/cscript_logpseudomodel.h
index e4a33f4..aa11bea 100644
--- a/xfa/fxfa/parser/cscript_logpseudomodel.h
+++ b/xfa/fxfa/parser/cscript_logpseudomodel.h
@@ -11,7 +11,7 @@
 
 class CXFA_Document;
 
-class CScript_LogPseudoModel : public CXFA_Object {
+class CScript_LogPseudoModel final : public CXFA_Object {
  public:
   explicit CScript_LogPseudoModel(CXFA_Document* pDocument);
   ~CScript_LogPseudoModel() override;
diff --git a/xfa/fxfa/parser/cscript_signaturepseudomodel.h b/xfa/fxfa/parser/cscript_signaturepseudomodel.h
index c2ecb2b..532a767 100644
--- a/xfa/fxfa/parser/cscript_signaturepseudomodel.h
+++ b/xfa/fxfa/parser/cscript_signaturepseudomodel.h
@@ -11,7 +11,7 @@
 
 class CXFA_Document;
 
-class CScript_SignaturePseudoModel : public CXFA_Object {
+class CScript_SignaturePseudoModel final : public CXFA_Object {
  public:
   explicit CScript_SignaturePseudoModel(CXFA_Document* pDocument);
   ~CScript_SignaturePseudoModel() override;
diff --git a/xfa/fxfa/parser/cxfa_accessiblecontent.h b/xfa/fxfa/parser/cxfa_accessiblecontent.h
index 84ad8fc..2aea151 100644
--- a/xfa/fxfa/parser/cxfa_accessiblecontent.h
+++ b/xfa/fxfa/parser/cxfa_accessiblecontent.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_AccessibleContent : public CXFA_Node {
+class CXFA_AccessibleContent final : public CXFA_Node {
  public:
   CXFA_AccessibleContent(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_AccessibleContent() override;
diff --git a/xfa/fxfa/parser/cxfa_acrobat.h b/xfa/fxfa/parser/cxfa_acrobat.h
index 3701d59..5711178 100644
--- a/xfa/fxfa/parser/cxfa_acrobat.h
+++ b/xfa/fxfa/parser/cxfa_acrobat.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Acrobat : public CXFA_Node {
+class CXFA_Acrobat final : public CXFA_Node {
  public:
   CXFA_Acrobat(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Acrobat() override;
diff --git a/xfa/fxfa/parser/cxfa_acrobat7.h b/xfa/fxfa/parser/cxfa_acrobat7.h
index 579864a..8f64044 100644
--- a/xfa/fxfa/parser/cxfa_acrobat7.h
+++ b/xfa/fxfa/parser/cxfa_acrobat7.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Acrobat7 : public CXFA_Node {
+class CXFA_Acrobat7 final : public CXFA_Node {
  public:
   CXFA_Acrobat7(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Acrobat7() override;
diff --git a/xfa/fxfa/parser/cxfa_adbe_jsconsole.h b/xfa/fxfa/parser/cxfa_adbe_jsconsole.h
index 9fab6a1..e894479 100644
--- a/xfa/fxfa/parser/cxfa_adbe_jsconsole.h
+++ b/xfa/fxfa/parser/cxfa_adbe_jsconsole.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_aDBE_JSConsole : public CXFA_Node {
+class CXFA_aDBE_JSConsole final : public CXFA_Node {
  public:
   CXFA_aDBE_JSConsole(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_aDBE_JSConsole() override;
diff --git a/xfa/fxfa/parser/cxfa_adbe_jsdebugger.h b/xfa/fxfa/parser/cxfa_adbe_jsdebugger.h
index ed821d4..f7da535 100644
--- a/xfa/fxfa/parser/cxfa_adbe_jsdebugger.h
+++ b/xfa/fxfa/parser/cxfa_adbe_jsdebugger.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_aDBE_JSDebugger : public CXFA_Node {
+class CXFA_aDBE_JSDebugger final : public CXFA_Node {
  public:
   CXFA_aDBE_JSDebugger(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_aDBE_JSDebugger() override;
diff --git a/xfa/fxfa/parser/cxfa_addsilentprint.h b/xfa/fxfa/parser/cxfa_addsilentprint.h
index a251969..abfff47 100644
--- a/xfa/fxfa/parser/cxfa_addsilentprint.h
+++ b/xfa/fxfa/parser/cxfa_addsilentprint.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_AddSilentPrint : public CXFA_Node {
+class CXFA_AddSilentPrint final : public CXFA_Node {
  public:
   CXFA_AddSilentPrint(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_AddSilentPrint() override;
diff --git a/xfa/fxfa/parser/cxfa_addviewerpreferences.h b/xfa/fxfa/parser/cxfa_addviewerpreferences.h
index cf10868..62fd6e3 100644
--- a/xfa/fxfa/parser/cxfa_addviewerpreferences.h
+++ b/xfa/fxfa/parser/cxfa_addviewerpreferences.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_AddViewerPreferences : public CXFA_Node {
+class CXFA_AddViewerPreferences final : public CXFA_Node {
  public:
   CXFA_AddViewerPreferences(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_AddViewerPreferences() override;
diff --git a/xfa/fxfa/parser/cxfa_adjustdata.h b/xfa/fxfa/parser/cxfa_adjustdata.h
index 3c004c2..463f2e6 100644
--- a/xfa/fxfa/parser/cxfa_adjustdata.h
+++ b/xfa/fxfa/parser/cxfa_adjustdata.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_AdjustData : public CXFA_Node {
+class CXFA_AdjustData final : public CXFA_Node {
  public:
   CXFA_AdjustData(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_AdjustData() override;
diff --git a/xfa/fxfa/parser/cxfa_adobeextensionlevel.h b/xfa/fxfa/parser/cxfa_adobeextensionlevel.h
index 91a830f..5e0a507 100644
--- a/xfa/fxfa/parser/cxfa_adobeextensionlevel.h
+++ b/xfa/fxfa/parser/cxfa_adobeextensionlevel.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_AdobeExtensionLevel : public CXFA_Node {
+class CXFA_AdobeExtensionLevel final : public CXFA_Node {
  public:
   CXFA_AdobeExtensionLevel(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_AdobeExtensionLevel() override;
diff --git a/xfa/fxfa/parser/cxfa_agent.h b/xfa/fxfa/parser/cxfa_agent.h
index 65d826d..a84d2ac 100644
--- a/xfa/fxfa/parser/cxfa_agent.h
+++ b/xfa/fxfa/parser/cxfa_agent.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Agent : public CXFA_Node {
+class CXFA_Agent final : public CXFA_Node {
  public:
   CXFA_Agent(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Agent() override;
diff --git a/xfa/fxfa/parser/cxfa_alwaysembed.h b/xfa/fxfa/parser/cxfa_alwaysembed.h
index 1780976..754fd89 100644
--- a/xfa/fxfa/parser/cxfa_alwaysembed.h
+++ b/xfa/fxfa/parser/cxfa_alwaysembed.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_AlwaysEmbed : public CXFA_Node {
+class CXFA_AlwaysEmbed final : public CXFA_Node {
  public:
   CXFA_AlwaysEmbed(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_AlwaysEmbed() override;
diff --git a/xfa/fxfa/parser/cxfa_amd.h b/xfa/fxfa/parser/cxfa_amd.h
index 951c6ca..6d6562c 100644
--- a/xfa/fxfa/parser/cxfa_amd.h
+++ b/xfa/fxfa/parser/cxfa_amd.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Amd : public CXFA_Node {
+class CXFA_Amd final : public CXFA_Node {
  public:
   CXFA_Amd(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Amd() override;
diff --git a/xfa/fxfa/parser/cxfa_appearancefilter.h b/xfa/fxfa/parser/cxfa_appearancefilter.h
index 341232e..80b0ba4 100644
--- a/xfa/fxfa/parser/cxfa_appearancefilter.h
+++ b/xfa/fxfa/parser/cxfa_appearancefilter.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_AppearanceFilter : public CXFA_Node {
+class CXFA_AppearanceFilter final : public CXFA_Node {
  public:
   CXFA_AppearanceFilter(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_AppearanceFilter() override;
diff --git a/xfa/fxfa/parser/cxfa_arc.h b/xfa/fxfa/parser/cxfa_arc.h
index fd903aa..70d1b00 100644
--- a/xfa/fxfa/parser/cxfa_arc.h
+++ b/xfa/fxfa/parser/cxfa_arc.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_box.h"
 
-class CXFA_Arc : public CXFA_Box {
+class CXFA_Arc final : public CXFA_Box {
  public:
   CXFA_Arc(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Arc() override;
diff --git a/xfa/fxfa/parser/cxfa_area.h b/xfa/fxfa/parser/cxfa_area.h
index 6568e73..cf1ff87 100644
--- a/xfa/fxfa/parser/cxfa_area.h
+++ b/xfa/fxfa/parser/cxfa_area.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Area : public CXFA_Node {
+class CXFA_Area final : public CXFA_Node {
  public:
   CXFA_Area(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Area() override;
diff --git a/xfa/fxfa/parser/cxfa_arraynodelist.h b/xfa/fxfa/parser/cxfa_arraynodelist.h
index dc798bc..d723df3 100644
--- a/xfa/fxfa/parser/cxfa_arraynodelist.h
+++ b/xfa/fxfa/parser/cxfa_arraynodelist.h
@@ -14,7 +14,7 @@
 class CXFA_Document;
 class CXFA_Node;
 
-class CXFA_ArrayNodeList : public CXFA_TreeList {
+class CXFA_ArrayNodeList final : public CXFA_TreeList {
  public:
   explicit CXFA_ArrayNodeList(CXFA_Document* pDocument);
   ~CXFA_ArrayNodeList() override;
diff --git a/xfa/fxfa/parser/cxfa_assist.h b/xfa/fxfa/parser/cxfa_assist.h
index d0e9020..77643cf 100644
--- a/xfa/fxfa/parser/cxfa_assist.h
+++ b/xfa/fxfa/parser/cxfa_assist.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Assist : public CXFA_Node {
+class CXFA_Assist final : public CXFA_Node {
  public:
   CXFA_Assist(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Assist() override;
diff --git a/xfa/fxfa/parser/cxfa_attachnodelist.h b/xfa/fxfa/parser/cxfa_attachnodelist.h
index f4cebe4..a8248e6 100644
--- a/xfa/fxfa/parser/cxfa_attachnodelist.h
+++ b/xfa/fxfa/parser/cxfa_attachnodelist.h
@@ -12,7 +12,7 @@
 class CXFA_Document;
 class CXFA_Node;
 
-class CXFA_AttachNodeList : public CXFA_TreeList {
+class CXFA_AttachNodeList final : public CXFA_TreeList {
  public:
   CXFA_AttachNodeList(CXFA_Document* pDocument, CXFA_Node* pAttachNode);
   ~CXFA_AttachNodeList() override;
diff --git a/xfa/fxfa/parser/cxfa_attributes.h b/xfa/fxfa/parser/cxfa_attributes.h
index fd73da8..099ecea 100644
--- a/xfa/fxfa/parser/cxfa_attributes.h
+++ b/xfa/fxfa/parser/cxfa_attributes.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Attributes : public CXFA_Node {
+class CXFA_Attributes final : public CXFA_Node {
  public:
   CXFA_Attributes(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Attributes() override;
diff --git a/xfa/fxfa/parser/cxfa_autosave.h b/xfa/fxfa/parser/cxfa_autosave.h
index b58ccf1..5324351 100644
--- a/xfa/fxfa/parser/cxfa_autosave.h
+++ b/xfa/fxfa/parser/cxfa_autosave.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_AutoSave : public CXFA_Node {
+class CXFA_AutoSave final : public CXFA_Node {
  public:
   CXFA_AutoSave(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_AutoSave() override;
diff --git a/xfa/fxfa/parser/cxfa_barcode.h b/xfa/fxfa/parser/cxfa_barcode.h
index 463e97f..bf503e5 100644
--- a/xfa/fxfa/parser/cxfa_barcode.h
+++ b/xfa/fxfa/parser/cxfa_barcode.h
@@ -11,7 +11,7 @@
 #include "third_party/base/optional.h"
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Barcode : public CXFA_Node {
+class CXFA_Barcode final : public CXFA_Node {
  public:
   CXFA_Barcode(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Barcode() override;
diff --git a/xfa/fxfa/parser/cxfa_base.h b/xfa/fxfa/parser/cxfa_base.h
index 3974343..3f1c9ba 100644
--- a/xfa/fxfa/parser/cxfa_base.h
+++ b/xfa/fxfa/parser/cxfa_base.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Base : public CXFA_Node {
+class CXFA_Base final : public CXFA_Node {
  public:
   CXFA_Base(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Base() override;
diff --git a/xfa/fxfa/parser/cxfa_batchoutput.h b/xfa/fxfa/parser/cxfa_batchoutput.h
index 9faa6cf..8d1de09 100644
--- a/xfa/fxfa/parser/cxfa_batchoutput.h
+++ b/xfa/fxfa/parser/cxfa_batchoutput.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_BatchOutput : public CXFA_Node {
+class CXFA_BatchOutput final : public CXFA_Node {
  public:
   CXFA_BatchOutput(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_BatchOutput() override;
diff --git a/xfa/fxfa/parser/cxfa_behavioroverride.h b/xfa/fxfa/parser/cxfa_behavioroverride.h
index cb082112..d7dce1b 100644
--- a/xfa/fxfa/parser/cxfa_behavioroverride.h
+++ b/xfa/fxfa/parser/cxfa_behavioroverride.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_BehaviorOverride : public CXFA_Node {
+class CXFA_BehaviorOverride final : public CXFA_Node {
  public:
   CXFA_BehaviorOverride(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_BehaviorOverride() override;
diff --git a/xfa/fxfa/parser/cxfa_bind.h b/xfa/fxfa/parser/cxfa_bind.h
index 1924cb6..f6331d6 100644
--- a/xfa/fxfa/parser/cxfa_bind.h
+++ b/xfa/fxfa/parser/cxfa_bind.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Bind : public CXFA_Node {
+class CXFA_Bind final : public CXFA_Node {
  public:
   CXFA_Bind(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Bind() override;
diff --git a/xfa/fxfa/parser/cxfa_binditems.h b/xfa/fxfa/parser/cxfa_binditems.h
index f1a490d..34a4b67 100644
--- a/xfa/fxfa/parser/cxfa_binditems.h
+++ b/xfa/fxfa/parser/cxfa_binditems.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_BindItems : public CXFA_Node {
+class CXFA_BindItems final : public CXFA_Node {
  public:
   CXFA_BindItems(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_BindItems() override;
diff --git a/xfa/fxfa/parser/cxfa_bookend.h b/xfa/fxfa/parser/cxfa_bookend.h
index 82eb13c..1c68763 100644
--- a/xfa/fxfa/parser/cxfa_bookend.h
+++ b/xfa/fxfa/parser/cxfa_bookend.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Bookend : public CXFA_Node {
+class CXFA_Bookend final : public CXFA_Node {
  public:
   CXFA_Bookend(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Bookend() override;
diff --git a/xfa/fxfa/parser/cxfa_boolean.h b/xfa/fxfa/parser/cxfa_boolean.h
index 4121e36..60b8e5e 100644
--- a/xfa/fxfa/parser/cxfa_boolean.h
+++ b/xfa/fxfa/parser/cxfa_boolean.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Boolean : public CXFA_Node {
+class CXFA_Boolean final : public CXFA_Node {
  public:
   CXFA_Boolean(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Boolean() override;
diff --git a/xfa/fxfa/parser/cxfa_border.h b/xfa/fxfa/parser/cxfa_border.h
index 24f3bb9..6071a77 100644
--- a/xfa/fxfa/parser/cxfa_border.h
+++ b/xfa/fxfa/parser/cxfa_border.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_rectangle.h"
 
-class CXFA_Border : public CXFA_Rectangle {
+class CXFA_Border final : public CXFA_Rectangle {
  public:
   CXFA_Border(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Border() override;
diff --git a/xfa/fxfa/parser/cxfa_break.h b/xfa/fxfa/parser/cxfa_break.h
index c0d937c..4bf7dde 100644
--- a/xfa/fxfa/parser/cxfa_break.h
+++ b/xfa/fxfa/parser/cxfa_break.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Break : public CXFA_Node {
+class CXFA_Break final : public CXFA_Node {
  public:
   CXFA_Break(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Break() override;
diff --git a/xfa/fxfa/parser/cxfa_breakafter.h b/xfa/fxfa/parser/cxfa_breakafter.h
index 952b0c9..c607ef5 100644
--- a/xfa/fxfa/parser/cxfa_breakafter.h
+++ b/xfa/fxfa/parser/cxfa_breakafter.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_BreakAfter : public CXFA_Node {
+class CXFA_BreakAfter final : public CXFA_Node {
  public:
   CXFA_BreakAfter(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_BreakAfter() override;
diff --git a/xfa/fxfa/parser/cxfa_breakbefore.h b/xfa/fxfa/parser/cxfa_breakbefore.h
index 358e477..1b6dc63 100644
--- a/xfa/fxfa/parser/cxfa_breakbefore.h
+++ b/xfa/fxfa/parser/cxfa_breakbefore.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_BreakBefore : public CXFA_Node {
+class CXFA_BreakBefore final : public CXFA_Node {
  public:
   CXFA_BreakBefore(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_BreakBefore() override;
diff --git a/xfa/fxfa/parser/cxfa_button.h b/xfa/fxfa/parser/cxfa_button.h
index cea685f..d9d67a9 100644
--- a/xfa/fxfa/parser/cxfa_button.h
+++ b/xfa/fxfa/parser/cxfa_button.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Button : public CXFA_Node {
+class CXFA_Button final : public CXFA_Node {
  public:
   CXFA_Button(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Button() override;
diff --git a/xfa/fxfa/parser/cxfa_cache.h b/xfa/fxfa/parser/cxfa_cache.h
index e3907c6..430163a 100644
--- a/xfa/fxfa/parser/cxfa_cache.h
+++ b/xfa/fxfa/parser/cxfa_cache.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Cache : public CXFA_Node {
+class CXFA_Cache final : public CXFA_Node {
  public:
   CXFA_Cache(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Cache() override;
diff --git a/xfa/fxfa/parser/cxfa_calculate.h b/xfa/fxfa/parser/cxfa_calculate.h
index a5be908..46c8770 100644
--- a/xfa/fxfa/parser/cxfa_calculate.h
+++ b/xfa/fxfa/parser/cxfa_calculate.h
@@ -11,7 +11,7 @@
 
 class CXFA_Script;
 
-class CXFA_Calculate : public CXFA_Node {
+class CXFA_Calculate final : public CXFA_Node {
  public:
   CXFA_Calculate(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Calculate() override;
diff --git a/xfa/fxfa/parser/cxfa_calendarsymbols.h b/xfa/fxfa/parser/cxfa_calendarsymbols.h
index 1b1f007..82ecde4 100644
--- a/xfa/fxfa/parser/cxfa_calendarsymbols.h
+++ b/xfa/fxfa/parser/cxfa_calendarsymbols.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_CalendarSymbols : public CXFA_Node {
+class CXFA_CalendarSymbols final : public CXFA_Node {
  public:
   CXFA_CalendarSymbols(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_CalendarSymbols() override;
diff --git a/xfa/fxfa/parser/cxfa_caption.h b/xfa/fxfa/parser/cxfa_caption.h
index c790787..8f3dfdc 100644
--- a/xfa/fxfa/parser/cxfa_caption.h
+++ b/xfa/fxfa/parser/cxfa_caption.h
@@ -13,7 +13,7 @@
 class CXFA_Margin;
 class CXFA_Value;
 
-class CXFA_Caption : public CXFA_Node {
+class CXFA_Caption final : public CXFA_Node {
  public:
   static constexpr XFA_AttributeEnum kDefaultPlacementType =
       XFA_AttributeEnum::Left;
diff --git a/xfa/fxfa/parser/cxfa_certificate.h b/xfa/fxfa/parser/cxfa_certificate.h
index 48106da..4923d57 100644
--- a/xfa/fxfa/parser/cxfa_certificate.h
+++ b/xfa/fxfa/parser/cxfa_certificate.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Certificate : public CXFA_Node {
+class CXFA_Certificate final : public CXFA_Node {
  public:
   CXFA_Certificate(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Certificate() override;
diff --git a/xfa/fxfa/parser/cxfa_certificates.h b/xfa/fxfa/parser/cxfa_certificates.h
index a1bed73..6817d03 100644
--- a/xfa/fxfa/parser/cxfa_certificates.h
+++ b/xfa/fxfa/parser/cxfa_certificates.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Certificates : public CXFA_Node {
+class CXFA_Certificates final : public CXFA_Node {
  public:
   CXFA_Certificates(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Certificates() override;
diff --git a/xfa/fxfa/parser/cxfa_change.h b/xfa/fxfa/parser/cxfa_change.h
index f39b92e..2fa4ba9 100644
--- a/xfa/fxfa/parser/cxfa_change.h
+++ b/xfa/fxfa/parser/cxfa_change.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Change : public CXFA_Node {
+class CXFA_Change final : public CXFA_Node {
  public:
   CXFA_Change(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Change() override;
diff --git a/xfa/fxfa/parser/cxfa_checkbutton.h b/xfa/fxfa/parser/cxfa_checkbutton.h
index e239a46..7d78919 100644
--- a/xfa/fxfa/parser/cxfa_checkbutton.h
+++ b/xfa/fxfa/parser/cxfa_checkbutton.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_CheckButton : public CXFA_Node {
+class CXFA_CheckButton final : public CXFA_Node {
  public:
   CXFA_CheckButton(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_CheckButton() override;
diff --git a/xfa/fxfa/parser/cxfa_choicelist.h b/xfa/fxfa/parser/cxfa_choicelist.h
index d621d8a..cff1463 100644
--- a/xfa/fxfa/parser/cxfa_choicelist.h
+++ b/xfa/fxfa/parser/cxfa_choicelist.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_ChoiceList : public CXFA_Node {
+class CXFA_ChoiceList final : public CXFA_Node {
  public:
   CXFA_ChoiceList(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_ChoiceList() override;
diff --git a/xfa/fxfa/parser/cxfa_color.h b/xfa/fxfa/parser/cxfa_color.h
index b15c9d8..d13a553 100644
--- a/xfa/fxfa/parser/cxfa_color.h
+++ b/xfa/fxfa/parser/cxfa_color.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Color : public CXFA_Node {
+class CXFA_Color final : public CXFA_Node {
  public:
   static constexpr FX_ARGB kBlackColor = 0xFF000000;
 
diff --git a/xfa/fxfa/parser/cxfa_comb.h b/xfa/fxfa/parser/cxfa_comb.h
index 1f2b538..4193a9c 100644
--- a/xfa/fxfa/parser/cxfa_comb.h
+++ b/xfa/fxfa/parser/cxfa_comb.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Comb : public CXFA_Node {
+class CXFA_Comb final : public CXFA_Node {
  public:
   CXFA_Comb(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Comb() override;
diff --git a/xfa/fxfa/parser/cxfa_command.h b/xfa/fxfa/parser/cxfa_command.h
index 88b74f3..46f9854 100644
--- a/xfa/fxfa/parser/cxfa_command.h
+++ b/xfa/fxfa/parser/cxfa_command.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Command : public CXFA_Node {
+class CXFA_Command final : public CXFA_Node {
  public:
   CXFA_Command(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Command() override;
diff --git a/xfa/fxfa/parser/cxfa_common.h b/xfa/fxfa/parser/cxfa_common.h
index d0ce0ea..7cab852 100644
--- a/xfa/fxfa/parser/cxfa_common.h
+++ b/xfa/fxfa/parser/cxfa_common.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Common : public CXFA_Node {
+class CXFA_Common final : public CXFA_Node {
  public:
   CXFA_Common(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Common() override;
diff --git a/xfa/fxfa/parser/cxfa_compress.h b/xfa/fxfa/parser/cxfa_compress.h
index bec1883..2b56390 100644
--- a/xfa/fxfa/parser/cxfa_compress.h
+++ b/xfa/fxfa/parser/cxfa_compress.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Compress : public CXFA_Node {
+class CXFA_Compress final : public CXFA_Node {
  public:
   CXFA_Compress(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Compress() override;
diff --git a/xfa/fxfa/parser/cxfa_compression.h b/xfa/fxfa/parser/cxfa_compression.h
index f0e26cb..7a571ae 100644
--- a/xfa/fxfa/parser/cxfa_compression.h
+++ b/xfa/fxfa/parser/cxfa_compression.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Compression : public CXFA_Node {
+class CXFA_Compression final : public CXFA_Node {
  public:
   CXFA_Compression(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Compression() override;
diff --git a/xfa/fxfa/parser/cxfa_compresslogicalstructure.h b/xfa/fxfa/parser/cxfa_compresslogicalstructure.h
index a8b5068..843eb60 100644
--- a/xfa/fxfa/parser/cxfa_compresslogicalstructure.h
+++ b/xfa/fxfa/parser/cxfa_compresslogicalstructure.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_CompressLogicalStructure : public CXFA_Node {
+class CXFA_CompressLogicalStructure final : public CXFA_Node {
  public:
   CXFA_CompressLogicalStructure(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_CompressLogicalStructure() override;
diff --git a/xfa/fxfa/parser/cxfa_compressobjectstream.h b/xfa/fxfa/parser/cxfa_compressobjectstream.h
index 94e02ce..bce7c65 100644
--- a/xfa/fxfa/parser/cxfa_compressobjectstream.h
+++ b/xfa/fxfa/parser/cxfa_compressobjectstream.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_CompressObjectStream : public CXFA_Node {
+class CXFA_CompressObjectStream final : public CXFA_Node {
  public:
   CXFA_CompressObjectStream(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_CompressObjectStream() override;
diff --git a/xfa/fxfa/parser/cxfa_config.h b/xfa/fxfa/parser/cxfa_config.h
index 2ddb692..644c475 100644
--- a/xfa/fxfa/parser/cxfa_config.h
+++ b/xfa/fxfa/parser/cxfa_config.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Config : public CXFA_Node {
+class CXFA_Config final : public CXFA_Node {
  public:
   CXFA_Config(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Config() override;
diff --git a/xfa/fxfa/parser/cxfa_conformance.h b/xfa/fxfa/parser/cxfa_conformance.h
index 11a72e7..829bb1c 100644
--- a/xfa/fxfa/parser/cxfa_conformance.h
+++ b/xfa/fxfa/parser/cxfa_conformance.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Conformance : public CXFA_Node {
+class CXFA_Conformance final : public CXFA_Node {
  public:
   CXFA_Conformance(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Conformance() override;
diff --git a/xfa/fxfa/parser/cxfa_connect.h b/xfa/fxfa/parser/cxfa_connect.h
index ac91577..3d616ce 100644
--- a/xfa/fxfa/parser/cxfa_connect.h
+++ b/xfa/fxfa/parser/cxfa_connect.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Connect : public CXFA_Node {
+class CXFA_Connect final : public CXFA_Node {
  public:
   CXFA_Connect(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Connect() override;
diff --git a/xfa/fxfa/parser/cxfa_connectionset.h b/xfa/fxfa/parser/cxfa_connectionset.h
index 59316f7..74238e0 100644
--- a/xfa/fxfa/parser/cxfa_connectionset.h
+++ b/xfa/fxfa/parser/cxfa_connectionset.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_ConnectionSet : public CXFA_Node {
+class CXFA_ConnectionSet final : public CXFA_Node {
  public:
   CXFA_ConnectionSet(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_ConnectionSet() override;
diff --git a/xfa/fxfa/parser/cxfa_connectstring.h b/xfa/fxfa/parser/cxfa_connectstring.h
index 6c3a0b0..88dd7bc 100644
--- a/xfa/fxfa/parser/cxfa_connectstring.h
+++ b/xfa/fxfa/parser/cxfa_connectstring.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_ConnectString : public CXFA_Node {
+class CXFA_ConnectString final : public CXFA_Node {
  public:
   CXFA_ConnectString(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_ConnectString() override;
diff --git a/xfa/fxfa/parser/cxfa_contentarea.h b/xfa/fxfa/parser/cxfa_contentarea.h
index 3c5ff60..43f6868 100644
--- a/xfa/fxfa/parser/cxfa_contentarea.h
+++ b/xfa/fxfa/parser/cxfa_contentarea.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_ContentArea : public CXFA_Node {
+class CXFA_ContentArea final : public CXFA_Node {
  public:
   CXFA_ContentArea(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_ContentArea() override;
diff --git a/xfa/fxfa/parser/cxfa_contentcopy.h b/xfa/fxfa/parser/cxfa_contentcopy.h
index d394c74..5b32beb 100644
--- a/xfa/fxfa/parser/cxfa_contentcopy.h
+++ b/xfa/fxfa/parser/cxfa_contentcopy.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_ContentCopy : public CXFA_Node {
+class CXFA_ContentCopy final : public CXFA_Node {
  public:
   CXFA_ContentCopy(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_ContentCopy() override;
diff --git a/xfa/fxfa/parser/cxfa_copies.h b/xfa/fxfa/parser/cxfa_copies.h
index 1ecd616..46497f9 100644
--- a/xfa/fxfa/parser/cxfa_copies.h
+++ b/xfa/fxfa/parser/cxfa_copies.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Copies : public CXFA_Node {
+class CXFA_Copies final : public CXFA_Node {
  public:
   CXFA_Copies(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Copies() override;
diff --git a/xfa/fxfa/parser/cxfa_corner.h b/xfa/fxfa/parser/cxfa_corner.h
index 1042729..7dcaf32 100644
--- a/xfa/fxfa/parser/cxfa_corner.h
+++ b/xfa/fxfa/parser/cxfa_corner.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_stroke.h"
 
-class CXFA_Corner : public CXFA_Stroke {
+class CXFA_Corner final : public CXFA_Stroke {
  public:
   CXFA_Corner(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Corner() override;
diff --git a/xfa/fxfa/parser/cxfa_creator.h b/xfa/fxfa/parser/cxfa_creator.h
index c046883..437fab5 100644
--- a/xfa/fxfa/parser/cxfa_creator.h
+++ b/xfa/fxfa/parser/cxfa_creator.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Creator : public CXFA_Node {
+class CXFA_Creator final : public CXFA_Node {
  public:
   CXFA_Creator(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Creator() override;
diff --git a/xfa/fxfa/parser/cxfa_currencysymbol.h b/xfa/fxfa/parser/cxfa_currencysymbol.h
index 271f7fc..3d7b5bd 100644
--- a/xfa/fxfa/parser/cxfa_currencysymbol.h
+++ b/xfa/fxfa/parser/cxfa_currencysymbol.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_CurrencySymbol : public CXFA_Node {
+class CXFA_CurrencySymbol final : public CXFA_Node {
  public:
   CXFA_CurrencySymbol(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_CurrencySymbol() override;
diff --git a/xfa/fxfa/parser/cxfa_currencysymbols.h b/xfa/fxfa/parser/cxfa_currencysymbols.h
index acd3f2a..2ce27cf 100644
--- a/xfa/fxfa/parser/cxfa_currencysymbols.h
+++ b/xfa/fxfa/parser/cxfa_currencysymbols.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_CurrencySymbols : public CXFA_Node {
+class CXFA_CurrencySymbols final : public CXFA_Node {
  public:
   CXFA_CurrencySymbols(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_CurrencySymbols() override;
diff --git a/xfa/fxfa/parser/cxfa_currentpage.h b/xfa/fxfa/parser/cxfa_currentpage.h
index d526b4a..5bba6a0 100644
--- a/xfa/fxfa/parser/cxfa_currentpage.h
+++ b/xfa/fxfa/parser/cxfa_currentpage.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_CurrentPage : public CXFA_Node {
+class CXFA_CurrentPage final : public CXFA_Node {
  public:
   CXFA_CurrentPage(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_CurrentPage() override;
diff --git a/xfa/fxfa/parser/cxfa_data.h b/xfa/fxfa/parser/cxfa_data.h
index cb30f61..44cf40d 100644
--- a/xfa/fxfa/parser/cxfa_data.h
+++ b/xfa/fxfa/parser/cxfa_data.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Data : public CXFA_Node {
+class CXFA_Data final : public CXFA_Node {
  public:
   CXFA_Data(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Data() override;
diff --git a/xfa/fxfa/parser/cxfa_datagroup.h b/xfa/fxfa/parser/cxfa_datagroup.h
index 649b096..5a61704 100644
--- a/xfa/fxfa/parser/cxfa_datagroup.h
+++ b/xfa/fxfa/parser/cxfa_datagroup.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_DataGroup : public CXFA_Node {
+class CXFA_DataGroup final : public CXFA_Node {
  public:
   CXFA_DataGroup(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_DataGroup() override;
diff --git a/xfa/fxfa/parser/cxfa_datamodel.h b/xfa/fxfa/parser/cxfa_datamodel.h
index f414ea3..8a1bd42 100644
--- a/xfa/fxfa/parser/cxfa_datamodel.h
+++ b/xfa/fxfa/parser/cxfa_datamodel.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_DataModel : public CXFA_Node {
+class CXFA_DataModel final : public CXFA_Node {
  public:
   CXFA_DataModel(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_DataModel() override;
diff --git a/xfa/fxfa/parser/cxfa_datavalue.h b/xfa/fxfa/parser/cxfa_datavalue.h
index 8170aba..ee2c621 100644
--- a/xfa/fxfa/parser/cxfa_datavalue.h
+++ b/xfa/fxfa/parser/cxfa_datavalue.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_DataValue : public CXFA_Node {
+class CXFA_DataValue final : public CXFA_Node {
  public:
   CXFA_DataValue(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_DataValue() override;
diff --git a/xfa/fxfa/parser/cxfa_date.h b/xfa/fxfa/parser/cxfa_date.h
index e5ebb25..3fb7ba7 100644
--- a/xfa/fxfa/parser/cxfa_date.h
+++ b/xfa/fxfa/parser/cxfa_date.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Date : public CXFA_Node {
+class CXFA_Date final : public CXFA_Node {
  public:
   CXFA_Date(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Date() override;
diff --git a/xfa/fxfa/parser/cxfa_datepattern.h b/xfa/fxfa/parser/cxfa_datepattern.h
index b661478..e67a61f 100644
--- a/xfa/fxfa/parser/cxfa_datepattern.h
+++ b/xfa/fxfa/parser/cxfa_datepattern.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_DatePattern : public CXFA_Node {
+class CXFA_DatePattern final : public CXFA_Node {
  public:
   CXFA_DatePattern(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_DatePattern() override;
diff --git a/xfa/fxfa/parser/cxfa_datepatterns.h b/xfa/fxfa/parser/cxfa_datepatterns.h
index dfc55d0..6c2dca4 100644
--- a/xfa/fxfa/parser/cxfa_datepatterns.h
+++ b/xfa/fxfa/parser/cxfa_datepatterns.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_DatePatterns : public CXFA_Node {
+class CXFA_DatePatterns final : public CXFA_Node {
  public:
   CXFA_DatePatterns(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_DatePatterns() override;
diff --git a/xfa/fxfa/parser/cxfa_datetime.h b/xfa/fxfa/parser/cxfa_datetime.h
index f5cd6f6..ca71daf 100644
--- a/xfa/fxfa/parser/cxfa_datetime.h
+++ b/xfa/fxfa/parser/cxfa_datetime.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_DateTime : public CXFA_Node {
+class CXFA_DateTime final : public CXFA_Node {
  public:
   CXFA_DateTime(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_DateTime() override;
diff --git a/xfa/fxfa/parser/cxfa_datetimeedit.h b/xfa/fxfa/parser/cxfa_datetimeedit.h
index 662a1ef..de76e2a 100644
--- a/xfa/fxfa/parser/cxfa_datetimeedit.h
+++ b/xfa/fxfa/parser/cxfa_datetimeedit.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_DateTimeEdit : public CXFA_Node {
+class CXFA_DateTimeEdit final : public CXFA_Node {
  public:
   CXFA_DateTimeEdit(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_DateTimeEdit() override;
diff --git a/xfa/fxfa/parser/cxfa_datetimesymbols.h b/xfa/fxfa/parser/cxfa_datetimesymbols.h
index e2296d6..cfbe069 100644
--- a/xfa/fxfa/parser/cxfa_datetimesymbols.h
+++ b/xfa/fxfa/parser/cxfa_datetimesymbols.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_DateTimeSymbols : public CXFA_Node {
+class CXFA_DateTimeSymbols final : public CXFA_Node {
  public:
   CXFA_DateTimeSymbols(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_DateTimeSymbols() override;
diff --git a/xfa/fxfa/parser/cxfa_day.h b/xfa/fxfa/parser/cxfa_day.h
index 8d04bf4..6fb2f45 100644
--- a/xfa/fxfa/parser/cxfa_day.h
+++ b/xfa/fxfa/parser/cxfa_day.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Day : public CXFA_Node {
+class CXFA_Day final : public CXFA_Node {
  public:
   CXFA_Day(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Day() override;
diff --git a/xfa/fxfa/parser/cxfa_daynames.h b/xfa/fxfa/parser/cxfa_daynames.h
index d566e50..229d69c 100644
--- a/xfa/fxfa/parser/cxfa_daynames.h
+++ b/xfa/fxfa/parser/cxfa_daynames.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_DayNames : public CXFA_Node {
+class CXFA_DayNames final : public CXFA_Node {
  public:
   CXFA_DayNames(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_DayNames() override;
diff --git a/xfa/fxfa/parser/cxfa_debug.h b/xfa/fxfa/parser/cxfa_debug.h
index e2e4ed1..1a254f0 100644
--- a/xfa/fxfa/parser/cxfa_debug.h
+++ b/xfa/fxfa/parser/cxfa_debug.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Debug : public CXFA_Node {
+class CXFA_Debug final : public CXFA_Node {
  public:
   CXFA_Debug(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Debug() override;
diff --git a/xfa/fxfa/parser/cxfa_decimal.h b/xfa/fxfa/parser/cxfa_decimal.h
index da58896..668f61a 100644
--- a/xfa/fxfa/parser/cxfa_decimal.h
+++ b/xfa/fxfa/parser/cxfa_decimal.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Decimal : public CXFA_Node {
+class CXFA_Decimal final : public CXFA_Node {
  public:
   CXFA_Decimal(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Decimal() override;
diff --git a/xfa/fxfa/parser/cxfa_defaulttypeface.h b/xfa/fxfa/parser/cxfa_defaulttypeface.h
index 511ed8f..a241bf8 100644
--- a/xfa/fxfa/parser/cxfa_defaulttypeface.h
+++ b/xfa/fxfa/parser/cxfa_defaulttypeface.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_DefaultTypeface : public CXFA_Node {
+class CXFA_DefaultTypeface final : public CXFA_Node {
  public:
   CXFA_DefaultTypeface(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_DefaultTypeface() override;
diff --git a/xfa/fxfa/parser/cxfa_defaultui.h b/xfa/fxfa/parser/cxfa_defaultui.h
index 5c20370..d09da0b 100644
--- a/xfa/fxfa/parser/cxfa_defaultui.h
+++ b/xfa/fxfa/parser/cxfa_defaultui.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_DefaultUi : public CXFA_Node {
+class CXFA_DefaultUi final : public CXFA_Node {
  public:
   CXFA_DefaultUi(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_DefaultUi() override;
diff --git a/xfa/fxfa/parser/cxfa_delete.h b/xfa/fxfa/parser/cxfa_delete.h
index 7c6058a..0ea6ab3 100644
--- a/xfa/fxfa/parser/cxfa_delete.h
+++ b/xfa/fxfa/parser/cxfa_delete.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Delete : public CXFA_Node {
+class CXFA_Delete final : public CXFA_Node {
  public:
   CXFA_Delete(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Delete() override;
diff --git a/xfa/fxfa/parser/cxfa_delta.h b/xfa/fxfa/parser/cxfa_delta.h
index 693287b..40bfa56 100644
--- a/xfa/fxfa/parser/cxfa_delta.h
+++ b/xfa/fxfa/parser/cxfa_delta.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Delta : public CXFA_Node {
+class CXFA_Delta final : public CXFA_Node {
  public:
   CXFA_Delta(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Delta() override;
diff --git a/xfa/fxfa/parser/cxfa_desc.h b/xfa/fxfa/parser/cxfa_desc.h
index 1811c63..11baa90 100644
--- a/xfa/fxfa/parser/cxfa_desc.h
+++ b/xfa/fxfa/parser/cxfa_desc.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Desc : public CXFA_Node {
+class CXFA_Desc final : public CXFA_Node {
  public:
   CXFA_Desc(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Desc() override;
diff --git a/xfa/fxfa/parser/cxfa_destination.h b/xfa/fxfa/parser/cxfa_destination.h
index d9fc553..d31434f 100644
--- a/xfa/fxfa/parser/cxfa_destination.h
+++ b/xfa/fxfa/parser/cxfa_destination.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Destination : public CXFA_Node {
+class CXFA_Destination final : public CXFA_Node {
  public:
   CXFA_Destination(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Destination() override;
diff --git a/xfa/fxfa/parser/cxfa_digestmethod.h b/xfa/fxfa/parser/cxfa_digestmethod.h
index 4ac22bb..777f46a 100644
--- a/xfa/fxfa/parser/cxfa_digestmethod.h
+++ b/xfa/fxfa/parser/cxfa_digestmethod.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_DigestMethod : public CXFA_Node {
+class CXFA_DigestMethod final : public CXFA_Node {
  public:
   CXFA_DigestMethod(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_DigestMethod() override;
diff --git a/xfa/fxfa/parser/cxfa_digestmethods.h b/xfa/fxfa/parser/cxfa_digestmethods.h
index 65d40fb..61dac97 100644
--- a/xfa/fxfa/parser/cxfa_digestmethods.h
+++ b/xfa/fxfa/parser/cxfa_digestmethods.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_DigestMethods : public CXFA_Node {
+class CXFA_DigestMethods final : public CXFA_Node {
  public:
   CXFA_DigestMethods(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_DigestMethods() override;
diff --git a/xfa/fxfa/parser/cxfa_document.h b/xfa/fxfa/parser/cxfa_document.h
index 590a4cf..0449f06 100644
--- a/xfa/fxfa/parser/cxfa_document.h
+++ b/xfa/fxfa/parser/cxfa_document.h
@@ -54,7 +54,7 @@
 class CXFA_Node;
 class CXFA_Object;
 
-class CXFA_Document : public CXFA_NodeOwner {
+class CXFA_Document final : public CXFA_NodeOwner {
  public:
   explicit CXFA_Document(CXFA_FFNotify* notify);
   ~CXFA_Document() override;
diff --git a/xfa/fxfa/parser/cxfa_documentassembly.h b/xfa/fxfa/parser/cxfa_documentassembly.h
index c22d4a9..92cde65 100644
--- a/xfa/fxfa/parser/cxfa_documentassembly.h
+++ b/xfa/fxfa/parser/cxfa_documentassembly.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_DocumentAssembly : public CXFA_Node {
+class CXFA_DocumentAssembly final : public CXFA_Node {
  public:
   CXFA_DocumentAssembly(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_DocumentAssembly() override;
diff --git a/xfa/fxfa/parser/cxfa_draw.h b/xfa/fxfa/parser/cxfa_draw.h
index 603103b..c1b9006 100644
--- a/xfa/fxfa/parser/cxfa_draw.h
+++ b/xfa/fxfa/parser/cxfa_draw.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Draw : public CXFA_Node {
+class CXFA_Draw final : public CXFA_Node {
  public:
   CXFA_Draw(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Draw() override;
diff --git a/xfa/fxfa/parser/cxfa_driver.h b/xfa/fxfa/parser/cxfa_driver.h
index aee732e..f58e153 100644
--- a/xfa/fxfa/parser/cxfa_driver.h
+++ b/xfa/fxfa/parser/cxfa_driver.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Driver : public CXFA_Node {
+class CXFA_Driver final : public CXFA_Node {
  public:
   CXFA_Driver(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Driver() override;
diff --git a/xfa/fxfa/parser/cxfa_dsigdata.h b/xfa/fxfa/parser/cxfa_dsigdata.h
index 0cbaeb4..06e691c 100644
--- a/xfa/fxfa/parser/cxfa_dsigdata.h
+++ b/xfa/fxfa/parser/cxfa_dsigdata.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_DSigData : public CXFA_Node {
+class CXFA_DSigData final : public CXFA_Node {
  public:
   CXFA_DSigData(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_DSigData() override;
diff --git a/xfa/fxfa/parser/cxfa_duplexoption.h b/xfa/fxfa/parser/cxfa_duplexoption.h
index 69034ce..5bf8e50 100644
--- a/xfa/fxfa/parser/cxfa_duplexoption.h
+++ b/xfa/fxfa/parser/cxfa_duplexoption.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_DuplexOption : public CXFA_Node {
+class CXFA_DuplexOption final : public CXFA_Node {
  public:
   CXFA_DuplexOption(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_DuplexOption() override;
diff --git a/xfa/fxfa/parser/cxfa_dynamicrender.h b/xfa/fxfa/parser/cxfa_dynamicrender.h
index f7c54fa..78b75a7 100644
--- a/xfa/fxfa/parser/cxfa_dynamicrender.h
+++ b/xfa/fxfa/parser/cxfa_dynamicrender.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_DynamicRender : public CXFA_Node {
+class CXFA_DynamicRender final : public CXFA_Node {
  public:
   CXFA_DynamicRender(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_DynamicRender() override;
diff --git a/xfa/fxfa/parser/cxfa_edge.h b/xfa/fxfa/parser/cxfa_edge.h
index 36fee55..79c7f14 100644
--- a/xfa/fxfa/parser/cxfa_edge.h
+++ b/xfa/fxfa/parser/cxfa_edge.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_stroke.h"
 
-class CXFA_Edge : public CXFA_Stroke {
+class CXFA_Edge final : public CXFA_Stroke {
  public:
   static constexpr FX_ARGB kDefaultColor = 0xFF000000;
 
diff --git a/xfa/fxfa/parser/cxfa_effectiveinputpolicy.h b/xfa/fxfa/parser/cxfa_effectiveinputpolicy.h
index 52a60a4..4f4fb8e 100644
--- a/xfa/fxfa/parser/cxfa_effectiveinputpolicy.h
+++ b/xfa/fxfa/parser/cxfa_effectiveinputpolicy.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_EffectiveInputPolicy : public CXFA_Node {
+class CXFA_EffectiveInputPolicy final : public CXFA_Node {
  public:
   CXFA_EffectiveInputPolicy(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_EffectiveInputPolicy() override;
diff --git a/xfa/fxfa/parser/cxfa_effectiveoutputpolicy.h b/xfa/fxfa/parser/cxfa_effectiveoutputpolicy.h
index b2317d5..9b15a47 100644
--- a/xfa/fxfa/parser/cxfa_effectiveoutputpolicy.h
+++ b/xfa/fxfa/parser/cxfa_effectiveoutputpolicy.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_EffectiveOutputPolicy : public CXFA_Node {
+class CXFA_EffectiveOutputPolicy final : public CXFA_Node {
  public:
   CXFA_EffectiveOutputPolicy(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_EffectiveOutputPolicy() override;
diff --git a/xfa/fxfa/parser/cxfa_embed.h b/xfa/fxfa/parser/cxfa_embed.h
index d130840..8772b30 100644
--- a/xfa/fxfa/parser/cxfa_embed.h
+++ b/xfa/fxfa/parser/cxfa_embed.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Embed : public CXFA_Node {
+class CXFA_Embed final : public CXFA_Node {
  public:
   CXFA_Embed(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Embed() override;
diff --git a/xfa/fxfa/parser/cxfa_encoding.h b/xfa/fxfa/parser/cxfa_encoding.h
index ad41b01..b98ea21 100644
--- a/xfa/fxfa/parser/cxfa_encoding.h
+++ b/xfa/fxfa/parser/cxfa_encoding.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Encoding : public CXFA_Node {
+class CXFA_Encoding final : public CXFA_Node {
  public:
   CXFA_Encoding(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Encoding() override;
diff --git a/xfa/fxfa/parser/cxfa_encodings.h b/xfa/fxfa/parser/cxfa_encodings.h
index d3876de..3e8de09 100644
--- a/xfa/fxfa/parser/cxfa_encodings.h
+++ b/xfa/fxfa/parser/cxfa_encodings.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Encodings : public CXFA_Node {
+class CXFA_Encodings final : public CXFA_Node {
  public:
   CXFA_Encodings(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Encodings() override;
diff --git a/xfa/fxfa/parser/cxfa_encrypt.h b/xfa/fxfa/parser/cxfa_encrypt.h
index 4968db6..afb74b4 100644
--- a/xfa/fxfa/parser/cxfa_encrypt.h
+++ b/xfa/fxfa/parser/cxfa_encrypt.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Encrypt : public CXFA_Node {
+class CXFA_Encrypt final : public CXFA_Node {
  public:
   CXFA_Encrypt(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Encrypt() override;
diff --git a/xfa/fxfa/parser/cxfa_encryption.h b/xfa/fxfa/parser/cxfa_encryption.h
index f2028ee..1bcf48f 100644
--- a/xfa/fxfa/parser/cxfa_encryption.h
+++ b/xfa/fxfa/parser/cxfa_encryption.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Encryption : public CXFA_Node {
+class CXFA_Encryption final : public CXFA_Node {
  public:
   CXFA_Encryption(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Encryption() override;
diff --git a/xfa/fxfa/parser/cxfa_encryptionlevel.h b/xfa/fxfa/parser/cxfa_encryptionlevel.h
index 1bb80ce..faf300b 100644
--- a/xfa/fxfa/parser/cxfa_encryptionlevel.h
+++ b/xfa/fxfa/parser/cxfa_encryptionlevel.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_EncryptionLevel : public CXFA_Node {
+class CXFA_EncryptionLevel final : public CXFA_Node {
  public:
   CXFA_EncryptionLevel(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_EncryptionLevel() override;
diff --git a/xfa/fxfa/parser/cxfa_encryptionmethod.h b/xfa/fxfa/parser/cxfa_encryptionmethod.h
index 2c86001..cae708f 100644
--- a/xfa/fxfa/parser/cxfa_encryptionmethod.h
+++ b/xfa/fxfa/parser/cxfa_encryptionmethod.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_EncryptionMethod : public CXFA_Node {
+class CXFA_EncryptionMethod final : public CXFA_Node {
  public:
   CXFA_EncryptionMethod(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_EncryptionMethod() override;
diff --git a/xfa/fxfa/parser/cxfa_encryptionmethods.h b/xfa/fxfa/parser/cxfa_encryptionmethods.h
index 9fcc0b5..825ee9f 100644
--- a/xfa/fxfa/parser/cxfa_encryptionmethods.h
+++ b/xfa/fxfa/parser/cxfa_encryptionmethods.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_EncryptionMethods : public CXFA_Node {
+class CXFA_EncryptionMethods final : public CXFA_Node {
  public:
   CXFA_EncryptionMethods(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_EncryptionMethods() override;
diff --git a/xfa/fxfa/parser/cxfa_enforce.h b/xfa/fxfa/parser/cxfa_enforce.h
index 3ccd8b8..ec7d745 100644
--- a/xfa/fxfa/parser/cxfa_enforce.h
+++ b/xfa/fxfa/parser/cxfa_enforce.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Enforce : public CXFA_Node {
+class CXFA_Enforce final : public CXFA_Node {
  public:
   CXFA_Enforce(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Enforce() override;
diff --git a/xfa/fxfa/parser/cxfa_equate.h b/xfa/fxfa/parser/cxfa_equate.h
index 0a28182..fc1f8d6 100644
--- a/xfa/fxfa/parser/cxfa_equate.h
+++ b/xfa/fxfa/parser/cxfa_equate.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Equate : public CXFA_Node {
+class CXFA_Equate final : public CXFA_Node {
  public:
   CXFA_Equate(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Equate() override;
diff --git a/xfa/fxfa/parser/cxfa_equaterange.h b/xfa/fxfa/parser/cxfa_equaterange.h
index 86c86b1..56f05e1 100644
--- a/xfa/fxfa/parser/cxfa_equaterange.h
+++ b/xfa/fxfa/parser/cxfa_equaterange.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_EquateRange : public CXFA_Node {
+class CXFA_EquateRange final : public CXFA_Node {
  public:
   CXFA_EquateRange(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_EquateRange() override;
diff --git a/xfa/fxfa/parser/cxfa_era.h b/xfa/fxfa/parser/cxfa_era.h
index a46a574..e0ecdf7 100644
--- a/xfa/fxfa/parser/cxfa_era.h
+++ b/xfa/fxfa/parser/cxfa_era.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Era : public CXFA_Node {
+class CXFA_Era final : public CXFA_Node {
  public:
   CXFA_Era(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Era() override;
diff --git a/xfa/fxfa/parser/cxfa_eranames.h b/xfa/fxfa/parser/cxfa_eranames.h
index 4c8f788..468b658 100644
--- a/xfa/fxfa/parser/cxfa_eranames.h
+++ b/xfa/fxfa/parser/cxfa_eranames.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_EraNames : public CXFA_Node {
+class CXFA_EraNames final : public CXFA_Node {
  public:
   CXFA_EraNames(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_EraNames() override;
diff --git a/xfa/fxfa/parser/cxfa_event.h b/xfa/fxfa/parser/cxfa_event.h
index 6902b52..e7f5e1a 100644
--- a/xfa/fxfa/parser/cxfa_event.h
+++ b/xfa/fxfa/parser/cxfa_event.h
@@ -12,7 +12,7 @@
 class CXFA_Script;
 class CXFA_Submit;
 
-class CXFA_Event : public CXFA_Node {
+class CXFA_Event final : public CXFA_Node {
  public:
   CXFA_Event(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Event() override;
diff --git a/xfa/fxfa/parser/cxfa_exclgroup.h b/xfa/fxfa/parser/cxfa_exclgroup.h
index 5a3c8a3..390bb4a 100644
--- a/xfa/fxfa/parser/cxfa_exclgroup.h
+++ b/xfa/fxfa/parser/cxfa_exclgroup.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_ExclGroup : public CXFA_Node {
+class CXFA_ExclGroup final : public CXFA_Node {
  public:
   CXFA_ExclGroup(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_ExclGroup() override;
diff --git a/xfa/fxfa/parser/cxfa_exclude.h b/xfa/fxfa/parser/cxfa_exclude.h
index 0f78707..71f08fd 100644
--- a/xfa/fxfa/parser/cxfa_exclude.h
+++ b/xfa/fxfa/parser/cxfa_exclude.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Exclude : public CXFA_Node {
+class CXFA_Exclude final : public CXFA_Node {
  public:
   CXFA_Exclude(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Exclude() override;
diff --git a/xfa/fxfa/parser/cxfa_excludens.h b/xfa/fxfa/parser/cxfa_excludens.h
index c5cb548..9ce2e69 100644
--- a/xfa/fxfa/parser/cxfa_excludens.h
+++ b/xfa/fxfa/parser/cxfa_excludens.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_ExcludeNS : public CXFA_Node {
+class CXFA_ExcludeNS final : public CXFA_Node {
  public:
   CXFA_ExcludeNS(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_ExcludeNS() override;
diff --git a/xfa/fxfa/parser/cxfa_exdata.h b/xfa/fxfa/parser/cxfa_exdata.h
index 8eb3caf..8adf028 100644
--- a/xfa/fxfa/parser/cxfa_exdata.h
+++ b/xfa/fxfa/parser/cxfa_exdata.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_ExData : public CXFA_Node {
+class CXFA_ExData final : public CXFA_Node {
  public:
   CXFA_ExData(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_ExData() override;
diff --git a/xfa/fxfa/parser/cxfa_execute.h b/xfa/fxfa/parser/cxfa_execute.h
index 2d9f158..63fd18b 100644
--- a/xfa/fxfa/parser/cxfa_execute.h
+++ b/xfa/fxfa/parser/cxfa_execute.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Execute : public CXFA_Node {
+class CXFA_Execute final : public CXFA_Node {
  public:
   CXFA_Execute(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Execute() override;
diff --git a/xfa/fxfa/parser/cxfa_exobject.h b/xfa/fxfa/parser/cxfa_exobject.h
index b4d7de9..79ffdb9 100644
--- a/xfa/fxfa/parser/cxfa_exobject.h
+++ b/xfa/fxfa/parser/cxfa_exobject.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_ExObject : public CXFA_Node {
+class CXFA_ExObject final : public CXFA_Node {
  public:
   CXFA_ExObject(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_ExObject() override;
diff --git a/xfa/fxfa/parser/cxfa_extras.h b/xfa/fxfa/parser/cxfa_extras.h
index 3b3c6b4..82108d0 100644
--- a/xfa/fxfa/parser/cxfa_extras.h
+++ b/xfa/fxfa/parser/cxfa_extras.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Extras : public CXFA_Node {
+class CXFA_Extras final : public CXFA_Node {
  public:
   CXFA_Extras(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Extras() override;
diff --git a/xfa/fxfa/parser/cxfa_field.h b/xfa/fxfa/parser/cxfa_field.h
index b2f7a05..e29cdd7 100644
--- a/xfa/fxfa/parser/cxfa_field.h
+++ b/xfa/fxfa/parser/cxfa_field.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Field : public CXFA_Node {
+class CXFA_Field final : public CXFA_Node {
  public:
   CXFA_Field(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Field() override;
diff --git a/xfa/fxfa/parser/cxfa_fill.h b/xfa/fxfa/parser/cxfa_fill.h
index 1ffdcdf..05fede9 100644
--- a/xfa/fxfa/parser/cxfa_fill.h
+++ b/xfa/fxfa/parser/cxfa_fill.h
@@ -18,7 +18,7 @@
 class CXFA_Radial;
 class CXFA_Stipple;
 
-class CXFA_Fill : public CXFA_Node {
+class CXFA_Fill final : public CXFA_Node {
  public:
   CXFA_Fill(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Fill() override;
diff --git a/xfa/fxfa/parser/cxfa_filter.h b/xfa/fxfa/parser/cxfa_filter.h
index 2ac069a..033d97c 100644
--- a/xfa/fxfa/parser/cxfa_filter.h
+++ b/xfa/fxfa/parser/cxfa_filter.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Filter : public CXFA_Node {
+class CXFA_Filter final : public CXFA_Node {
  public:
   CXFA_Filter(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Filter() override;
diff --git a/xfa/fxfa/parser/cxfa_fliplabel.h b/xfa/fxfa/parser/cxfa_fliplabel.h
index dac0564..e3f8165 100644
--- a/xfa/fxfa/parser/cxfa_fliplabel.h
+++ b/xfa/fxfa/parser/cxfa_fliplabel.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_FlipLabel : public CXFA_Node {
+class CXFA_FlipLabel final : public CXFA_Node {
  public:
   CXFA_FlipLabel(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_FlipLabel() override;
diff --git a/xfa/fxfa/parser/cxfa_float.h b/xfa/fxfa/parser/cxfa_float.h
index f93b3dd..a3fc1ae 100644
--- a/xfa/fxfa/parser/cxfa_float.h
+++ b/xfa/fxfa/parser/cxfa_float.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Float : public CXFA_Node {
+class CXFA_Float final : public CXFA_Node {
  public:
   CXFA_Float(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Float() override;
diff --git a/xfa/fxfa/parser/cxfa_font.h b/xfa/fxfa/parser/cxfa_font.h
index 346be76..fb80a32 100644
--- a/xfa/fxfa/parser/cxfa_font.h
+++ b/xfa/fxfa/parser/cxfa_font.h
@@ -10,7 +10,7 @@
 #include "core/fxge/fx_dib.h"
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Font : public CXFA_Node {
+class CXFA_Font final : public CXFA_Node {
  public:
   CXFA_Font(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Font() override;
diff --git a/xfa/fxfa/parser/cxfa_fontinfo.h b/xfa/fxfa/parser/cxfa_fontinfo.h
index f9facd8..b798c55 100644
--- a/xfa/fxfa/parser/cxfa_fontinfo.h
+++ b/xfa/fxfa/parser/cxfa_fontinfo.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_FontInfo : public CXFA_Node {
+class CXFA_FontInfo final : public CXFA_Node {
  public:
   CXFA_FontInfo(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_FontInfo() override;
diff --git a/xfa/fxfa/parser/cxfa_form.h b/xfa/fxfa/parser/cxfa_form.h
index 39d1d90..a0e2f32 100644
--- a/xfa/fxfa/parser/cxfa_form.h
+++ b/xfa/fxfa/parser/cxfa_form.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Form : public CXFA_Node {
+class CXFA_Form final : public CXFA_Node {
  public:
   CXFA_Form(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Form() override;
diff --git a/xfa/fxfa/parser/cxfa_format.h b/xfa/fxfa/parser/cxfa_format.h
index 3e31716..7e74a1c 100644
--- a/xfa/fxfa/parser/cxfa_format.h
+++ b/xfa/fxfa/parser/cxfa_format.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Format : public CXFA_Node {
+class CXFA_Format final : public CXFA_Node {
  public:
   CXFA_Format(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Format() override;
diff --git a/xfa/fxfa/parser/cxfa_formfieldfilling.h b/xfa/fxfa/parser/cxfa_formfieldfilling.h
index 77f1b8f..f9e7447 100644
--- a/xfa/fxfa/parser/cxfa_formfieldfilling.h
+++ b/xfa/fxfa/parser/cxfa_formfieldfilling.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_FormFieldFilling : public CXFA_Node {
+class CXFA_FormFieldFilling final : public CXFA_Node {
  public:
   CXFA_FormFieldFilling(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_FormFieldFilling() override;
diff --git a/xfa/fxfa/parser/cxfa_groupparent.h b/xfa/fxfa/parser/cxfa_groupparent.h
index 7de296c..eb63a6a 100644
--- a/xfa/fxfa/parser/cxfa_groupparent.h
+++ b/xfa/fxfa/parser/cxfa_groupparent.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_GroupParent : public CXFA_Node {
+class CXFA_GroupParent final : public CXFA_Node {
  public:
   CXFA_GroupParent(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_GroupParent() override;
diff --git a/xfa/fxfa/parser/cxfa_handler.h b/xfa/fxfa/parser/cxfa_handler.h
index e575c0b..1ab1c4d 100644
--- a/xfa/fxfa/parser/cxfa_handler.h
+++ b/xfa/fxfa/parser/cxfa_handler.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Handler : public CXFA_Node {
+class CXFA_Handler final : public CXFA_Node {
  public:
   CXFA_Handler(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Handler() override;
diff --git a/xfa/fxfa/parser/cxfa_hyphenation.h b/xfa/fxfa/parser/cxfa_hyphenation.h
index 2601c5f..77b49e9 100644
--- a/xfa/fxfa/parser/cxfa_hyphenation.h
+++ b/xfa/fxfa/parser/cxfa_hyphenation.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Hyphenation : public CXFA_Node {
+class CXFA_Hyphenation final : public CXFA_Node {
  public:
   CXFA_Hyphenation(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Hyphenation() override;
diff --git a/xfa/fxfa/parser/cxfa_ifempty.h b/xfa/fxfa/parser/cxfa_ifempty.h
index 3c3c1b4..401faa7 100644
--- a/xfa/fxfa/parser/cxfa_ifempty.h
+++ b/xfa/fxfa/parser/cxfa_ifempty.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_IfEmpty : public CXFA_Node {
+class CXFA_IfEmpty final : public CXFA_Node {
  public:
   CXFA_IfEmpty(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_IfEmpty() override;
diff --git a/xfa/fxfa/parser/cxfa_image.h b/xfa/fxfa/parser/cxfa_image.h
index 3670863..01f12eb 100644
--- a/xfa/fxfa/parser/cxfa_image.h
+++ b/xfa/fxfa/parser/cxfa_image.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Image : public CXFA_Node {
+class CXFA_Image final : public CXFA_Node {
  public:
   CXFA_Image(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Image() override;
diff --git a/xfa/fxfa/parser/cxfa_imageedit.h b/xfa/fxfa/parser/cxfa_imageedit.h
index 0a950d8..884c219 100644
--- a/xfa/fxfa/parser/cxfa_imageedit.h
+++ b/xfa/fxfa/parser/cxfa_imageedit.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_ImageEdit : public CXFA_Node {
+class CXFA_ImageEdit final : public CXFA_Node {
  public:
   CXFA_ImageEdit(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_ImageEdit() override;
diff --git a/xfa/fxfa/parser/cxfa_includexdpcontent.h b/xfa/fxfa/parser/cxfa_includexdpcontent.h
index 309a7c6..15c5bbe 100644
--- a/xfa/fxfa/parser/cxfa_includexdpcontent.h
+++ b/xfa/fxfa/parser/cxfa_includexdpcontent.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_IncludeXDPContent : public CXFA_Node {
+class CXFA_IncludeXDPContent final : public CXFA_Node {
  public:
   CXFA_IncludeXDPContent(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_IncludeXDPContent() override;
diff --git a/xfa/fxfa/parser/cxfa_incrementalload.h b/xfa/fxfa/parser/cxfa_incrementalload.h
index 9ea8f29..253a2ae 100644
--- a/xfa/fxfa/parser/cxfa_incrementalload.h
+++ b/xfa/fxfa/parser/cxfa_incrementalload.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_IncrementalLoad : public CXFA_Node {
+class CXFA_IncrementalLoad final : public CXFA_Node {
  public:
   CXFA_IncrementalLoad(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_IncrementalLoad() override;
diff --git a/xfa/fxfa/parser/cxfa_incrementalmerge.h b/xfa/fxfa/parser/cxfa_incrementalmerge.h
index c8e6554..4ec65af 100644
--- a/xfa/fxfa/parser/cxfa_incrementalmerge.h
+++ b/xfa/fxfa/parser/cxfa_incrementalmerge.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_IncrementalMerge : public CXFA_Node {
+class CXFA_IncrementalMerge final : public CXFA_Node {
  public:
   CXFA_IncrementalMerge(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_IncrementalMerge() override;
diff --git a/xfa/fxfa/parser/cxfa_insert.h b/xfa/fxfa/parser/cxfa_insert.h
index 92579c3..e157a82 100644
--- a/xfa/fxfa/parser/cxfa_insert.h
+++ b/xfa/fxfa/parser/cxfa_insert.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Insert : public CXFA_Node {
+class CXFA_Insert final : public CXFA_Node {
  public:
   CXFA_Insert(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Insert() override;
diff --git a/xfa/fxfa/parser/cxfa_instancemanager.h b/xfa/fxfa/parser/cxfa_instancemanager.h
index 1910b92..3ace0e9 100644
--- a/xfa/fxfa/parser/cxfa_instancemanager.h
+++ b/xfa/fxfa/parser/cxfa_instancemanager.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_InstanceManager : public CXFA_Node {
+class CXFA_InstanceManager final : public CXFA_Node {
  public:
   CXFA_InstanceManager(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_InstanceManager() override;
diff --git a/xfa/fxfa/parser/cxfa_integer.h b/xfa/fxfa/parser/cxfa_integer.h
index 2e5631d..ac94133 100644
--- a/xfa/fxfa/parser/cxfa_integer.h
+++ b/xfa/fxfa/parser/cxfa_integer.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Integer : public CXFA_Node {
+class CXFA_Integer final : public CXFA_Node {
  public:
   CXFA_Integer(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Integer() override;
diff --git a/xfa/fxfa/parser/cxfa_interactive.h b/xfa/fxfa/parser/cxfa_interactive.h
index 69f2918..12db0bf 100644
--- a/xfa/fxfa/parser/cxfa_interactive.h
+++ b/xfa/fxfa/parser/cxfa_interactive.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Interactive : public CXFA_Node {
+class CXFA_Interactive final : public CXFA_Node {
  public:
   CXFA_Interactive(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Interactive() override;
diff --git a/xfa/fxfa/parser/cxfa_issuers.h b/xfa/fxfa/parser/cxfa_issuers.h
index 6b94f15..11ba8b4 100644
--- a/xfa/fxfa/parser/cxfa_issuers.h
+++ b/xfa/fxfa/parser/cxfa_issuers.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Issuers : public CXFA_Node {
+class CXFA_Issuers final : public CXFA_Node {
  public:
   CXFA_Issuers(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Issuers() override;
diff --git a/xfa/fxfa/parser/cxfa_items.h b/xfa/fxfa/parser/cxfa_items.h
index 586fabd..609b028 100644
--- a/xfa/fxfa/parser/cxfa_items.h
+++ b/xfa/fxfa/parser/cxfa_items.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Items : public CXFA_Node {
+class CXFA_Items final : public CXFA_Node {
  public:
   CXFA_Items(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Items() override;
diff --git a/xfa/fxfa/parser/cxfa_jog.h b/xfa/fxfa/parser/cxfa_jog.h
index 266ccd1..a40a488 100644
--- a/xfa/fxfa/parser/cxfa_jog.h
+++ b/xfa/fxfa/parser/cxfa_jog.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Jog : public CXFA_Node {
+class CXFA_Jog final : public CXFA_Node {
  public:
   CXFA_Jog(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Jog() override;
diff --git a/xfa/fxfa/parser/cxfa_keep.h b/xfa/fxfa/parser/cxfa_keep.h
index 7d53f96..0d4a2e0 100644
--- a/xfa/fxfa/parser/cxfa_keep.h
+++ b/xfa/fxfa/parser/cxfa_keep.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Keep : public CXFA_Node {
+class CXFA_Keep final : public CXFA_Node {
  public:
   CXFA_Keep(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Keep() override;
diff --git a/xfa/fxfa/parser/cxfa_keyusage.h b/xfa/fxfa/parser/cxfa_keyusage.h
index b258074..3409e3f 100644
--- a/xfa/fxfa/parser/cxfa_keyusage.h
+++ b/xfa/fxfa/parser/cxfa_keyusage.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_KeyUsage : public CXFA_Node {
+class CXFA_KeyUsage final : public CXFA_Node {
  public:
   CXFA_KeyUsage(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_KeyUsage() override;
diff --git a/xfa/fxfa/parser/cxfa_labelprinter.h b/xfa/fxfa/parser/cxfa_labelprinter.h
index e3f5d3b..74a5e82 100644
--- a/xfa/fxfa/parser/cxfa_labelprinter.h
+++ b/xfa/fxfa/parser/cxfa_labelprinter.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_LabelPrinter : public CXFA_Node {
+class CXFA_LabelPrinter final : public CXFA_Node {
  public:
   CXFA_LabelPrinter(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_LabelPrinter() override;
diff --git a/xfa/fxfa/parser/cxfa_layout.h b/xfa/fxfa/parser/cxfa_layout.h
index 93e069e..ad25efa 100644
--- a/xfa/fxfa/parser/cxfa_layout.h
+++ b/xfa/fxfa/parser/cxfa_layout.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Layout : public CXFA_Node {
+class CXFA_Layout final : public CXFA_Node {
  public:
   CXFA_Layout(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Layout() override;
diff --git a/xfa/fxfa/parser/cxfa_level.h b/xfa/fxfa/parser/cxfa_level.h
index abdd048..8cc03dc 100644
--- a/xfa/fxfa/parser/cxfa_level.h
+++ b/xfa/fxfa/parser/cxfa_level.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Level : public CXFA_Node {
+class CXFA_Level final : public CXFA_Node {
  public:
   CXFA_Level(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Level() override;
diff --git a/xfa/fxfa/parser/cxfa_line.h b/xfa/fxfa/parser/cxfa_line.h
index 18faacd..98a132d 100644
--- a/xfa/fxfa/parser/cxfa_line.h
+++ b/xfa/fxfa/parser/cxfa_line.h
@@ -11,7 +11,7 @@
 
 class CXFA_Edge;
 
-class CXFA_Line : public CXFA_Node {
+class CXFA_Line final : public CXFA_Node {
  public:
   CXFA_Line(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Line() override;
diff --git a/xfa/fxfa/parser/cxfa_linear.h b/xfa/fxfa/parser/cxfa_linear.h
index bb55f80..1315f9a 100644
--- a/xfa/fxfa/parser/cxfa_linear.h
+++ b/xfa/fxfa/parser/cxfa_linear.h
@@ -14,7 +14,7 @@
 class CXFA_Color;
 class CXFA_Graphics;
 
-class CXFA_Linear : public CXFA_Node {
+class CXFA_Linear final : public CXFA_Node {
  public:
   static constexpr XFA_AttributeEnum kDefaultType = XFA_AttributeEnum::ToRight;
 
diff --git a/xfa/fxfa/parser/cxfa_linearized.h b/xfa/fxfa/parser/cxfa_linearized.h
index df7846e..d2fe2d7 100644
--- a/xfa/fxfa/parser/cxfa_linearized.h
+++ b/xfa/fxfa/parser/cxfa_linearized.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Linearized : public CXFA_Node {
+class CXFA_Linearized final : public CXFA_Node {
  public:
   CXFA_Linearized(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Linearized() override;
diff --git a/xfa/fxfa/parser/cxfa_locale.h b/xfa/fxfa/parser/cxfa_locale.h
index 3a7e83d..67bee33 100644
--- a/xfa/fxfa/parser/cxfa_locale.h
+++ b/xfa/fxfa/parser/cxfa_locale.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Locale : public CXFA_Node {
+class CXFA_Locale final : public CXFA_Node {
  public:
   CXFA_Locale(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Locale() override;
diff --git a/xfa/fxfa/parser/cxfa_localeset.h b/xfa/fxfa/parser/cxfa_localeset.h
index 1d65ad1..dc6521a 100644
--- a/xfa/fxfa/parser/cxfa_localeset.h
+++ b/xfa/fxfa/parser/cxfa_localeset.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_LocaleSet : public CXFA_Node {
+class CXFA_LocaleSet final : public CXFA_Node {
  public:
   CXFA_LocaleSet(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_LocaleSet() override;
diff --git a/xfa/fxfa/parser/cxfa_lockdocument.h b/xfa/fxfa/parser/cxfa_lockdocument.h
index 025031a..1328d34 100644
--- a/xfa/fxfa/parser/cxfa_lockdocument.h
+++ b/xfa/fxfa/parser/cxfa_lockdocument.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_LockDocument : public CXFA_Node {
+class CXFA_LockDocument final : public CXFA_Node {
  public:
   CXFA_LockDocument(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_LockDocument() override;
diff --git a/xfa/fxfa/parser/cxfa_log.h b/xfa/fxfa/parser/cxfa_log.h
index 17fd290..27173cd 100644
--- a/xfa/fxfa/parser/cxfa_log.h
+++ b/xfa/fxfa/parser/cxfa_log.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Log : public CXFA_Node {
+class CXFA_Log final : public CXFA_Node {
  public:
   CXFA_Log(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Log() override;
diff --git a/xfa/fxfa/parser/cxfa_manifest.h b/xfa/fxfa/parser/cxfa_manifest.h
index a13cdac..d5ca05f 100644
--- a/xfa/fxfa/parser/cxfa_manifest.h
+++ b/xfa/fxfa/parser/cxfa_manifest.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Manifest : public CXFA_Node {
+class CXFA_Manifest final : public CXFA_Node {
  public:
   CXFA_Manifest(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Manifest() override;
diff --git a/xfa/fxfa/parser/cxfa_map.h b/xfa/fxfa/parser/cxfa_map.h
index c49568f..f8e0797 100644
--- a/xfa/fxfa/parser/cxfa_map.h
+++ b/xfa/fxfa/parser/cxfa_map.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Map : public CXFA_Node {
+class CXFA_Map final : public CXFA_Node {
  public:
   CXFA_Map(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Map() override;
diff --git a/xfa/fxfa/parser/cxfa_margin.h b/xfa/fxfa/parser/cxfa_margin.h
index e7f95b6..813bdfe 100644
--- a/xfa/fxfa/parser/cxfa_margin.h
+++ b/xfa/fxfa/parser/cxfa_margin.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Margin : public CXFA_Node {
+class CXFA_Margin final : public CXFA_Node {
  public:
   CXFA_Margin(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Margin() override;
diff --git a/xfa/fxfa/parser/cxfa_mdp.h b/xfa/fxfa/parser/cxfa_mdp.h
index 0ae626d..79b1480 100644
--- a/xfa/fxfa/parser/cxfa_mdp.h
+++ b/xfa/fxfa/parser/cxfa_mdp.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Mdp : public CXFA_Node {
+class CXFA_Mdp final : public CXFA_Node {
  public:
   CXFA_Mdp(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Mdp() override;
diff --git a/xfa/fxfa/parser/cxfa_medium.h b/xfa/fxfa/parser/cxfa_medium.h
index b9b9c5d..49be83f 100644
--- a/xfa/fxfa/parser/cxfa_medium.h
+++ b/xfa/fxfa/parser/cxfa_medium.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Medium : public CXFA_Node {
+class CXFA_Medium final : public CXFA_Node {
  public:
   CXFA_Medium(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Medium() override;
diff --git a/xfa/fxfa/parser/cxfa_mediuminfo.h b/xfa/fxfa/parser/cxfa_mediuminfo.h
index da100ea..65e58df 100644
--- a/xfa/fxfa/parser/cxfa_mediuminfo.h
+++ b/xfa/fxfa/parser/cxfa_mediuminfo.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_MediumInfo : public CXFA_Node {
+class CXFA_MediumInfo final : public CXFA_Node {
  public:
   CXFA_MediumInfo(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_MediumInfo() override;
diff --git a/xfa/fxfa/parser/cxfa_meridiem.h b/xfa/fxfa/parser/cxfa_meridiem.h
index 30bd4b0..40c956c 100644
--- a/xfa/fxfa/parser/cxfa_meridiem.h
+++ b/xfa/fxfa/parser/cxfa_meridiem.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Meridiem : public CXFA_Node {
+class CXFA_Meridiem final : public CXFA_Node {
  public:
   CXFA_Meridiem(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Meridiem() override;
diff --git a/xfa/fxfa/parser/cxfa_meridiemnames.h b/xfa/fxfa/parser/cxfa_meridiemnames.h
index 8cade21..00fbbb7 100644
--- a/xfa/fxfa/parser/cxfa_meridiemnames.h
+++ b/xfa/fxfa/parser/cxfa_meridiemnames.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_MeridiemNames : public CXFA_Node {
+class CXFA_MeridiemNames final : public CXFA_Node {
  public:
   CXFA_MeridiemNames(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_MeridiemNames() override;
diff --git a/xfa/fxfa/parser/cxfa_message.h b/xfa/fxfa/parser/cxfa_message.h
index f172e06..81cb751 100644
--- a/xfa/fxfa/parser/cxfa_message.h
+++ b/xfa/fxfa/parser/cxfa_message.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Message : public CXFA_Node {
+class CXFA_Message final : public CXFA_Node {
  public:
   CXFA_Message(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Message() override;
diff --git a/xfa/fxfa/parser/cxfa_messaging.h b/xfa/fxfa/parser/cxfa_messaging.h
index 48d16b3..86e16f3 100644
--- a/xfa/fxfa/parser/cxfa_messaging.h
+++ b/xfa/fxfa/parser/cxfa_messaging.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Messaging : public CXFA_Node {
+class CXFA_Messaging final : public CXFA_Node {
  public:
   CXFA_Messaging(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Messaging() override;
diff --git a/xfa/fxfa/parser/cxfa_mode.h b/xfa/fxfa/parser/cxfa_mode.h
index 1dfd426..46675db 100644
--- a/xfa/fxfa/parser/cxfa_mode.h
+++ b/xfa/fxfa/parser/cxfa_mode.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Mode : public CXFA_Node {
+class CXFA_Mode final : public CXFA_Node {
  public:
   CXFA_Mode(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Mode() override;
diff --git a/xfa/fxfa/parser/cxfa_modifyannots.h b/xfa/fxfa/parser/cxfa_modifyannots.h
index 4e10921..c92b05b 100644
--- a/xfa/fxfa/parser/cxfa_modifyannots.h
+++ b/xfa/fxfa/parser/cxfa_modifyannots.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_ModifyAnnots : public CXFA_Node {
+class CXFA_ModifyAnnots final : public CXFA_Node {
  public:
   CXFA_ModifyAnnots(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_ModifyAnnots() override;
diff --git a/xfa/fxfa/parser/cxfa_month.h b/xfa/fxfa/parser/cxfa_month.h
index 69361f5..f63095d 100644
--- a/xfa/fxfa/parser/cxfa_month.h
+++ b/xfa/fxfa/parser/cxfa_month.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Month : public CXFA_Node {
+class CXFA_Month final : public CXFA_Node {
  public:
   CXFA_Month(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Month() override;
diff --git a/xfa/fxfa/parser/cxfa_monthnames.h b/xfa/fxfa/parser/cxfa_monthnames.h
index f95512b..cf0c331 100644
--- a/xfa/fxfa/parser/cxfa_monthnames.h
+++ b/xfa/fxfa/parser/cxfa_monthnames.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_MonthNames : public CXFA_Node {
+class CXFA_MonthNames final : public CXFA_Node {
  public:
   CXFA_MonthNames(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_MonthNames() override;
diff --git a/xfa/fxfa/parser/cxfa_msgid.h b/xfa/fxfa/parser/cxfa_msgid.h
index 333085a..4c166d7 100644
--- a/xfa/fxfa/parser/cxfa_msgid.h
+++ b/xfa/fxfa/parser/cxfa_msgid.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_MsgId : public CXFA_Node {
+class CXFA_MsgId final : public CXFA_Node {
  public:
   CXFA_MsgId(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_MsgId() override;
diff --git a/xfa/fxfa/parser/cxfa_nameattr.h b/xfa/fxfa/parser/cxfa_nameattr.h
index 05514c0..f346bf6 100644
--- a/xfa/fxfa/parser/cxfa_nameattr.h
+++ b/xfa/fxfa/parser/cxfa_nameattr.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_NameAttr : public CXFA_Node {
+class CXFA_NameAttr final : public CXFA_Node {
  public:
   CXFA_NameAttr(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_NameAttr() override;
diff --git a/xfa/fxfa/parser/cxfa_neverembed.h b/xfa/fxfa/parser/cxfa_neverembed.h
index 11ec928..70f90a3 100644
--- a/xfa/fxfa/parser/cxfa_neverembed.h
+++ b/xfa/fxfa/parser/cxfa_neverembed.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_NeverEmbed : public CXFA_Node {
+class CXFA_NeverEmbed final : public CXFA_Node {
  public:
   CXFA_NeverEmbed(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_NeverEmbed() override;
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index 7e582c0..7d707d0 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -418,7 +418,7 @@
   float m_fWidgetHeight = -1.0f;
 };
 
-class CXFA_TextLayoutData : public CXFA_WidgetLayoutData {
+class CXFA_TextLayoutData final : public CXFA_WidgetLayoutData {
  public:
   CXFA_TextLayoutData() = default;
   ~CXFA_TextLayoutData() override = default;
@@ -443,7 +443,7 @@
   std::unique_ptr<CXFA_TextProvider> m_pTextProvider;
 };
 
-class CXFA_ImageLayoutData : public CXFA_WidgetLayoutData {
+class CXFA_ImageLayoutData final : public CXFA_WidgetLayoutData {
  public:
   CXFA_ImageLayoutData() = default;
   ~CXFA_ImageLayoutData() override = default;
@@ -503,7 +503,7 @@
   std::vector<float> m_FieldSplitArray;
 };
 
-class CXFA_TextEditData : public CXFA_FieldLayoutData {
+class CXFA_TextEditData final : public CXFA_FieldLayoutData {
  public:
   CXFA_TextEditData() = default;
   ~CXFA_TextEditData() override = default;
@@ -511,7 +511,7 @@
   CXFA_TextEditData* AsTextEditData() override { return this; }
 };
 
-class CXFA_ImageEditData : public CXFA_FieldLayoutData {
+class CXFA_ImageEditData final : public CXFA_FieldLayoutData {
  public:
   CXFA_ImageEditData() = default;
   ~CXFA_ImageEditData() override = default;
diff --git a/xfa/fxfa/parser/cxfa_node_unittest.cpp b/xfa/fxfa/parser/cxfa_node_unittest.cpp
index 81e2189..7b3c09d 100644
--- a/xfa/fxfa/parser/cxfa_node_unittest.cpp
+++ b/xfa/fxfa/parser/cxfa_node_unittest.cpp
@@ -10,7 +10,7 @@
 
 namespace {
 
-class TestNode : public CXFA_Node {
+class TestNode final : public CXFA_Node {
  public:
   explicit TestNode(CXFA_Document* doc)
       : CXFA_Node(doc,
diff --git a/xfa/fxfa/parser/cxfa_nodelocale.h b/xfa/fxfa/parser/cxfa_nodelocale.h
index e802cd9..da6846b 100644
--- a/xfa/fxfa/parser/cxfa_nodelocale.h
+++ b/xfa/fxfa/parser/cxfa_nodelocale.h
@@ -16,7 +16,7 @@
 
 WideString XFA_PatternToString(FX_LOCALENUMSUBCATEGORY category);
 
-class CXFA_NodeLocale : public LocaleIface {
+class CXFA_NodeLocale final : public LocaleIface {
  public:
   explicit CXFA_NodeLocale(CXFA_Node* pLocale);
   ~CXFA_NodeLocale() override;
diff --git a/xfa/fxfa/parser/cxfa_numberofcopies.h b/xfa/fxfa/parser/cxfa_numberofcopies.h
index 04bb599..3215bb3 100644
--- a/xfa/fxfa/parser/cxfa_numberofcopies.h
+++ b/xfa/fxfa/parser/cxfa_numberofcopies.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_NumberOfCopies : public CXFA_Node {
+class CXFA_NumberOfCopies final : public CXFA_Node {
  public:
   CXFA_NumberOfCopies(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_NumberOfCopies() override;
diff --git a/xfa/fxfa/parser/cxfa_numberpattern.h b/xfa/fxfa/parser/cxfa_numberpattern.h
index 0a4fabd..5c42d46 100644
--- a/xfa/fxfa/parser/cxfa_numberpattern.h
+++ b/xfa/fxfa/parser/cxfa_numberpattern.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_NumberPattern : public CXFA_Node {
+class CXFA_NumberPattern final : public CXFA_Node {
  public:
   CXFA_NumberPattern(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_NumberPattern() override;
diff --git a/xfa/fxfa/parser/cxfa_numberpatterns.h b/xfa/fxfa/parser/cxfa_numberpatterns.h
index ef4f889..58c8cb6 100644
--- a/xfa/fxfa/parser/cxfa_numberpatterns.h
+++ b/xfa/fxfa/parser/cxfa_numberpatterns.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_NumberPatterns : public CXFA_Node {
+class CXFA_NumberPatterns final : public CXFA_Node {
  public:
   CXFA_NumberPatterns(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_NumberPatterns() override;
diff --git a/xfa/fxfa/parser/cxfa_numbersymbol.h b/xfa/fxfa/parser/cxfa_numbersymbol.h
index c164b03..404f366 100644
--- a/xfa/fxfa/parser/cxfa_numbersymbol.h
+++ b/xfa/fxfa/parser/cxfa_numbersymbol.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_NumberSymbol : public CXFA_Node {
+class CXFA_NumberSymbol final : public CXFA_Node {
  public:
   CXFA_NumberSymbol(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_NumberSymbol() override;
diff --git a/xfa/fxfa/parser/cxfa_numbersymbols.h b/xfa/fxfa/parser/cxfa_numbersymbols.h
index 972df9f..37bb6fc 100644
--- a/xfa/fxfa/parser/cxfa_numbersymbols.h
+++ b/xfa/fxfa/parser/cxfa_numbersymbols.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_NumberSymbols : public CXFA_Node {
+class CXFA_NumberSymbols final : public CXFA_Node {
  public:
   CXFA_NumberSymbols(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_NumberSymbols() override;
diff --git a/xfa/fxfa/parser/cxfa_numericedit.h b/xfa/fxfa/parser/cxfa_numericedit.h
index 1a96f46..145bf08 100644
--- a/xfa/fxfa/parser/cxfa_numericedit.h
+++ b/xfa/fxfa/parser/cxfa_numericedit.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_NumericEdit : public CXFA_Node {
+class CXFA_NumericEdit final : public CXFA_Node {
  public:
   CXFA_NumericEdit(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_NumericEdit() override;
diff --git a/xfa/fxfa/parser/cxfa_occur.h b/xfa/fxfa/parser/cxfa_occur.h
index 070c15c..58029a3 100644
--- a/xfa/fxfa/parser/cxfa_occur.h
+++ b/xfa/fxfa/parser/cxfa_occur.h
@@ -11,7 +11,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Occur : public CXFA_Node {
+class CXFA_Occur final : public CXFA_Node {
  public:
   static constexpr int32_t kDefaultMax = 1;
   static constexpr int32_t kDefaultMin = 1;
diff --git a/xfa/fxfa/parser/cxfa_oid.h b/xfa/fxfa/parser/cxfa_oid.h
index 45abf8b..c9ccb71 100644
--- a/xfa/fxfa/parser/cxfa_oid.h
+++ b/xfa/fxfa/parser/cxfa_oid.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Oid : public CXFA_Node {
+class CXFA_Oid final : public CXFA_Node {
  public:
   CXFA_Oid(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Oid() override;
diff --git a/xfa/fxfa/parser/cxfa_oids.h b/xfa/fxfa/parser/cxfa_oids.h
index cc8cd9c..f537601 100644
--- a/xfa/fxfa/parser/cxfa_oids.h
+++ b/xfa/fxfa/parser/cxfa_oids.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Oids : public CXFA_Node {
+class CXFA_Oids final : public CXFA_Node {
  public:
   CXFA_Oids(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Oids() override;
diff --git a/xfa/fxfa/parser/cxfa_openaction.h b/xfa/fxfa/parser/cxfa_openaction.h
index d84eb29..2eff67c 100644
--- a/xfa/fxfa/parser/cxfa_openaction.h
+++ b/xfa/fxfa/parser/cxfa_openaction.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_OpenAction : public CXFA_Node {
+class CXFA_OpenAction final : public CXFA_Node {
  public:
   CXFA_OpenAction(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_OpenAction() override;
diff --git a/xfa/fxfa/parser/cxfa_operation.h b/xfa/fxfa/parser/cxfa_operation.h
index 454a354..4df63aa 100644
--- a/xfa/fxfa/parser/cxfa_operation.h
+++ b/xfa/fxfa/parser/cxfa_operation.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Operation : public CXFA_Node {
+class CXFA_Operation final : public CXFA_Node {
  public:
   CXFA_Operation(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Operation() override;
diff --git a/xfa/fxfa/parser/cxfa_output.h b/xfa/fxfa/parser/cxfa_output.h
index 2eb1391..45555be 100644
--- a/xfa/fxfa/parser/cxfa_output.h
+++ b/xfa/fxfa/parser/cxfa_output.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Output : public CXFA_Node {
+class CXFA_Output final : public CXFA_Node {
  public:
   CXFA_Output(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Output() override;
diff --git a/xfa/fxfa/parser/cxfa_outputbin.h b/xfa/fxfa/parser/cxfa_outputbin.h
index 25a1ae0..7ab4540 100644
--- a/xfa/fxfa/parser/cxfa_outputbin.h
+++ b/xfa/fxfa/parser/cxfa_outputbin.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_OutputBin : public CXFA_Node {
+class CXFA_OutputBin final : public CXFA_Node {
  public:
   CXFA_OutputBin(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_OutputBin() override;
diff --git a/xfa/fxfa/parser/cxfa_outputxsl.h b/xfa/fxfa/parser/cxfa_outputxsl.h
index 4535523..361ea42 100644
--- a/xfa/fxfa/parser/cxfa_outputxsl.h
+++ b/xfa/fxfa/parser/cxfa_outputxsl.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_OutputXSL : public CXFA_Node {
+class CXFA_OutputXSL final : public CXFA_Node {
  public:
   CXFA_OutputXSL(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_OutputXSL() override;
diff --git a/xfa/fxfa/parser/cxfa_overflow.h b/xfa/fxfa/parser/cxfa_overflow.h
index e6627ba..da2717a 100644
--- a/xfa/fxfa/parser/cxfa_overflow.h
+++ b/xfa/fxfa/parser/cxfa_overflow.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Overflow : public CXFA_Node {
+class CXFA_Overflow final : public CXFA_Node {
  public:
   CXFA_Overflow(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Overflow() override;
diff --git a/xfa/fxfa/parser/cxfa_overprint.h b/xfa/fxfa/parser/cxfa_overprint.h
index a9ec241..e5e360d 100644
--- a/xfa/fxfa/parser/cxfa_overprint.h
+++ b/xfa/fxfa/parser/cxfa_overprint.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Overprint : public CXFA_Node {
+class CXFA_Overprint final : public CXFA_Node {
  public:
   CXFA_Overprint(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Overprint() override;
diff --git a/xfa/fxfa/parser/cxfa_packet.h b/xfa/fxfa/parser/cxfa_packet.h
index 6bda61d..c94c74c 100644
--- a/xfa/fxfa/parser/cxfa_packet.h
+++ b/xfa/fxfa/parser/cxfa_packet.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Packet : public CXFA_Node {
+class CXFA_Packet final : public CXFA_Node {
  public:
   CXFA_Packet(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Packet() override;
diff --git a/xfa/fxfa/parser/cxfa_packets.h b/xfa/fxfa/parser/cxfa_packets.h
index ebf29b6..5e0f408 100644
--- a/xfa/fxfa/parser/cxfa_packets.h
+++ b/xfa/fxfa/parser/cxfa_packets.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Packets : public CXFA_Node {
+class CXFA_Packets final : public CXFA_Node {
  public:
   CXFA_Packets(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Packets() override;
diff --git a/xfa/fxfa/parser/cxfa_pagearea.h b/xfa/fxfa/parser/cxfa_pagearea.h
index f3cab1e..8a8afaa 100644
--- a/xfa/fxfa/parser/cxfa_pagearea.h
+++ b/xfa/fxfa/parser/cxfa_pagearea.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_PageArea : public CXFA_Node {
+class CXFA_PageArea final : public CXFA_Node {
  public:
   CXFA_PageArea(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_PageArea() override;
diff --git a/xfa/fxfa/parser/cxfa_pageoffset.h b/xfa/fxfa/parser/cxfa_pageoffset.h
index a396c57..d090b11 100644
--- a/xfa/fxfa/parser/cxfa_pageoffset.h
+++ b/xfa/fxfa/parser/cxfa_pageoffset.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_PageOffset : public CXFA_Node {
+class CXFA_PageOffset final : public CXFA_Node {
  public:
   CXFA_PageOffset(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_PageOffset() override;
diff --git a/xfa/fxfa/parser/cxfa_pagerange.h b/xfa/fxfa/parser/cxfa_pagerange.h
index 949276a..a0317b5 100644
--- a/xfa/fxfa/parser/cxfa_pagerange.h
+++ b/xfa/fxfa/parser/cxfa_pagerange.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_PageRange : public CXFA_Node {
+class CXFA_PageRange final : public CXFA_Node {
  public:
   CXFA_PageRange(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_PageRange() override;
diff --git a/xfa/fxfa/parser/cxfa_pageset.h b/xfa/fxfa/parser/cxfa_pageset.h
index 9cc3b17..da71581 100644
--- a/xfa/fxfa/parser/cxfa_pageset.h
+++ b/xfa/fxfa/parser/cxfa_pageset.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_PageSet : public CXFA_Node {
+class CXFA_PageSet final : public CXFA_Node {
  public:
   CXFA_PageSet(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_PageSet() override;
diff --git a/xfa/fxfa/parser/cxfa_pagination.h b/xfa/fxfa/parser/cxfa_pagination.h
index a455ecb..9bbd820 100644
--- a/xfa/fxfa/parser/cxfa_pagination.h
+++ b/xfa/fxfa/parser/cxfa_pagination.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Pagination : public CXFA_Node {
+class CXFA_Pagination final : public CXFA_Node {
  public:
   CXFA_Pagination(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Pagination() override;
diff --git a/xfa/fxfa/parser/cxfa_paginationoverride.h b/xfa/fxfa/parser/cxfa_paginationoverride.h
index 9cc9528..4f0efba 100644
--- a/xfa/fxfa/parser/cxfa_paginationoverride.h
+++ b/xfa/fxfa/parser/cxfa_paginationoverride.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_PaginationOverride : public CXFA_Node {
+class CXFA_PaginationOverride final : public CXFA_Node {
  public:
   CXFA_PaginationOverride(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_PaginationOverride() override;
diff --git a/xfa/fxfa/parser/cxfa_para.h b/xfa/fxfa/parser/cxfa_para.h
index afb48ce..7fd39a6 100644
--- a/xfa/fxfa/parser/cxfa_para.h
+++ b/xfa/fxfa/parser/cxfa_para.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Para : public CXFA_Node {
+class CXFA_Para final : public CXFA_Node {
  public:
   CXFA_Para(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Para() override;
diff --git a/xfa/fxfa/parser/cxfa_part.h b/xfa/fxfa/parser/cxfa_part.h
index 3db7639..99c2c59 100644
--- a/xfa/fxfa/parser/cxfa_part.h
+++ b/xfa/fxfa/parser/cxfa_part.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Part : public CXFA_Node {
+class CXFA_Part final : public CXFA_Node {
  public:
   CXFA_Part(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Part() override;
diff --git a/xfa/fxfa/parser/cxfa_password.h b/xfa/fxfa/parser/cxfa_password.h
index 904f91f..a2cbca7 100644
--- a/xfa/fxfa/parser/cxfa_password.h
+++ b/xfa/fxfa/parser/cxfa_password.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Password : public CXFA_Node {
+class CXFA_Password final : public CXFA_Node {
  public:
   CXFA_Password(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Password() override;
diff --git a/xfa/fxfa/parser/cxfa_passwordedit.h b/xfa/fxfa/parser/cxfa_passwordedit.h
index 6c8e8e5..fae812f 100644
--- a/xfa/fxfa/parser/cxfa_passwordedit.h
+++ b/xfa/fxfa/parser/cxfa_passwordedit.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_PasswordEdit : public CXFA_Node {
+class CXFA_PasswordEdit final : public CXFA_Node {
  public:
   CXFA_PasswordEdit(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_PasswordEdit() override;
diff --git a/xfa/fxfa/parser/cxfa_pattern.h b/xfa/fxfa/parser/cxfa_pattern.h
index 7533ac9..04119c4 100644
--- a/xfa/fxfa/parser/cxfa_pattern.h
+++ b/xfa/fxfa/parser/cxfa_pattern.h
@@ -14,7 +14,7 @@
 class CXFA_Color;
 class CXFA_Graphics;
 
-class CXFA_Pattern : public CXFA_Node {
+class CXFA_Pattern final : public CXFA_Node {
  public:
   static constexpr XFA_AttributeEnum kDefaultType = XFA_AttributeEnum::Unknown;
 
diff --git a/xfa/fxfa/parser/cxfa_pcl.h b/xfa/fxfa/parser/cxfa_pcl.h
index 9b78265..c9d94d6 100644
--- a/xfa/fxfa/parser/cxfa_pcl.h
+++ b/xfa/fxfa/parser/cxfa_pcl.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Pcl : public CXFA_Node {
+class CXFA_Pcl final : public CXFA_Node {
  public:
   CXFA_Pcl(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Pcl() override;
diff --git a/xfa/fxfa/parser/cxfa_pdf.h b/xfa/fxfa/parser/cxfa_pdf.h
index d0925c8..00e4d38 100644
--- a/xfa/fxfa/parser/cxfa_pdf.h
+++ b/xfa/fxfa/parser/cxfa_pdf.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Pdf : public CXFA_Node {
+class CXFA_Pdf final : public CXFA_Node {
  public:
   CXFA_Pdf(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Pdf() override;
diff --git a/xfa/fxfa/parser/cxfa_pdfa.h b/xfa/fxfa/parser/cxfa_pdfa.h
index d0816a2..e43f025 100644
--- a/xfa/fxfa/parser/cxfa_pdfa.h
+++ b/xfa/fxfa/parser/cxfa_pdfa.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Pdfa : public CXFA_Node {
+class CXFA_Pdfa final : public CXFA_Node {
  public:
   CXFA_Pdfa(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Pdfa() override;
diff --git a/xfa/fxfa/parser/cxfa_permissions.h b/xfa/fxfa/parser/cxfa_permissions.h
index dca9018..79b3bf1 100644
--- a/xfa/fxfa/parser/cxfa_permissions.h
+++ b/xfa/fxfa/parser/cxfa_permissions.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Permissions : public CXFA_Node {
+class CXFA_Permissions final : public CXFA_Node {
  public:
   CXFA_Permissions(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Permissions() override;
diff --git a/xfa/fxfa/parser/cxfa_picktraybypdfsize.h b/xfa/fxfa/parser/cxfa_picktraybypdfsize.h
index ef75e5c..3871552 100644
--- a/xfa/fxfa/parser/cxfa_picktraybypdfsize.h
+++ b/xfa/fxfa/parser/cxfa_picktraybypdfsize.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_PickTrayByPDFSize : public CXFA_Node {
+class CXFA_PickTrayByPDFSize final : public CXFA_Node {
  public:
   CXFA_PickTrayByPDFSize(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_PickTrayByPDFSize() override;
diff --git a/xfa/fxfa/parser/cxfa_picture.h b/xfa/fxfa/parser/cxfa_picture.h
index 9fd2c55..304c7b9 100644
--- a/xfa/fxfa/parser/cxfa_picture.h
+++ b/xfa/fxfa/parser/cxfa_picture.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Picture : public CXFA_Node {
+class CXFA_Picture final : public CXFA_Node {
  public:
   CXFA_Picture(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Picture() override;
diff --git a/xfa/fxfa/parser/cxfa_plaintextmetadata.h b/xfa/fxfa/parser/cxfa_plaintextmetadata.h
index 03dce65..65e0ded 100644
--- a/xfa/fxfa/parser/cxfa_plaintextmetadata.h
+++ b/xfa/fxfa/parser/cxfa_plaintextmetadata.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_PlaintextMetadata : public CXFA_Node {
+class CXFA_PlaintextMetadata final : public CXFA_Node {
  public:
   CXFA_PlaintextMetadata(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_PlaintextMetadata() override;
diff --git a/xfa/fxfa/parser/cxfa_presence.h b/xfa/fxfa/parser/cxfa_presence.h
index a9b7766..1bd6e45 100644
--- a/xfa/fxfa/parser/cxfa_presence.h
+++ b/xfa/fxfa/parser/cxfa_presence.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Presence : public CXFA_Node {
+class CXFA_Presence final : public CXFA_Node {
  public:
   CXFA_Presence(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Presence() override;
diff --git a/xfa/fxfa/parser/cxfa_present.h b/xfa/fxfa/parser/cxfa_present.h
index 13b3c61..36db503 100644
--- a/xfa/fxfa/parser/cxfa_present.h
+++ b/xfa/fxfa/parser/cxfa_present.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Present : public CXFA_Node {
+class CXFA_Present final : public CXFA_Node {
  public:
   CXFA_Present(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Present() override;
diff --git a/xfa/fxfa/parser/cxfa_print.h b/xfa/fxfa/parser/cxfa_print.h
index 5f2513e..7f6fff9 100644
--- a/xfa/fxfa/parser/cxfa_print.h
+++ b/xfa/fxfa/parser/cxfa_print.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Print : public CXFA_Node {
+class CXFA_Print final : public CXFA_Node {
  public:
   CXFA_Print(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Print() override;
diff --git a/xfa/fxfa/parser/cxfa_printername.h b/xfa/fxfa/parser/cxfa_printername.h
index 4f07885..a85d61e 100644
--- a/xfa/fxfa/parser/cxfa_printername.h
+++ b/xfa/fxfa/parser/cxfa_printername.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_PrinterName : public CXFA_Node {
+class CXFA_PrinterName final : public CXFA_Node {
  public:
   CXFA_PrinterName(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_PrinterName() override;
diff --git a/xfa/fxfa/parser/cxfa_printhighquality.h b/xfa/fxfa/parser/cxfa_printhighquality.h
index 6cd61125..6268489 100644
--- a/xfa/fxfa/parser/cxfa_printhighquality.h
+++ b/xfa/fxfa/parser/cxfa_printhighquality.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_PrintHighQuality : public CXFA_Node {
+class CXFA_PrintHighQuality final : public CXFA_Node {
  public:
   CXFA_PrintHighQuality(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_PrintHighQuality() override;
diff --git a/xfa/fxfa/parser/cxfa_printscaling.h b/xfa/fxfa/parser/cxfa_printscaling.h
index e21d427..76bf112 100644
--- a/xfa/fxfa/parser/cxfa_printscaling.h
+++ b/xfa/fxfa/parser/cxfa_printscaling.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_PrintScaling : public CXFA_Node {
+class CXFA_PrintScaling final : public CXFA_Node {
  public:
   CXFA_PrintScaling(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_PrintScaling() override;
diff --git a/xfa/fxfa/parser/cxfa_producer.h b/xfa/fxfa/parser/cxfa_producer.h
index 584826e..c40a334 100644
--- a/xfa/fxfa/parser/cxfa_producer.h
+++ b/xfa/fxfa/parser/cxfa_producer.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Producer : public CXFA_Node {
+class CXFA_Producer final : public CXFA_Node {
  public:
   CXFA_Producer(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Producer() override;
diff --git a/xfa/fxfa/parser/cxfa_proto.h b/xfa/fxfa/parser/cxfa_proto.h
index 8e1d84a..5af7ba2 100644
--- a/xfa/fxfa/parser/cxfa_proto.h
+++ b/xfa/fxfa/parser/cxfa_proto.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Proto : public CXFA_Node {
+class CXFA_Proto final : public CXFA_Node {
  public:
   CXFA_Proto(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Proto() override;
diff --git a/xfa/fxfa/parser/cxfa_ps.h b/xfa/fxfa/parser/cxfa_ps.h
index 5ef7e82..f51c510 100644
--- a/xfa/fxfa/parser/cxfa_ps.h
+++ b/xfa/fxfa/parser/cxfa_ps.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Ps : public CXFA_Node {
+class CXFA_Ps final : public CXFA_Node {
  public:
   CXFA_Ps(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Ps() override;
diff --git a/xfa/fxfa/parser/cxfa_psmap.h b/xfa/fxfa/parser/cxfa_psmap.h
index 8297aaa..802e123 100644
--- a/xfa/fxfa/parser/cxfa_psmap.h
+++ b/xfa/fxfa/parser/cxfa_psmap.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_PsMap : public CXFA_Node {
+class CXFA_PsMap final : public CXFA_Node {
  public:
   CXFA_PsMap(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_PsMap() override;
diff --git a/xfa/fxfa/parser/cxfa_query.h b/xfa/fxfa/parser/cxfa_query.h
index 548e7fc..7d62c68 100644
--- a/xfa/fxfa/parser/cxfa_query.h
+++ b/xfa/fxfa/parser/cxfa_query.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Query : public CXFA_Node {
+class CXFA_Query final : public CXFA_Node {
  public:
   CXFA_Query(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Query() override;
diff --git a/xfa/fxfa/parser/cxfa_radial.h b/xfa/fxfa/parser/cxfa_radial.h
index b7ce95c..8fb30b5 100644
--- a/xfa/fxfa/parser/cxfa_radial.h
+++ b/xfa/fxfa/parser/cxfa_radial.h
@@ -14,7 +14,7 @@
 class CXFA_Color;
 class CXFA_Graphics;
 
-class CXFA_Radial : public CXFA_Node {
+class CXFA_Radial final : public CXFA_Node {
  public:
   CXFA_Radial(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Radial() override;
diff --git a/xfa/fxfa/parser/cxfa_range.h b/xfa/fxfa/parser/cxfa_range.h
index 23c8d1f..5d8920d 100644
--- a/xfa/fxfa/parser/cxfa_range.h
+++ b/xfa/fxfa/parser/cxfa_range.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Range : public CXFA_Node {
+class CXFA_Range final : public CXFA_Node {
  public:
   CXFA_Range(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Range() override;
diff --git a/xfa/fxfa/parser/cxfa_reason.h b/xfa/fxfa/parser/cxfa_reason.h
index 451fd82..1475637 100644
--- a/xfa/fxfa/parser/cxfa_reason.h
+++ b/xfa/fxfa/parser/cxfa_reason.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Reason : public CXFA_Node {
+class CXFA_Reason final : public CXFA_Node {
  public:
   CXFA_Reason(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Reason() override;
diff --git a/xfa/fxfa/parser/cxfa_reasons.h b/xfa/fxfa/parser/cxfa_reasons.h
index 57e9e09..673a9b2 100644
--- a/xfa/fxfa/parser/cxfa_reasons.h
+++ b/xfa/fxfa/parser/cxfa_reasons.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Reasons : public CXFA_Node {
+class CXFA_Reasons final : public CXFA_Node {
  public:
   CXFA_Reasons(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Reasons() override;
diff --git a/xfa/fxfa/parser/cxfa_record.h b/xfa/fxfa/parser/cxfa_record.h
index bd2622d..de0d0c4 100644
--- a/xfa/fxfa/parser/cxfa_record.h
+++ b/xfa/fxfa/parser/cxfa_record.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Record : public CXFA_Node {
+class CXFA_Record final : public CXFA_Node {
  public:
   CXFA_Record(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Record() override;
diff --git a/xfa/fxfa/parser/cxfa_recordset.h b/xfa/fxfa/parser/cxfa_recordset.h
index c623516..a9895bd 100644
--- a/xfa/fxfa/parser/cxfa_recordset.h
+++ b/xfa/fxfa/parser/cxfa_recordset.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_RecordSet : public CXFA_Node {
+class CXFA_RecordSet final : public CXFA_Node {
  public:
   CXFA_RecordSet(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_RecordSet() override;
diff --git a/xfa/fxfa/parser/cxfa_ref.h b/xfa/fxfa/parser/cxfa_ref.h
index 630510f..5ab8e00 100644
--- a/xfa/fxfa/parser/cxfa_ref.h
+++ b/xfa/fxfa/parser/cxfa_ref.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Ref : public CXFA_Node {
+class CXFA_Ref final : public CXFA_Node {
  public:
   CXFA_Ref(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Ref() override;
diff --git a/xfa/fxfa/parser/cxfa_relevant.h b/xfa/fxfa/parser/cxfa_relevant.h
index 2018c95..03283c3 100644
--- a/xfa/fxfa/parser/cxfa_relevant.h
+++ b/xfa/fxfa/parser/cxfa_relevant.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Relevant : public CXFA_Node {
+class CXFA_Relevant final : public CXFA_Node {
  public:
   CXFA_Relevant(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Relevant() override;
diff --git a/xfa/fxfa/parser/cxfa_rename.h b/xfa/fxfa/parser/cxfa_rename.h
index 665c852..f50d852 100644
--- a/xfa/fxfa/parser/cxfa_rename.h
+++ b/xfa/fxfa/parser/cxfa_rename.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Rename : public CXFA_Node {
+class CXFA_Rename final : public CXFA_Node {
  public:
   CXFA_Rename(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Rename() override;
diff --git a/xfa/fxfa/parser/cxfa_renderpolicy.h b/xfa/fxfa/parser/cxfa_renderpolicy.h
index 24ddf46..4947289 100644
--- a/xfa/fxfa/parser/cxfa_renderpolicy.h
+++ b/xfa/fxfa/parser/cxfa_renderpolicy.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_RenderPolicy : public CXFA_Node {
+class CXFA_RenderPolicy final : public CXFA_Node {
  public:
   CXFA_RenderPolicy(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_RenderPolicy() override;
diff --git a/xfa/fxfa/parser/cxfa_rootelement.h b/xfa/fxfa/parser/cxfa_rootelement.h
index a995e8c..4a9218e 100644
--- a/xfa/fxfa/parser/cxfa_rootelement.h
+++ b/xfa/fxfa/parser/cxfa_rootelement.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_RootElement : public CXFA_Node {
+class CXFA_RootElement final : public CXFA_Node {
  public:
   CXFA_RootElement(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_RootElement() override;
diff --git a/xfa/fxfa/parser/cxfa_runscripts.h b/xfa/fxfa/parser/cxfa_runscripts.h
index d2ecaa0..2f80b0d 100644
--- a/xfa/fxfa/parser/cxfa_runscripts.h
+++ b/xfa/fxfa/parser/cxfa_runscripts.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_RunScripts : public CXFA_Node {
+class CXFA_RunScripts final : public CXFA_Node {
  public:
   CXFA_RunScripts(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_RunScripts() override;
diff --git a/xfa/fxfa/parser/cxfa_script.h b/xfa/fxfa/parser/cxfa_script.h
index 8ea7aac..5f48f45 100644
--- a/xfa/fxfa/parser/cxfa_script.h
+++ b/xfa/fxfa/parser/cxfa_script.h
@@ -10,7 +10,7 @@
 #include "core/fxcrt/widestring.h"
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Script : public CXFA_Node {
+class CXFA_Script final : public CXFA_Node {
  public:
   enum class Type {
     Formcalc = 0,
diff --git a/xfa/fxfa/parser/cxfa_scriptmodel.h b/xfa/fxfa/parser/cxfa_scriptmodel.h
index 40bc96e..a71073e 100644
--- a/xfa/fxfa/parser/cxfa_scriptmodel.h
+++ b/xfa/fxfa/parser/cxfa_scriptmodel.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_ScriptModel : public CXFA_Node {
+class CXFA_ScriptModel final : public CXFA_Node {
  public:
   CXFA_ScriptModel(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_ScriptModel() override;
diff --git a/xfa/fxfa/parser/cxfa_select.h b/xfa/fxfa/parser/cxfa_select.h
index 76651e0..82fc0d2 100644
--- a/xfa/fxfa/parser/cxfa_select.h
+++ b/xfa/fxfa/parser/cxfa_select.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Select : public CXFA_Node {
+class CXFA_Select final : public CXFA_Node {
  public:
   CXFA_Select(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Select() override;
diff --git a/xfa/fxfa/parser/cxfa_setproperty.h b/xfa/fxfa/parser/cxfa_setproperty.h
index 3f8f430..aab588b 100644
--- a/xfa/fxfa/parser/cxfa_setproperty.h
+++ b/xfa/fxfa/parser/cxfa_setproperty.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_SetProperty : public CXFA_Node {
+class CXFA_SetProperty final : public CXFA_Node {
  public:
   CXFA_SetProperty(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_SetProperty() override;
diff --git a/xfa/fxfa/parser/cxfa_severity.h b/xfa/fxfa/parser/cxfa_severity.h
index 7114455..b2283c9 100644
--- a/xfa/fxfa/parser/cxfa_severity.h
+++ b/xfa/fxfa/parser/cxfa_severity.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Severity : public CXFA_Node {
+class CXFA_Severity final : public CXFA_Node {
  public:
   CXFA_Severity(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Severity() override;
diff --git a/xfa/fxfa/parser/cxfa_sharptext.h b/xfa/fxfa/parser/cxfa_sharptext.h
index 89a050b..f2a41e8 100644
--- a/xfa/fxfa/parser/cxfa_sharptext.h
+++ b/xfa/fxfa/parser/cxfa_sharptext.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Sharptext : public CXFA_Node {
+class CXFA_Sharptext final : public CXFA_Node {
  public:
   CXFA_Sharptext(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Sharptext() override;
diff --git a/xfa/fxfa/parser/cxfa_sharpxhtml.h b/xfa/fxfa/parser/cxfa_sharpxhtml.h
index 3f6cf79..b73789d 100644
--- a/xfa/fxfa/parser/cxfa_sharpxhtml.h
+++ b/xfa/fxfa/parser/cxfa_sharpxhtml.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_SharpxHTML : public CXFA_Node {
+class CXFA_SharpxHTML final : public CXFA_Node {
  public:
   CXFA_SharpxHTML(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_SharpxHTML() override;
diff --git a/xfa/fxfa/parser/cxfa_sharpxml.h b/xfa/fxfa/parser/cxfa_sharpxml.h
index a065857..b2e467a 100644
--- a/xfa/fxfa/parser/cxfa_sharpxml.h
+++ b/xfa/fxfa/parser/cxfa_sharpxml.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Sharpxml : public CXFA_Node {
+class CXFA_Sharpxml final : public CXFA_Node {
  public:
   CXFA_Sharpxml(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Sharpxml() override;
diff --git a/xfa/fxfa/parser/cxfa_signature.h b/xfa/fxfa/parser/cxfa_signature.h
index 3491a1e..678e892 100644
--- a/xfa/fxfa/parser/cxfa_signature.h
+++ b/xfa/fxfa/parser/cxfa_signature.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Signature : public CXFA_Node {
+class CXFA_Signature final : public CXFA_Node {
  public:
   CXFA_Signature(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Signature() override;
diff --git a/xfa/fxfa/parser/cxfa_signatureproperties.h b/xfa/fxfa/parser/cxfa_signatureproperties.h
index 800b780..a66346e 100644
--- a/xfa/fxfa/parser/cxfa_signatureproperties.h
+++ b/xfa/fxfa/parser/cxfa_signatureproperties.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_SignatureProperties : public CXFA_Node {
+class CXFA_SignatureProperties final : public CXFA_Node {
  public:
   CXFA_SignatureProperties(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_SignatureProperties() override;
diff --git a/xfa/fxfa/parser/cxfa_signdata.h b/xfa/fxfa/parser/cxfa_signdata.h
index 3ad39f5..e28460d 100644
--- a/xfa/fxfa/parser/cxfa_signdata.h
+++ b/xfa/fxfa/parser/cxfa_signdata.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_SignData : public CXFA_Node {
+class CXFA_SignData final : public CXFA_Node {
  public:
   CXFA_SignData(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_SignData() override;
diff --git a/xfa/fxfa/parser/cxfa_signing.h b/xfa/fxfa/parser/cxfa_signing.h
index 6df9a18..7c37403 100644
--- a/xfa/fxfa/parser/cxfa_signing.h
+++ b/xfa/fxfa/parser/cxfa_signing.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Signing : public CXFA_Node {
+class CXFA_Signing final : public CXFA_Node {
  public:
   CXFA_Signing(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Signing() override;
diff --git a/xfa/fxfa/parser/cxfa_silentprint.h b/xfa/fxfa/parser/cxfa_silentprint.h
index 6ef5fcf..378084d 100644
--- a/xfa/fxfa/parser/cxfa_silentprint.h
+++ b/xfa/fxfa/parser/cxfa_silentprint.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_SilentPrint : public CXFA_Node {
+class CXFA_SilentPrint final : public CXFA_Node {
  public:
   CXFA_SilentPrint(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_SilentPrint() override;
diff --git a/xfa/fxfa/parser/cxfa_soapaction.h b/xfa/fxfa/parser/cxfa_soapaction.h
index b803eae..b7f7526 100644
--- a/xfa/fxfa/parser/cxfa_soapaction.h
+++ b/xfa/fxfa/parser/cxfa_soapaction.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_SoapAction : public CXFA_Node {
+class CXFA_SoapAction final : public CXFA_Node {
  public:
   CXFA_SoapAction(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_SoapAction() override;
diff --git a/xfa/fxfa/parser/cxfa_soapaddress.h b/xfa/fxfa/parser/cxfa_soapaddress.h
index b0feff4..130ddf3 100644
--- a/xfa/fxfa/parser/cxfa_soapaddress.h
+++ b/xfa/fxfa/parser/cxfa_soapaddress.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_SoapAddress : public CXFA_Node {
+class CXFA_SoapAddress final : public CXFA_Node {
  public:
   CXFA_SoapAddress(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_SoapAddress() override;
diff --git a/xfa/fxfa/parser/cxfa_solid.h b/xfa/fxfa/parser/cxfa_solid.h
index ec1e2d0..28666ef 100644
--- a/xfa/fxfa/parser/cxfa_solid.h
+++ b/xfa/fxfa/parser/cxfa_solid.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Solid : public CXFA_Node {
+class CXFA_Solid final : public CXFA_Node {
  public:
   CXFA_Solid(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Solid() override;
diff --git a/xfa/fxfa/parser/cxfa_source.h b/xfa/fxfa/parser/cxfa_source.h
index af74be8..96af083 100644
--- a/xfa/fxfa/parser/cxfa_source.h
+++ b/xfa/fxfa/parser/cxfa_source.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Source : public CXFA_Node {
+class CXFA_Source final : public CXFA_Node {
  public:
   CXFA_Source(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Source() override;
diff --git a/xfa/fxfa/parser/cxfa_sourceset.h b/xfa/fxfa/parser/cxfa_sourceset.h
index b07e12b..c31b94c 100644
--- a/xfa/fxfa/parser/cxfa_sourceset.h
+++ b/xfa/fxfa/parser/cxfa_sourceset.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_SourceSet : public CXFA_Node {
+class CXFA_SourceSet final : public CXFA_Node {
  public:
   CXFA_SourceSet(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_SourceSet() override;
diff --git a/xfa/fxfa/parser/cxfa_speak.h b/xfa/fxfa/parser/cxfa_speak.h
index 80ef54b..5497927 100644
--- a/xfa/fxfa/parser/cxfa_speak.h
+++ b/xfa/fxfa/parser/cxfa_speak.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Speak : public CXFA_Node {
+class CXFA_Speak final : public CXFA_Node {
  public:
   CXFA_Speak(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Speak() override;
diff --git a/xfa/fxfa/parser/cxfa_staple.h b/xfa/fxfa/parser/cxfa_staple.h
index 9651fa4..44ef654 100644
--- a/xfa/fxfa/parser/cxfa_staple.h
+++ b/xfa/fxfa/parser/cxfa_staple.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Staple : public CXFA_Node {
+class CXFA_Staple final : public CXFA_Node {
  public:
   CXFA_Staple(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Staple() override;
diff --git a/xfa/fxfa/parser/cxfa_startnode.h b/xfa/fxfa/parser/cxfa_startnode.h
index 51815e5..b8bab06 100644
--- a/xfa/fxfa/parser/cxfa_startnode.h
+++ b/xfa/fxfa/parser/cxfa_startnode.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_StartNode : public CXFA_Node {
+class CXFA_StartNode final : public CXFA_Node {
  public:
   CXFA_StartNode(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_StartNode() override;
diff --git a/xfa/fxfa/parser/cxfa_startpage.h b/xfa/fxfa/parser/cxfa_startpage.h
index 6262aa7..ae0ecee 100644
--- a/xfa/fxfa/parser/cxfa_startpage.h
+++ b/xfa/fxfa/parser/cxfa_startpage.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_StartPage : public CXFA_Node {
+class CXFA_StartPage final : public CXFA_Node {
  public:
   CXFA_StartPage(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_StartPage() override;
diff --git a/xfa/fxfa/parser/cxfa_stipple.h b/xfa/fxfa/parser/cxfa_stipple.h
index 839534b..af5581f 100644
--- a/xfa/fxfa/parser/cxfa_stipple.h
+++ b/xfa/fxfa/parser/cxfa_stipple.h
@@ -14,7 +14,7 @@
 class CXFA_Color;
 class CXFA_Graphics;
 
-class CXFA_Stipple : public CXFA_Node {
+class CXFA_Stipple final : public CXFA_Node {
  public:
   static int32_t GetDefaultRate() { return 50; }
 
diff --git a/xfa/fxfa/parser/cxfa_subform.h b/xfa/fxfa/parser/cxfa_subform.h
index 00b2e17..3d16d10 100644
--- a/xfa/fxfa/parser/cxfa_subform.h
+++ b/xfa/fxfa/parser/cxfa_subform.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Subform : public CXFA_Node {
+class CXFA_Subform final : public CXFA_Node {
  public:
   CXFA_Subform(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Subform() override;
diff --git a/xfa/fxfa/parser/cxfa_subformset.h b/xfa/fxfa/parser/cxfa_subformset.h
index 8e0f3ea..12b9e9f 100644
--- a/xfa/fxfa/parser/cxfa_subformset.h
+++ b/xfa/fxfa/parser/cxfa_subformset.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_SubformSet : public CXFA_Node {
+class CXFA_SubformSet final : public CXFA_Node {
  public:
   CXFA_SubformSet(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_SubformSet() override;
diff --git a/xfa/fxfa/parser/cxfa_subjectdn.h b/xfa/fxfa/parser/cxfa_subjectdn.h
index 0861d75..a4d94d7 100644
--- a/xfa/fxfa/parser/cxfa_subjectdn.h
+++ b/xfa/fxfa/parser/cxfa_subjectdn.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_SubjectDN : public CXFA_Node {
+class CXFA_SubjectDN final : public CXFA_Node {
  public:
   CXFA_SubjectDN(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_SubjectDN() override;
diff --git a/xfa/fxfa/parser/cxfa_subjectdns.h b/xfa/fxfa/parser/cxfa_subjectdns.h
index e9d739c..03d770b 100644
--- a/xfa/fxfa/parser/cxfa_subjectdns.h
+++ b/xfa/fxfa/parser/cxfa_subjectdns.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_SubjectDNs : public CXFA_Node {
+class CXFA_SubjectDNs final : public CXFA_Node {
  public:
   CXFA_SubjectDNs(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_SubjectDNs() override;
diff --git a/xfa/fxfa/parser/cxfa_submit.h b/xfa/fxfa/parser/cxfa_submit.h
index 24d5f11..8f7b4bf 100644
--- a/xfa/fxfa/parser/cxfa_submit.h
+++ b/xfa/fxfa/parser/cxfa_submit.h
@@ -10,7 +10,7 @@
 #include "core/fxcrt/widestring.h"
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Submit : public CXFA_Node {
+class CXFA_Submit final : public CXFA_Node {
  public:
   CXFA_Submit(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Submit() override;
diff --git a/xfa/fxfa/parser/cxfa_submitformat.h b/xfa/fxfa/parser/cxfa_submitformat.h
index adca1e9..bd6df26 100644
--- a/xfa/fxfa/parser/cxfa_submitformat.h
+++ b/xfa/fxfa/parser/cxfa_submitformat.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_SubmitFormat : public CXFA_Node {
+class CXFA_SubmitFormat final : public CXFA_Node {
  public:
   CXFA_SubmitFormat(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_SubmitFormat() override;
diff --git a/xfa/fxfa/parser/cxfa_submiturl.h b/xfa/fxfa/parser/cxfa_submiturl.h
index 8d87db9..f1914db 100644
--- a/xfa/fxfa/parser/cxfa_submiturl.h
+++ b/xfa/fxfa/parser/cxfa_submiturl.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_SubmitUrl : public CXFA_Node {
+class CXFA_SubmitUrl final : public CXFA_Node {
  public:
   CXFA_SubmitUrl(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_SubmitUrl() override;
diff --git a/xfa/fxfa/parser/cxfa_subsetbelow.h b/xfa/fxfa/parser/cxfa_subsetbelow.h
index db912fe..230a563 100644
--- a/xfa/fxfa/parser/cxfa_subsetbelow.h
+++ b/xfa/fxfa/parser/cxfa_subsetbelow.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_SubsetBelow : public CXFA_Node {
+class CXFA_SubsetBelow final : public CXFA_Node {
  public:
   CXFA_SubsetBelow(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_SubsetBelow() override;
diff --git a/xfa/fxfa/parser/cxfa_suppressbanner.h b/xfa/fxfa/parser/cxfa_suppressbanner.h
index 79013a2..40057d0 100644
--- a/xfa/fxfa/parser/cxfa_suppressbanner.h
+++ b/xfa/fxfa/parser/cxfa_suppressbanner.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_SuppressBanner : public CXFA_Node {
+class CXFA_SuppressBanner final : public CXFA_Node {
  public:
   CXFA_SuppressBanner(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_SuppressBanner() override;
diff --git a/xfa/fxfa/parser/cxfa_tagged.h b/xfa/fxfa/parser/cxfa_tagged.h
index 50b1ba4..ff54423 100644
--- a/xfa/fxfa/parser/cxfa_tagged.h
+++ b/xfa/fxfa/parser/cxfa_tagged.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Tagged : public CXFA_Node {
+class CXFA_Tagged final : public CXFA_Node {
  public:
   CXFA_Tagged(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Tagged() override;
diff --git a/xfa/fxfa/parser/cxfa_template.h b/xfa/fxfa/parser/cxfa_template.h
index 34b035f..fa9b999 100644
--- a/xfa/fxfa/parser/cxfa_template.h
+++ b/xfa/fxfa/parser/cxfa_template.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Template : public CXFA_Node {
+class CXFA_Template final : public CXFA_Node {
  public:
   CXFA_Template(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Template() override;
diff --git a/xfa/fxfa/parser/cxfa_templatecache.h b/xfa/fxfa/parser/cxfa_templatecache.h
index 45953fe..dd0136d 100644
--- a/xfa/fxfa/parser/cxfa_templatecache.h
+++ b/xfa/fxfa/parser/cxfa_templatecache.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_TemplateCache : public CXFA_Node {
+class CXFA_TemplateCache final : public CXFA_Node {
  public:
   CXFA_TemplateCache(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_TemplateCache() override;
diff --git a/xfa/fxfa/parser/cxfa_text.h b/xfa/fxfa/parser/cxfa_text.h
index a75aef2..811ce1a 100644
--- a/xfa/fxfa/parser/cxfa_text.h
+++ b/xfa/fxfa/parser/cxfa_text.h
@@ -10,7 +10,7 @@
 #include "core/fxcrt/fx_string.h"
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Text : public CXFA_Node {
+class CXFA_Text final : public CXFA_Node {
  public:
   CXFA_Text(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Text() override;
diff --git a/xfa/fxfa/parser/cxfa_textedit.h b/xfa/fxfa/parser/cxfa_textedit.h
index 97c9764..d4cafa4 100644
--- a/xfa/fxfa/parser/cxfa_textedit.h
+++ b/xfa/fxfa/parser/cxfa_textedit.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_TextEdit : public CXFA_Node {
+class CXFA_TextEdit final : public CXFA_Node {
  public:
   CXFA_TextEdit(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_TextEdit() override;
diff --git a/xfa/fxfa/parser/cxfa_thisproxy.h b/xfa/fxfa/parser/cxfa_thisproxy.h
index f429a2c..4ec6e4a 100644
--- a/xfa/fxfa/parser/cxfa_thisproxy.h
+++ b/xfa/fxfa/parser/cxfa_thisproxy.h
@@ -12,7 +12,7 @@
 
 class CXFA_Node;
 
-class CXFA_ThisProxy : public CXFA_Object {
+class CXFA_ThisProxy final : public CXFA_Object {
  public:
   CXFA_ThisProxy(CXFA_Node* pThisNode, CXFA_Node* pScriptNode);
   ~CXFA_ThisProxy() override;
diff --git a/xfa/fxfa/parser/cxfa_threshold.h b/xfa/fxfa/parser/cxfa_threshold.h
index 4bde01a..597b134 100644
--- a/xfa/fxfa/parser/cxfa_threshold.h
+++ b/xfa/fxfa/parser/cxfa_threshold.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Threshold : public CXFA_Node {
+class CXFA_Threshold final : public CXFA_Node {
  public:
   CXFA_Threshold(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Threshold() override;
diff --git a/xfa/fxfa/parser/cxfa_time.h b/xfa/fxfa/parser/cxfa_time.h
index efc6d02..c189bc5 100644
--- a/xfa/fxfa/parser/cxfa_time.h
+++ b/xfa/fxfa/parser/cxfa_time.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Time : public CXFA_Node {
+class CXFA_Time final : public CXFA_Node {
  public:
   CXFA_Time(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Time() override;
diff --git a/xfa/fxfa/parser/cxfa_timepattern.h b/xfa/fxfa/parser/cxfa_timepattern.h
index f796047..7c150a9 100644
--- a/xfa/fxfa/parser/cxfa_timepattern.h
+++ b/xfa/fxfa/parser/cxfa_timepattern.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_TimePattern : public CXFA_Node {
+class CXFA_TimePattern final : public CXFA_Node {
  public:
   CXFA_TimePattern(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_TimePattern() override;
diff --git a/xfa/fxfa/parser/cxfa_timepatterns.h b/xfa/fxfa/parser/cxfa_timepatterns.h
index be9337d..13c05c8 100644
--- a/xfa/fxfa/parser/cxfa_timepatterns.h
+++ b/xfa/fxfa/parser/cxfa_timepatterns.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_TimePatterns : public CXFA_Node {
+class CXFA_TimePatterns final : public CXFA_Node {
  public:
   CXFA_TimePatterns(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_TimePatterns() override;
diff --git a/xfa/fxfa/parser/cxfa_timestamp.h b/xfa/fxfa/parser/cxfa_timestamp.h
index 7db73e9..6a6c1ac 100644
--- a/xfa/fxfa/parser/cxfa_timestamp.h
+++ b/xfa/fxfa/parser/cxfa_timestamp.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_TimeStamp : public CXFA_Node {
+class CXFA_TimeStamp final : public CXFA_Node {
  public:
   CXFA_TimeStamp(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_TimeStamp() override;
diff --git a/xfa/fxfa/parser/cxfa_to.h b/xfa/fxfa/parser/cxfa_to.h
index f418f59..8510bc2 100644
--- a/xfa/fxfa/parser/cxfa_to.h
+++ b/xfa/fxfa/parser/cxfa_to.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_To : public CXFA_Node {
+class CXFA_To final : public CXFA_Node {
  public:
   CXFA_To(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_To() override;
diff --git a/xfa/fxfa/parser/cxfa_tooltip.h b/xfa/fxfa/parser/cxfa_tooltip.h
index 0b13282..f46ca62 100644
--- a/xfa/fxfa/parser/cxfa_tooltip.h
+++ b/xfa/fxfa/parser/cxfa_tooltip.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_ToolTip : public CXFA_Node {
+class CXFA_ToolTip final : public CXFA_Node {
  public:
   CXFA_ToolTip(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_ToolTip() override;
diff --git a/xfa/fxfa/parser/cxfa_trace.h b/xfa/fxfa/parser/cxfa_trace.h
index dec95da..1d76f73 100644
--- a/xfa/fxfa/parser/cxfa_trace.h
+++ b/xfa/fxfa/parser/cxfa_trace.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Trace : public CXFA_Node {
+class CXFA_Trace final : public CXFA_Node {
  public:
   CXFA_Trace(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Trace() override;
diff --git a/xfa/fxfa/parser/cxfa_transform.h b/xfa/fxfa/parser/cxfa_transform.h
index fde54e6..6409c6c 100644
--- a/xfa/fxfa/parser/cxfa_transform.h
+++ b/xfa/fxfa/parser/cxfa_transform.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Transform : public CXFA_Node {
+class CXFA_Transform final : public CXFA_Node {
  public:
   CXFA_Transform(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Transform() override;
diff --git a/xfa/fxfa/parser/cxfa_traversal.h b/xfa/fxfa/parser/cxfa_traversal.h
index 47422b2..154211b 100644
--- a/xfa/fxfa/parser/cxfa_traversal.h
+++ b/xfa/fxfa/parser/cxfa_traversal.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Traversal : public CXFA_Node {
+class CXFA_Traversal final : public CXFA_Node {
  public:
   CXFA_Traversal(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Traversal() override;
diff --git a/xfa/fxfa/parser/cxfa_traverse.h b/xfa/fxfa/parser/cxfa_traverse.h
index de33cb7..dec5b89 100644
--- a/xfa/fxfa/parser/cxfa_traverse.h
+++ b/xfa/fxfa/parser/cxfa_traverse.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Traverse : public CXFA_Node {
+class CXFA_Traverse final : public CXFA_Node {
  public:
   CXFA_Traverse(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Traverse() override;
diff --git a/xfa/fxfa/parser/cxfa_type.h b/xfa/fxfa/parser/cxfa_type.h
index 5e7d467..ef696fd 100644
--- a/xfa/fxfa/parser/cxfa_type.h
+++ b/xfa/fxfa/parser/cxfa_type.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Type : public CXFA_Node {
+class CXFA_Type final : public CXFA_Node {
  public:
   CXFA_Type(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Type() override;
diff --git a/xfa/fxfa/parser/cxfa_typeface.h b/xfa/fxfa/parser/cxfa_typeface.h
index cbc90c4..7b07cae 100644
--- a/xfa/fxfa/parser/cxfa_typeface.h
+++ b/xfa/fxfa/parser/cxfa_typeface.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Typeface : public CXFA_Node {
+class CXFA_Typeface final : public CXFA_Node {
  public:
   CXFA_Typeface(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Typeface() override;
diff --git a/xfa/fxfa/parser/cxfa_typefaces.h b/xfa/fxfa/parser/cxfa_typefaces.h
index fa4b43f..b65c57d 100644
--- a/xfa/fxfa/parser/cxfa_typefaces.h
+++ b/xfa/fxfa/parser/cxfa_typefaces.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Typefaces : public CXFA_Node {
+class CXFA_Typefaces final : public CXFA_Node {
  public:
   CXFA_Typefaces(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Typefaces() override;
diff --git a/xfa/fxfa/parser/cxfa_ui.h b/xfa/fxfa/parser/cxfa_ui.h
index a4c46f4..d479e95 100644
--- a/xfa/fxfa/parser/cxfa_ui.h
+++ b/xfa/fxfa/parser/cxfa_ui.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Ui : public CXFA_Node {
+class CXFA_Ui final : public CXFA_Node {
  public:
   CXFA_Ui(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Ui() override;
diff --git a/xfa/fxfa/parser/cxfa_update.h b/xfa/fxfa/parser/cxfa_update.h
index 9e652ea..3e6bb6c 100644
--- a/xfa/fxfa/parser/cxfa_update.h
+++ b/xfa/fxfa/parser/cxfa_update.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Update : public CXFA_Node {
+class CXFA_Update final : public CXFA_Node {
  public:
   CXFA_Update(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Update() override;
diff --git a/xfa/fxfa/parser/cxfa_uri.h b/xfa/fxfa/parser/cxfa_uri.h
index bb31596..96252fc 100644
--- a/xfa/fxfa/parser/cxfa_uri.h
+++ b/xfa/fxfa/parser/cxfa_uri.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Uri : public CXFA_Node {
+class CXFA_Uri final : public CXFA_Node {
  public:
   CXFA_Uri(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Uri() override;
diff --git a/xfa/fxfa/parser/cxfa_user.h b/xfa/fxfa/parser/cxfa_user.h
index 3aad173..eca1a37 100644
--- a/xfa/fxfa/parser/cxfa_user.h
+++ b/xfa/fxfa/parser/cxfa_user.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_User : public CXFA_Node {
+class CXFA_User final : public CXFA_Node {
  public:
   CXFA_User(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_User() override;
diff --git a/xfa/fxfa/parser/cxfa_validate.h b/xfa/fxfa/parser/cxfa_validate.h
index a601308..140886f 100644
--- a/xfa/fxfa/parser/cxfa_validate.h
+++ b/xfa/fxfa/parser/cxfa_validate.h
@@ -11,7 +11,7 @@
 
 class CXFA_Script;
 
-class CXFA_Validate : public CXFA_Node {
+class CXFA_Validate final : public CXFA_Node {
  public:
   CXFA_Validate(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Validate() override;
diff --git a/xfa/fxfa/parser/cxfa_validateapprovalsignatures.h b/xfa/fxfa/parser/cxfa_validateapprovalsignatures.h
index d7dac98..0504168 100644
--- a/xfa/fxfa/parser/cxfa_validateapprovalsignatures.h
+++ b/xfa/fxfa/parser/cxfa_validateapprovalsignatures.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_ValidateApprovalSignatures : public CXFA_Node {
+class CXFA_ValidateApprovalSignatures final : public CXFA_Node {
  public:
   CXFA_ValidateApprovalSignatures(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_ValidateApprovalSignatures() override;
diff --git a/xfa/fxfa/parser/cxfa_validationmessaging.h b/xfa/fxfa/parser/cxfa_validationmessaging.h
index 081b24c..1131788 100644
--- a/xfa/fxfa/parser/cxfa_validationmessaging.h
+++ b/xfa/fxfa/parser/cxfa_validationmessaging.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_ValidationMessaging : public CXFA_Node {
+class CXFA_ValidationMessaging final : public CXFA_Node {
  public:
   CXFA_ValidationMessaging(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_ValidationMessaging() override;
diff --git a/xfa/fxfa/parser/cxfa_value.h b/xfa/fxfa/parser/cxfa_value.h
index 47aeefe..ccd4c2c 100644
--- a/xfa/fxfa/parser/cxfa_value.h
+++ b/xfa/fxfa/parser/cxfa_value.h
@@ -17,7 +17,7 @@
 class CXFA_Line;
 class CXFA_Rectangle;
 
-class CXFA_Value : public CXFA_Node {
+class CXFA_Value final : public CXFA_Node {
  public:
   CXFA_Value(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Value() override;
diff --git a/xfa/fxfa/parser/cxfa_variables.h b/xfa/fxfa/parser/cxfa_variables.h
index 4c4cb4e..b9f6d72 100644
--- a/xfa/fxfa/parser/cxfa_variables.h
+++ b/xfa/fxfa/parser/cxfa_variables.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Variables : public CXFA_Node {
+class CXFA_Variables final : public CXFA_Node {
  public:
   CXFA_Variables(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Variables() override;
diff --git a/xfa/fxfa/parser/cxfa_version.h b/xfa/fxfa/parser/cxfa_version.h
index 34462fb..4b4f425 100644
--- a/xfa/fxfa/parser/cxfa_version.h
+++ b/xfa/fxfa/parser/cxfa_version.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Version : public CXFA_Node {
+class CXFA_Version final : public CXFA_Node {
  public:
   CXFA_Version(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Version() override;
diff --git a/xfa/fxfa/parser/cxfa_versioncontrol.h b/xfa/fxfa/parser/cxfa_versioncontrol.h
index 4688f55..733b817 100644
--- a/xfa/fxfa/parser/cxfa_versioncontrol.h
+++ b/xfa/fxfa/parser/cxfa_versioncontrol.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_VersionControl : public CXFA_Node {
+class CXFA_VersionControl final : public CXFA_Node {
  public:
   CXFA_VersionControl(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_VersionControl() override;
diff --git a/xfa/fxfa/parser/cxfa_viewerpreferences.h b/xfa/fxfa/parser/cxfa_viewerpreferences.h
index bf831ee..229061f 100644
--- a/xfa/fxfa/parser/cxfa_viewerpreferences.h
+++ b/xfa/fxfa/parser/cxfa_viewerpreferences.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_ViewerPreferences : public CXFA_Node {
+class CXFA_ViewerPreferences final : public CXFA_Node {
  public:
   CXFA_ViewerPreferences(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_ViewerPreferences() override;
diff --git a/xfa/fxfa/parser/cxfa_webclient.h b/xfa/fxfa/parser/cxfa_webclient.h
index b778689..41da046 100644
--- a/xfa/fxfa/parser/cxfa_webclient.h
+++ b/xfa/fxfa/parser/cxfa_webclient.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_WebClient : public CXFA_Node {
+class CXFA_WebClient final : public CXFA_Node {
  public:
   CXFA_WebClient(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_WebClient() override;
diff --git a/xfa/fxfa/parser/cxfa_whitespace.h b/xfa/fxfa/parser/cxfa_whitespace.h
index 62dde48..096a2da 100644
--- a/xfa/fxfa/parser/cxfa_whitespace.h
+++ b/xfa/fxfa/parser/cxfa_whitespace.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Whitespace : public CXFA_Node {
+class CXFA_Whitespace final : public CXFA_Node {
  public:
   CXFA_Whitespace(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Whitespace() override;
diff --git a/xfa/fxfa/parser/cxfa_window.h b/xfa/fxfa/parser/cxfa_window.h
index 852bc68..fc2fcb7 100644
--- a/xfa/fxfa/parser/cxfa_window.h
+++ b/xfa/fxfa/parser/cxfa_window.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Window : public CXFA_Node {
+class CXFA_Window final : public CXFA_Node {
  public:
   CXFA_Window(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Window() override;
diff --git a/xfa/fxfa/parser/cxfa_wsdladdress.h b/xfa/fxfa/parser/cxfa_wsdladdress.h
index 83c965c..e65bd6f 100644
--- a/xfa/fxfa/parser/cxfa_wsdladdress.h
+++ b/xfa/fxfa/parser/cxfa_wsdladdress.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_WsdlAddress : public CXFA_Node {
+class CXFA_WsdlAddress final : public CXFA_Node {
  public:
   CXFA_WsdlAddress(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_WsdlAddress() override;
diff --git a/xfa/fxfa/parser/cxfa_wsdlconnection.h b/xfa/fxfa/parser/cxfa_wsdlconnection.h
index 6c349cf..b2238fd 100644
--- a/xfa/fxfa/parser/cxfa_wsdlconnection.h
+++ b/xfa/fxfa/parser/cxfa_wsdlconnection.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_WsdlConnection : public CXFA_Node {
+class CXFA_WsdlConnection final : public CXFA_Node {
  public:
   CXFA_WsdlConnection(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_WsdlConnection() override;
diff --git a/xfa/fxfa/parser/cxfa_xdc.h b/xfa/fxfa/parser/cxfa_xdc.h
index 0eb43d5..81cbb57 100644
--- a/xfa/fxfa/parser/cxfa_xdc.h
+++ b/xfa/fxfa/parser/cxfa_xdc.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Xdc : public CXFA_Node {
+class CXFA_Xdc final : public CXFA_Node {
  public:
   CXFA_Xdc(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Xdc() override;
diff --git a/xfa/fxfa/parser/cxfa_xdp.h b/xfa/fxfa/parser/cxfa_xdp.h
index 38b450e..16ad5d8 100644
--- a/xfa/fxfa/parser/cxfa_xdp.h
+++ b/xfa/fxfa/parser/cxfa_xdp.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Xdp : public CXFA_Node {
+class CXFA_Xdp final : public CXFA_Node {
  public:
   CXFA_Xdp(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Xdp() override;
diff --git a/xfa/fxfa/parser/cxfa_xfa.h b/xfa/fxfa/parser/cxfa_xfa.h
index 137b601..d7d33df 100644
--- a/xfa/fxfa/parser/cxfa_xfa.h
+++ b/xfa/fxfa/parser/cxfa_xfa.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Xfa : public CXFA_Node {
+class CXFA_Xfa final : public CXFA_Node {
  public:
   CXFA_Xfa(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Xfa() override;
diff --git a/xfa/fxfa/parser/cxfa_xmlconnection.h b/xfa/fxfa/parser/cxfa_xmlconnection.h
index f9158c6..33cc038 100644
--- a/xfa/fxfa/parser/cxfa_xmlconnection.h
+++ b/xfa/fxfa/parser/cxfa_xmlconnection.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_XmlConnection : public CXFA_Node {
+class CXFA_XmlConnection final : public CXFA_Node {
  public:
   CXFA_XmlConnection(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_XmlConnection() override;
diff --git a/xfa/fxfa/parser/cxfa_xmllocale.h b/xfa/fxfa/parser/cxfa_xmllocale.h
index de3de41..07d417e 100644
--- a/xfa/fxfa/parser/cxfa_xmllocale.h
+++ b/xfa/fxfa/parser/cxfa_xmllocale.h
@@ -16,7 +16,7 @@
 class CFX_XMLDocument;
 class CFX_XMLElement;
 
-class CXFA_XMLLocale : public LocaleIface {
+class CXFA_XMLLocale final : public LocaleIface {
  public:
   static std::unique_ptr<CXFA_XMLLocale> Create(pdfium::span<uint8_t> data);
 
diff --git a/xfa/fxfa/parser/cxfa_xsdconnection.h b/xfa/fxfa/parser/cxfa_xsdconnection.h
index 652d45e..8cdef80 100644
--- a/xfa/fxfa/parser/cxfa_xsdconnection.h
+++ b/xfa/fxfa/parser/cxfa_xsdconnection.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_XsdConnection : public CXFA_Node {
+class CXFA_XsdConnection final : public CXFA_Node {
  public:
   CXFA_XsdConnection(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_XsdConnection() override;
diff --git a/xfa/fxfa/parser/cxfa_xsl.h b/xfa/fxfa/parser/cxfa_xsl.h
index d921125..1be8d4b 100644
--- a/xfa/fxfa/parser/cxfa_xsl.h
+++ b/xfa/fxfa/parser/cxfa_xsl.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Xsl : public CXFA_Node {
+class CXFA_Xsl final : public CXFA_Node {
  public:
   CXFA_Xsl(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Xsl() override;
diff --git a/xfa/fxfa/parser/cxfa_zpl.h b/xfa/fxfa/parser/cxfa_zpl.h
index ee8f925..6433015 100644
--- a/xfa/fxfa/parser/cxfa_zpl.h
+++ b/xfa/fxfa/parser/cxfa_zpl.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-class CXFA_Zpl : public CXFA_Node {
+class CXFA_Zpl final : public CXFA_Node {
  public:
   CXFA_Zpl(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Zpl() override;