diff --git a/BUILD.gn b/BUILD.gn
index 451af01..3e3f22f 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -363,8 +363,6 @@
     "core/fpdfdoc/cpvt_generateap.h",
     "core/fpdfdoc/cpvt_line.h",
     "core/fpdfdoc/cpvt_lineinfo.h",
-    "core/fpdfdoc/cpvt_sectioninfo.cpp",
-    "core/fpdfdoc/cpvt_sectioninfo.h",
     "core/fpdfdoc/cpvt_word.h",
     "core/fpdfdoc/cpvt_wordinfo.cpp",
     "core/fpdfdoc/cpvt_wordinfo.h",
diff --git a/core/fpdfdoc/cpdf_variabletext.cpp b/core/fpdfdoc/cpdf_variabletext.cpp
index e12f949..18aa957 100644
--- a/core/fpdfdoc/cpdf_variabletext.cpp
+++ b/core/fpdfdoc/cpdf_variabletext.cpp
@@ -146,9 +146,9 @@
   word.Word = pWord->Word;
   word.nCharset = pWord->nCharset;
   word.fWidth = m_pVT->GetWordWidth(*pWord);
-  word.ptWord = m_pVT->InToOut(
-      CFX_PointF(pWord->fWordX + pSection->m_SecInfo.rcSection.left,
-                 pWord->fWordY + pSection->m_SecInfo.rcSection.top));
+  word.ptWord =
+      m_pVT->InToOut(CFX_PointF(pWord->fWordX + pSection->m_Rect.left,
+                                pWord->fWordY + pSection->m_Rect.top));
   word.fAscent = m_pVT->GetWordAscent(*pWord);
   word.fDescent = m_pVT->GetWordDescent(*pWord);
   word.nFontIndex = m_pVT->GetWordFontIndex(*pWord);
@@ -168,8 +168,8 @@
 
   CLine* pLine = pSection->m_LineArray[m_CurPos.nLineIndex].get();
   line.ptLine = m_pVT->InToOut(
-      CFX_PointF(pLine->m_LineInfo.fLineX + pSection->m_SecInfo.rcSection.left,
-                 pLine->m_LineInfo.fLineY + pSection->m_SecInfo.rcSection.top));
+      CFX_PointF(pLine->m_LineInfo.fLineX + pSection->m_Rect.left,
+                 pLine->m_LineInfo.fLineY + pSection->m_Rect.top));
   line.fLineWidth = pLine->m_LineInfo.fLineWidth;
   line.fLineAscent = pLine->m_LineInfo.fLineAscent;
   line.fLineDescent = pLine->m_LineInfo.fLineDescent;
@@ -200,10 +200,9 @@
   if (m_bInitialized)
     return;
 
-  CPVT_SectionInfo secinfo;
   CPVT_WordPlace place;
   place.nSecIndex = 0;
-  AddSection(place, secinfo);
+  AddSection(place);
 
   CPVT_LineInfo lineinfo;
   lineinfo.fLineAscent = GetFontAscent(GetDefaultFontIndex(), GetFontSize());
@@ -254,8 +253,7 @@
 
   CSection* pSection = m_SectionArray[wordplace.nSecIndex].get();
   CPVT_WordPlace NewPlace(wordplace.nSecIndex + 1, 0, -1);
