Clean up RenderPage methods in EmbedderTest.

Add replacement methods that make themselves clear as to what they are
rendering, and return unique_ptrs to help prevent leakage. Mark existing
methods deprecated.

Change-Id: I9055407e614dfbe765428fb32a7da64df3418d1d
Reviewed-on: https://pdfium-review.googlesource.com/25470
Reviewed-by: dsinclair <dsinclair@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/edit/cpdf_creator_embeddertest.cpp b/core/fpdfapi/edit/cpdf_creator_embeddertest.cpp
index def7d50..7d1fb30 100644
--- a/core/fpdfapi/edit/cpdf_creator_embeddertest.cpp
+++ b/core/fpdfapi/edit/cpdf_creator_embeddertest.cpp
@@ -28,7 +28,7 @@
     FPDF_PAGE page = FPDF_LoadPage(document(), 0);
     ASSERT_TRUE(page);
     FPDF_BITMAP new_bitmap =
-        RenderPageWithFlags(page, form_handle(), FPDF_ANNOT);
+        RenderPageWithFlagsDeprecated(page, form_handle(), FPDF_ANNOT);
     FPDFBitmap_Destroy(new_bitmap);
     UnloadPage(page);
   }
diff --git a/core/fpdfapi/page/cpdf_stitchfunc_embeddertest.cpp b/core/fpdfapi/page/cpdf_stitchfunc_embeddertest.cpp
index 6a1b87b..ebc7192 100644
--- a/core/fpdfapi/page/cpdf_stitchfunc_embeddertest.cpp
+++ b/core/fpdfapi/page/cpdf_stitchfunc_embeddertest.cpp
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
 #include "testing/embedder_test.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -13,9 +15,8 @@
   // and trusted. The number of inputs has to be 1.
   EXPECT_TRUE(OpenDocument("bug_551460.pdf"));
   FPDF_PAGE page = LoadPage(0);
-  EXPECT_NE(nullptr, page);
-  FPDF_BITMAP bitmap = RenderPage(page);
-  CompareBitmap(bitmap, 612, 792, "1940568c9ba33bac5d0b1ee9558c76b3");
-  FPDFBitmap_Destroy(bitmap);
+  ASSERT_TRUE(page);
+  std::unique_ptr<void, FPDFBitmapDeleter> bitmap = RenderLoadedPage(page);
+  CompareBitmap(bitmap.get(), 612, 792, "1940568c9ba33bac5d0b1ee9558c76b3");
   UnloadPage(page);
 }
diff --git a/core/fpdfapi/parser/cpdf_security_handler_embeddertest.cpp b/core/fpdfapi/parser/cpdf_security_handler_embeddertest.cpp
index cc29b89..6c1a0e9 100644
--- a/core/fpdfapi/parser/cpdf_security_handler_embeddertest.cpp
+++ b/core/fpdfapi/parser/cpdf_security_handler_embeddertest.cpp
@@ -58,7 +58,7 @@
     EXPECT_TRUE(FPDFPath_SetFillColor(red_rect, 255, 0, 0, 255));
     EXPECT_TRUE(FPDFPath_SetDrawMode(red_rect, FPDF_FILLMODE_ALTERNATE, 0));
     FPDFPage_InsertObject(page, red_rect);
-    FPDF_BITMAP page_bitmap = RenderPage(page);
+    FPDF_BITMAP page_bitmap = RenderPageDeprecated(page);
     CompareBitmap(page_bitmap, 612, 792, md5);
     FPDFBitmap_Destroy(page_bitmap);
     EXPECT_TRUE(FPDFPage_GenerateContent(page));
diff --git a/core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp b/core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp
index e95a4cc..20e8cf7 100644
--- a/core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp
+++ b/core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp
@@ -93,7 +93,7 @@
   // crash when rendered.
   EXPECT_TRUE(OpenDocument("bug_552046.pdf"));
   FPDF_PAGE page = LoadPage(0);
-  FPDF_BITMAP bitmap = RenderPage(page);
+  FPDF_BITMAP bitmap = RenderPageDeprecated(page);
   CompareBitmap(bitmap, 612, 792, "1940568c9ba33bac5d0b1ee9558c76b3");
   FPDFBitmap_Destroy(bitmap);
   UnloadPage(page);
@@ -104,7 +104,7 @@
   // Should not cause a crash when rendered.
   EXPECT_TRUE(OpenDocument("bug_555784.pdf"));
   FPDF_PAGE page = LoadPage(0);
-  FPDF_BITMAP bitmap = RenderPage(page);
+  FPDF_BITMAP bitmap = RenderPageDeprecated(page);
   CompareBitmap(bitmap, 612, 792, "1940568c9ba33bac5d0b1ee9558c76b3");
   FPDFBitmap_Destroy(bitmap);
   UnloadPage(page);
@@ -115,7 +115,7 @@
   // Should open successfully.
   EXPECT_TRUE(OpenDocument("bug_455199.pdf"));
   FPDF_PAGE page = LoadPage(0);
-  FPDF_BITMAP bitmap = RenderPage(page);
+  FPDF_BITMAP bitmap = RenderPageDeprecated(page);
 #if _FX_PLATFORM_ == _FX_PLATFORM_APPLE_
   const char kExpectedMd5sum[] = "b90475ca64d1348c3bf5e2b77ad9187a";
 #elif _FX_PLATFORM_ == _FX_PLATFORM_WINDOWS_
diff --git a/core/fpdfapi/render/fpdf_render_loadimage_embeddertest.cpp b/core/fpdfapi/render/fpdf_render_loadimage_embeddertest.cpp
index 5b7cbc6..caf4673 100644
--- a/core/fpdfapi/render/fpdf_render_loadimage_embeddertest.cpp
+++ b/core/fpdfapi/render/fpdf_render_loadimage_embeddertest.cpp
@@ -13,7 +13,7 @@
   EXPECT_TRUE(OpenDocument("bug_554151.pdf"));
   FPDF_PAGE page = LoadPage(0);
   EXPECT_NE(nullptr, page);
