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

Side by Side Diff: fpdfsdk/cpdfsdk_interform.cpp

Issue 2538533003: Make FDF document creation return unique_ptrs (Closed)
Patch Set: 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 | « core/fpdfdoc/cpdf_interform.cpp ('k') | no next file » | 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/cpdfsdk_interform.h" 7 #include "fpdfsdk/cpdfsdk_interform.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 return true; 456 return true;
457 } 457 }
458 458
459 bool CPDFSDK_InterForm::FDFToURLEncodedData(CFX_WideString csFDFFile, 459 bool CPDFSDK_InterForm::FDFToURLEncodedData(CFX_WideString csFDFFile,
460 CFX_WideString csTxtFile) { 460 CFX_WideString csTxtFile) {
461 return true; 461 return true;
462 } 462 }
463 463
464 bool CPDFSDK_InterForm::FDFToURLEncodedData(uint8_t*& pBuf, 464 bool CPDFSDK_InterForm::FDFToURLEncodedData(uint8_t*& pBuf,
465 FX_STRSIZE& nBufSize) { 465 FX_STRSIZE& nBufSize) {
466 CFDF_Document* pFDF = CFDF_Document::ParseMemory(pBuf, nBufSize); 466 std::unique_ptr<CFDF_Document> pFDF =
Tom Sepez 2016/11/28 23:21:55 Note: I can't figure out why this didn't leak and
Wei Li 2016/11/29 01:25:34 This path is not tested. :(
467 CFDF_Document::ParseMemory(pBuf, nBufSize);
467 if (!pFDF) 468 if (!pFDF)
468 return true; 469 return true;
469 470
470 CPDF_Dictionary* pMainDict = pFDF->GetRoot()->GetDictFor("FDF"); 471 CPDF_Dictionary* pMainDict = pFDF->GetRoot()->GetDictFor("FDF");
471 if (!pMainDict) 472 if (!pMainDict)
472 return false; 473 return false;
473 474
474 CPDF_Array* pFields = pMainDict->GetArrayFor("Fields"); 475 CPDF_Array* pFields = pMainDict->GetArrayFor("Fields");
475 if (!pFields) 476 if (!pFields)
476 return false; 477 return false;
(...skipping 22 matching lines...) Expand all
499 nBufSize = fdfEncodedData.GetLength(); 500 nBufSize = fdfEncodedData.GetLength();
500 pBuf = FX_Alloc(uint8_t, nBufSize); 501 pBuf = FX_Alloc(uint8_t, nBufSize);
501 FXSYS_memcpy(pBuf, fdfEncodedData.GetBuffer(), nBufSize); 502 FXSYS_memcpy(pBuf, fdfEncodedData.GetBuffer(), nBufSize);
502 return true; 503 return true;
503 } 504 }
504 505
505 bool CPDFSDK_InterForm::ExportFieldsToFDFTextBuf( 506 bool CPDFSDK_InterForm::ExportFieldsToFDFTextBuf(
506 const std::vector<CPDF_FormField*>& fields, 507 const std::vector<CPDF_FormField*>& fields,
507 bool bIncludeOrExclude, 508 bool bIncludeOrExclude,
508 CFX_ByteTextBuf& textBuf) { 509 CFX_ByteTextBuf& textBuf) {
509 std::unique_ptr<CFDF_Document> pFDF( 510 std::unique_ptr<CFDF_Document> pFDF =
510 m_pInterForm->ExportToFDF(m_pFormFillEnv->JS_docGetFilePath().AsStringC(), 511 m_pInterForm->ExportToFDF(m_pFormFillEnv->JS_docGetFilePath().AsStringC(),
511 fields, bIncludeOrExclude, false)); 512 fields, bIncludeOrExclude, false);
512 return pFDF ? pFDF->WriteBuf(textBuf) : false; 513 return pFDF ? pFDF->WriteBuf(textBuf) : false;
513 } 514 }
514 515
515 CFX_WideString CPDFSDK_InterForm::GetTemporaryFileName( 516 CFX_WideString CPDFSDK_InterForm::GetTemporaryFileName(
516 const CFX_WideString& sFileExt) { 517 const CFX_WideString& sFileExt) {
517 return L""; 518 return L"";
518 } 519 }
519 520
520 bool CPDFSDK_InterForm::SubmitForm(const CFX_WideString& sDestination, 521 bool CPDFSDK_InterForm::SubmitForm(const CFX_WideString& sDestination,
521 bool bUrlEncoded) { 522 bool bUrlEncoded) {
522 if (sDestination.IsEmpty()) 523 if (sDestination.IsEmpty())
523 return false; 524 return false;
524 525
525 if (!m_pFormFillEnv || !m_pInterForm) 526 if (!m_pFormFillEnv || !m_pInterForm)
526 return false; 527 return false;
527 528
528 CFX_WideString wsPDFFilePath = m_pFormFillEnv->JS_docGetFilePath(); 529 std::unique_ptr<CFDF_Document> pFDFDoc = m_pInterForm->ExportToFDF(
529 CFDF_Document* pFDFDoc = 530 m_pFormFillEnv->JS_docGetFilePath().AsStringC(), false);
530 m_pInterForm->ExportToFDF(wsPDFFilePath.AsStringC(), false);
531 if (!pFDFDoc) 531 if (!pFDFDoc)
532 return false; 532 return false;
533 533
534 CFX_ByteTextBuf FdfBuffer; 534 CFX_ByteTextBuf FdfBuffer;
535 bool bRet = pFDFDoc->WriteBuf(FdfBuffer); 535 if (!pFDFDoc->WriteBuf(FdfBuffer))
536 delete pFDFDoc;
537 if (!bRet)
538 return false; 536 return false;
539 537
540 uint8_t* pBuffer = FdfBuffer.GetBuffer(); 538 uint8_t* pBuffer = FdfBuffer.GetBuffer();
541 FX_STRSIZE nBufSize = FdfBuffer.GetLength(); 539 FX_STRSIZE nBufSize = FdfBuffer.GetLength();
542
543 if (bUrlEncoded && !FDFToURLEncodedData(pBuffer, nBufSize)) 540 if (bUrlEncoded && !FDFToURLEncodedData(pBuffer, nBufSize))
544 return false; 541 return false;
545 542
546 m_pFormFillEnv->JS_docSubmitForm(pBuffer, nBufSize, sDestination.c_str()); 543 m_pFormFillEnv->JS_docSubmitForm(pBuffer, nBufSize, sDestination.c_str());
547
548 if (bUrlEncoded) 544 if (bUrlEncoded)
549 FX_Free(pBuffer); 545 FX_Free(pBuffer);
550 546
551 return true; 547 return true;
552 } 548 }
553 549
554 bool CPDFSDK_InterForm::ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf) { 550 bool CPDFSDK_InterForm::ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf) {
555 CFDF_Document* pFDF = m_pInterForm->ExportToFDF( 551 std::unique_ptr<CFDF_Document> pFDF = m_pInterForm->ExportToFDF(
556 m_pFormFillEnv->JS_docGetFilePath().AsStringC(), false); 552 m_pFormFillEnv->JS_docGetFilePath().AsStringC(), false);
557 if (!pFDF) 553 return pFDF && pFDF->WriteBuf(textBuf);
558 return false;
559
560 bool bRet = pFDF->WriteBuf(textBuf);
561 delete pFDF;
562
563 return bRet;
564 } 554 }
565 555
566 bool CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action) { 556 bool CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action) {
567 ASSERT(action.GetDict()); 557 ASSERT(action.GetDict());
568 558
569 CPDF_Dictionary* pActionDict = action.GetDict(); 559 CPDF_Dictionary* pActionDict = action.GetDict();
570 if (!pActionDict->KeyExist("Fields")) 560 if (!pActionDict->KeyExist("Fields"))
571 return m_pInterForm->ResetForm(true); 561 return m_pInterForm->ResetForm(true);
572 562
573 CPDF_ActionFields af(&action); 563 CPDF_ActionFields af(&action);
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 } 693 }
704 } 694 }
705 695
706 FX_COLORREF CPDFSDK_InterForm::GetHighlightColor(int nFieldType) { 696 FX_COLORREF CPDFSDK_InterForm::GetHighlightColor(int nFieldType) {
707 if (nFieldType < 0 || nFieldType > kNumFieldTypes) 697 if (nFieldType < 0 || nFieldType > kNumFieldTypes)
708 return FXSYS_RGB(255, 255, 255); 698 return FXSYS_RGB(255, 255, 255);
709 if (nFieldType == 0) 699 if (nFieldType == 0)
710 return m_aHighlightColor[0]; 700 return m_aHighlightColor[0];
711 return m_aHighlightColor[nFieldType - 1]; 701 return m_aHighlightColor[nFieldType - 1];
712 } 702 }
OLDNEW
« no previous file with comments | « core/fpdfdoc/cpdf_interform.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698