-  CPVT_SectionInfo secinfo;
-  AddSection(NewPlace, secinfo);
+  AddSection(NewPlace);
   CPVT_WordPlace result = NewPlace;
   if (pdfium::IndexInBounds(m_SectionArray, NewPlace.nSecIndex)) {
     CSection* pNewSection = m_SectionArray[NewPlace.nSecIndex].get();
@@ -332,9 +330,8 @@
 void CPDF_VariableText::SetText(const WideString& swText) {
   DeleteWords(CPVT_WordRange(GetBeginWordPlace(), GetEndWordPlace()));
   CPVT_WordPlace wp(0, 0, -1);
-  CPVT_SectionInfo secinfo;
   if (!m_SectionArray.empty())
-    m_SectionArray.front()->m_SecInfo = secinfo;
+    m_SectionArray.front()->m_Rect = CPVT_FloatRect();
 
   int32_t nCharCount = 0;
   for (int32_t i = 0, sz = swText.GetLength(); i < sz; i++) {
@@ -350,7 +347,7 @@
           if (i + 1 < sz && swText[i + 1] == 0x0A)
             i++;
           wp.AdvanceSection();
-          AddSection(wp, secinfo);
+          AddSection(wp);
         }
         break;
       case 0x0A:
@@ -358,7 +355,7 @@
           if (i + 1 < sz && swText[i + 1] == 0x0D)
             i++;
           wp.AdvanceSection();
-          AddSection(wp, secinfo);
+          AddSection(wp);
         }
         break;
       case 0x09:
@@ -484,23 +481,22 @@
     if (!pdfium::IndexInBounds(m_SectionArray, nMid))
       break;
     CSection* pSection = m_SectionArray[nMid].get();
-    if (IsFloatBigger(pt.y, pSection->m_SecInfo.rcSection.top))
+    if (IsFloatBigger(pt.y, pSection->m_Rect.top))
       bUp = false;
-    if (IsFloatBigger(pSection->m_SecInfo.rcSection.bottom, pt.y))
+    if (IsFloatBigger(pSection->m_Rect.bottom, pt.y))
       bDown = false;
-    if (IsFloatSmaller(pt.y, pSection->m_SecInfo.rcSection.top)) {
+    if (IsFloatSmaller(pt.y, pSection->m_Rect.top)) {
       nRight = nMid - 1;
       nMid = (nLeft + nRight) / 2;
       continue;
     }
-    if (IsFloatBigger(pt.y, pSection->m_SecInfo.rcSection.bottom)) {
+    if (IsFloatBigger(pt.y, pSection->m_Rect.bottom)) {
       nLeft = nMid + 1;
       nMid = (nLeft + nRight) / 2;
       continue;
     }
     place = pSection->SearchWordPlace(
-        CFX_PointF(pt.x - pSection->m_SecInfo.rcSection.left,
-                   pt.y - pSection->m_SecInfo.rcSection.top));
+        CFX_PointF(pt.x - pSection->m_Rect.left, pt.y - pSection->m_Rect.top));
     place.nSecIndex = nMid;
     return place;
   }
@@ -521,16 +517,15 @@
   CPVT_WordPlace temp = place;
   CFX_PointF pt = OutToIn(point);
   if (temp.nLineIndex-- > 0) {
-    return pSection->SearchWordPlace(pt.x - pSection->m_SecInfo.rcSection.left,
-                                     temp);
+    return pSection->SearchWordPlace(pt.x - pSection->m_Rect.left, temp);
   }
   if (temp.nSecIndex-- > 0) {
     if (pdfium::IndexInBounds(m_SectionArray, temp.nSecIndex)) {
       CSection* pLastSection = m_SectionArray[temp.nSecIndex].get();
       temp.nLineIndex =
           pdfium::CollectionSize<int32_t>(pLastSection->m_LineArray) - 1;
-      return pLastSection->SearchWordPlace(
-          pt.x - pLastSection->m_SecInfo.rcSection.left, temp);
+      return pLastSection->SearchWordPlace(pt.x - pLastSection->m_Rect.left,
+                                           temp);
     }
   }
   return place;
@@ -547,15 +542,14 @@
   CFX_PointF pt = OutToIn(point);
   if (temp.nLineIndex++ <
       pdfium::CollectionSize<int32_t>(pSection->m_LineArray) - 1) {
-    return pSection->SearchWordPlace(pt.x - pSection->m_SecInfo.rcSection.left,
-                                     temp);
+    return pSection->SearchWordPlace(pt.x - pSection->m_Rect.left, temp);
   }
   temp.AdvanceSection();
   if (!pdfium::IndexInBounds(m_SectionArray, temp.nSecIndex))
     return place;
 
   return m_SectionArray[temp.nSecIndex]->SearchWordPlace(
-      pt.x - pSection->m_SecInfo.rcSection.left, temp);
+      pt.x - pSection->m_Rect.left, temp);
 }
 
 CPVT_WordPlace CPDF_VariableText::GetLineBeginPlace(
@@ -597,8 +591,7 @@
   return nTotal - kReturnLength;
 }
 