-  FPDF_BITMAP bitmap = RenderPage(page);
+  FPDF_BITMAP bitmap = RenderPageDeprecated(page);
   CompareBitmap(bitmap, 612, 792, "a14d7ee573c1b2456d7bf6b7762823cf");
   FPDFBitmap_Destroy(bitmap);
   UnloadPage(page);
@@ -24,7 +24,7 @@
   EXPECT_TRUE(OpenDocument("bug_557223.pdf"));
   FPDF_PAGE page = LoadPage(0);
   EXPECT_NE(nullptr, page);
-  FPDF_BITMAP bitmap = RenderPage(page);
+  FPDF_BITMAP bitmap = RenderPageDeprecated(page);
   CompareBitmap(bitmap, 24, 24, "dc0ea1b743c2edb22c597cadc8537f7b");
   FPDFBitmap_Destroy(bitmap);
   UnloadPage(page);
@@ -35,7 +35,7 @@
   EXPECT_TRUE(OpenDocument("bug_603518.pdf"));
   FPDF_PAGE page = LoadPage(0);
   EXPECT_NE(nullptr, page);
-  FPDF_BITMAP bitmap = RenderPage(page);
+  FPDF_BITMAP bitmap = RenderPageDeprecated(page);
   CompareBitmap(bitmap, 749, 749, "b9e75190cdc5edf0069a408744ca07dc");
   FPDFBitmap_Destroy(bitmap);
   UnloadPage(page);
diff --git a/core/fpdfapi/render/fpdf_render_pattern_embeddertest.cpp b/core/fpdfapi/render/fpdf_render_pattern_embeddertest.cpp
index ed6da46..f141590 100644
--- a/core/fpdfapi/render/fpdf_render_pattern_embeddertest.cpp
+++ b/core/fpdfapi/render/fpdf_render_pattern_embeddertest.cpp
@@ -11,7 +11,7 @@
   // Test shading where object is a dictionary instead of a stream.
   EXPECT_TRUE(OpenDocument("bug_547706.pdf"));
   FPDF_PAGE page = LoadPage(0);
-  FPDF_BITMAP bitmap = RenderPage(page);
+  FPDF_BITMAP bitmap = RenderPageDeprecated(page);
   CompareBitmap(bitmap, 612, 792, "1940568c9ba33bac5d0b1ee9558c76b3");
   FPDFBitmap_Destroy(bitmap);
   UnloadPage(page);
diff --git a/core/fxcodec/codec/fx_codec_embeddertest.cpp b/core/fxcodec/codec/fx_codec_embeddertest.cpp
index fd02f97..50a15c3 100644
--- a/core/fxcodec/codec/fx_codec_embeddertest.cpp
+++ b/core/fxcodec/codec/fx_codec_embeddertest.cpp
@@ -13,7 +13,7 @@
   EXPECT_TRUE(OpenDocument("bug_631912.pdf"));
   FPDF_PAGE page = LoadPage(0);
   EXPECT_NE(nullptr, page);
-  FPDF_BITMAP bitmap = RenderPage(page);
+  FPDF_BITMAP bitmap = RenderPageDeprecated(page);
   CompareBitmap(bitmap, 691, 432, "24d75af646f8772c5ee7ced260452ae4");
   FPDFBitmap_Destroy(bitmap);
   UnloadPage(page);
diff --git a/core/fxge/fx_ge_text_embeddertest.cpp b/core/fxge/fx_ge_text_embeddertest.cpp
index 045b6dc..7aeb3f3 100644
--- a/core/fxge/fx_ge_text_embeddertest.cpp
+++ b/core/fxge/fx_ge_text_embeddertest.cpp
@@ -12,7 +12,7 @@
   EXPECT_TRUE(OpenDocument("bug_601362.pdf"));
   FPDF_PAGE page = LoadPage(0);
   EXPECT_NE(nullptr, page);
-  FPDF_BITMAP bitmap = RenderPage(page);
+  FPDF_BITMAP bitmap = RenderPageDeprecated(page);
   FPDFBitmap_Destroy(bitmap);
   UnloadPage(page);
 }
diff --git a/fpdfsdk/fpdfannot_embeddertest.cpp b/fpdfsdk/fpdfannot_embeddertest.cpp
index ba9bbe0..5b5c297 100644
--- a/fpdfsdk/fpdfannot_embeddertest.cpp
+++ b/fpdfsdk/fpdfannot_embeddertest.cpp
@@ -38,9 +38,9 @@
   // normal appearance defined, only its rollover appearance. In this case, its
   // normal appearance should be generated, allowing the highlight annotation to
   // still display.
-  FPDF_BITMAP bitmap = RenderPageWithFlags(page, form_handle(), FPDF_ANNOT);
-  CompareBitmap(bitmap, 612, 792, "dc98f06da047bd8aabfa99562d2cbd1e");
-  FPDFBitmap_Destroy(bitmap);
+  std::unique_ptr<void, FPDFBitmapDeleter> bitmap =
+      RenderLoadedPageWithFlags(page, FPDF_ANNOT);
+  CompareBitmap(bitmap.get(), 612, 792, "dc98f06da047bd8aabfa99562d2cbd1e");
 
   UnloadPage(page);
 }
@@ -356,7 +356,8 @@
   EXPECT_EQ(4, FPDFPage_GetAnnotCount(page));
 
   // Check that the original file renders correctly.
-  FPDF_BITMAP bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+  FPDF_BITMAP bitmap =
+      RenderPageWithFlagsDeprecated(page, form_handle_, FPDF_ANNOT);
   CompareBitmap(bitmap, 612, 792, md5_original);
   FPDFBitmap_Destroy(bitmap);
 
@@ -396,7 +397,7 @@
     EXPECT_EQ(quadpoints.y4, new_quadpoints.y4);
 
     // Check that updating quadpoints does not change the annotation's position.
