Use ScopedFPDFFormHandle in EmbedderTest.

Use more scopers and their associated accessors. Reorder member
variables so the natural destruction order is correct.

Change-Id: I6b6c1b5c240cd6e34587398d3b43374318e8ee43
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/86873
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/render/fpdf_progressive_render_embeddertest.cpp b/core/fpdfapi/render/fpdf_progressive_render_embeddertest.cpp
index 40801ea..57d9cf9 100644
--- a/core/fpdfapi/render/fpdf_progressive_render_embeddertest.cpp
+++ b/core/fpdfapi/render/fpdf_progressive_render_embeddertest.cpp
@@ -228,7 +228,7 @@
   while (!render_done) {
     render_done = ContinueRenderPage(page, &pause);
   }
-  return FinishRenderPageWithForms(page, form_handle_);
+  return FinishRenderPageWithForms(page, form_handle());
 }
 
 TEST_F(FPDFProgressiveRenderEmbedderTest, RenderWithoutPause) {
@@ -295,7 +295,7 @@
   while (!render_done) {
     render_done = ContinueRenderPage(page, &pause);
   }
-  ScopedFPDFBitmap bitmap = FinishRenderPageWithForms(page, form_handle_);
+  ScopedFPDFBitmap bitmap = FinishRenderPageWithForms(page, form_handle());
   CompareBitmap(bitmap.get(), 300, 300, pdfium::kTextFormChecksum);
   UnloadPage(page);
 }
@@ -314,7 +314,7 @@
   ASSERT_TRUE(page);
 
   ScopedFPDFBitmap bitmap = RenderPageWithForcedColorScheme(
-      page, form_handle_, flags, color_scheme, background_color);
+      page, form_handle(), flags, color_scheme, background_color);
   ASSERT_TRUE(bitmap);
   CompareBitmap(bitmap.get(), bitmap_width, bitmap_height, md5);
   UnloadPage(page);
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp
index 1529fb1..a33d11f 100644
--- a/testing/embedder_test.cpp
+++ b/testing/embedder_test.cpp
@@ -83,8 +83,8 @@
   if (!document_)
     return false;
 
-  form_handle_ =
-      SetupFormFillEnvironment(document_, JavaScriptOption::kEnableJavaScript);
+  form_handle_.reset(
+      SetupFormFillEnvironment(document_, JavaScriptOption::kEnableJavaScript));
   return true;
 }
 
@@ -146,7 +146,7 @@
                                       FakeFileAccess* network_simulator,
                                       FPDF_DOCUMENT* document,
                                       ScopedFPDFAvail* avail,
-                                      FPDF_FORMHANDLE* form_handle) {
+                                      ScopedFPDFFormHandle* form_handle) {
   network_simulator->AddSegment(0, 1024);
   network_simulator->SetRequestedDataAvailable();
   avail->reset(FPDFAvail_Create(network_simulator->GetFileAvail(),
@@ -195,7 +195,7 @@
     if (!*document)
       return false;
   }
-  *form_handle = SetupFormFillEnvironment(*document, javascript_option);
+  form_handle->reset(SetupFormFillEnvironment(*document, javascript_option));
 
   int doc_type = FPDF_GetFormType(*document);
   if (doc_type == FORMTYPE_XFA_FULL || doc_type == FORMTYPE_XFA_FOREGROUND)
@@ -206,9 +206,8 @@
 }
 
 void EmbedderTest::CloseDocument() {
-  FORM_DoDocumentAAction(form_handle_, FPDFDOC_AACTION_WC);
-  FPDFDOC_ExitFormFillEnvironment(form_handle_);
-  form_handle_ = nullptr;
+  FORM_DoDocumentAAction(form_handle(), FPDFDOC_AACTION_WC);
+  form_handle_.reset();
 
   FPDF_CloseDocument(document_);
   document_ = nullptr;
@@ -244,9 +243,9 @@
 }
 
 void EmbedderTest::DoOpenActions() {
-  DCHECK(form_handle_);
-  FORM_DoDocumentJSAction(form_handle_);
-  FORM_DoDocumentOpenAction(form_handle_);
+  DCHECK(form_handle());
+  FORM_DoDocumentJSAction(form_handle());
+  FORM_DoDocumentOpenAction(form_handle());
 }
 
 int EmbedderTest::GetFirstPageNum() {
@@ -273,7 +272,7 @@
 }
 
 FPDF_PAGE EmbedderTest::LoadPageCommon(int page_number, bool do_events) {
-  DCHECK(form_handle_);
+  DCHECK(form_handle());
   DCHECK(page_number >= 0);
   DCHECK(!pdfium::Contains(page_map_, page_number));
 
@@ -282,8 +281,8 @@
     return nullptr;
 
   if (do_events) {
-    FORM_OnAfterLoadPage(page, form_handle_);
-    FORM_DoPageAAction(page, form_handle_, FPDFPAGE_AACTION_OPEN);
+    FORM_OnAfterLoadPage(page, form_handle());
+    FORM_DoPageAAction(page, form_handle(), FPDFPAGE_AACTION_OPEN);
   }
   page_map_[page_number] = page;
   return page;
@@ -298,15 +297,15 @@
 }
 
 void EmbedderTest::UnloadPageCommon(FPDF_PAGE page, bool do_events) {
-  DCHECK(form_handle_);
+  DCHECK(form_handle());
   int page_number = GetPageNumberForLoadedPage(page);
   if (page_number < 0) {
     NOTREACHED();
     return;
   }
   if (do_events) {
-    FORM_DoPageAAction(page, form_handle_, FPDFPAGE_AACTION_CLOSE);
-    FORM_OnBeforeClosePage(page, form_handle_);
+    FORM_DoPageAAction(page, form_handle(), FPDFPAGE_AACTION_CLOSE);
+    FORM_OnBeforeClosePage(page, form_handle());
   }
   FPDF_ClosePage(page);
   page_map_.erase(page_number);
@@ -327,7 +326,7 @@
     NOTREACHED();
     return nullptr;
   }
-  return RenderPageWithFlags(page, form_handle_, flags);
+  return RenderPageWithFlags(page, form_handle(), flags);
 }
 
 ScopedFPDFBitmap EmbedderTest::RenderSavedPage(FPDF_PAGE page) {
@@ -340,7 +339,7 @@
     NOTREACHED();
     return nullptr;
   }