-CPVT_WordPlace CPDF_VariableText::AddSection(const CPVT_WordPlace& place,
-                                             const CPVT_SectionInfo& secinfo) {
+CPVT_WordPlace CPDF_VariableText::AddSection(const CPVT_WordPlace& place) {
   if (IsValid() && !m_bMultiLine)
     return place;
 
@@ -606,7 +599,7 @@
       place.nSecIndex, 0, pdfium::CollectionSize<int32_t>(m_SectionArray));
 
   auto pSection = pdfium::MakeUnique<CSection>(this);
-  pSection->m_SecInfo = secinfo;
+  pSection->m_Rect = CPVT_FloatRect();
   pSection->SecPlace.nSecIndex = nSecIndex;
   m_SectionArray.insert(m_SectionArray.begin() + nSecIndex,
                         std::move(pSection));
@@ -672,15 +665,6 @@
   return true;
 }
 
-bool CPDF_VariableText::GetSectionInfo(const CPVT_WordPlace& place,
-                                       CPVT_SectionInfo& secinfo) {
-  if (!pdfium::IndexInBounds(m_SectionArray, place.nSecIndex))
-    return false;
-
-  secinfo = m_SectionArray[place.nSecIndex]->m_SecInfo;
-  return true;
-}
-
 void CPDF_VariableText::SetPlateRect(const CFX_FloatRect& rect) {
   m_rcPlate = rect;
 }
@@ -953,19 +937,18 @@
     place.nSecIndex = s;
     CSection* pSection = m_SectionArray[s].get();
     pSection->SecPlace = place;