-    bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+    bitmap = RenderPageWithFlagsDeprecated(page, form_handle_, FPDF_ANNOT);
     CompareBitmap(bitmap, 612, 792, md5_original);
     FPDFBitmap_Destroy(bitmap);
 
@@ -416,7 +417,7 @@
   }
 
   // Check that updating the rectangle changes the annotation's position.
-  bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+  bitmap = RenderPageWithFlagsDeprecated(page, form_handle_, FPDF_ANNOT);
   CompareBitmap(bitmap, 612, 792, md5_modified_highlight);
   FPDFBitmap_Destroy(bitmap);
 
@@ -437,7 +438,7 @@
 
     // Check that updating the rectangle changes the square annotation's
     // position.
-    bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+    bitmap = RenderPageWithFlagsDeprecated(page, form_handle_, FPDF_ANNOT);
     CompareBitmap(bitmap, 612, 792, md5_modified_square);
     FPDFBitmap_Destroy(bitmap);
   }
@@ -546,7 +547,8 @@
   EXPECT_EQ(2, FPDFPage_GetAnnotCount(page));
 
   // Check that the page renders correctly.
-  FPDF_BITMAP bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+  FPDF_BITMAP bitmap =
+      RenderPageWithFlagsDeprecated(page, form_handle_, FPDF_ANNOT);
   CompareBitmap(bitmap, 595, 842, md5_original);
   FPDFBitmap_Destroy(bitmap);
 
@@ -569,7 +571,7 @@
     EXPECT_TRUE(FPDFAnnot_UpdateObject(annot.get(), path));
 
     // Check that the page with the modified annotation renders correctly.
-    bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+    bitmap = RenderPageWithFlagsDeprecated(page, form_handle_, FPDF_ANNOT);
     CompareBitmap(bitmap, 595, 842, md5_modified_path);
     FPDFBitmap_Destroy(bitmap);
 
@@ -583,7 +585,7 @@
     EXPECT_EQ(2, FPDFAnnot_GetObjectCount(annot.get()));
 
     // Check that the page with an annotation with two paths renders correctly.
-    bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+    bitmap = RenderPageWithFlagsDeprecated(page, form_handle_, FPDF_ANNOT);
     CompareBitmap(bitmap, 595, 842, md5_two_paths);
     FPDFBitmap_Destroy(bitmap);
 
@@ -593,7 +595,7 @@
   }
 
   // Check that the page renders the same as before.
-  bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+  bitmap = RenderPageWithFlagsDeprecated(page, form_handle_, FPDF_ANNOT);
   CompareBitmap(bitmap, 595, 842, md5_modified_path);
   FPDFBitmap_Destroy(bitmap);
 
@@ -669,7 +671,8 @@
   ASSERT_TRUE(page);
 
   // Check that the page renders correctly.
-  FPDF_BITMAP bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+  FPDF_BITMAP bitmap =
+      RenderPageWithFlagsDeprecated(page, form_handle_, FPDF_ANNOT);
   CompareBitmap(bitmap, 612, 792, "dc98f06da047bd8aabfa99562d2cbd1e");
   FPDFBitmap_Destroy(bitmap);
 
@@ -692,7 +695,7 @@
     EXPECT_TRUE(flags & FPDF_ANNOT_FLAG_PRINT);
 
     // Check that the page renders correctly without rendering the annotation.
-    bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+    bitmap = RenderPageWithFlagsDeprecated(page, form_handle_, FPDF_ANNOT);
     CompareBitmap(bitmap, 612, 792, "1940568c9ba33bac5d0b1ee9558c76b3");
     FPDFBitmap_Destroy(bitmap);
 
@@ -706,7 +709,7 @@
     EXPECT_TRUE(flags & FPDF_ANNOT_FLAG_PRINT);
 
     // Check that the page renders correctly as before.
-    bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+    bitmap = RenderPageWithFlagsDeprecated(page, form_handle_, FPDF_ANNOT);
     CompareBitmap(bitmap, 612, 792, "dc98f06da047bd8aabfa99562d2cbd1e");
     FPDFBitmap_Destroy(bitmap);
   }
@@ -732,7 +735,8 @@
   EXPECT_EQ(2, FPDFPage_GetAnnotCount(page));
 
   // Check that the page renders correctly.
-  FPDF_BITMAP bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+  FPDF_BITMAP bitmap =
+      RenderPageWithFlagsDeprecated(page, form_handle_, FPDF_ANNOT);
   CompareBitmap(bitmap, 595, 842, md5_original);
   FPDFBitmap_Destroy(bitmap);
 
@@ -766,7 +770,7 @@
   }
 
   // Check that the page renders correctly with the new image object.
-  bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+  bitmap = RenderPageWithFlagsDeprecated(page, form_handle_, FPDF_ANNOT);
   CompareBitmap(bitmap, 595, 842, md5_new_image);
   FPDFBitmap_Destroy(bitmap);
 
@@ -813,7 +817,8 @@
   EXPECT_EQ(2, FPDFPage_GetAnnotCount(page));
 
   // Check that the page renders correctly.
-  FPDF_BITMAP bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+  FPDF_BITMAP bitmap =
+      RenderPageWithFlagsDeprecated(page, form_handle_, FPDF_ANNOT);
   CompareBitmap(bitmap, 595, 842, md5_original);
   FPDFBitmap_Destroy(bitmap);
 
@@ -842,7 +847,7 @@
   }
 
   // Check that the page renders correctly with the new text object.
-  bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+  bitmap = RenderPageWithFlagsDeprecated(page, form_handle_, FPDF_ANNOT);
   CompareBitmap(bitmap, 595, 842, md5_new_text);
   FPDFBitmap_Destroy(bitmap);
 
@@ -863,13 +868,13 @@
   }
 
   // Check that the page renders correctly with the modified text object.
-  bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+  bitmap = RenderPageWithFlagsDeprecated(page, form_handle_, FPDF_ANNOT);
   CompareBitmap(bitmap, 595, 842, md5_modified_text);
   FPDFBitmap_Destroy(bitmap);
 
   // Remove the new annotation, and check that the page renders as before.
   EXPECT_TRUE(FPDFPage_RemoveAnnot(page, 2));
