Upstream version 11.39.250.0
[platform/framework/web/crosswalk.git] / src / third_party / pdfium / core / src / fpdfapi / fpdf_page / fpdf_page_doc.cpp
index 8e578f6..fe5665d 100644 (file)
@@ -147,15 +147,52 @@ CPDF_DocPageData::~CPDF_DocPageData()
 {
     Clear(FALSE);
     Clear(TRUE);
+    FX_POSITION pos = m_PatternMap.GetStartPosition();\r
+    while (pos)\r
+    {\r
+        CPDF_Object* ptObj;\r
+        CPDF_CountedObject<CPDF_Pattern*>* ptData;\r
+        m_PatternMap.GetNextAssoc(pos, ptObj, ptData);\r
+        delete ptData;\r
+    }\r
+    m_PatternMap.RemoveAll();\r
+    pos = m_FontMap.GetStartPosition();\r
+    while (pos)\r
+    {\r
+        CPDF_Dictionary* fontDict;\r
+        CPDF_CountedObject<CPDF_Font*>* fontData;\r
+        m_FontMap.GetNextAssoc(pos, fontDict, fontData);\r
+        delete fontData;\r
+    }\r
+    m_FontMap.RemoveAll();\r
+    pos = m_ColorSpaceMap.GetStartPosition();\r
+    while (pos)\r
+    {\r
+        CPDF_Object* csKey;\r
+        CPDF_CountedObject<CPDF_ColorSpace*>* csData;\r
+        m_ColorSpaceMap.GetNextAssoc(pos, csKey, csData);\r
+        delete csData;\r
+    }\r
+    m_ColorSpaceMap.RemoveAll();
 }
 void CPDF_DocPageData::Clear(FX_BOOL bForceRelease)
 {
     FX_POSITION pos;
-
     m_bForceClear = bForceRelease;
-
-    // Release objects saved in the resource maps like font map and color space map.
-    // The compound objects shall be released before simple ones.
+    pos = m_PatternMap.GetStartPosition();
+    while (pos) {
+        CPDF_Object* ptObj;
+        CPDF_CountedObject<CPDF_Pattern*>* ptData;
+        m_PatternMap.GetNextAssoc(pos, ptObj, ptData);
+        if (!ptData->m_Obj) {
+            continue;
+        }
+        if (bForceRelease || ptData->m_nCount < 2) {
+            ptData->m_Obj->SetForceClear(bForceRelease);
+            delete ptData->m_Obj;
+            ptData->m_Obj = NULL;
+        }
+    }
     pos = m_FontMap.GetStartPosition();
     while (pos) {
         CPDF_Dictionary* fontDict;
@@ -203,7 +240,6 @@ void CPDF_DocPageData::Clear(FX_BOOL bForceRelease)
                 }
             }
             delete ipData->m_Obj;
-            ipData->m_Obj = NULL;
             delete ipData;
             m_IccProfileMap.RemoveKey(ipKey);
         }
@@ -218,25 +254,10 @@ void CPDF_DocPageData::Clear(FX_BOOL bForceRelease)
         }
         if (bForceRelease || ftData->m_nCount < 2) {
             delete ftData->m_Obj;
-            ftData->m_Obj = NULL;
             delete ftData;
             m_FontFileMap.RemoveKey(ftKey);
         }
     }
-    pos = m_PatternMap.GetStartPosition();
-    while (pos) {
-        CPDF_Object* ptObj;
-        CPDF_CountedObject<CPDF_Pattern*>* ptData;
-        m_PatternMap.GetNextAssoc(pos, ptObj, ptData);
-        if (!ptData->m_Obj) {
-            continue;
-        }
-        if (bForceRelease || ptData->m_nCount < 2) {
-            ptData->m_Obj->SetForceClear(bForceRelease);
-            delete ptData->m_Obj;
-            ptData->m_Obj = NULL;
-        }
-    }
     pos = m_ImageMap.GetStartPosition();
     while (pos) {
         FX_DWORD objNum;
@@ -247,7 +268,6 @@ void CPDF_DocPageData::Clear(FX_BOOL bForceRelease)
         }
         if (bForceRelease || imageData->m_nCount < 2) {
             delete imageData->m_Obj;
-            imageData->m_Obj = NULL;
             delete imageData;
             m_ImageMap.RemoveKey(objNum);
         }
@@ -653,4 +673,24 @@ void CPDF_DocPageData::ReleaseFontFileStreamAcc(CPDF_Stream* pFontStream, FX_BOO
         return;
     }
     PDF_DocPageData_Release<CPDF_Stream*, CPDF_StreamAcc*>(m_FontFileMap, pFontStream, NULL, bForce);
+}\r
+CPDF_CountedColorSpace* CPDF_DocPageData::FindColorSpacePtr(CPDF_Object* pCSObj) const\r
+{\r
+    if (!pCSObj) return NULL;\r
+    CPDF_CountedObject<CPDF_ColorSpace*>* csData;\r
+    if (m_ColorSpaceMap.Lookup(pCSObj, csData))\r
+    {\r
+        return csData;\r
+    }\r
+    return NULL;\r
 }
+CPDF_CountedPattern* CPDF_DocPageData::FindPatternPtr(CPDF_Object* pPatternObj) const\r
+{\r
+    if (!pPatternObj) return NULL;\r
+    CPDF_CountedObject<CPDF_Pattern*>* ptData;\r
+    if (m_PatternMap.Lookup(pPatternObj, ptData))\r
+    {\r
+        return ptData;\r
+    }\r
+    return NULL;\r
+}\r