diff --git a/fpdfsdk/cpdfsdk_annotiterator_embeddertest.cpp b/fpdfsdk/cpdfsdk_annotiterator_embeddertest.cpp
index e6394f9..bb4167d 100644
--- a/fpdfsdk/cpdfsdk_annotiterator_embeddertest.cpp
+++ b/fpdfsdk/cpdfsdk_annotiterator_embeddertest.cpp
@@ -27,9 +27,9 @@
 
 TEST_F(CPDFSDKAnnotIteratorTest, AnnotIterator) {
   ASSERT_TRUE(OpenDocument("annotiter.pdf"));
-  FPDF_PAGE page0 = LoadPage(0);
-  FPDF_PAGE page1 = LoadPage(1);
-  FPDF_PAGE page2 = LoadPage(2);
+  ScopedEmbedderTestPage page0 = LoadScopedPage(0);
+  ScopedEmbedderTestPage page1 = LoadScopedPage(1);
+  ScopedEmbedderTestPage page2 = LoadScopedPage(2);
   ASSERT_TRUE(page0);
   ASSERT_TRUE(page1);
   ASSERT_TRUE(page2);
@@ -120,7 +120,4 @@
     pAnnot = iter.GetPrevAnnot(pAnnot);
     EXPECT_FALSE(pAnnot);
   }
-  UnloadPage(page2);
-  UnloadPage(page1);
-  UnloadPage(page0);
 }
diff --git a/fpdfsdk/fpdf_save_embeddertest.cpp b/fpdfsdk/fpdf_save_embeddertest.cpp
index 5215100..e404e79 100644
--- a/fpdfsdk/fpdf_save_embeddertest.cpp
+++ b/fpdfsdk/fpdf_save_embeddertest.cpp
@@ -83,7 +83,7 @@
 TEST_F(FPDFSaveEmbedderTest, SaveCopiedDoc) {
   ASSERT_TRUE(OpenDocument("hello_world.pdf"));
 
-  FPDF_PAGE page = LoadPage(0);
+  ScopedEmbedderTestPage page = LoadScopedPage(0);
   EXPECT_TRUE(page);
 
   ScopedFPDFDocument output_doc(FPDF_CreateNewDocument());
@@ -91,23 +91,21 @@
   EXPECT_TRUE(FPDF_ImportPages(output_doc.get(), document(), "1", 0));
   EXPECT_TRUE(FPDF_SaveAsCopy(output_doc.get(), this, 0));
 
-  UnloadPage(page);
 }
 
 TEST_F(FPDFSaveEmbedderTest, Bug42271133) {
   ASSERT_TRUE(OpenDocument("bug_42271133.pdf"));
-  FPDF_PAGE page = LoadPage(0);
+  ScopedEmbedderTestPage page = LoadScopedPage(0);
   ASSERT_TRUE(page);
 
   // Arbitrarily remove the first page object.
-  auto text_object = FPDFPage_GetObject(page, 0);
+  auto text_object = FPDFPage_GetObject(page.get(), 0);
   ASSERT_TRUE(text_object);
-  ASSERT_TRUE(FPDFPage_RemoveObject(page, text_object));
+  ASSERT_TRUE(FPDFPage_RemoveObject(page.get(), text_object));
   FPDFPageObj_Destroy(text_object);
 
   // Regenerate dirty stream and save the document.
-  ASSERT_TRUE(FPDFPage_GenerateContent(page));
-  UnloadPage(page);
+  ASSERT_TRUE(FPDFPage_GenerateContent(page.get()));
   ASSERT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
 
   // Reload saved document.
@@ -137,13 +135,12 @@
 
   ASSERT_TRUE(OpenDocument("linearized.pdf"));
   for (int i = 0; i < kPageCount; ++i) {
-    FPDF_PAGE page = LoadPage(i);
+    ScopedEmbedderTestPage page = LoadScopedPage(i);
     ASSERT_TRUE(page);
-    ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
+    ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get());
     EXPECT_EQ(612, FPDFBitmap_GetWidth(bitmap.get()));
     EXPECT_EQ(792, FPDFBitmap_GetHeight(bitmap.get()));
     original_md5[i] = HashBitmap(bitmap.get());
-    UnloadPage(page);
   }
 
   EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