-  bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+  bitmap = RenderPageWithFlagsDeprecated(page, form_handle_, FPDF_ANNOT);
   CompareBitmap(bitmap, 595, 842, md5_original);
   FPDFBitmap_Destroy(bitmap);
 
diff --git a/fpdfsdk/fpdfedit_embeddertest.cpp b/fpdfsdk/fpdfedit_embeddertest.cpp
index 1a422bd..f388107 100644
--- a/fpdfsdk/fpdfedit_embeddertest.cpp
+++ b/fpdfsdk/fpdfedit_embeddertest.cpp
@@ -197,7 +197,7 @@
     EXPECT_TRUE(OpenDocument("black.pdf"));
     FPDF_PAGE orig_page = LoadPage(0);
     EXPECT_NE(nullptr, orig_page);
-    orig_bitmap = RenderPage(orig_page);
+    orig_bitmap = RenderPageDeprecated(orig_page);
     CompareBitmap(orig_bitmap, 612, 792, kAllBlackMd5sum);
     UnloadPage(orig_page);
   }
@@ -241,7 +241,7 @@
   EXPECT_TRUE(FPDFPath_SetFillColor(red_rect, 255, 0, 0, 255));
   EXPECT_TRUE(FPDFPath_SetDrawMode(red_rect, FPDF_FILLMODE_ALTERNATE, 0));
   FPDFPage_InsertObject(page, red_rect);
-  FPDF_BITMAP page_bitmap = RenderPage(page);
+  FPDF_BITMAP page_bitmap = RenderPageDeprecated(page);
   CompareBitmap(page_bitmap, 612, 792, "66d02eaa6181e2c069ce2ea99beda497");
   FPDFBitmap_Destroy(page_bitmap);
 
@@ -302,7 +302,7 @@
 
   EXPECT_TRUE(FPDFPath_SetDrawMode(green_rect, FPDF_FILLMODE_WINDING, 0));
   FPDFPage_InsertObject(page, green_rect);
-  page_bitmap = RenderPage(page);
+  page_bitmap = RenderPageDeprecated(page);
   CompareBitmap(page_bitmap, 612, 792, "7b0b87604594e773add528fae567a558");
   FPDFBitmap_Destroy(page_bitmap);
 
@@ -340,7 +340,7 @@
   EXPECT_EQ(nullptr, FPDFPath_GetPathSegment(black_path, 3));
 
   FPDFPage_InsertObject(page, black_path);
-  page_bitmap = RenderPage(page);
+  page_bitmap = RenderPageDeprecated(page);
   CompareBitmap(page_bitmap, 612, 792, "eadc8020a14dfcf091da2688733d8806");
   FPDFBitmap_Destroy(page_bitmap);
 
@@ -355,7 +355,7 @@
   EXPECT_TRUE(FPDFPath_BezierTo(blue_path, 375, 330, 390, 360, 400, 400));
   EXPECT_TRUE(FPDFPath_Close(blue_path));
   FPDFPage_InsertObject(page, blue_path);
-  page_bitmap = RenderPage(page);
+  page_bitmap = RenderPageDeprecated(page);
   const char last_md5[] = "9823e1a21bd9b72b6a442ba4f12af946";
   CompareBitmap(page_bitmap, 612, 792, last_md5);
   FPDFBitmap_Destroy(page_bitmap);
@@ -418,7 +418,7 @@
   FPDFPage_InsertObject(page, black_path);
 
   // Render and check the result. Text is slightly different on Mac.
-  FPDF_BITMAP bitmap = RenderPage(page);
+  FPDF_BITMAP bitmap = RenderPageDeprecated(page);
 #if _FX_PLATFORM_ == _FX_PLATFORM_APPLE_
   const char md5[] = "f9e6fa74230f234286bfcada9f7606d8";
 #else
@@ -447,7 +447,7 @@
   EXPECT_TRUE(FPDFPath_SetDrawMode(red_rect, FPDF_FILLMODE_ALTERNATE, 0));
   FPDFPage_InsertObject(page, red_rect);
 
-  FPDF_BITMAP bitmap = RenderPage(page);
+  FPDF_BITMAP bitmap = RenderPageDeprecated(page);
   CompareBitmap(bitmap, 612, 792, "ad04e5bd0f471a9a564fb034bd0fb073");
   FPDFBitmap_Destroy(bitmap);
   EXPECT_TRUE(FPDFPage_GenerateContent(page));
@@ -472,7 +472,8 @@
   EXPECT_TRUE(FPDFPath_SetFillColor(green_rect2, 0, 255, 0, 100));
   EXPECT_TRUE(FPDFPath_SetDrawMode(green_rect2, FPDF_FILLMODE_ALTERNATE, 0));
   FPDFPage_InsertObject(page, green_rect2);
-  FPDF_BITMAP new_bitmap = RenderPageWithFlags(page, saved_form_handle_, 0);
+  FPDF_BITMAP new_bitmap =
+      RenderPageWithFlagsDeprecated(page, saved_form_handle_, 0);
   const char last_md5[] = "4b5b00f824620f8c9b8801ebb98e1cdd";
   CompareBitmap(new_bitmap, 612, 792, last_md5);
   FPDFBitmap_Destroy(new_bitmap);
@@ -499,7 +500,7 @@
   EXPECT_TRUE(FPDFPath_SetStrokeWidth(rect, 15.0f));
   EXPECT_TRUE(FPDFPath_SetDrawMode(rect, 0, 1));
   FPDFPage_InsertObject(page, rect);
-  FPDF_BITMAP page_bitmap = RenderPage(page);
+  FPDF_BITMAP page_bitmap = RenderPageDeprecated(page);
   CompareBitmap(page_bitmap, 612, 792, "64bd31f862a89e0a9e505a5af6efd506");
   FPDFBitmap_Destroy(page_bitmap);
 
