Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(284)

Side by Side Diff: fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp

Issue 2451493002: Refcount all the IFX_ stream classes all the time. (Closed)
Patch Set: Clean up cast expression Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h ('k') | fpdfsdk/fsdk_define.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 PDFium Authors. All rights reserved. 1 // Copyright 2016 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h" 7 #include "fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h"
8 8
9 #include <memory> 9 #include <memory>
10 10
11 #include "core/fpdfapi/parser/cpdf_array.h" 11 #include "core/fpdfapi/parser/cpdf_array.h"
12 #include "core/fpdfapi/parser/cpdf_stream_acc.h" 12 #include "core/fpdfapi/parser/cpdf_stream_acc.h"
13 #include "core/fpdfapi/parser/cpdf_string.h" 13 #include "core/fpdfapi/parser/cpdf_string.h"
14 #include "core/fxcrt/cfx_retain_ptr.h"
14 #include "fpdfsdk/cpdfsdk_formfillenvironment.h" 15 #include "fpdfsdk/cpdfsdk_formfillenvironment.h"
15 #include "fpdfsdk/cpdfsdk_interform.h" 16 #include "fpdfsdk/cpdfsdk_interform.h"
16 #include "fpdfsdk/cpdfsdk_pageview.h" 17 #include "fpdfsdk/cpdfsdk_pageview.h"
17 #include "fpdfsdk/fpdfxfa/cpdfxfa_context.h" 18 #include "fpdfsdk/fpdfxfa/cpdfxfa_context.h"
18 #include "fpdfsdk/fpdfxfa/cpdfxfa_page.h" 19 #include "fpdfsdk/fpdfxfa/cpdfxfa_page.h"
19 #include "fpdfsdk/javascript/ijs_runtime.h" 20 #include "fpdfsdk/javascript/ijs_runtime.h"
20 #include "xfa/fxfa/xfa_ffdocview.h" 21 #include "xfa/fxfa/xfa_ffdocview.h"
21 #include "xfa/fxfa/xfa_ffwidget.h" 22 #include "xfa/fxfa/xfa_ffwidget.h"
22 #include "xfa/fxfa/xfa_ffwidgethandler.h" 23 #include "xfa/fxfa/xfa_ffwidgethandler.h"
23 24
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 bs = filepath.UTF16LE_Encode(); 431 bs = filepath.UTF16LE_Encode();
431 } 432 }
432 int len = bs.GetLength(); 433 int len = bs.GetLength();
433 FPDF_FILEHANDLER* pFileHandler = 434 FPDF_FILEHANDLER* pFileHandler =
434 pFormFillEnv->OpenFile(bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML, 435 pFormFillEnv->OpenFile(bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML,
435 (FPDF_WIDESTRING)bs.GetBuffer(len), "wb"); 436 (FPDF_WIDESTRING)bs.GetBuffer(len), "wb");
436 bs.ReleaseBuffer(len); 437 bs.ReleaseBuffer(len);
437 if (!pFileHandler) 438 if (!pFileHandler)
438 return; 439 return;
439 440
440 std::unique_ptr<IFX_SeekableStream, ReleaseDeleter<IFX_SeekableStream>> 441 CFX_RetainPtr<IFX_SeekableStream> fileWrite =
441 fileWrite(MakeSeekableStream(pFileHandler)); 442 MakeSeekableStream(pFileHandler);
442 CFX_ByteString content; 443 CFX_ByteString content;
443 if (fileType == FXFA_SAVEAS_XML) { 444 if (fileType == FXFA_SAVEAS_XML) {
444 content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"; 445 content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n";
445 fileWrite->WriteBlock(content.c_str(), fileWrite->GetSize(), 446 fileWrite->WriteBlock(content.c_str(), fileWrite->GetSize(),
446 content.GetLength()); 447 content.GetLength());
447 m_pContext->GetXFADocView()->GetDoc()->SavePackage( 448 m_pContext->GetXFADocView()->GetDoc()->SavePackage(XFA_HASHCODE_Data,
448 XFA_HASHCODE_Data, fileWrite.get(), nullptr); 449 fileWrite, nullptr);
449 } else if (fileType == FXFA_SAVEAS_XDP) { 450 } else if (fileType == FXFA_SAVEAS_XDP) {
450 if (!m_pContext->GetPDFDoc()) 451 if (!m_pContext->GetPDFDoc())
451 return; 452 return;
452 453
453 CPDF_Dictionary* pRoot = m_pContext->GetPDFDoc()->GetRoot(); 454 CPDF_Dictionary* pRoot = m_pContext->GetPDFDoc()->GetRoot();
454 if (!pRoot) 455 if (!pRoot)
455 return; 456 return;
456 457
457 CPDF_Dictionary* pAcroForm = pRoot->GetDictFor("AcroForm"); 458 CPDF_Dictionary* pAcroForm = pRoot->GetDictFor("AcroForm");
458 if (!pAcroForm) 459 if (!pAcroForm)
459 return; 460 return;
460 461
461 CPDF_Array* pArray = ToArray(pAcroForm->GetObjectFor("XFA")); 462 CPDF_Array* pArray = ToArray(pAcroForm->GetObjectFor("XFA"));
462 if (!pArray) 463 if (!pArray)
463 return; 464 return;
464 465
465 int size = pArray->GetCount(); 466 int size = pArray->GetCount();
466 for (int i = 1; i < size; i += 2) { 467 for (int i = 1; i < size; i += 2) {
467 CPDF_Object* pPDFObj = pArray->GetObjectAt(i); 468 CPDF_Object* pPDFObj = pArray->GetObjectAt(i);
468 CPDF_Object* pPrePDFObj = pArray->GetObjectAt(i - 1); 469 CPDF_Object* pPrePDFObj = pArray->GetObjectAt(i - 1);
469 if (!pPrePDFObj->IsString()) 470 if (!pPrePDFObj->IsString())
470 continue; 471 continue;
471 if (!pPDFObj->IsReference()) 472 if (!pPDFObj->IsReference())
472 continue; 473 continue;
473 474
474 CPDF_Stream* pStream = ToStream(pPDFObj->GetDirect()); 475 CPDF_Stream* pStream = ToStream(pPDFObj->GetDirect());
475 if (!pStream) 476 if (!pStream)
476 continue; 477 continue;
477 if (pPrePDFObj->GetString() == "form") { 478 if (pPrePDFObj->GetString() == "form") {
478 m_pContext->GetXFADocView()->GetDoc()->SavePackage( 479 m_pContext->GetXFADocView()->GetDoc()->SavePackage(XFA_HASHCODE_Form,
479 XFA_HASHCODE_Form, fileWrite.get(), nullptr); 480 fileWrite, nullptr);
480 continue; 481 continue;
481 } 482 }
482 if (pPrePDFObj->GetString() == "datasets") { 483 if (pPrePDFObj->GetString() == "datasets") {
483 m_pContext->GetXFADocView()->GetDoc()->SavePackage( 484 m_pContext->GetXFADocView()->GetDoc()->SavePackage(
484 XFA_HASHCODE_Datasets, fileWrite.get(), nullptr); 485 XFA_HASHCODE_Datasets, fileWrite, nullptr);
485 continue; 486 continue;
486 } 487 }
487 if (i == size - 1) { 488 if (i == size - 1) {
488 CFX_WideString wPath = CFX_WideString::FromUTF16LE( 489 CFX_WideString wPath = CFX_WideString::FromUTF16LE(
489 reinterpret_cast<const unsigned short*>(bs.c_str()), 490 reinterpret_cast<const unsigned short*>(bs.c_str()),
490 bs.GetLength() / sizeof(unsigned short)); 491 bs.GetLength() / sizeof(unsigned short));
491 CFX_ByteString bPath = wPath.UTF8Encode(); 492 CFX_ByteString bPath = wPath.UTF8Encode();
492 const char* szFormat = 493 const char* szFormat =
493 "\n<pdf href=\"%s\" xmlns=\"http://ns.adobe.com/xdp/pdf/\"/>"; 494 "\n<pdf href=\"%s\" xmlns=\"http://ns.adobe.com/xdp/pdf/\"/>";
494 content.Format(szFormat, bPath.c_str()); 495 content.Format(szFormat, bPath.c_str());
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 bool CPDFXFA_DocEnvironment::SubmitData(CXFA_FFDoc* hDoc, CXFA_Submit submit) { 693 bool CPDFXFA_DocEnvironment::SubmitData(CXFA_FFDoc* hDoc, CXFA_Submit submit) {
693 if (!NotifySubmit(true) || !m_pContext->GetXFADocView()) 694 if (!NotifySubmit(true) || !m_pContext->GetXFADocView())
694 return false; 695 return false;
695 696
696 m_pContext->GetXFADocView()->UpdateDocView(); 697 m_pContext->GetXFADocView()->UpdateDocView();
697 bool ret = SubmitDataInternal(hDoc, submit); 698 bool ret = SubmitDataInternal(hDoc, submit);
698 NotifySubmit(false); 699 NotifySubmit(false);
699 return ret; 700 return ret;
700 } 701 }
701 702
702 IFX_SeekableReadStream* CPDFXFA_DocEnvironment::OpenLinkedFile( 703 CFX_RetainPtr<IFX_SeekableReadStream> CPDFXFA_DocEnvironment::OpenLinkedFile(
703 CXFA_FFDoc* hDoc, 704 CXFA_FFDoc* hDoc,
704 const CFX_WideString& wsLink) { 705 const CFX_WideString& wsLink) {
705 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pContext->GetFormFillEnv(); 706 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pContext->GetFormFillEnv();
706 if (!pFormFillEnv) 707 if (!pFormFillEnv)
707 return nullptr; 708 return nullptr;
708 709
709 CFX_ByteString bs = wsLink.UTF16LE_Encode(); 710 CFX_ByteString bs = wsLink.UTF16LE_Encode();
710 int len = bs.GetLength(); 711 int len = bs.GetLength();
711 FPDF_FILEHANDLER* pFileHandler = 712 FPDF_FILEHANDLER* pFileHandler =
712 pFormFillEnv->OpenFile(0, (FPDF_WIDESTRING)bs.GetBuffer(len), "rb"); 713 pFormFillEnv->OpenFile(0, (FPDF_WIDESTRING)bs.GetBuffer(len), "rb");
713 bs.ReleaseBuffer(len); 714 bs.ReleaseBuffer(len);
714 if (!pFileHandler) 715 if (!pFileHandler)
715 return nullptr; 716 return nullptr;
716 717
717 return MakeSeekableStream(pFileHandler); 718 return MakeSeekableStream(pFileHandler);
718 } 719 }
719 720
720 bool CPDFXFA_DocEnvironment::ExportSubmitFile(FPDF_FILEHANDLER* pFileHandler, 721 bool CPDFXFA_DocEnvironment::ExportSubmitFile(FPDF_FILEHANDLER* pFileHandler,
721 int fileType, 722 int fileType,
722 FPDF_DWORD encodeType, 723 FPDF_DWORD encodeType,
723 FPDF_DWORD flag) { 724 FPDF_DWORD flag) {
724 if (!m_pContext->GetXFADocView()) 725 if (!m_pContext->GetXFADocView())
725 return false; 726 return false;
726 727
727 CFX_ByteString content; 728 CFX_ByteString content;
728 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pContext->GetFormFillEnv(); 729 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pContext->GetFormFillEnv();
729 if (!pFormFillEnv) 730 if (!pFormFillEnv)
730 return false; 731 return false;
731 732
732 std::unique_ptr<IFX_SeekableStream, ReleaseDeleter<IFX_SeekableStream>> 733 CFX_RetainPtr<IFX_SeekableStream> fileStream =
733 fileStream(MakeSeekableStream(pFileHandler)); 734 MakeSeekableStream(pFileHandler);
734 735
735 if (fileType == FXFA_SAVEAS_XML) { 736 if (fileType == FXFA_SAVEAS_XML) {
736 const char kContent[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"; 737 const char kContent[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n";
737 fileStream->WriteBlock(kContent, 0, strlen(kContent)); 738 fileStream->WriteBlock(kContent, 0, strlen(kContent));
738 m_pContext->GetXFADoc()->SavePackage(XFA_HASHCODE_Data, fileStream.get(), 739 m_pContext->GetXFADoc()->SavePackage(XFA_HASHCODE_Data, fileStream,
739 nullptr); 740 nullptr);
740 return true; 741 return true;
741 } 742 }
742 743
743 if (fileType != FXFA_SAVEAS_XDP) 744 if (fileType != FXFA_SAVEAS_XDP)
744 return true; 745 return true;
745 746
746 if (!flag) { 747 if (!flag) {
747 flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS | 748 flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS |
748 FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM; 749 FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 continue; 791 continue;
791 if (pPrePDFObj->GetString() == "datasets" && !(flag & FXFA_DATASETS)) 792 if (pPrePDFObj->GetString() == "datasets" && !(flag & FXFA_DATASETS))
792 continue; 793 continue;
793 if (pPrePDFObj->GetString() == "xmpmeta" && !(flag & FXFA_XMPMETA)) 794 if (pPrePDFObj->GetString() == "xmpmeta" && !(flag & FXFA_XMPMETA))
794 continue; 795 continue;
795 if (pPrePDFObj->GetString() == "xfdf" && !(flag & FXFA_XFDF)) 796 if (pPrePDFObj->GetString() == "xfdf" && !(flag & FXFA_XFDF))
796 continue; 797 continue;
797 if (pPrePDFObj->GetString() == "form" && !(flag & FXFA_FORM)) 798 if (pPrePDFObj->GetString() == "form" && !(flag & FXFA_FORM))
798 continue; 799 continue;
799 if (pPrePDFObj->GetString() == "form") { 800 if (pPrePDFObj->GetString() == "form") {
800 m_pContext->GetXFADoc()->SavePackage(XFA_HASHCODE_Form, fileStream.get(), 801 m_pContext->GetXFADoc()->SavePackage(XFA_HASHCODE_Form, fileStream,
801 nullptr); 802 nullptr);
802 } else if (pPrePDFObj->GetString() == "datasets") { 803 } else if (pPrePDFObj->GetString() == "datasets") {
803 m_pContext->GetXFADoc()->SavePackage(XFA_HASHCODE_Datasets, 804 m_pContext->GetXFADoc()->SavePackage(XFA_HASHCODE_Datasets, fileStream,
804 fileStream.get(), nullptr); 805 nullptr);
805 } else { 806 } else {
806 // PDF,creator. 807 // PDF,creator.
807 } 808 }
808 } 809 }
809 return true; 810 return true;
810 } 811 }
811 812
812 void CPDFXFA_DocEnvironment::ToXFAContentFlags(CFX_WideString csSrcContent, 813 void CPDFXFA_DocEnvironment::ToXFAContentFlags(CFX_WideString csSrcContent,
813 FPDF_DWORD& flag) { 814 FPDF_DWORD& flag) {
814 if (csSrcContent.Find(L" config ", 0) != -1) 815 if (csSrcContent.Find(L" config ", 0) != -1)
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
1020 !m_pContext->GetFormFillEnv()->GetJSRuntime()) { 1021 !m_pContext->GetFormFillEnv()->GetJSRuntime()) {
1021 return false; 1022 return false;
1022 } 1023 }
1023 1024
1024 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pContext->GetFormFillEnv(); 1025 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pContext->GetFormFillEnv();
1025 if (!m_pJSContext) 1026 if (!m_pJSContext)
1026 m_pJSContext = pFormFillEnv->GetJSRuntime()->NewContext(); 1027 m_pJSContext = pFormFillEnv->GetJSRuntime()->NewContext();
1027 1028
1028 return pFormFillEnv->GetJSRuntime()->GetValueByName(szPropName, pValue); 1029 return pFormFillEnv->GetJSRuntime()->GetValueByName(szPropName, pValue);
1029 } 1030 }
OLDNEW
« no previous file with comments | « fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h ('k') | fpdfsdk/fsdk_define.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698