Use smart pointers for class owned pointers in xfa/fwl/theme

Use smart pointers instead of raw pointer to make memory management
easier for classes under xfa/fwl/theme.

BUG=pdfium:518

Review-Url: https://codereview.chromium.org/2230813002
diff --git a/xfa/fwl/theme/cfwl_checkboxtp.cpp b/xfa/fwl/theme/cfwl_checkboxtp.cpp
index d00a097..45b0154 100644
--- a/xfa/fwl/theme/cfwl_checkboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_checkboxtp.cpp
@@ -28,17 +28,13 @@
 #define CHECKBOX_COLOR_BOXRB1 (ArgbEncode(255, 241, 239, 226))
 #define CHECKBOX_COLOR_BOXRB2 (ArgbEncode(255, 255, 255, 255))
 
-CFWL_CheckBoxTP::CFWL_CheckBoxTP()
-    : m_pThemeData(new CKBThemeData), m_pCheckPath(nullptr) {
+CFWL_CheckBoxTP::CFWL_CheckBoxTP() : m_pThemeData(new CKBThemeData) {
   SetThemeData(0);
 }
 
 CFWL_CheckBoxTP::~CFWL_CheckBoxTP() {
-  delete m_pThemeData;
-  if (m_pCheckPath) {
+  if (m_pCheckPath)
     m_pCheckPath->Clear();
-    delete m_pCheckPath;
-  }
 }
 
 bool CFWL_CheckBoxTP::IsValidWidget(IFWL_Widget* pWidget) {
@@ -48,11 +44,11 @@
 uint32_t CFWL_CheckBoxTP::SetThemeID(IFWL_Widget* pWidget,
                                      uint32_t dwThemeID,
                                      FX_BOOL bChildren) {
-  if (m_pThemeData) {
+  if (m_pThemeData)
     SetThemeData(FWL_GetThemeColor(dwThemeID));
-  }
   return CFWL_WidgetTP::SetThemeID(pWidget, dwThemeID, bChildren);
 }
+
 FX_BOOL CFWL_CheckBoxTP::DrawText(CFWL_ThemeText* pParams) {
   if (!m_pTextOut)
     return FALSE;
@@ -61,6 +57,7 @@
                                : FWLTHEME_CAPACITY_TextColor);
   return CFWL_WidgetTP::DrawText(pParams);
 }
+
 FX_BOOL CFWL_CheckBoxTP::DrawBackground(CFWL_ThemeBackground* pParams) {
   if (!pParams)
     return FALSE;
@@ -100,14 +97,17 @@
   }
   return TRUE;
 }
+
 FWL_Error CFWL_CheckBoxTP::Initialize() {
   InitTTO();
   return CFWL_WidgetTP::Initialize();
 }
+
 FWL_Error CFWL_CheckBoxTP::Finalize() {
   FinalizeTTO();
   return CFWL_WidgetTP::Finalize();
 }
+
 void CFWL_CheckBoxTP::DrawBoxBk(IFWL_Widget* pWidget,
                                 CFX_Graphics* pGraphics,
                                 const CFX_RectF* pRect,
@@ -159,6 +159,7 @@
                    m_pThemeData->clrBoxBk[iTheme][0],
                    m_pThemeData->clrBoxBk[iTheme][1], &path, fillMode, pMatrix);
 }
+
 void CFWL_CheckBoxTP::DrawSign(IFWL_Widget* pWidget,
                                CFX_Graphics* pGraphics,
                                const CFX_RectF* pRtBox,
@@ -216,19 +217,21 @@
     FillSoildRect(pGraphics, ArgbEncode(255, 33, 161, 33), &rtSign, pMatrix);
   }
 }
+
 void CFWL_CheckBoxTP::DrawSignNeutral(CFX_Graphics* pGraphics,
                                       const CFX_RectF* pRtSign,
                                       CFX_Matrix* pMatrix) {
   ((CFX_RectF*)pRtSign)->Inflate(-3, -3);
   FillSoildRect(pGraphics, m_pThemeData->clrSignNeutral, pRtSign, pMatrix);
 }