@@ -513,7 +514,7 @@
   EXPECT_TRUE(FPDFPath_SetStrokeWidth(check, 8.35f));
   EXPECT_TRUE(FPDFPath_SetDrawMode(check, 0, 1));
   FPDFPage_InsertObject(page, check);
-  page_bitmap = RenderPage(page);
+  page_bitmap = RenderPageDeprecated(page);
   CompareBitmap(page_bitmap, 612, 792, "4b6f3b9d25c4e194821217d5016c3724");
   FPDFBitmap_Destroy(page_bitmap);
 
@@ -528,7 +529,7 @@
   EXPECT_TRUE(FPDFPath_SetStrokeWidth(path, 10.5f));
   EXPECT_TRUE(FPDFPath_SetDrawMode(path, FPDF_FILLMODE_ALTERNATE, 1));
   FPDFPage_InsertObject(page, path);
-  page_bitmap = RenderPage(page);
+  page_bitmap = RenderPageDeprecated(page);
   CompareBitmap(page_bitmap, 612, 792, "ff3e6a22326754944cc6e56609acd73b");
   FPDFBitmap_Destroy(page_bitmap);
   FPDF_ClosePage(page);
@@ -547,7 +548,7 @@
   EXPECT_TRUE(FPDFText_SetText(text_object1, text1.get()));
   FPDFPageObj_Transform(text_object1, 1, 0, 0, 1, 20, 20);
   FPDFPage_InsertObject(page, text_object1);
-  FPDF_BITMAP page_bitmap = RenderPage(page);
+  FPDF_BITMAP page_bitmap = RenderPageDeprecated(page);
 #if _FX_PLATFORM_ == _FX_PLATFORM_APPLE_
   const char md5[] = "a4dddc1a3930fa694bbff9789dab4161";
 #else
@@ -565,7 +566,7 @@
   EXPECT_TRUE(FPDFText_SetText(text_object2, text2.get()));
   FPDFPageObj_Transform(text_object2, 1, 0, 0, 1, 100, 600);
   FPDFPage_InsertObject(page, text_object2);
-  page_bitmap = RenderPage(page);
+  page_bitmap = RenderPageDeprecated(page);
 #if _FX_PLATFORM_ == _FX_PLATFORM_APPLE_
   const char md5_2[] = "a5c4ace4c6f27644094813fe1441a21c";
 #elif _FX_PLATFORM_ == _FX_PLATFORM_WINDOWS_
@@ -585,7 +586,7 @@
   EXPECT_TRUE(FPDFText_SetText(text_object3, text3.get()));
   FPDFPageObj_Transform(text_object3, 1, 1.5, 2, 0.5, 200, 200);
   FPDFPage_InsertObject(page, text_object3);
-  page_bitmap = RenderPage(page);
+  page_bitmap = RenderPageDeprecated(page);
 #if _FX_PLATFORM_ == _FX_PLATFORM_APPLE_
   const char md5_3[] = "40b3ef04f915ff4c4208948001763544";
 #elif _FX_PLATFORM_ == _FX_PLATFORM_WINDOWS_
@@ -674,7 +675,7 @@
   EXPECT_EQ(2, static_cast<int>(graphics_dict->GetCount()));
 
   // Check the bitmap
-  FPDF_BITMAP page_bitmap = RenderPage(page);
+  FPDF_BITMAP page_bitmap = RenderPageDeprecated(page);
   CompareBitmap(page_bitmap, 612, 792, "5384da3406d62360ffb5cac4476fff1c");
   FPDFBitmap_Destroy(page_bitmap);
 
@@ -684,14 +685,14 @@
   EXPECT_EQ(3, static_cast<int>(graphics_dict->GetCount()));
 
   // Check that bitmap displays changed content
-  page_bitmap = RenderPage(page);
+  page_bitmap = RenderPageDeprecated(page);
   CompareBitmap(page_bitmap, 612, 792, "2e51656f5073b0bee611d9cd086aa09c");
   FPDFBitmap_Destroy(page_bitmap);
 
   // And now generate, without changes
   EXPECT_TRUE(FPDFPage_GenerateContent(page));
   EXPECT_EQ(3, static_cast<int>(graphics_dict->GetCount()));
-  page_bitmap = RenderPage(page);
+  page_bitmap = RenderPageDeprecated(page);
   CompareBitmap(page_bitmap, 612, 792, "2e51656f5073b0bee611d9cd086aa09c");
   FPDFBitmap_Destroy(page_bitmap);
 
@@ -888,7 +889,7 @@
     EXPECT_TRUE(FPDFText_SetText(text_object, text.get()));
     FPDFPageObj_Transform(text_object, 1, 0, 0, 1, 400, 400);
     FPDFPage_InsertObject(page, text_object);
-    FPDF_BITMAP page_bitmap = RenderPage(page);
+    FPDF_BITMAP page_bitmap = RenderPageDeprecated(page);
 #if _FX_PLATFORM_ == _FX_PLATFORM_APPLE_
     const char md5[] = "17d2b6cd574cf66170b09c8927529a94";
 #else
@@ -906,7 +907,7 @@
     FPDFPageObj_Transform(text_object2, 1, 0, 0, 1, 200, 200);
     FPDFPage_InsertObject(page, text_object2);
   }
-  FPDF_BITMAP page_bitmap2 = RenderPage(page);
+  FPDF_BITMAP page_bitmap2 = RenderPageDeprecated(page);
 #if _FX_PLATFORM_ == _FX_PLATFORM_APPLE_
   const char md5_2[] = "8eded4193ff1f0f77b8b600a825e97ea";
 #else
@@ -985,7 +986,7 @@
   }
 
   // Check that the text renders properly.
-  FPDF_BITMAP page_bitmap = RenderPage(page);
+  FPDF_BITMAP page_bitmap = RenderPageDeprecated(page);
   const char md5[] = "c68cd79aa72bf83a7b25271370d46b21";
   CompareBitmap(page_bitmap, 612, 792, md5);
   FPDFBitmap_Destroy(page_bitmap);
