1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file.
4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "public/fpdf_ext.h"
8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <memory>
104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/cpdf_modulemgr.h"
124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_array.h"
134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_document.h"
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpdf_annot.h"
154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpdf_interform.h"
164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpdf_metadata.h"
174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_basic.h"
184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_memory.h"
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_xml.h"
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/fsdk_define.h"
214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "third_party/base/ptr_util.h"
22e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/fpdfxfa/cpdfxfa_context.h"
25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
26e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool FPDF_UnSupportError(int nError) {
28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFSDK_UnsupportInfo_Adapter* pAdapter =
294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CPDF_ModuleMgr::Get()->GetUnsupportInfoAdapter();
30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pAdapter)
314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  UNSUPPORT_INFO* info = static_cast<UNSUPPORT_INFO*>(pAdapter->GetUnspInfo());
344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (info && info->FSDK_UnSupport_Handler)
354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    info->FSDK_UnSupport_Handler(info, nError);
364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
38e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannDLLEXPORT FPDF_BOOL STDCALL
40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFSDK_SetUnSpObjProcessHandler(UNSUPPORT_INFO* unsp_info) {
41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!unsp_info || unsp_info->version != 1)
424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
43e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_ModuleMgr::Get()->SetUnsupportInfoAdapter(
454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pdfium::MakeUnique<CFSDK_UnsupportInfo_Adapter>(unsp_info));
464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
47e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
48e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CheckUnSupportAnnot(CPDF_Document* pDoc, const CPDF_Annot* pPDFAnnot) {
504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Annot::Subtype nAnnotSubtype = pPDFAnnot->GetSubtype();
514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (nAnnotSubtype == CPDF_Annot::Subtype::THREED) {
52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FPDF_UnSupportError(FPDF_UNSP_ANNOT_3DANNOT);
534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (nAnnotSubtype == CPDF_Annot::Subtype::SCREEN) {
54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const CPDF_Dictionary* pAnnotDict = pPDFAnnot->GetAnnotDict();
55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_ByteString cbString;
56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pAnnotDict->KeyExist("IT"))
574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      cbString = pAnnotDict->GetStringFor("IT");
58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (cbString.Compare("Img") != 0)
59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FPDF_UnSupportError(FPDF_UNSP_ANNOT_SCREEN_MEDIA);
604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (nAnnotSubtype == CPDF_Annot::Subtype::MOVIE) {
61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FPDF_UnSupportError(FPDF_UNSP_ANNOT_MOVIE);
624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (nAnnotSubtype == CPDF_Annot::Subtype::SOUND) {
63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FPDF_UnSupportError(FPDF_UNSP_ANNOT_SOUND);
644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (nAnnotSubtype == CPDF_Annot::Subtype::RICHMEDIA) {
65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FPDF_UnSupportError(FPDF_UNSP_ANNOT_SCREEN_RICHMEDIA);
664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (nAnnotSubtype == CPDF_Annot::Subtype::FILEATTACHMENT) {
67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FPDF_UnSupportError(FPDF_UNSP_ANNOT_ATTACHMENT);
684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (nAnnotSubtype == CPDF_Annot::Subtype::WIDGET) {
69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const CPDF_Dictionary* pAnnotDict = pPDFAnnot->GetAnnotDict();
70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_ByteString cbString;
714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pAnnotDict->KeyExist("FT"))
724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      cbString = pAnnotDict->GetStringFor("FT");
734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (cbString.Compare("Sig") == 0)
74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FPDF_UnSupportError(FPDF_UNSP_ANNOT_SIG);
75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
76e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
77e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CheckSharedForm(const CXML_Element* pElement, CFX_ByteString cbName) {
79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int count = pElement->CountAttrs();
80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int i = 0;
81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (i = 0; i < count; i++) {
82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_ByteString space, name;
83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_WideString value;
84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pElement->GetAttrByIndex(i, space, name, value);
85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (space == "xmlns" && name == "adhocwf" &&
86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        value == L"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/") {
874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXML_Element* pVersion =
884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pElement->GetElement("adhocwf", cbName.AsStringC());
89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (!pVersion)
90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        continue;
914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_WideString wsContent = pVersion->GetContent(0);
92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      int nType = wsContent.GetInteger();
93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      switch (nType) {
94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case 1:
95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_ACROBAT);
96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case 2:
98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_FILESYSTEM);
99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case 0:
101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_EMAIL);
102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t nCount = pElement->CountChildren();
108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (i = 0; i < (int)nCount; i++) {
109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXML_Element::ChildType childType = pElement->GetChildType(i);
110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (childType == CXML_Element::Element) {
111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CXML_Element* pChild = pElement->GetElement(i);
112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (CheckSharedForm(pChild, cbName))
1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return true;
114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return false;
117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
118e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CheckUnSupportError(CPDF_Document* pDoc, uint32_t err_code) {
120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // Security
121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (err_code == FPDF_ERR_SECURITY) {
122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FPDF_UnSupportError(FPDF_UNSP_DOC_SECURITY);
123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pDoc)
126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // Portfolios and Packages
129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* pRootDict = pDoc->GetRoot();
130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pRootDict) {
131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_ByteString cbString;
132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pRootDict->KeyExist("Collection")) {
133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FPDF_UnSupportError(FPDF_UNSP_DOC_PORTABLECOLLECTION);
134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return;
135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pRootDict->KeyExist("Names")) {
1374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CPDF_Dictionary* pNameDict = pRootDict->GetDictFor("Names");
138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pNameDict && pNameDict->KeyExist("EmbeddedFiles")) {
139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        FPDF_UnSupportError(FPDF_UNSP_DOC_ATTACHMENT);
140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return;
141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pNameDict && pNameDict->KeyExist("JavaScript")) {
1434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CPDF_Dictionary* pJSDict = pNameDict->GetDictFor("JavaScript");
1444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        CPDF_Array* pArray = pJSDict ? pJSDict->GetArrayFor("Names") : nullptr;
145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pArray) {
1464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          for (size_t i = 0; i < pArray->GetCount(); i++) {
1474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            CFX_ByteString cbStr = pArray->GetStringAt(i);
148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (cbStr.Compare("com.adobe.acrobat.SharedReview.Register") == 0) {
149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDREVIEW);
150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              return;
151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // SharedForm
159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Metadata metaData(pDoc);
160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const CXML_Element* pElement = metaData.GetRoot();
161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pElement)
162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CheckSharedForm(pElement, "workflowType");
163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef PDF_ENABLE_XFA
165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // XFA Forms
1664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_InterForm interform(pDoc);
1674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (interform.HasXFAForm())
168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FPDF_UnSupportError(FPDF_UNSP_DOC_XFAFORM);
169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
170e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
171e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannDLLEXPORT int STDCALL FPDFDoc_GetPageMode(FPDF_DOCUMENT document) {
173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pDoc)
175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return PAGEMODE_UNKNOWN;
176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* pRoot = pDoc->GetRoot();
178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pRoot)
179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return PAGEMODE_UNKNOWN;
180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Object* pName = pRoot->GetObjectFor("PageMode");
182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pName)
183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return PAGEMODE_USENONE;
184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString strPageMode = pName->GetString();
186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (strPageMode.IsEmpty() || strPageMode.EqualNoCase("UseNone"))
187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return PAGEMODE_USENONE;
188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (strPageMode.EqualNoCase("UseOutlines"))
189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return PAGEMODE_USEOUTLINES;
190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (strPageMode.EqualNoCase("UseThumbs"))
191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return PAGEMODE_USETHUMBS;
192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (strPageMode.EqualNoCase("FullScreen"))
193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return PAGEMODE_FULLSCREEN;
194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (strPageMode.EqualNoCase("UseOC"))
195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return PAGEMODE_USEOC;
196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (strPageMode.EqualNoCase("UseAttachments"))
197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return PAGEMODE_USEATTACHMENTS;
198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return PAGEMODE_UNKNOWN;
200e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
201