+
 void CFWL_CheckBoxTP::DrawSignCheck(CFX_Graphics* pGraphics,
                                     const CFX_RectF* pRtSign,
                                     FX_ARGB argbFill,
                                     CFX_Matrix* pMatrix) {
-  if (!m_pCheckPath) {
-    initCheckPath(pRtSign->width);
-  }
+  if (!m_pCheckPath)
+    InitCheckPath(pRtSign->width);
+
   CFX_Matrix mt;
   mt.SetIdentity();
   mt.Translate(pRtSign->left, pRtSign->top);
@@ -236,9 +239,10 @@
   CFX_Color crFill(argbFill);
   pGraphics->SaveGraphState();
   pGraphics->SetFillColor(&crFill);
-  pGraphics->FillPath(m_pCheckPath, FXFILL_WINDING, &mt);
+  pGraphics->FillPath(m_pCheckPath.get(), FXFILL_WINDING, &mt);
   pGraphics->RestoreGraphState();
 }
+
 void CFWL_CheckBoxTP::DrawSignCircle(CFX_Graphics* pGraphics,
                                      const CFX_RectF* pRtSign,
                                      FX_ARGB argbFill,
@@ -252,6 +256,7 @@
   pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
   pGraphics->RestoreGraphState();
 }
+
 void CFWL_CheckBoxTP::DrawSignCross(CFX_Graphics* pGraphics,
                                     const CFX_RectF* pRtSign,
                                     FX_ARGB argbFill,
@@ -269,6 +274,7 @@
   pGraphics->StrokePath(&path, pMatrix);
   pGraphics->RestoreGraphState();
 }
+
 void CFWL_CheckBoxTP::DrawSignDiamond(CFX_Graphics* pGraphics,
                                       const CFX_RectF* pRtSign,
                                       FX_ARGB argbFill,
@@ -289,6 +295,7 @@
   pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
   pGraphics->RestoreGraphState();
 }
+
 void CFWL_CheckBoxTP::DrawSignSquare(CFX_Graphics* pGraphics,
                                      const CFX_RectF* pRtSign,
                                      FX_ARGB argbFill,
@@ -303,6 +310,7 @@
   pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
   pGraphics->RestoreGraphState();
 }
+
 void CFWL_CheckBoxTP::DrawSignStar(CFX_Graphics* pGraphics,
                                    const CFX_RectF* pRtSign,
                                    FX_ARGB argbFill,
@@ -336,6 +344,7 @@
   pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
   pGraphics->RestoreGraphState();
 }
+
 void CFWL_CheckBoxTP::DrawSignBorder(IFWL_Widget* pWidget,
                                      CFX_Graphics* pGraphics,
                                      const CFX_RectF* pRtBox,
@@ -368,6 +377,7 @@
     }
   }
 }
+
 void CFWL_CheckBoxTP::SetThemeData(uint32_t dwID) {
   uint32_t* pData = (uint32_t*)&m_pThemeData->clrBoxBk;
   if (dwID) {
@@ -436,9 +446,10 @@
     m_pThemeData->clrSignNeutralPressed = ArgbEncode(255, 28, 134, 26);
   }
 }