@@ -1018,7 +1019,7 @@
     EXPECT_TRUE(FPDFPath_BezierTo(green_path, 38, 33, 39, 36, 40, 40));
     EXPECT_TRUE(FPDFPath_Close(green_path));
     FPDFPage_InsertObject(page, green_path);
-    FPDF_BITMAP page_bitmap = RenderPage(page);
+    FPDF_BITMAP page_bitmap = RenderPageDeprecated(page);
     CompareBitmap(page_bitmap, 612, 792, md5);
     FPDFBitmap_Destroy(page_bitmap);
 
diff --git a/fpdfsdk/fpdfformfill_embeddertest.cpp b/fpdfsdk/fpdfformfill_embeddertest.cpp
index ae1c02e..8b81467 100644
--- a/fpdfsdk/fpdfformfill_embeddertest.cpp
+++ b/fpdfsdk/fpdfformfill_embeddertest.cpp
@@ -532,7 +532,7 @@
     EXPECT_TRUE(OpenDocument("text_form.pdf"));
     FPDF_PAGE page = LoadPage(0);
     ASSERT_TRUE(page);
-    std::unique_ptr<void, FPDFBitmapDeleter> bitmap1(RenderPage(page));
+    std::unique_ptr<void, FPDFBitmapDeleter> bitmap1 = RenderLoadedPage(page);
     CompareBitmap(bitmap1.get(), 300, 300, md5_1);
 
     // Click on the textfield
@@ -546,14 +546,14 @@
     FORM_OnChar(form_handle(), page, 65, 0);
     FORM_OnChar(form_handle(), page, 66, 0);
     FORM_OnChar(form_handle(), page, 67, 0);
-    std::unique_ptr<void, FPDFBitmapDeleter> bitmap2(RenderPage(page));
+    std::unique_ptr<void, FPDFBitmapDeleter> bitmap2 = RenderLoadedPage(page);
     CompareBitmap(bitmap2.get(), 300, 300, md5_2);
 
     // Take out focus by clicking out of the textfield
     FORM_OnMouseMove(form_handle(), page, 0, 15.0, 15.0);
     FORM_OnLButtonDown(form_handle(), page, 0, 15.0, 15.0);
     FORM_OnLButtonUp(form_handle(), page, 0, 15.0, 15.0);
-    std::unique_ptr<void, FPDFBitmapDeleter> bitmap3(RenderPage(page));
+    std::unique_ptr<void, FPDFBitmapDeleter> bitmap3 = RenderLoadedPage(page);
     CompareBitmap(bitmap3.get(), 300, 300, md5_3);
 
     EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
diff --git a/fpdfsdk/fpdfppo_embeddertest.cpp b/fpdfsdk/fpdfppo_embeddertest.cpp
index 2a4c774..0b3463e 100644
--- a/fpdfsdk/fpdfppo_embeddertest.cpp
+++ b/fpdfsdk/fpdfppo_embeddertest.cpp
@@ -217,7 +217,7 @@
     FPDF_PAGE page = LoadPage(i);
     ASSERT_NE(nullptr, page);
 
-    FPDF_BITMAP bitmap = RenderPage(page);
+    FPDF_BITMAP bitmap = RenderPageDeprecated(page);
     ASSERT_EQ(200, FPDFBitmap_GetWidth(bitmap));
     ASSERT_EQ(200, FPDFBitmap_GetHeight(bitmap));
     ASSERT_EQ(800, FPDFBitmap_GetStride(bitmap));
@@ -236,7 +236,7 @@
     FPDF_PAGE page = FPDF_LoadPage(output_doc, i);
     ASSERT_NE(nullptr, page);
 
-    FPDF_BITMAP bitmap = RenderPage(page);
+    FPDF_BITMAP bitmap = RenderPageDeprecated(page);
     ASSERT_EQ(200, FPDFBitmap_GetWidth(bitmap));
     ASSERT_EQ(200, FPDFBitmap_GetHeight(bitmap));
     ASSERT_EQ(800, FPDFBitmap_GetStride(bitmap));
@@ -254,7 +254,7 @@
   FPDF_PAGE page = LoadPage(0);
   ASSERT_NE(nullptr, page);
 
-  FPDF_BITMAP bitmap = RenderPage(page);
+  FPDF_BITMAP bitmap = RenderPageDeprecated(page);
   ASSERT_EQ(200, FPDFBitmap_GetWidth(bitmap));
   ASSERT_EQ(200, FPDFBitmap_GetHeight(bitmap));
   ASSERT_EQ(800, FPDFBitmap_GetStride(bitmap));
@@ -270,7 +270,7 @@
   EXPECT_EQ(1, FPDF_GetPageCount(new_doc));
   FPDF_PAGE new_page = FPDF_LoadPage(new_doc, 0);
   ASSERT_NE(nullptr, new_page);
-  FPDF_BITMAP new_bitmap = RenderPage(new_page);
+  FPDF_BITMAP new_bitmap = RenderPageDeprecated(new_page);
   ASSERT_EQ(200, FPDFBitmap_GetWidth(new_bitmap));
   ASSERT_EQ(200, FPDFBitmap_GetHeight(new_bitmap));
   ASSERT_EQ(800, FPDFBitmap_GetStride(new_bitmap));
diff --git a/fpdfsdk/fpdfsave_embeddertest.cpp b/fpdfsdk/fpdfsave_embeddertest.cpp
index 3122be1..bbf7566 100644
--- a/fpdfsdk/fpdfsave_embeddertest.cpp
+++ b/fpdfsdk/fpdfsave_embeddertest.cpp
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "public/fpdf_save.h"
-
+#include <memory>
 #include <string>
 
 #include "core/fxcrt/fx_string.h"
 #include "public/fpdf_edit.h"
 #include "public/fpdf_ppo.h"
+#include "public/fpdf_save.h"
 #include "public/fpdfview.h"
 #include "testing/embedder_test.h"
 #include "testing/gmock/include/gmock/gmock-matchers.h"
