Forward declare XFA_MAPDATABLOCKCALLBACKINFO in cjx_object.h

-- Move more code to the corresponding .cpp file
-- Remove some typedefs
-- Introduce XFA_MAPDATABLOCKSIZE() macro for consistency
-- Make iBytes member be a size_t

Change-Id: I21a5eaa154b998633c2d6fa7e0c8ee24a1e0d0bc
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/74610
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp
index 6662804..f2f6636 100644
--- a/fxjs/xfa/cjx_object.cpp
+++ b/fxjs/xfa/cjx_object.cpp
@@ -55,9 +55,6 @@
   pData = new WideString(*reinterpret_cast<WideString*>(pData));
 }
 
-const XFA_MAPDATABLOCKCALLBACKINFO deleteWideStringCallBack = {
-    XFA_DeleteWideString, XFA_CopyWideString};
-
 enum XFA_KEYTYPE {
   XFA_KEYTYPE_Custom,
   XFA_KEYTYPE_Element,
@@ -107,11 +104,19 @@
 
 }  // namespace
 
+struct XFA_MAPDATABLOCKCALLBACKINFO {
+  void (*pFree)(void* pData);
+  void (*pCopy)(void*& pData);
+};
+
 struct XFA_MAPDATABLOCK {
+  static size_t SizeForCapacity(size_t capacity) {
+    return sizeof(XFA_MAPDATABLOCK) + capacity;
+  }
   uint8_t* GetData() const { return (uint8_t*)this + sizeof(XFA_MAPDATABLOCK); }
 
   const XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo;
-  int32_t iBytes;
+  size_t iBytes;
 };
 
 struct XFA_MAPMODULEDATA {
@@ -122,6 +127,9 @@
   std::map<void*, XFA_MAPDATABLOCK*> m_BufferMap;
 };
 
+const XFA_MAPDATABLOCKCALLBACKINFO deleteWideStringCallBack = {
+    XFA_DeleteWideString, XFA_CopyWideString};
+
 CJX_Object::CJX_Object(CXFA_Object* obj) : object_(obj) {}
 
 CJX_Object::~CJX_Object() {
@@ -878,18 +886,18 @@
 void CJX_Object::SetMapModuleBuffer(
     void* pKey,
     void* pValue,
-    int32_t iBytes,
+    size_t iBytes,
     const XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo) {
   XFA_MAPDATABLOCK*& pBuffer = CreateMapModuleData()->m_BufferMap[pKey];
   if (!pBuffer) {
     pBuffer = reinterpret_cast<XFA_MAPDATABLOCK*>(
-        FX_Alloc(uint8_t, sizeof(XFA_MAPDATABLOCK) + iBytes));
+        FX_Alloc(uint8_t, XFA_MAPDATABLOCK::SizeForCapacity(iBytes)));
   } else if (pBuffer->iBytes != iBytes) {
     if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree)
       pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData());
 
-    pBuffer = reinterpret_cast<XFA_MAPDATABLOCK*>(
-        FX_Realloc(uint8_t, pBuffer, sizeof(XFA_MAPDATABLOCK) + iBytes));
+    pBuffer = reinterpret_cast<XFA_MAPDATABLOCK*>(FX_Realloc(
+        uint8_t, pBuffer, XFA_MAPDATABLOCK::SizeForCapacity(iBytes)));
   } else if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) {
     pBuffer->pCallbackInfo->pFree(
         *reinterpret_cast<void**>(pBuffer->GetData()));
@@ -1000,13 +1008,14 @@
     }
     if (!pDstBuffer) {
       pDstBuffer = (XFA_MAPDATABLOCK*)FX_Alloc(
-          uint8_t, sizeof(XFA_MAPDATABLOCK) + pSrcBuffer->iBytes);
+          uint8_t, XFA_MAPDATABLOCK::SizeForCapacity(pSrcBuffer->iBytes));
     } else if (pDstBuffer->iBytes != pSrcBuffer->iBytes) {
       if (pDstBuffer->pCallbackInfo && pDstBuffer->pCallbackInfo->pFree) {
         pDstBuffer->pCallbackInfo->pFree(*(void**)pDstBuffer->GetData());
       }
       pDstBuffer = (XFA_MAPDATABLOCK*)FX_Realloc(
-          uint8_t, pDstBuffer, sizeof(XFA_MAPDATABLOCK) + pSrcBuffer->iBytes);
+          uint8_t, pDstBuffer,
+          XFA_MAPDATABLOCK::SizeForCapacity(pSrcBuffer->iBytes));
     } else if (pDstBuffer->pCallbackInfo && pDstBuffer->pCallbackInfo->pFree) {
       pDstBuffer->pCallbackInfo->pFree(*(void**)pDstBuffer->GetData());
     }
diff --git a/fxjs/xfa/cjx_object.h b/fxjs/xfa/cjx_object.h
index 7672926..c2fc217 100644
--- a/fxjs/xfa/cjx_object.h
+++ b/fxjs/xfa/cjx_object.h
@@ -31,6 +31,7 @@
 class CXFA_LayoutItem;
 class CXFA_Node;
 class CXFA_Object;
+struct XFA_MAPDATABLOCKCALLBACKINFO;
 struct XFA_MAPMODULEDATA;
 
 typedef CJS_Result (*CJX_MethodCall)(
@@ -43,14 +44,6 @@
   CJX_MethodCall pMethodCall;
 };
 
-typedef void (*PD_CALLBACK_FREEDATA)(void* pData);
-typedef void (*PD_CALLBACK_DUPLICATEDATA)(void*& pData);
-
-struct XFA_MAPDATABLOCKCALLBACKINFO {
-  PD_CALLBACK_FREEDATA pFree;
-  PD_CALLBACK_DUPLICATEDATA pCopy;
-};
-
 enum XFA_SOM_MESSAGETYPE {
   XFA_SOM_ValidationMessage,
   XFA_SOM_FormatMessage,
@@ -272,7 +265,7 @@
   Optional<WideString> GetMapModuleString(void* pKey) const;
   void SetMapModuleBuffer(void* pKey,
                           void* pValue,
-                          int32_t iBytes,
+                          size_t iBytes,
                           const XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo);
   bool GetMapModuleBuffer(void* pKey, void** pValue, int32_t* pBytes) const;
   bool HasMapModuleKey(void* pKey);