-void CFWL_CheckBoxTP::initCheckPath(FX_FLOAT fCheckLen) {
+
+void CFWL_CheckBoxTP::InitCheckPath(FX_FLOAT fCheckLen) {
   if (!m_pCheckPath) {
-    m_pCheckPath = new CFX_Path;
+    m_pCheckPath.reset(new CFX_Path);
     m_pCheckPath->Create();
     FX_FLOAT fWidth = kSignPath;
     FX_FLOAT fHeight = -kSignPath;
diff --git a/xfa/fwl/theme/cfwl_checkboxtp.h b/xfa/fwl/theme/cfwl_checkboxtp.h
index ce44f70..42d86d1 100644
--- a/xfa/fwl/theme/cfwl_checkboxtp.h
+++ b/xfa/fwl/theme/cfwl_checkboxtp.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FWL_THEME_CFWL_CHECKBOXTP_H_
 #define XFA_FWL_THEME_CFWL_CHECKBOXTP_H_
 
+#include <memory>
+
 #include "xfa/fwl/theme/cfwl_utils.h"
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
@@ -26,50 +28,6 @@
   FWL_Error Finalize() override;
 
  protected:
-  void DrawBoxBk(IFWL_Widget* pWidget,
-                 CFX_Graphics* pGraphics,
-                 const CFX_RectF* pRect,
-                 uint32_t dwStates,
-                 CFX_Matrix* pMatrix = nullptr);
-  void DrawSign(IFWL_Widget* pWidget,
-                CFX_Graphics* pGraphics,
-                const CFX_RectF* pRtBox,
-                uint32_t dwStates,
-                CFX_Matrix* pMatrix = nullptr);
-  void DrawSignNeutral(CFX_Graphics* pGraphics,
-                       const CFX_RectF* pRtSign,
-                       CFX_Matrix* pMatrix = nullptr);
-  void DrawSignCheck(CFX_Graphics* pGraphics,
-                     const CFX_RectF* pRtSign,
-                     FX_ARGB argbFill,
-                     CFX_Matrix* pMatrix = nullptr);
-  void DrawSignCircle(CFX_Graphics* pGraphics,
-                      const CFX_RectF* pRtSign,
-                      FX_ARGB argbFill,
-                      CFX_Matrix* pMatrix = nullptr);
-  void DrawSignCross(CFX_Graphics* pGraphics,
-                     const CFX_RectF* pRtSign,
-                     FX_ARGB argbFill,
-                     CFX_Matrix* pMatrix = nullptr);
-  void DrawSignDiamond(CFX_Graphics* pGraphics,
-                       const CFX_RectF* pRtSign,
-                       FX_ARGB argbFill,
-                       CFX_Matrix* pMatrix = nullptr);
-  void DrawSignSquare(CFX_Graphics* pGraphics,
-                      const CFX_RectF* pRtSign,
-                      FX_ARGB argbFill,
-                      CFX_Matrix* pMatrix = nullptr);
-  void DrawSignStar(CFX_Graphics* pGraphics,
-                    const CFX_RectF* pRtSign,
-                    FX_ARGB argbFill,
-                    CFX_Matrix* pMatrix = nullptr);
-  void DrawSignBorder(IFWL_Widget* pWidget,
-                      CFX_Graphics* pGraphics,
-                      const CFX_RectF* pRtBox,
-                      FX_BOOL bDisable = FALSE,
-                      CFX_Matrix* pMatrix = nullptr);
-  void SetThemeData(uint32_t dwID);
-  void initCheckPath(FX_FLOAT fCheckLen);
   struct CKBThemeData {
     FX_ARGB clrBoxBk[13][2];
     FX_ARGB clrSignBorderNormal;
@@ -79,8 +37,55 @@
     FX_ARGB clrSignNeutralNormal;
     FX_ARGB clrSignNeutralHover;
     FX_ARGB clrSignNeutralPressed;
-  } * m_pThemeData;
-  CFX_Path* m_pCheckPath;
+  };
+
+  void DrawBoxBk(IFWL_Widget* pWidget,
+                 CFX_Graphics* pGraphics,
+                 const CFX_RectF* pRect,
+                 uint32_t dwStates,
+                 CFX_Matrix* pMatrix);
+  void DrawSign(IFWL_Widget* pWidget,
+                CFX_Graphics* pGraphics,
+                const CFX_RectF* pRtBox,
+                uint32_t dwStates,
+                CFX_Matrix* pMatrix);
+  void DrawSignNeutral(CFX_Graphics* pGraphics,
+                       const CFX_RectF* pRtSign,
+                       CFX_Matrix* pMatrix);
+  void DrawSignCheck(CFX_Graphics* pGraphics,
+                     const CFX_RectF* pRtSign,
+                     FX_ARGB argbFill,
+                     CFX_Matrix* pMatrix);
+  void DrawSignCircle(CFX_Graphics* pGraphics,
+                      const CFX_RectF* pRtSign,
+                      FX_ARGB argbFill,
+                      CFX_Matrix* pMatrix);
+  void DrawSignCross(CFX_Graphics* pGraphics,
+                     const CFX_RectF* pRtSign,
+                     FX_ARGB argbFill,
+                     CFX_Matrix* pMatrix);
+  void DrawSignDiamond(CFX_Graphics* pGraphics,
+                       const CFX_RectF* pRtSign,
+                       FX_ARGB argbFill,
+                       CFX_Matrix* pMatrix);
+  void DrawSignSquare(CFX_Graphics* pGraphics,
+                      const CFX_RectF* pRtSign,
+                      FX_ARGB argbFill,
+                      CFX_Matrix* pMatrix);
+  void DrawSignStar(CFX_Graphics* pGraphics,
+                    const CFX_RectF* pRtSign,
+                    FX_ARGB argbFill,
+                    CFX_Matrix* pMatrix);
+  void DrawSignBorder(IFWL_Widget* pWidget,
+                      CFX_Graphics* pGraphics,
+                      const CFX_RectF* pRtBox,
+                      FX_BOOL bDisable,
+                      CFX_Matrix* pMatrix);
+  void SetThemeData(uint32_t dwID);
+  void InitCheckPath(FX_FLOAT fCheckLen);
+
+  std::unique_ptr<CKBThemeData> m_pThemeData;
+  std::unique_ptr<CFX_Path> m_pCheckPath;
 };
 
 #endif  // XFA_FWL_THEME_CFWL_CHECKBOXTP_H_
diff --git a/xfa/fwl/theme/cfwl_datetimepickertp.cpp b/xfa/fwl/theme/cfwl_datetimepickertp.cpp
index a303a4e..d43694c 100644
--- a/xfa/fwl/theme/cfwl_datetimepickertp.cpp
+++ b/xfa/fwl/theme/cfwl_datetimepickertp.cpp
@@ -9,14 +9,9 @@
 #include "xfa/fwl/basewidget/ifwl_datetimepicker.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
 
-CFWL_DateTimePickerTP::CFWL_DateTimePickerTP() {
-  m_pThemeData = new DTPThemeData;
-  initThemeData();
-}
+CFWL_DateTimePickerTP::CFWL_DateTimePickerTP() {}
 
-CFWL_DateTimePickerTP::~CFWL_DateTimePickerTP() {
-  delete m_pThemeData;
-}
+CFWL_DateTimePickerTP::~CFWL_DateTimePickerTP() {}
 
 bool CFWL_DateTimePickerTP::IsValidWidget(IFWL_Widget* pWidget) {
   return pWidget && pWidget->GetClassID() == FWL_Type::DateTimePicker;
@@ -72,32 +67,3 @@
                FWLTHEME_DIRECTION_Down, eState, pMatrix);
 }
 
