Merge to XFA: Implement FPDFAction_GetFilePath().
The API is the same as the Foxit version, except the encoding is
specified as UTF-8 instead of local encoding.
Also remove CPDF_LWinParam since it's unused.
BUG=chromium:517713
R=tsepez@chromium.org
Review URL: https://codereview.chromium.org/1335373002 .
(cherry picked from commit 0b3c8f742613da294f812e2f6e908f4026499f96)
(cherry picked from commit a9d4bc541179ec0436adc4b2e18b7fdecc5952dc)
(cherry picked from commit 4ffd89ed556e32a6527d0e88952fe20ec1e2f362)
Review URL: https://codereview.chromium.org/1345953002 .
diff --git a/fpdfsdk/src/fpdfdoc.cpp b/fpdfsdk/src/fpdfdoc.cpp
index 47225dd..34caf95 100644
--- a/fpdfsdk/src/fpdfdoc.cpp
+++ b/fpdfsdk/src/fpdfdoc.cpp
@@ -128,7 +128,8 @@
DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION pDict) {
if (!pDict)
- return 0;
+ return PDFACTION_UNSUPPORTED;
+
CPDF_Action action((CPDF_Dictionary*)pDict);
CPDF_Action::ActionType type = action.GetType();
switch (type) {
@@ -143,43 +144,53 @@
default:
return PDFACTION_UNSUPPORTED;
}
- return PDFACTION_UNSUPPORTED;
}
DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document,
FPDF_ACTION pDict) {
- if (!document)
- return NULL;
- if (!pDict)
- return NULL;
+ if (!document || !pDict)
+ return nullptr;
+
CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc();
CPDF_Action action((CPDF_Dictionary*)pDict);
return action.GetDest(pDoc).GetObject();
}
+DLLEXPORT unsigned long STDCALL
+FPDFAction_GetFilePath(FPDF_ACTION pDict, void* buffer, unsigned long buflen) {
+ unsigned long type = FPDFAction_GetType(pDict);
+ if (type != PDFACTION_REMOTEGOTO && type != PDFACTION_LAUNCH)
+ return 0;
+
+ CPDF_Action action((CPDF_Dictionary*)pDict);
+ CFX_ByteString path = action.GetFilePath().UTF8Encode();
+ unsigned long len = path.GetLength() + 1;
+ if (buffer && buflen >= len)
+ FXSYS_memcpy(buffer, path.c_str(), len);
+ return len;
+}
+
DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document,
FPDF_ACTION pDict,
void* buffer,
unsigned long buflen) {
- if (!document)
+ if (!document || !pDict)
return 0;
- if (!pDict)
- return 0;
+
CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc();
CPDF_Action action((CPDF_Dictionary*)pDict);
CFX_ByteString path = action.GetURI(pDoc);
unsigned long len = path.GetLength() + 1;
- if (buffer != NULL && buflen >= len)
+ if (buffer && buflen >= len)
FXSYS_memcpy(buffer, path.c_str(), len);
return len;
}
DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document,
FPDF_DEST pDict) {
- if (!document)
+ if (!document || !pDict)
return 0;
- if (!pDict)
- return 0;
+
CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc();
CPDF_Dest dest((CPDF_Array*)pDict);
return dest.GetPageIndex(pDoc);
@@ -218,10 +229,9 @@
DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document,
FPDF_LINK pDict) {
- if (!document)
- return NULL;
- if (!pDict)
- return NULL;
+ if (!document || !pDict)
+ return nullptr;
+
CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc();
CPDF_Link link((CPDF_Dictionary*)pDict);
FPDF_DEST dest = link.GetDest(pDoc).GetObject();
@@ -230,13 +240,14 @@
// If this link is not directly associated with a dest, we try to get action
CPDF_Action action = link.GetAction();
if (!action)
- return NULL;
+ return nullptr;
return action.GetDest(pDoc).GetObject();
}
DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK pDict) {
if (!pDict)
- return NULL;
+ return nullptr;
+
CPDF_Link link((CPDF_Dictionary*)pDict);
return link.GetAction().GetDict();
}