diff --git a/xfa/fxfa/cxfa_fffield.cpp b/xfa/fxfa/cxfa_fffield.cpp
index 7e36fea..b4142ba 100644
--- a/xfa/fxfa/cxfa_fffield.cpp
+++ b/xfa/fxfa/cxfa_fffield.cpp
@@ -172,11 +172,14 @@
   CXFA_MarginData marginData = m_pDataAcc->GetMarginData();
   if (marginData.HasValidNode()) {
     CXFA_LayoutItem* pItem = this;
-    float fLeftInset = 0, fRightInset = 0, fTopInset = 0, fBottomInset = 0;
-    marginData.GetLeftInset(fLeftInset);
-    marginData.GetRightInset(fRightInset);
-    marginData.GetTopInset(fTopInset);
-    marginData.GetBottomInset(fBottomInset);
+    float fLeftInset = 0;
+    float fRightInset = 0;
+    float fTopInset = 0;
+    float fBottomInset = 0;
+    marginData.TryLeftInset(fLeftInset);
+    marginData.TryRightInset(fRightInset);
+    marginData.TryTopInset(fTopInset);
+    marginData.TryBottomInset(fBottomInset);
     if (!pItem->GetPrev() && !pItem->GetNext()) {
       rtWidget.Deflate(fLeftInset, fTopInset, fRightInset, fBottomInset);
     } else {
diff --git a/xfa/fxfa/cxfa_fftext.cpp b/xfa/fxfa/cxfa_fftext.cpp
index 1eac4fd..6242b8e 100644
--- a/xfa/fxfa/cxfa_fftext.cpp
+++ b/xfa/fxfa/cxfa_fftext.cpp
@@ -46,16 +46,16 @@
     if (!pItem->GetPrev() && !pItem->GetNext()) {
       XFA_RectWidthoutMargin(rtText, marginData);
     } else {
-      float fLeftInset;
-      float fRightInset;
+      float fLeftInset = 0;
+      float fRightInset = 0;
       float fTopInset = 0;
       float fBottomInset = 0;
-      marginData.GetLeftInset(fLeftInset);
-      marginData.GetRightInset(fRightInset);
+      marginData.TryLeftInset(fLeftInset);
+      marginData.TryRightInset(fRightInset);
       if (!pItem->GetPrev())
-        marginData.GetTopInset(fTopInset);
+        marginData.TryTopInset(fTopInset);
       else if (!pItem->GetNext())
-        marginData.GetBottomInset(fBottomInset);
+        marginData.TryBottomInset(fBottomInset);
 
       rtText.Deflate(fLeftInset, fTopInset, fRightInset, fBottomInset);
     }
@@ -91,12 +91,12 @@
     CXFA_MarginData marginData = m_pDataAcc->GetMarginData();
     if (marginData.HasValidNode()) {
       if (!pItem->GetPrev()) {
-        float fTopInset;
-        marginData.GetTopInset(fTopInset);
+        float fTopInset = 0;
+        marginData.TryTopInset(fTopInset);
         rtText.height -= fTopInset;
       } else if (!pItem->GetNext()) {
-        float fBottomInset;
-        marginData.GetBottomInset(fBottomInset);
+        float fBottomInset = 0;
+        marginData.TryBottomInset(fBottomInset);
         rtText.height -= fBottomInset;
       }
     }
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index 88c1fea..00ab8cda 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -2026,14 +2026,14 @@
   if (!marginData.HasValidNode())
     return;
 
-  float fLeftInset;
-  float fTopInset;
-  float fRightInset;
-  float fBottomInset;
-  marginData.GetLeftInset(fLeftInset);
-  marginData.GetTopInset(fTopInset);
-  marginData.GetRightInset(fRightInset);
-  marginData.GetBottomInset(fBottomInset);
+  float fLeftInset = 0;
+  float fTopInset = 0;
+  float fRightInset = 0;
+  float fBottomInset = 0;
+  marginData.TryLeftInset(fLeftInset);
+  marginData.TryTopInset(fTopInset);
+  marginData.TryRightInset(fRightInset);
+  marginData.TryBottomInset(fBottomInset);
   rt.Deflate(fLeftInset, fTopInset, fRightInset, fBottomInset);
 }
 
diff --git a/xfa/fxfa/cxfa_widgetacc.cpp b/xfa/fxfa/cxfa_widgetacc.cpp
index 4adc447..b55adc0 100644
--- a/xfa/fxfa/cxfa_widgetacc.cpp
+++ b/xfa/fxfa/cxfa_widgetacc.cpp
@@ -731,14 +731,14 @@
 
   CXFA_MarginData captionMarginData = captionData.GetMarginData();
   if (captionMarginData.HasValidNode()) {
-    float fLeftInset;
-    float fTopInset;
-    float fRightInset;
-    float fBottomInset;
-    captionMarginData.GetLeftInset(fLeftInset);
-    captionMarginData.GetTopInset(fTopInset);
-    captionMarginData.GetRightInset(fRightInset);
-    captionMarginData.GetBottomInset(fBottomInset);
+    float fLeftInset = 0;
+    float fTopInset = 0;
+    float fRightInset = 0;
+    float fBottomInset = 0;
+    captionMarginData.TryLeftInset(fLeftInset);
+    captionMarginData.TryTopInset(fTopInset);
+    captionMarginData.TryRightInset(fRightInset);
+    captionMarginData.TryBottomInset(fBottomInset);
     if (bReserveExit) {
       bVert ? (szCap.width += fLeftInset + fRightInset)
             : (szCap.height += fTopInset + fBottomInset);
@@ -779,11 +779,14 @@
 bool CXFA_WidgetAcc::CalculateWidgetAutoSize(CFX_SizeF& size) {
   CXFA_MarginData marginData = GetMarginData();
   if (marginData.HasValidNode()) {
-    float fLeftInset, fTopInset, fRightInset, fBottomInset;
-    marginData.GetLeftInset(fLeftInset);
-    marginData.GetTopInset(fTopInset);
-    marginData.GetRightInset(fRightInset);
-    marginData.GetBottomInset(fBottomInset);
+    float fLeftInset = 0;
+    float fTopInset = 0;
+    float fRightInset = 0;
+    float fBottomInset = 0;
+    marginData.TryLeftInset(fLeftInset);
+    marginData.TryTopInset(fTopInset);
+    marginData.TryRightInset(fRightInset);
+    marginData.TryBottomInset(fBottomInset);
     size.width += fLeftInset + fRightInset;
     size.height += fTopInset + fBottomInset;
   }
@@ -874,10 +877,10 @@
     size.width -= rtUIMargin.left + rtUIMargin.width;
     CXFA_MarginData marginData = GetMarginData();
     if (marginData.HasValidNode()) {
-      float fLeftInset;
-      float fRightInset;
-      marginData.GetLeftInset(fLeftInset);
-      marginData.GetRightInset(fRightInset);
+      float fLeftInset = 0;
+      float fRightInset = 0;
+      marginData.TryLeftInset(fLeftInset);
+      marginData.TryRightInset(fRightInset);
       size.width -= fLeftInset + fRightInset;
     }
     CalculateTextContentSize(size);
@@ -1021,10 +1024,10 @@
 float CXFA_WidgetAcc::CalculateWidgetAutoWidth(float fWidthCalc) {
   CXFA_MarginData marginData = GetMarginData();
   if (marginData.HasValidNode()) {
-    float fLeftInset;
-    float fRightInset;
-    marginData.GetLeftInset(fLeftInset);
-    marginData.GetRightInset(fRightInset);
+    float fLeftInset = 0;
+    float fRightInset = 0;
+    marginData.TryLeftInset(fLeftInset);
+    marginData.TryRightInset(fRightInset);
     fWidthCalc += fLeftInset + fRightInset;
   }
 
@@ -1040,10 +1043,10 @@
 float CXFA_WidgetAcc::GetWidthWithoutMargin(float fWidthCalc) {
   CXFA_MarginData marginData = GetMarginData();
   if (marginData.HasValidNode()) {
-    float fLeftInset;
-    float fRightInset;
-    marginData.GetLeftInset(fLeftInset);
-    marginData.GetRightInset(fRightInset);
+    float fLeftInset = 0;
+    float fRightInset = 0;
+    marginData.TryLeftInset(fLeftInset);
+    marginData.TryRightInset(fRightInset);
     fWidthCalc -= fLeftInset + fRightInset;
   }
   return fWidthCalc;
@@ -1052,10 +1055,10 @@
 float CXFA_WidgetAcc::CalculateWidgetAutoHeight(float fHeightCalc) {
   CXFA_MarginData marginData = GetMarginData();
   if (marginData.HasValidNode()) {
-    float fTopInset;
-    float fBottomInset;
-    marginData.GetTopInset(fTopInset);
-    marginData.GetBottomInset(fBottomInset);
+    float fTopInset = 0;
+    float fBottomInset = 0;
+    marginData.TryTopInset(fTopInset);
+    marginData.TryBottomInset(fBottomInset);
     fHeightCalc += fTopInset + fBottomInset;
   }
 
@@ -1071,10 +1074,10 @@
 float CXFA_WidgetAcc::GetHeightWithoutMargin(float fHeightCalc) {
   CXFA_MarginData marginData = GetMarginData();
   if (marginData.HasValidNode()) {
-    float fTopInset;
-    float fBottomInset;
-    marginData.GetTopInset(fTopInset);
-    marginData.GetBottomInset(fBottomInset);
+    float fTopInset = 0;
+    float fBottomInset = 0;
+    marginData.TryTopInset(fTopInset);
+    marginData.TryBottomInset(fBottomInset);
     fHeightCalc -= fTopInset + fBottomInset;
   }
   return fHeightCalc;
@@ -1170,8 +1173,8 @@
   if (iBlockIndex == 0) {
     CXFA_MarginData marginData = GetMarginData();
     if (marginData.HasValidNode()) {
-      marginData.GetTopInset(fTopInset);
-      marginData.GetBottomInset(fBottomInset);
+      marginData.TryTopInset(fTopInset);
+      marginData.TryBottomInset(fBottomInset);
     }
 
     CFX_RectF rtUIMargin = GetUIMargin();
diff --git a/xfa/fxfa/parser/cxfa_margindata.cpp b/xfa/fxfa/parser/cxfa_margindata.cpp
index 08cc9fd..2c5689c 100644
--- a/xfa/fxfa/parser/cxfa_margindata.cpp
+++ b/xfa/fxfa/parser/cxfa_margindata.cpp
@@ -8,22 +8,18 @@
 
 CXFA_MarginData::CXFA_MarginData(CXFA_Node* pNode) : CXFA_DataData(pNode) {}
 
-bool CXFA_MarginData::GetLeftInset(float& fInset, float fDefInset) const {
-  fInset = fDefInset;
+bool CXFA_MarginData::TryLeftInset(float& fInset) const {
   return TryMeasure(XFA_Attribute::LeftInset, fInset);
 }
 
-bool CXFA_MarginData::GetTopInset(float& fInset, float fDefInset) const {
-  fInset = fDefInset;
+bool CXFA_MarginData::TryTopInset(float& fInset) const {
   return TryMeasure(XFA_Attribute::TopInset, fInset);
 }
 
-bool CXFA_MarginData::GetRightInset(float& fInset, float fDefInset) const {
-  fInset = fDefInset;
+bool CXFA_MarginData::TryRightInset(float& fInset) const {
   return TryMeasure(XFA_Attribute::RightInset, fInset);
 }
 
-bool CXFA_MarginData::GetBottomInset(float& fInset, float fDefInset) const {
-  fInset = fDefInset;
+bool CXFA_MarginData::TryBottomInset(float& fInset) const {
   return TryMeasure(XFA_Attribute::BottomInset, fInset);
 }
diff --git a/xfa/fxfa/parser/cxfa_margindata.h b/xfa/fxfa/parser/cxfa_margindata.h
index 5695fcc..6933c3d 100644
--- a/xfa/fxfa/parser/cxfa_margindata.h
+++ b/xfa/fxfa/parser/cxfa_margindata.h
@@ -16,10 +16,10 @@
  public:
   explicit CXFA_MarginData(CXFA_Node* pNode);
 
-  bool GetLeftInset(float& fInset, float fDefInset = 0) const;
-  bool GetTopInset(float& fInset, float fDefInset = 0) const;
-  bool GetRightInset(float& fInset, float fDefInset = 0) const;
-  bool GetBottomInset(float& fInset, float fDefInset = 0) const;
+  bool TryLeftInset(float& fInset) const;
+  bool TryTopInset(float& fInset) const;
+  bool TryRightInset(float& fInset) const;
+  bool TryBottomInset(float& fInset) const;
 };
 
 #endif  // XFA_FXFA_PARSER_CXFA_MARGINDATA_H_
diff --git a/xfa/fxfa/parser/cxfa_widgetdata.cpp b/xfa/fxfa/parser/cxfa_widgetdata.cpp
index b5ceb4a..98e81f3 100644
--- a/xfa/fxfa/parser/cxfa_widgetdata.cpp
+++ b/xfa/fxfa/parser/cxfa_widgetdata.cpp
@@ -373,11 +373,14 @@
     return CFX_RectF();
   }
 
-  float fLeftInset, fTopInset, fRightInset, fBottomInset;
-  bool bLeft = mgUI.GetLeftInset(fLeftInset);
-  bool bTop = mgUI.GetTopInset(fTopInset);
-  bool bRight = mgUI.GetRightInset(fRightInset);
-  bool bBottom = mgUI.GetBottomInset(fBottomInset);
+  float fLeftInset = 0;
+  float fTopInset = 0;
+  float fRightInset = 0;
+  float fBottomInset = 0;
+  bool bLeft = mgUI.TryLeftInset(fLeftInset);
+  bool bTop = mgUI.TryTopInset(fTopInset);
+  bool bRight = mgUI.TryRightInset(fRightInset);
+  bool bBottom = mgUI.TryBottomInset(fBottomInset);
   if (borderData.HasValidNode()) {
     bool bVisible = false;
     float fThickness = 0;