-void CFWL_DateTimePickerTP::initThemeData() {
-  uint32_t* pData = (uint32_t*)&m_pThemeData->BoxBkColor;
-  *pData++ = 0;
-  *pData++ = 0;
-  *pData++ = ArgbEncode(255, 220, 220, 215),
-  *pData++ = ArgbEncode(255, 255, 255, 255),
-  *pData++ = ArgbEncode(255, 255, 240, 207),
-  *pData++ = ArgbEncode(255, 248, 179, 48),
-  *pData++ = ArgbEncode(255, 176, 176, 167),
-  *pData++ = ArgbEncode(255, 241, 239, 239),
-  *pData++ = ArgbEncode(255, 255, 255, 255),
-  *pData++ = ArgbEncode(255, 255, 255, 255),
-  *pData++ = ArgbEncode(255, 220, 220, 215),
-  *pData++ = ArgbEncode(255, 255, 255, 255),
-  *pData++ = ArgbEncode(255, 255, 240, 207),
-  *pData++ = ArgbEncode(255, 248, 179, 48),
-  *pData++ = ArgbEncode(255, 176, 176, 167),
-  *pData++ = ArgbEncode(255, 241, 239, 239),
-  *pData++ = ArgbEncode(255, 255, 255, 255),
-  *pData++ = ArgbEncode(255, 255, 255, 255),
-  *pData++ = ArgbEncode(255, 220, 220, 215),
-  *pData++ = ArgbEncode(255, 255, 255, 255),
-  *pData++ = ArgbEncode(255, 255, 240, 207),
-  *pData++ = ArgbEncode(255, 248, 179, 48),
-  *pData++ = ArgbEncode(255, 176, 176, 167),
-  *pData++ = ArgbEncode(255, 241, 239, 239),
-  *pData++ = ArgbEncode(255, 255, 255, 255),
-  *pData++ = ArgbEncode(255, 255, 255, 255);
-}
diff --git a/xfa/fwl/theme/cfwl_datetimepickertp.h b/xfa/fwl/theme/cfwl_datetimepickertp.h
index 1b8899b..04bd910 100644
--- a/xfa/fwl/theme/cfwl_datetimepickertp.h
+++ b/xfa/fwl/theme/cfwl_datetimepickertp.h
@@ -20,11 +20,6 @@
 
  protected:
   void DrawDropDownButton(CFWL_ThemeBackground* pParams, CFX_Matrix* pMatrix);
-  void initThemeData();
-
-  struct DTPThemeData {
-    FX_ARGB BoxBkColor[13][2];
-  } * m_pThemeData;
 };
 
 #endif  // XFA_FWL_THEME_CFWL_DATETIMEPICKERTP_H_
diff --git a/xfa/fwl/theme/cfwl_monthcalendartp.cpp b/xfa/fwl/theme/cfwl_monthcalendartp.cpp
index d04ebb1..7faa8e1 100644
--- a/xfa/fwl/theme/cfwl_monthcalendartp.cpp
+++ b/xfa/fwl/theme/cfwl_monthcalendartp.cpp
@@ -49,26 +49,25 @@
 
 }  // namespace
 
-CFWL_MonthCalendarTP::CFWL_MonthCalendarTP() {
-  m_pThemeData = new MCThemeData;
+CFWL_MonthCalendarTP::CFWL_MonthCalendarTP() : m_pThemeData(new MCThemeData) {
   SetThemeData(0);
 }
 
-CFWL_MonthCalendarTP::~CFWL_MonthCalendarTP() {
-  delete m_pThemeData;
-}
+CFWL_MonthCalendarTP::~CFWL_MonthCalendarTP() {}
 
 bool CFWL_MonthCalendarTP::IsValidWidget(IFWL_Widget* pWidget) {
   return pWidget && pWidget->GetClassID() == FWL_Type::MonthCalendar;
 }
+
 uint32_t CFWL_MonthCalendarTP::SetThemeID(IFWL_Widget* pWidget,
                                           uint32_t dwThemeID,
                                           FX_BOOL bChildren) {
-  if (m_pThemeData) {
+  if (m_pThemeData)
     SetThemeData(FWL_GetThemeColor(dwThemeID));
-  }
+
   return CFWL_WidgetTP::SetThemeID(pWidget, dwThemeID, bChildren);
 }
+
 FX_BOOL CFWL_MonthCalendarTP::DrawBackground(CFWL_ThemeBackground* pParams) {
   if (!pParams)
     return FALSE;
diff --git a/xfa/fwl/theme/cfwl_monthcalendartp.h b/xfa/fwl/theme/cfwl_monthcalendartp.h
index 7ecbb90..b10258a 100644
--- a/xfa/fwl/theme/cfwl_monthcalendartp.h
+++ b/xfa/fwl/theme/cfwl_monthcalendartp.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FWL_THEME_CFWL_MONTHCALENDARTP_H_
 #define XFA_FWL_THEME_CFWL_MONTHCALENDARTP_H_
 
+#include <memory>
+
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
 class CFWL_MonthCalendarTP : public CFWL_WidgetTP {
@@ -27,6 +29,16 @@
   FWL_Error Finalize() override;
 
  protected:
+  struct MCThemeData {
+    FX_ARGB clrCaption;
+    FX_ARGB clrSeperator;
+    FX_ARGB clrDatesHoverBK;
+    FX_ARGB clrDatesSelectedBK;
+    FX_ARGB clrDatesCircle;
+    FX_ARGB clrToday;
+    FX_ARGB clrBK;
+  };
+
   FX_BOOL DrawTotalBK(CFWL_ThemeBackground* pParams, CFX_Matrix* pMatrix);
   FX_BOOL DrawHeadBk(CFWL_ThemeBackground* pParams, CFX_Matrix* pMatrix);
   FX_BOOL DrawLButton(CFWL_ThemeBackground* pParams, CFX_Matrix* pMatrix);
@@ -39,16 +51,7 @@
   FWLTHEME_STATE GetState(uint32_t dwFWLStates);
   void SetThemeData(uint32_t dwThemeID);
 
-  class MCThemeData {
-   public:
-    FX_ARGB clrCaption;
-    FX_ARGB clrSeperator;
-    FX_ARGB clrDatesHoverBK;
-    FX_ARGB clrDatesSelectedBK;
-    FX_ARGB clrDatesCircle;
-    FX_ARGB clrToday;
-    FX_ARGB clrBK;
-  } * m_pThemeData;
+  std::unique_ptr<MCThemeData> m_pThemeData;
   CFX_WideString wsResource;
 };
 
diff --git a/xfa/fwl/theme/cfwl_pushbuttontp.cpp b/xfa/fwl/theme/cfwl_pushbuttontp.cpp
index 17c02ae..cf9991e 100644
--- a/xfa/fwl/theme/cfwl_pushbuttontp.cpp
+++ b/xfa/fwl/theme/cfwl_pushbuttontp.cpp
@@ -19,9 +19,7 @@
   SetThemeData(0);
 }
 
-CFWL_PushButtonTP::~CFWL_PushButtonTP() {
-  delete m_pThemeData;
-}
+CFWL_PushButtonTP::~CFWL_PushButtonTP() {}
 
 bool CFWL_PushButtonTP::IsValidWidget(IFWL_Widget* pWidget) {
   return pWidget && pWidget->GetClassID() == FWL_Type::PushButton;
@@ -155,7 +153,7 @@
     m_pThemeData->clrFill[4] = ArgbEncode(255, 245, 244, 234);
   }
 }
-int32_t CFWL_PushButtonTP::GetColorID(uint32_t dwStates) {
+int32_t CFWL_PushButtonTP::GetColorID(uint32_t dwStates) const {
   int32_t color = 0;
   if (dwStates & CFWL_PartState_Disabled)
     color += 4;
diff --git a/xfa/fwl/theme/cfwl_pushbuttontp.h b/xfa/fwl/theme/cfwl_pushbuttontp.h
index 6312cd5..6c091f7 100644
--- a/xfa/fwl/theme/cfwl_pushbuttontp.h
+++ b/xfa/fwl/theme/cfwl_pushbuttontp.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FWL_THEME_CFWL_PUSHBUTTONTP_H_
 #define XFA_FWL_THEME_CFWL_PUSHBUTTONTP_H_
 
+#include <memory>
+
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
 class CFWL_PushButtonTP : public CFWL_WidgetTP {
@@ -41,9 +43,10 @@
   void SetBackgroudColor(uint32_t* pData);
   void SetCaptionColor(uint32_t* pData);
   void SetCornerColor(uint32_t* pData);
-  int32_t GetColorID(uint32_t dwStates);
 
-  struct PBThemeData* m_pThemeData;
+  int32_t GetColorID(uint32_t dwStates) const;
+
+  std::unique_ptr<PBThemeData> m_pThemeData;
 };
 
 #endif  // XFA_FWL_THEME_CFWL_PUSHBUTTONTP_H_
diff --git a/xfa/fwl/theme/cfwl_scrollbartp.cpp b/xfa/fwl/theme/cfwl_scrollbartp.cpp
index aa801ad..6583f0e 100644
--- a/xfa/fwl/theme/cfwl_scrollbartp.cpp
+++ b/xfa/fwl/theme/cfwl_scrollbartp.cpp
@@ -23,9 +23,7 @@
   SetThemeData(0);
 }
 
-CFWL_ScrollBarTP::~CFWL_ScrollBarTP() {
-  delete m_pThemeData;
-}
+CFWL_ScrollBarTP::~CFWL_ScrollBarTP() {}
 
 bool CFWL_ScrollBarTP::IsValidWidget(IFWL_Widget* pWidget) {
   return pWidget && pWidget->GetClassID() == FWL_Type::ScrollBar;
@@ -41,9 +39,8 @@
 uint32_t CFWL_ScrollBarTP::SetThemeID(IFWL_Widget* pWidget,
                                       uint32_t dwThemeID,
                                       FX_BOOL bChildren) {
-  if (m_pThemeData) {
+  if (m_pThemeData)
     SetThemeData(FWL_GetThemeColor(dwThemeID));
-  }
   return CFWL_WidgetTP::SetThemeID(pWidget, dwThemeID, bChildren);
 }
 FX_BOOL CFWL_ScrollBarTP::DrawBackground(CFWL_ThemeBackground* pParams) {
diff --git a/xfa/fwl/theme/cfwl_scrollbartp.h b/xfa/fwl/theme/cfwl_scrollbartp.h
index ce32f5e..e9c6222 100644
--- a/xfa/fwl/theme/cfwl_scrollbartp.h
+++ b/xfa/fwl/theme/cfwl_scrollbartp.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FWL_THEME_CFWL_SCROLLBARTP_H_
 #define XFA_FWL_THEME_CFWL_SCROLLBARTP_H_
 
+#include <memory>
+
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
 class CFWL_ScrollBarTP : public CFWL_WidgetTP {
@@ -57,7 +59,7 @@
                CFX_Matrix* pMatrix = nullptr);
   void SetThemeData(uint32_t dwID);
 
-  struct SBThemeData* m_pThemeData;
+  std::unique_ptr<SBThemeData> m_pThemeData;
 };
 
 #endif  // XFA_FWL_THEME_CFWL_SCROLLBARTP_H_