@@ -66,7 +66,7 @@
   EXPECT_TRUE(OpenDocument("linearized.pdf"));
   for (int i = 0; i < kPageCount; ++i) {
     FPDF_PAGE page = LoadPage(i);
-    FPDF_BITMAP bitmap = RenderPage(page);
+    FPDF_BITMAP bitmap = RenderPageDeprecated(page);
     EXPECT_EQ(612, FPDFBitmap_GetWidth(bitmap));
     EXPECT_EQ(792, FPDFBitmap_GetHeight(bitmap));
     original_md5[i] = HashBitmap(bitmap);
@@ -84,9 +84,9 @@
   EXPECT_TRUE(OpenSavedDocument());
   for (int i = 0; i < kPageCount; ++i) {
     FPDF_PAGE page = LoadSavedPage(i);
-    FPDF_BITMAP bitmap = RenderSavedPage(page);
-    EXPECT_EQ(original_md5[i], HashBitmap(bitmap));
-    FPDFBitmap_Destroy(bitmap);
+    ASSERT_TRUE(page);
+    std::unique_ptr<void, FPDFBitmapDeleter> bitmap = RenderSavedPage(page);
+    EXPECT_EQ(original_md5[i], HashBitmap(bitmap.get()));
     CloseSavedPage(page);
   }
   CloseSavedDocument();
diff --git a/fpdfsdk/fpdfview_embeddertest.cpp b/fpdfsdk/fpdfview_embeddertest.cpp
index 47d0223..c46b3bd 100644
--- a/fpdfsdk/fpdfview_embeddertest.cpp
+++ b/fpdfsdk/fpdfview_embeddertest.cpp
@@ -429,14 +429,14 @@
   EXPECT_EQ(200, page_width);
   EXPECT_EQ(300, page_height);
 
-  FPDF_BITMAP bitmap = RenderPage(page);
+  FPDF_BITMAP bitmap = RenderPageDeprecated(page);
   CompareBitmap(bitmap, page_width, page_height, kOriginalMD5);
   FPDFBitmap_Destroy(bitmap);
 
   FS_RECTF page_rect{0, 0, page_width, page_height};
 
   // Try rendering with an identity matrix. The output should be the same as
-  // the RenderPage() output.
+  // the RenderPageDeprecated() output.
   FS_MATRIX identity_matrix{1, 0, 0, 1, 0, 0};
   TestRenderPageBitmapWithMatrix(page, page_width, page_height, identity_matrix,
                                  page_rect, kOriginalMD5);
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp
index d7f4376..bd52c26 100644
--- a/testing/embedder_test.cpp
+++ b/testing/embedder_test.cpp
@@ -8,6 +8,7 @@
 
 #include <fstream>
 #include <list>
+#include <memory>
 #include <string>
 #include <utility>
 #include <vector>
@@ -261,24 +262,6 @@
   return page;
 }
 
-FPDF_BITMAP EmbedderTest::RenderPage(FPDF_PAGE page) {
-  return RenderPageWithFlags(page, form_handle_, 0);
-}
-
-FPDF_BITMAP EmbedderTest::RenderPageWithFlags(FPDF_PAGE page,
-                                              FPDF_FORMHANDLE handle,
-                                              int flags) {
-  int width = static_cast<int>(FPDF_GetPageWidth(page));
-  int height = static_cast<int>(FPDF_GetPageHeight(page));
-  int alpha = FPDFPage_HasTransparency(page) ? 1 : 0;
-  FPDF_BITMAP bitmap = FPDFBitmap_Create(width, height, alpha);
-  FPDF_DWORD fill_color = alpha ? 0x00000000 : 0xFFFFFFFF;
-  FPDFBitmap_FillRect(bitmap, 0, 0, width, height, fill_color);
-  FPDF_RenderPageBitmap(bitmap, page, 0, 0, width, height, 0, flags);
-  FPDF_FFLDraw(handle, bitmap, page, 0, 0, width, height, 0, flags);
-  return bitmap;
-}
-
 void EmbedderTest::UnloadPage(FPDF_PAGE page) {
   ASSERT(form_handle_);
   FORM_DoPageAAction(page, form_handle_, FPDFPAGE_AACTION_CLOSE);
@@ -293,6 +276,55 @@
   page_reverse_map_.erase(it);
 }
 
+FPDF_BITMAP EmbedderTest::RenderPageDeprecated(FPDF_PAGE page) {
+  return RenderPageWithFlagsDeprecated(page, form_handle_, 0);
+}
+
+std::unique_ptr<void, FPDFBitmapDeleter> EmbedderTest::RenderLoadedPage(
+    FPDF_PAGE page) {
+  return RenderLoadedPageWithFlags(page, 0);
+}
+
+std::unique_ptr<void, FPDFBitmapDeleter>
+EmbedderTest::RenderLoadedPageWithFlags(FPDF_PAGE page, int flags) {
+  return RenderPageWithFlags(page, form_handle_, flags);
+}
+
+std::unique_ptr<void, FPDFBitmapDeleter> EmbedderTest::RenderSavedPage(
+    FPDF_PAGE page) {
+  return RenderSavedPageWithFlags(page, 0);
+}
+
+std::unique_ptr<void, FPDFBitmapDeleter> EmbedderTest::RenderSavedPageWithFlags(
+    FPDF_PAGE page,
+    int flags) {
+  return RenderPageWithFlags(page, saved_form_handle_, flags);
+}
+
+// static
+FPDF_BITMAP EmbedderTest::RenderPageWithFlagsDeprecated(FPDF_PAGE page,
+                                                        FPDF_FORMHANDLE handle,
+                                                        int flags) {
+  return RenderPageWithFlags(page, handle, flags).release();
+}
+
+// static
+std::unique_ptr<void, FPDFBitmapDeleter> EmbedderTest::RenderPageWithFlags(
+    FPDF_PAGE page,
+    FPDF_FORMHANDLE handle,
+    int flags) {
+  int width = static_cast<int>(FPDF_GetPageWidth(page));
+  int height = static_cast<int>(FPDF_GetPageHeight(page));
+  int alpha = FPDFPage_HasTransparency(page) ? 1 : 0;
+  std::unique_ptr<void, FPDFBitmapDeleter> bitmap(
+      FPDFBitmap_Create(width, height, alpha));
+  FPDF_DWORD fill_color = alpha ? 0x00000000 : 0xFFFFFFFF;
+  FPDFBitmap_FillRect(bitmap.get(), 0, 0, width, height, fill_color);
+  FPDF_RenderPageBitmap(bitmap.get(), page, 0, 0, width, height, 0, flags);
+  FPDF_FFLDraw(handle, bitmap.get(), page, 0, 0, width, height, 0, flags);
+  return bitmap;
+}
+
 FPDF_DOCUMENT EmbedderTest::OpenSavedDocument(const char* password) {
   memset(&saved_file_access_, 0, sizeof(saved_file_access_));
   saved_file_access_.m_FileLen = data_string_.size();
@@ -330,10 +362,6 @@
   return page;
 }
 