-    CPVT_FloatRect rcSec = pSection->m_SecInfo.rcSection;
+    CPVT_FloatRect rcSec = pSection->m_Rect;
     if (s >= nSSecIndex) {
       if (s <= nESecIndex) {
         rcSec = pSection->Rearrange();
         rcSec.top += fPosY;
         rcSec.bottom += fPosY;
       } else {
-        fOldHeight = pSection->m_SecInfo.rcSection.bottom -
-                     pSection->m_SecInfo.rcSection.top;
+        fOldHeight = pSection->m_Rect.bottom - pSection->m_Rect.top;
         rcSec.top = fPosY;
         rcSec.bottom = fPosY + fOldHeight;
       }
-      pSection->m_SecInfo.rcSection = rcSec;
+      pSection->m_Rect = rcSec;
       pSection->ResetLinePlace();
     }
     if (s == 0) {
diff --git a/core/fpdfdoc/cpdf_variabletext.h b/core/fpdfdoc/cpdf_variabletext.h
index 22ed09a..bdc95d4 100644
--- a/core/fpdfdoc/cpdf_variabletext.h
+++ b/core/fpdfdoc/cpdf_variabletext.h
@@ -23,8 +23,6 @@
 class CPVT_Word;
 class CSection;
 class IPVT_FontMap;
-struct CPVT_SectionInfo;
-
 struct CPVT_WordInfo;
 
 #define VARIABLETEXT_HALF 0.5f
@@ -178,8 +176,7 @@
   int32_t GetWordFontIndex(uint16_t word, int32_t charset, int32_t nFontIndex);
   bool IsLatinWord(uint16_t word);
 
-  CPVT_WordPlace AddSection(const CPVT_WordPlace& place,
-                            const CPVT_SectionInfo& secinfo);
+  CPVT_WordPlace AddSection(const CPVT_WordPlace& place);
   CPVT_WordPlace AddLine(const CPVT_WordPlace& place,
                          const CPVT_LineInfo& lineinfo);
   CPVT_WordPlace AddWord(const CPVT_WordPlace& place,
@@ -187,7 +184,6 @@
   bool GetWordInfo(const CPVT_WordPlace& place, CPVT_WordInfo& wordinfo);
   bool SetWordInfo(const CPVT_WordPlace& place, const CPVT_WordInfo& wordinfo);
   bool GetLineInfo(const CPVT_WordPlace& place, CPVT_LineInfo& lineinfo);
-  bool GetSectionInfo(const CPVT_WordPlace& place, CPVT_SectionInfo& secinfo);
   float GetWordFontSize();
   int32_t GetWordFontIndex(const CPVT_WordInfo& WordInfo);
 
diff --git a/core/fpdfdoc/cpvt_sectioninfo.cpp b/core/fpdfdoc/cpvt_sectioninfo.cpp
deleted file mode 100644
index cb1dc89..0000000
--- a/core/fpdfdoc/cpvt_sectioninfo.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "core/fpdfdoc/cpvt_sectioninfo.h"
-#include "third_party/base/ptr_util.h"
-
-CPVT_SectionInfo::CPVT_SectionInfo() : rcSection() {}
-
-CPVT_SectionInfo::~CPVT_SectionInfo() {}
-
-CPVT_SectionInfo::CPVT_SectionInfo(const CPVT_SectionInfo& other) {
-  operator=(other);
-}
-
-void CPVT_SectionInfo::operator=(const CPVT_SectionInfo& other) {
-  if (this == &other)
-    return;
-  rcSection = other.rcSection;
-}
diff --git a/core/fpdfdoc/cpvt_sectioninfo.h b/core/fpdfdoc/cpvt_sectioninfo.h
deleted file mode 100644
index b39cdc9..0000000
--- a/core/fpdfdoc/cpvt_sectioninfo.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef CORE_FPDFDOC_CPVT_SECTIONINFO_H_
-#define CORE_FPDFDOC_CPVT_SECTIONINFO_H_
-
-#include <memory>
-
-#include "core/fpdfdoc/cpvt_floatrect.h"
-
-struct CPVT_SectionInfo {
-  CPVT_SectionInfo();
-  CPVT_SectionInfo(const CPVT_SectionInfo& other);
-  ~CPVT_SectionInfo();
-
-  void operator=(const CPVT_SectionInfo& other);
-
-  CPVT_FloatRect rcSection;
-};
-
-#endif  // CORE_FPDFDOC_CPVT_SECTIONINFO_H_
diff --git a/core/fpdfdoc/csection.cpp b/core/fpdfdoc/csection.cpp
index f8b658a..45cbf6b 100644
--- a/core/fpdfdoc/csection.cpp
+++ b/core/fpdfdoc/csection.cpp
@@ -172,7 +172,7 @@
 
   CLine* pLine = m_LineArray[lineplace.nLineIndex].get();
   return SearchWordPlace(
-      fx - m_SecInfo.rcSection.left,
+      fx - m_Rect.left,
       CPVT_WordRange(pLine->GetNextWordPlace(pLine->GetBeginWordPlace()),
                      pLine->GetEndWordPlace()));
 }
diff --git a/core/fpdfdoc/csection.h b/core/fpdfdoc/csection.h
index d516c45..a8ade86 100644
--- a/core/fpdfdoc/csection.h
+++ b/core/fpdfdoc/csection.h
@@ -11,7 +11,6 @@
 #include <vector>
 
 #include "core/fpdfdoc/cline.h"
-#include "core/fpdfdoc/cpvt_sectioninfo.h"
 #include "core/fpdfdoc/cpvt_wordinfo.h"
 #include "core/fpdfdoc/cpvt_wordrange.h"
 #include "core/fpdfdoc/ctypeset.h"
@@ -48,7 +47,7 @@
   CPVT_WordPlace SearchWordPlace(float fx, const CPVT_WordRange& range) const;
 
   CPVT_WordPlace SecPlace;
-  CPVT_SectionInfo m_SecInfo;
+  CPVT_FloatRect m_Rect;
   std::vector<std::unique_ptr<CLine>> m_LineArray;
   std::vector<std::unique_ptr<CPVT_WordInfo>> m_WordArray;
 