@@ -171,15 +168,14 @@
 
 TEST_F(FPDFSaveEmbedderTest, Bug1409) {
   ASSERT_TRUE(OpenDocument("jpx_lzw.pdf"));
-  FPDF_PAGE page = LoadPage(0);
+  ScopedEmbedderTestPage page = LoadScopedPage(0);
   ASSERT_TRUE(page);
-  while (FPDFPage_CountObjects(page) > 0) {
-    ScopedFPDFPageObject object(FPDFPage_GetObject(page, 0));
+  while (FPDFPage_CountObjects(page.get()) > 0) {
+    ScopedFPDFPageObject object(FPDFPage_GetObject(page.get(), 0));
     ASSERT_TRUE(object);
-    ASSERT_TRUE(FPDFPage_RemoveObject(page, object.get()));
+    ASSERT_TRUE(FPDFPage_RemoveObject(page.get(), object.get()));
   }
-  ASSERT_TRUE(FPDFPage_GenerateContent(page));
-  UnloadPage(page);
+  ASSERT_TRUE(FPDFPage_GenerateContent(page.get()));
 
   ASSERT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
 
diff --git a/fpdfsdk/fpdf_transformpage_embeddertest.cpp b/fpdfsdk/fpdf_transformpage_embeddertest.cpp
index 56e66fa..8e932d1 100644
--- a/fpdfsdk/fpdf_transformpage_embeddertest.cpp
+++ b/fpdfsdk/fpdf_transformpage_embeddertest.cpp
@@ -33,19 +33,20 @@
   ASSERT_EQ(4, FPDF_GetPageCount(document()));
 
   {
-    FPDF_PAGE page = LoadPage(1);
+    ScopedEmbedderTestPage page = LoadScopedPage(1);
     ASSERT_TRUE(page);
 
     FS_RECTF mediabox;
-    EXPECT_TRUE(FPDFPage_GetMediaBox(page, &mediabox.left, &mediabox.bottom,
-                                     &mediabox.right, &mediabox.top));
+    EXPECT_TRUE(FPDFPage_GetMediaBox(page.get(), &mediabox.left,
+                                     &mediabox.bottom, &mediabox.right,
+                                     &mediabox.top));
     EXPECT_EQ(-50, mediabox.left);
     EXPECT_EQ(-50, mediabox.bottom);
     EXPECT_EQ(200, mediabox.right);
     EXPECT_EQ(200, mediabox.top);
 
     FS_RECTF cropbox;
-    EXPECT_TRUE(FPDFPage_GetCropBox(page, &cropbox.left, &cropbox.bottom,
+    EXPECT_TRUE(FPDFPage_GetCropBox(page.get(), &cropbox.left, &cropbox.bottom,
                                     &cropbox.right, &cropbox.top));
     EXPECT_EQ(50, cropbox.left);
     EXPECT_EQ(50, cropbox.bottom);
@@ -53,15 +54,16 @@
     EXPECT_EQ(150, cropbox.top);
 
     FS_RECTF bleedbox;
-    EXPECT_TRUE(FPDFPage_GetBleedBox(page, &bleedbox.left, &bleedbox.bottom,
-                                     &bleedbox.right, &bleedbox.top));
+    EXPECT_TRUE(FPDFPage_GetBleedBox(page.get(), &bleedbox.left,
+                                     &bleedbox.bottom, &bleedbox.right,
+                                     &bleedbox.top));
     EXPECT_EQ(0, bleedbox.left);
     EXPECT_EQ(10, bleedbox.bottom);
     EXPECT_EQ(150, bleedbox.right);
     EXPECT_EQ(145, bleedbox.top);
 
     FS_RECTF trimbox;
-    EXPECT_TRUE(FPDFPage_GetTrimBox(page, &trimbox.left, &trimbox.bottom,
+    EXPECT_TRUE(FPDFPage_GetTrimBox(page.get(), &trimbox.left, &trimbox.bottom,
                                     &trimbox.right, &trimbox.top));
     EXPECT_EQ(25, trimbox.left);
     EXPECT_EQ(30, trimbox.bottom);
@@ -69,56 +71,57 @@
     EXPECT_EQ(145, trimbox.top);
 
     FS_RECTF artbox;
-    EXPECT_TRUE(FPDFPage_GetArtBox(page, &artbox.left, &artbox.bottom,
+    EXPECT_TRUE(FPDFPage_GetArtBox(page.get(), &artbox.left, &artbox.bottom,
                                    &artbox.right, &artbox.top));
     EXPECT_EQ(50, artbox.left);
     EXPECT_EQ(60, artbox.bottom);
     EXPECT_EQ(135, artbox.right);
     EXPECT_EQ(140, artbox.top);
-
-    UnloadPage(page);
   }
 
   {
-    FPDF_PAGE page = LoadPage(3);
+    ScopedEmbedderTestPage page = LoadScopedPage(3);
     ASSERT_TRUE(page);
 
     FS_RECTF mediabox;
-    EXPECT_TRUE(FPDFPage_GetMediaBox(page, &mediabox.left, &mediabox.bottom,
-                                     &mediabox.right, &mediabox.top));
+    EXPECT_TRUE(FPDFPage_GetMediaBox(page.get(), &mediabox.left,
+                                     &mediabox.bottom, &mediabox.right,
+                                     &mediabox.top));
     EXPECT_EQ(0, mediabox.left);
     EXPECT_EQ(0, mediabox.bottom);
     EXPECT_EQ(200, mediabox.right);
     EXPECT_EQ(200, mediabox.top);
 
     FS_RECTF cropbox;
-    EXPECT_TRUE(FPDFPage_GetCropBox(page, &cropbox.left, &cropbox.bottom,
+    EXPECT_TRUE(FPDFPage_GetCropBox(page.get(), &cropbox.left, &cropbox.bottom,
                                     &cropbox.right, &cropbox.top));
     EXPECT_EQ(150, cropbox.left);
     EXPECT_EQ(150, cropbox.bottom);
     EXPECT_EQ(60, cropbox.right);
     EXPECT_EQ(60, cropbox.top);
 
-    EXPECT_FALSE(FPDFPage_GetCropBox(page, nullptr, &cropbox.bottom,
+    EXPECT_FALSE(FPDFPage_GetCropBox(page.get(), nullptr, &cropbox.bottom,
                                      &cropbox.right, &cropbox.top));
-    EXPECT_FALSE(FPDFPage_GetCropBox(page, &cropbox.left, nullptr,
+    EXPECT_FALSE(FPDFPage_GetCropBox(page.get(), &cropbox.left, nullptr,
                                      &cropbox.right, &cropbox.top));
-    EXPECT_FALSE(FPDFPage_GetCropBox(page, &cropbox.left, &cropbox.bottom,
+    EXPECT_FALSE(FPDFPage_GetCropBox(page.get(), &cropbox.left, &cropbox.bottom,
                                      nullptr, &cropbox.top));
-    EXPECT_FALSE(FPDFPage_GetCropBox(page, &cropbox.left, &cropbox.bottom,
+    EXPECT_FALSE(FPDFPage_GetCropBox(page.get(), &cropbox.left, &cropbox.bottom,
                                      &cropbox.right, nullptr));
-    EXPECT_FALSE(FPDFPage_GetCropBox(page, nullptr, nullptr, nullptr, nullptr));
+    EXPECT_FALSE(
+        FPDFPage_GetCropBox(page.get(), nullptr, nullptr, nullptr, nullptr));
 
     FS_RECTF bleedbox;
-    EXPECT_TRUE(FPDFPage_GetBleedBox(page, &bleedbox.left, &bleedbox.bottom,
-                                     &bleedbox.right, &bleedbox.top));
+    EXPECT_TRUE(FPDFPage_GetBleedBox(page.get(), &bleedbox.left,
+                                     &bleedbox.bottom, &bleedbox.right,
+                                     &bleedbox.top));
     EXPECT_EQ(160, bleedbox.left);
     EXPECT_EQ(165, bleedbox.bottom);
     EXPECT_EQ(0, bleedbox.right);
     EXPECT_EQ(10, bleedbox.top);
 
     FS_RECTF trimbox;
-    EXPECT_TRUE(FPDFPage_GetTrimBox(page, &trimbox.left, &trimbox.bottom,
+    EXPECT_TRUE(FPDFPage_GetTrimBox(page.get(), &trimbox.left, &trimbox.bottom,
                                     &trimbox.right, &trimbox.top));
     EXPECT_EQ(155, trimbox.left);
     EXPECT_EQ(165, trimbox.bottom);
@@ -126,14 +129,12 @@
     EXPECT_EQ(30, trimbox.top);
 
     FS_RECTF artbox;
-    EXPECT_TRUE(FPDFPage_GetArtBox(page, &artbox.left, &artbox.bottom,
+    EXPECT_TRUE(FPDFPage_GetArtBox(page.get(), &artbox.left, &artbox.bottom,
                                    &artbox.right, &artbox.top));
     EXPECT_EQ(140, artbox.left);
     EXPECT_EQ(145, artbox.bottom);
     EXPECT_EQ(65, artbox.right);
     EXPECT_EQ(70, artbox.top);
-
-    UnloadPage(page);
   }
 }
 
@@ -141,72 +142,65 @@
   ASSERT_TRUE(OpenDocument("hello_world.pdf"));
   ASSERT_EQ(1, FPDF_GetPageCount(document()));
 
-  FPDF_PAGE page = LoadPage(0);
+  ScopedEmbedderTestPage page = LoadScopedPage(0);
   ASSERT_TRUE(page);
 
   FS_RECTF cropbox = {-1.0f, 0.0f, 3.0f, -2.0f};
-  EXPECT_FALSE(FPDFPage_GetCropBox(page, &cropbox.left, &cropbox.bottom,
+  EXPECT_FALSE(FPDFPage_GetCropBox(page.get(), &cropbox.left, &cropbox.bottom,
                                    &cropbox.right, &cropbox.top));
   EXPECT_EQ(-1.0f, cropbox.left);
   EXPECT_EQ(-2.0f, cropbox.bottom);
   EXPECT_EQ(3.0f, cropbox.right);
   EXPECT_EQ(0.0f, cropbox.top);
-
-  UnloadPage(page);
 }
 
 TEST_F(FPDFTransformEmbedderTest, NoBleedBox) {
   ASSERT_TRUE(OpenDocument("hello_world.pdf"));
   ASSERT_EQ(1, FPDF_GetPageCount(document()));
 
-  FPDF_PAGE page = LoadPage(0);
+  ScopedEmbedderTestPage page = LoadScopedPage(0);
   ASSERT_TRUE(page);
 
   FS_RECTF bleedbox = {-1.0f, 10.f, 3.0f, -1.0f};
-  EXPECT_FALSE(FPDFPage_GetBleedBox(page, &bleedbox.left, &bleedbox.bottom,
-                                    &bleedbox.right, &bleedbox.top));
+  EXPECT_FALSE(FPDFPage_GetBleedBox(page.get(), &bleedbox.left,
+                                    &bleedbox.bottom, &bleedbox.right,
+                                    &bleedbox.top));
   EXPECT_EQ(-1.0f, bleedbox.left);
   EXPECT_EQ(-1.0f, bleedbox.bottom);
   EXPECT_EQ(3.0f, bleedbox.right);
   EXPECT_EQ(10.0f, bleedbox.top);
-
-  UnloadPage(page);
 }
 
 TEST_F(FPDFTransformEmbedderTest, NoTrimBox) {
   ASSERT_TRUE(OpenDocument("hello_world.pdf"));
   ASSERT_EQ(1, FPDF_GetPageCount(document()));
 
-  FPDF_PAGE page = LoadPage(0);
+  ScopedEmbedderTestPage page = LoadScopedPage(0);
   ASSERT_TRUE(page);
 
   FS_RECTF trimbox = {-11.0f, 0.0f, 3.0f, -10.0f};
-  EXPECT_FALSE(FPDFPage_GetTrimBox(page, &trimbox.left, &trimbox.bottom,
+  EXPECT_FALSE(FPDFPage_GetTrimBox(page.get(), &trimbox.left, &trimbox.bottom,
                                    &trimbox.right, &trimbox.top));
   EXPECT_EQ(-11.0f, trimbox.left);
   EXPECT_EQ(-10.0f, trimbox.bottom);
   EXPECT_EQ(3.0f, trimbox.right);
   EXPECT_EQ(0.0f, trimbox.top);
-
-  UnloadPage(page);
 }
 
 TEST_F(FPDFTransformEmbedderTest, NoArtBox) {
   ASSERT_TRUE(OpenDocument("hello_world.pdf"));
   ASSERT_EQ(1, FPDF_GetPageCount(document()));
 
-  FPDF_PAGE page = LoadPage(0);
+  ScopedEmbedderTestPage page = LoadScopedPage(0);
   ASSERT_TRUE(page);
 
   FS_RECTF artbox = {-1.0f, 0.0f, 3.0f, -1.0f};
-  EXPECT_FALSE(FPDFPage_GetArtBox(page, &artbox.left, &artbox.bottom,
+  EXPECT_FALSE(FPDFPage_GetArtBox(page.get(), &artbox.left, &artbox.bottom,
                                   &artbox.right, &artbox.top));
   EXPECT_EQ(-1.0f, artbox.left);
   EXPECT_EQ(-1.0f, artbox.bottom);
   EXPECT_EQ(3.0f, artbox.right);
   EXPECT_EQ(0.0f, artbox.top);
-
-  UnloadPage(page);
 }
 
 TEST_F(FPDFTransformEmbedderTest, SetCropBox) {
@@ -218,45 +212,45 @@
   }();
   {
     ASSERT_TRUE(OpenDocument("rectangles.pdf"));
-    FPDF_PAGE page = LoadPage(0);
+    ScopedEmbedderTestPage page = LoadScopedPage(0);
     ASSERT_TRUE(page);
 
     {
       // Render the page as is.
       FS_RECTF cropbox;
-      EXPECT_FALSE(FPDFPage_GetCropBox(page, &cropbox.left, &cropbox.bottom,
-                                       &cropbox.right, &cropbox.top));
-      const int page_width = static_cast<int>(FPDF_GetPageWidth(page));
-      const int page_height = static_cast<int>(FPDF_GetPageHeight(page));
+      EXPECT_FALSE(FPDFPage_GetCropBox(page.get(), &cropbox.left,
+                                       &cropbox.bottom, &cropbox.right,
+                                       &cropbox.top));
+      const int page_width = static_cast<int>(FPDF_GetPageWidth(page.get()));
+      const int page_height = static_cast<int>(FPDF_GetPageHeight(page.get()));
       EXPECT_EQ(200, page_width);
       EXPECT_EQ(300, page_height);
-      ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
+      ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get());
       CompareBitmap(bitmap.get(), page_width, page_height,
                     RectanglesChecksum());
     }
 
-    FPDFPage_SetCropBox(page, 10, 20, 100, 150);
+    FPDFPage_SetCropBox(page.get(), 10, 20, 100, 150);
 
     {
       // Render the page after setting the CropBox.
       // Note that the change affects the rendering, as expected.
       // It behaves just like the case below, rather than the case above.
       FS_RECTF cropbox;
-      EXPECT_TRUE(FPDFPage_GetCropBox(page, &cropbox.left, &cropbox.bottom,
-                                      &cropbox.right, &cropbox.top));
+      EXPECT_TRUE(FPDFPage_GetCropBox(page.get(), &cropbox.left,
+                                      &cropbox.bottom, &cropbox.right,
+                                      &cropbox.top));
       EXPECT_EQ(10, cropbox.left);
       EXPECT_EQ(20, cropbox.bottom);
       EXPECT_EQ(100, cropbox.right);
       EXPECT_EQ(150, cropbox.top);
-      const int page_width = static_cast<int>(FPDF_GetPageWidth(page));
-      const int page_height = static_cast<int>(FPDF_GetPageHeight(page));
+      const int page_width = static_cast<int>(FPDF_GetPageWidth(page.get()));
+      const int page_height = static_cast<int>(FPDF_GetPageHeight(page.get()));
       EXPECT_EQ(90, page_width);
       EXPECT_EQ(130, page_height);
-      ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
+      ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get());
       CompareBitmap(bitmap.get(), page_width, page_height, cropped_checksum);
     }
-
-    UnloadPage(page);
   }
 
   {
@@ -296,46 +290,46 @@
 
   {
     ASSERT_TRUE(OpenDocument("rectangles.pdf"));
-    FPDF_PAGE page = LoadPage(0);
+    ScopedEmbedderTestPage page = LoadScopedPage(0);
     ASSERT_TRUE(page);
 
     {
       // Render the page as is.
       FS_RECTF mediabox;
-      EXPECT_FALSE(FPDFPage_GetMediaBox(page, &mediabox.left, &mediabox.bottom,
-                                        &mediabox.right, &mediabox.top));
-      const int page_width = static_cast<int>(FPDF_GetPageWidth(page));
-      const int page_height = static_cast<int>(FPDF_GetPageHeight(page));
+      EXPECT_FALSE(FPDFPage_GetMediaBox(page.get(), &mediabox.left,
+                                        &mediabox.bottom, &mediabox.right,
+                                        &mediabox.top));
+      const int page_width = static_cast<int>(FPDF_GetPageWidth(page.get()));
+      const int page_height = static_cast<int>(FPDF_GetPageHeight(page.get()));
       EXPECT_EQ(200, page_width);
       EXPECT_EQ(300, page_height);
-      ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
+      ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get());
       CompareBitmap(bitmap.get(), page_width, page_height,
                     RectanglesChecksum());
     }
 
-    FPDFPage_SetMediaBox(page, 20, 30, 100, 150);
+    FPDFPage_SetMediaBox(page.get(), 20, 30, 100, 150);
 
     {
       // Render the page after setting the MediaBox.
       // Note that the change affects the rendering, as expected.
       // It behaves just like the case below, rather than the case above.
       FS_RECTF mediabox;
-      EXPECT_TRUE(FPDFPage_GetMediaBox(page, &mediabox.left, &mediabox.bottom,
-                                       &mediabox.right, &mediabox.top));
+      EXPECT_TRUE(FPDFPage_GetMediaBox(page.get(), &mediabox.left,
+                                       &mediabox.bottom, &mediabox.right,
+                                       &mediabox.top));
       EXPECT_EQ(20, mediabox.left);
       EXPECT_EQ(30, mediabox.bottom);
       EXPECT_EQ(100, mediabox.right);
       EXPECT_EQ(150, mediabox.top);
-      const int page_width = static_cast<int>(FPDF_GetPageWidth(page));
-      const int page_height = static_cast<int>(FPDF_GetPageHeight(page));
+      const int page_width = static_cast<int>(FPDF_GetPageWidth(page.get()));
+      const int page_height = static_cast<int>(FPDF_GetPageHeight(page.get()));
       EXPECT_EQ(80, page_width);
       EXPECT_EQ(120, page_height);
-      ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
+      ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get());
       CompareBitmap(bitmap.get(), page_width, page_height,
                     shrunk_checksum_set_media_box);
     }
-
-    UnloadPage(page);
   }
 
   {
@@ -370,23 +364,19 @@
 TEST_F(FPDFTransformEmbedderTest, ClipPath) {
   ASSERT_TRUE(OpenDocument("hello_world.pdf"));
 
-  FPDF_PAGE page = LoadPage(0);
+  ScopedEmbedderTestPage page = LoadScopedPage(0);
   ASSERT_TRUE(page);
 
-  {
-    ScopedFPDFClipPath clip(FPDF_CreateClipPath(10.0f, 10.0f, 90.0f, 90.0f));
-    EXPECT_TRUE(clip);
+  ScopedFPDFClipPath clip(FPDF_CreateClipPath(10.0f, 10.0f, 90.0f, 90.0f));
+  EXPECT_TRUE(clip);
 
-    // NULL arg call is a no-op.
-    FPDFPage_InsertClipPath(nullptr, clip.get());
+  // NULL arg call is a no-op.
+  FPDFPage_InsertClipPath(nullptr, clip.get());
 
-    // Do actual work.
-    FPDFPage_InsertClipPath(page, clip.get());
+  // Do actual work.
+  FPDFPage_InsertClipPath(page.get(), clip.get());
 
-    // TODO(tsepez): test how inserting path affects page rendering.
-  }
-
-  UnloadPage(page);
+  // TODO(tsepez): test how inserting path affects page rendering.
 }
 
 TEST_F(FPDFTransformEmbedderTest, TransFormWithClip) {
@@ -395,19 +385,17 @@
 
   ASSERT_TRUE(OpenDocument("hello_world.pdf"));
 
-  FPDF_PAGE page = LoadPage(0);
+  ScopedEmbedderTestPage page = LoadScopedPage(0);
   ASSERT_TRUE(page);
 
   EXPECT_FALSE(FPDFPage_TransFormWithClip(nullptr, nullptr, nullptr));
   EXPECT_FALSE(FPDFPage_TransFormWithClip(nullptr, &half_matrix, nullptr));
   EXPECT_FALSE(FPDFPage_TransFormWithClip(nullptr, nullptr, &clip_rect));
   EXPECT_FALSE(FPDFPage_TransFormWithClip(nullptr, &half_matrix, &clip_rect));
-  EXPECT_FALSE(FPDFPage_TransFormWithClip(page, nullptr, nullptr));
-  EXPECT_TRUE(FPDFPage_TransFormWithClip(page, &half_matrix, nullptr));
-  EXPECT_TRUE(FPDFPage_TransFormWithClip(page, nullptr, &clip_rect));
-  EXPECT_TRUE(FPDFPage_TransFormWithClip(page, &half_matrix, &clip_rect));
-
-  UnloadPage(page);
+  EXPECT_FALSE(FPDFPage_TransFormWithClip(page.get(), nullptr, nullptr));
+  EXPECT_TRUE(FPDFPage_TransFormWithClip(page.get(), &half_matrix, nullptr));
+  EXPECT_TRUE(FPDFPage_TransFormWithClip(page.get(), nullptr, &clip_rect));
+  EXPECT_TRUE(FPDFPage_TransFormWithClip(page.get(), &half_matrix, &clip_rect));
 }
 
 TEST_F(FPDFTransformEmbedderTest, TransFormWithClipWithPatterns) {
@@ -416,29 +404,27 @@
 
   ASSERT_TRUE(OpenDocument("bug_547706.pdf"));
 
-  FPDF_PAGE page = LoadPage(0);
+  ScopedEmbedderTestPage page = LoadScopedPage(0);
   ASSERT_TRUE(page);
 
-  EXPECT_TRUE(FPDFPage_TransFormWithClip(page, &half_matrix, nullptr));
-  EXPECT_TRUE(FPDFPage_TransFormWithClip(page, nullptr, &clip_rect));
-  EXPECT_TRUE(FPDFPage_TransFormWithClip(page, &half_matrix, &clip_rect));
-
-  UnloadPage(page);
+  EXPECT_TRUE(FPDFPage_TransFormWithClip(page.get(), &half_matrix, nullptr));
+  EXPECT_TRUE(FPDFPage_TransFormWithClip(page.get(), nullptr, &clip_rect));
+  EXPECT_TRUE(FPDFPage_TransFormWithClip(page.get(), &half_matrix, &clip_rect));
 }
 
 TEST_F(FPDFTransformEmbedderTest, TransFormWithClipAndSave) {
   {
     ASSERT_TRUE(OpenDocument("rectangles.pdf"));
-    FPDF_PAGE page = LoadPage(0);
+    ScopedEmbedderTestPage page = LoadScopedPage(0);
     ASSERT_TRUE(page);
 
     {
       // Render the page as is.
-      const int page_width = static_cast<int>(FPDF_GetPageWidth(page));
-      const int page_height = static_cast<int>(FPDF_GetPageHeight(page));
+      const int page_width = static_cast<int>(FPDF_GetPageWidth(page.get()));
+      const int page_height = static_cast<int>(FPDF_GetPageHeight(page.get()));
       EXPECT_EQ(200, page_width);
       EXPECT_EQ(300, page_height);
-      ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
+      ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get());
       CompareBitmap(bitmap.get(), page_width, page_height,
                     RectanglesChecksum());
     }
@@ -450,17 +436,16 @@
       // TODO(crbug.com/pdfium/1328): The checksum after invoking
       // `FPDFPage_TransFormWithClip()` below should match `ShrunkChecksum()`.
       const FS_MATRIX half_matrix{0.5, 0, 0, 0.5, 0, 0};
-      EXPECT_TRUE(FPDFPage_TransFormWithClip(page, &half_matrix, nullptr));
-      const int page_width = static_cast<int>(FPDF_GetPageWidth(page));
-      const int page_height = static_cast<int>(FPDF_GetPageHeight(page));
+      EXPECT_TRUE(
+          FPDFPage_TransFormWithClip(page.get(), &half_matrix, nullptr));
+      const int page_width = static_cast<int>(FPDF_GetPageWidth(page.get()));
+      const int page_height = static_cast<int>(FPDF_GetPageHeight(page.get()));
       EXPECT_EQ(200, page_width);
       EXPECT_EQ(300, page_height);
-      ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
+      ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get());
       CompareBitmap(bitmap.get(), page_width, page_height,
                     RectanglesChecksum());
     }
-
-    UnloadPage(page);
   }
 
   {
@@ -489,16 +474,16 @@
 
   {
     ASSERT_TRUE(OpenDocument("rectangles.pdf"));
-    FPDF_PAGE page = LoadPage(0);
+    ScopedEmbedderTestPage page = LoadScopedPage(0);
     ASSERT_TRUE(page);
 
     {
       // Render the page as is.
-      const int page_width = static_cast<int>(FPDF_GetPageWidth(page));
-      const int page_height = static_cast<int>(FPDF_GetPageHeight(page));
+      const int page_width = static_cast<int>(FPDF_GetPageWidth(page.get()));
+      const int page_height = static_cast<int>(FPDF_GetPageHeight(page.get()));
       EXPECT_EQ(200, page_width);
       EXPECT_EQ(300, page_height);
-      ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
+      ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get());
       CompareBitmap(bitmap.get(), page_width, page_height,
                     RectanglesChecksum());
     }
@@ -510,17 +495,16 @@
       // TODO(crbug.com/pdfium/1328): The checksum after invoking
       // `FPDFPage_TransFormWithClip()` below should match `ShrunkChecksum()`.
       const FS_MATRIX half_matrix{0.5, 0, 0, 0.5, 0, 0};
-      EXPECT_TRUE(FPDFPage_TransFormWithClip(page, &half_matrix, nullptr));
-      const int page_width = static_cast<int>(FPDF_GetPageWidth(page));
-      const int page_height = static_cast<int>(FPDF_GetPageHeight(page));
+      EXPECT_TRUE(
+          FPDFPage_TransFormWithClip(page.get(), &half_matrix, nullptr));
+      const int page_width = static_cast<int>(FPDF_GetPageWidth(page.get()));
+      const int page_height = static_cast<int>(FPDF_GetPageHeight(page.get()));
       EXPECT_EQ(200, page_width);
       EXPECT_EQ(300, page_height);
-      ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
+      ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get());
       CompareBitmap(bitmap.get(), page_width, page_height,
                     RectanglesChecksum());
     }
-
-    UnloadPage(page);
   }
 
   {