-FPDF_BITMAP EmbedderTest::RenderSavedPage(FPDF_PAGE page) {
-  return RenderPageWithFlags(page, saved_form_handle_, 0);
-}
-
 void EmbedderTest::CloseSavedPage(FPDF_PAGE page) {
   ASSERT(page);
   FPDF_ClosePage(page);
@@ -346,10 +374,9 @@
   ASSERT(saved_document_);
   ASSERT(page);
 
-  FPDF_BITMAP new_bitmap =
-      RenderPageWithFlags(page, saved_form_handle_, FPDF_ANNOT);
-  CompareBitmap(new_bitmap, width, height, md5);
-  FPDFBitmap_Destroy(new_bitmap);
+  std::unique_ptr<void, FPDFBitmapDeleter> bitmap =
+      RenderSavedPageWithFlags(page, FPDF_ANNOT);
+  CompareBitmap(bitmap.get(), width, height, md5);
 }
 
 void EmbedderTest::VerifySavedDocument(int width, int height, const char* md5) {
diff --git a/testing/embedder_test.h b/testing/embedder_test.h
index b36ac06..18b16b7 100644
--- a/testing/embedder_test.h
+++ b/testing/embedder_test.h
@@ -9,6 +9,7 @@
 #include <memory>
 #include <string>
 
+#include "public/cpp/fpdf_deleters.h"
 #include "public/fpdf_dataavail.h"
 #include "public/fpdf_ext.h"
 #include "public/fpdf_formfill.h"
@@ -108,19 +109,53 @@
   // Load a specific page of the open document.
   FPDF_PAGE LoadPage(int page_number);
 
-  // Convert a loaded page into a bitmap.
-  FPDF_BITMAP RenderPage(FPDF_PAGE page);
-
-  // Convert a loaded page into a bitmap with page rendering flags specified.
-  // See public/fpdfview.h for a list of page rendering flags.
-  FPDF_BITMAP RenderPageWithFlags(FPDF_PAGE page,
-                                  FPDF_FORMHANDLE handle,
-                                  int flags);
-
-  // Relese the resources obtained from LoadPage(). Further use of |page|
+  // Release the resources obtained from LoadPage(). Further use of |page|
   // is prohibited after this call is made.
   void UnloadPage(FPDF_PAGE page);
 
+  // Convert a loaded page into a bitmap.
+  // DEPRECATED. Use some one of the methods below instead.
+  FPDF_BITMAP RenderPageDeprecated(FPDF_PAGE page);
+
+  // RenderLoadedPageWithFlags() with no flags.
+  std::unique_ptr<void, FPDFBitmapDeleter> RenderLoadedPage(FPDF_PAGE page);
+
+  // Convert |page| loaded via LoadPage() into a bitmap with the specified page
+  // rendering |flags|.
+  //
+  // See public/fpdfview.h for a list of page rendering flags.
+  std::unique_ptr<void, FPDFBitmapDeleter> RenderLoadedPageWithFlags(
+      FPDF_PAGE page,
+      int flags);
+
+  // RenderSavedPageWithFlags() with no flags.
+  std::unique_ptr<void, FPDFBitmapDeleter> RenderSavedPage(FPDF_PAGE page);
+
+  // Convert |page| loaded via LoadSavedPage() into a bitmap with the specified
+  // page rendering |flags|.
+  //
+  // See public/fpdfview.h for a list of page rendering flags.
+  std::unique_ptr<void, FPDFBitmapDeleter> RenderSavedPageWithFlags(
+      FPDF_PAGE page,
+      int flags);
+
+  // DEPRECATED. Use RenderPageWithFlags() instead.
+  // Caller takes ownership of the returned bitmap.
+  //
+  // See public/fpdfview.h for a list of page rendering flags.
+  static FPDF_BITMAP RenderPageWithFlagsDeprecated(FPDF_PAGE page,
+                                                   FPDF_FORMHANDLE handle,
+                                                   int flags);
+
+  // Convert |page| into a bitmap with the specified page rendering |flags|.
+  // The form handle associated with |page| should be passed in via |handle|.
+  // If |handle| is nullptr, then forms on the page will not be rendered.
+  //
+  // See public/fpdfview.h for a list of page rendering flags.
+  // If none of the above Render methods are appropriate, then use this one.
+  static std::unique_ptr<void, FPDFBitmapDeleter>
+  RenderPageWithFlags(FPDF_PAGE page, FPDF_FORMHANDLE handle, int flags);
+
  protected:
   bool OpenDocumentHelper(const char* password,
                           bool must_linearize,
@@ -157,7 +192,6 @@
   FPDF_DOCUMENT OpenSavedDocument(const char* password = nullptr);
   void CloseSavedDocument();
   FPDF_PAGE LoadSavedPage(int page_number);
-  FPDF_BITMAP RenderSavedPage(FPDF_PAGE page);
   void CloseSavedPage(FPDF_PAGE page);
   void VerifySavedRendering(FPDF_PAGE page,
                             int width,