-  return RenderPageWithFlags(page, saved_form_handle_, flags);
+  return RenderPageWithFlags(page, saved_form_handle(), flags);
 }
 
 // static
@@ -467,16 +466,15 @@
 void EmbedderTest::CloseSavedDocument() {
   DCHECK(saved_document_);
 
-  FPDFDOC_ExitFormFillEnvironment(saved_form_handle_);
+  saved_form_handle_.reset();
   FPDF_CloseDocument(saved_document_);
   saved_avail_.reset();
 
-  saved_form_handle_ = nullptr;
   saved_document_ = nullptr;
 }
 
 FPDF_PAGE EmbedderTest::LoadSavedPage(int page_number) {
-  DCHECK(saved_form_handle_);
+  DCHECK(saved_form_handle());
   DCHECK(page_number >= 0);
   DCHECK(!pdfium::Contains(saved_page_map_, page_number));
 
@@ -484,14 +482,14 @@
   if (!page)
     return nullptr;
 
-  FORM_OnAfterLoadPage(page, saved_form_handle_);
-  FORM_DoPageAAction(page, saved_form_handle_, FPDFPAGE_AACTION_OPEN);
+  FORM_OnAfterLoadPage(page, saved_form_handle());
+  FORM_DoPageAAction(page, saved_form_handle(), FPDFPAGE_AACTION_OPEN);
   saved_page_map_[page_number] = page;
   return page;
 }
 
 void EmbedderTest::CloseSavedPage(FPDF_PAGE page) {
-  DCHECK(saved_form_handle_);
+  DCHECK(saved_form_handle());
 
   int page_number = GetPageNumberForSavedPage(page);
   if (page_number < 0) {
@@ -499,8 +497,8 @@
     return;
   }
 
-  FORM_DoPageAAction(page, saved_form_handle_, FPDFPAGE_AACTION_CLOSE);
-  FORM_OnBeforeClosePage(page, saved_form_handle_);
+  FORM_DoPageAAction(page, saved_form_handle(), FPDFPAGE_AACTION_CLOSE);
+  FORM_OnBeforeClosePage(page, saved_form_handle());
   FPDF_ClosePage(page);
 
   saved_page_map_.erase(page_number);
diff --git a/testing/embedder_test.h b/testing/embedder_test.h
index 220bc0d..c0b7d52 100644
--- a/testing/embedder_test.h
+++ b/testing/embedder_test.h
@@ -102,7 +102,8 @@
   }
 
   FPDF_DOCUMENT document() const { return document_; }
-  FPDF_FORMHANDLE form_handle() const { return form_handle_; }
+  FPDF_FORMHANDLE form_handle() const { return form_handle_.get(); }
+  FPDF_FORMHANDLE saved_form_handle() const { return saved_form_handle_.get(); }
 
   // Wrapper for FPDFAvail_Create() to set `avail_`.
   void CreateAvail(FX_FILEAVAIL* file_avail, FPDF_FILEACCESS* file);
@@ -216,7 +217,7 @@
                           FakeFileAccess* network_simulator,
                           FPDF_DOCUMENT* document,
                           ScopedFPDFAvail* avail,
-                          FPDF_FORMHANDLE* form_handle);
+                          ScopedFPDFFormHandle* form_handle);
 
   FPDF_FORMHANDLE SetupFormFillEnvironment(FPDF_DOCUMENT doc,
                                            JavaScriptOption javascript_option);
@@ -282,19 +283,19 @@
   // must outlive `loader_`.
   std::unique_ptr<char, pdfium::FreeDeleter> file_contents_;
   std::unique_ptr<TestLoader> loader_;
-  FPDF_DOCUMENT document_ = nullptr;
-  FPDF_FORMHANDLE form_handle_ = nullptr;
   FPDF_FILEACCESS file_access_;                       // must outlive `avail_`.
   std::unique_ptr<FakeFileAccess> fake_file_access_;  // must outlive `avail_`.
   ScopedFPDFAvail avail_;
+  FPDF_DOCUMENT document_ = nullptr;
+  ScopedFPDFFormHandle form_handle_;
   PageNumberToHandleMap page_map_;
 
-  FPDF_DOCUMENT saved_document_ = nullptr;
-  FPDF_FORMHANDLE saved_form_handle_ = nullptr;
   FPDF_FILEACCESS saved_file_access_;  // must outlive `saved_avail_`.
   // must outlive `saved_avail_`.
   std::unique_ptr<FakeFileAccess> saved_fake_file_access_;
   ScopedFPDFAvail saved_avail_;
+  FPDF_DOCUMENT saved_document_ = nullptr;
+  ScopedFPDFFormHandle saved_form_handle_;
   PageNumberToHandleMap saved_page_map_;
 
  private: