Add Deleter and Scoper for FPDF_PAGELINK.
Change-Id: Ie997bfa5437d4222a381be3fc2b4334d6c8e2d5b
Reviewed-on: https://pdfium-review.googlesource.com/38190
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/fpdf_text_embeddertest.cpp b/fpdfsdk/fpdf_text_embeddertest.cpp
index 112991f..eafe1a2 100644
--- a/fpdfsdk/fpdf_text_embeddertest.cpp
+++ b/fpdfsdk/fpdf_text_embeddertest.cpp
@@ -7,6 +7,7 @@
#include <utility>
#include "core/fxcrt/fx_memory.h"
+#include "public/cpp/fpdf_scopers.h"
#include "public/fpdf_text.h"
#include "public/fpdf_transformpage.h"
#include "public/fpdfview.h"
@@ -321,17 +322,22 @@
FPDF_TEXTPAGE textpage = FPDFText_LoadPage(page);
ASSERT_TRUE(textpage);
+ {
+ ScopedFPDFPageLink pagelink(FPDFLink_LoadWebLinks(textpage));
+ EXPECT_TRUE(pagelink);
+
+ // Page contains two HTTP-style URLs.
+ EXPECT_EQ(2, FPDFLink_CountWebLinks(pagelink.get()));
+
+ // Only a terminating NUL required for bogus links.
+ EXPECT_EQ(1, FPDFLink_GetURL(pagelink.get(), 2, nullptr, 0));
+ EXPECT_EQ(1, FPDFLink_GetURL(pagelink.get(), 1400, nullptr, 0));
+ EXPECT_EQ(1, FPDFLink_GetURL(pagelink.get(), -1, nullptr, 0));
+ }
+
FPDF_PAGELINK pagelink = FPDFLink_LoadWebLinks(textpage);
EXPECT_TRUE(pagelink);
- // Page contains two HTTP-style URLs.
- EXPECT_EQ(2, FPDFLink_CountWebLinks(pagelink));
-
- // Only a terminating NUL required for bogus links.
- EXPECT_EQ(1, FPDFLink_GetURL(pagelink, 2, nullptr, 0));
- EXPECT_EQ(1, FPDFLink_GetURL(pagelink, 1400, nullptr, 0));
- EXPECT_EQ(1, FPDFLink_GetURL(pagelink, -1, nullptr, 0));
-
// Query the number of characters required for each link (incl NUL).
EXPECT_EQ(25, FPDFLink_GetURL(pagelink, 0, nullptr, 0));
EXPECT_EQ(26, FPDFLink_GetURL(pagelink, 1, nullptr, 0));
diff --git a/public/cpp/fpdf_deleters.h b/public/cpp/fpdf_deleters.h
index 51e7cba..d9d95cd 100644
--- a/public/cpp/fpdf_deleters.h
+++ b/public/cpp/fpdf_deleters.h
@@ -45,6 +45,12 @@
inline void operator()(FPDF_PAGE page) { FPDF_ClosePage(page); }
};
+struct FPDFPageLinkDeleter {
+ inline void operator()(FPDF_PAGELINK pagelink) {
+ FPDFLink_CloseWebLinks(pagelink);
+ }
+};
+
struct FPDFStructTreeDeleter {
inline void operator()(FPDF_STRUCTTREE tree) { FPDF_StructTree_Close(tree); }
};
diff --git a/public/cpp/fpdf_scopers.h b/public/cpp/fpdf_scopers.h
index 1898ac8..3601f47 100644
--- a/public/cpp/fpdf_scopers.h
+++ b/public/cpp/fpdf_scopers.h
@@ -44,6 +44,10 @@
using ScopedFPDFPage =
std::unique_ptr<std::remove_pointer<FPDF_PAGE>::type, FPDFPageDeleter>;
+using ScopedFPDFPageLink =
+ std::unique_ptr<std::remove_pointer<FPDF_PAGELINK>::type,
+ FPDFPageLinkDeleter>;
+
using ScopedFPDFStructTree =
std::unique_ptr<std::remove_pointer<FPDF_STRUCTTREE>::type,
FPDFStructTreeDeleter>;