Do some IWYU cleanups.
[pdfium.git] / testing / embedder_test.h
1 // Copyright (c) 2015 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef TESTING_EMBEDDER_TEST_H_
6 #define TESTING_EMBEDDER_TEST_H_
7
8 #include <string>
9
10 #include "../public/fpdf_dataavail.h"
11 #include "../public/fpdf_ext.h"
12 #include "../public/fpdf_formfill.h"
13 #include "../public/fpdfview.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "v8/include/v8.h"
16
17 class TestLoader;
18
19 // This class is used to load a PDF document, and then run programatic
20 // API tests against it.
21 class EmbedderTest : public ::testing::Test,
22                      public UNSUPPORT_INFO,
23                      public IPDF_JSPLATFORM,
24                      public FPDF_FORMFILLINFO {
25  public:
26   class Delegate {
27    public:
28     virtual ~Delegate() { }
29
30     // Equivalent to UNSUPPORT_INFO::FSDK_UnSupport_Handler().
31     virtual void UnsupportedHandler(int type) { }
32
33     // Equivalent to IPDF_JSPLATFORM::app_alert().
34     virtual int Alert(FPDF_WIDESTRING message, FPDF_WIDESTRING title,
35                       int type, int icon) {
36       return 0;
37     }
38
39     // Equivalent to FPDF_FORMFILLINFO::FFI_SetTimer().
40     virtual int SetTimer(int msecs, TimerCallback fn) { return 0; }
41
42     // Equivalent to FPDF_FORMFILLINFO::FFI_KillTimer().
43     virtual void KillTimer(int id) { }
44   };
45
46   EmbedderTest();
47   virtual ~EmbedderTest();
48
49   void SetUp() override;
50   void TearDown() override;
51
52   void SetDelegate(Delegate* delegate) {
53     delegate_ = delegate ? delegate : default_delegate_;
54   }
55
56   FPDF_DOCUMENT document() { return document_; }
57   FPDF_FORMHANDLE form_handle() { return form_handle_; }
58
59   // Open the document specified by |filename|, and create its form fill
60   // environment, or return false on failure.
61   virtual bool OpenDocument(const std::string& filename);
62
63   // Perform JavaScript actions that are to run at document open time.
64   virtual void DoOpenActions();
65
66   // Determine the page numbers present in the document.
67   virtual int GetFirstPageNum();
68   virtual int GetPageCount();
69
70   // Load a specific page of the open document.
71   virtual FPDF_PAGE LoadPage(int page_number);
72
73   // Convert a loaded page into a bitmap.
74   virtual FPDF_BITMAP RenderPage(FPDF_PAGE page);
75
76   // Relese the resources obtained from LoadPage(). Further use of |page|
77   // is prohibited after this call is made.
78   virtual void UnloadPage(FPDF_PAGE page);
79
80  protected:
81   Delegate* delegate_;
82   Delegate* default_delegate_;
83   FPDF_DOCUMENT document_;
84   FPDF_FORMHANDLE form_handle_;
85   FPDF_AVAIL avail_;
86   FX_DOWNLOADHINTS hints_;
87   FPDF_FILEACCESS file_access_;
88   FX_FILEAVAIL file_avail_;
89   v8::Platform* platform_;
90   v8::StartupData natives_;
91   v8::StartupData snapshot_;
92   TestLoader* loader_;
93   size_t file_length_;
94   char* file_contents_;
95
96  private:
97   static void UnsupportedHandlerTrampoline(UNSUPPORT_INFO*, int type);
98   static int AlertTrampoline(IPDF_JSPLATFORM* plaform, FPDF_WIDESTRING message,
99                              FPDF_WIDESTRING title, int type, int icon);
100   static int SetTimerTrampoline(FPDF_FORMFILLINFO* info, int msecs,
101                                 TimerCallback fn);
102   static void KillTimerTrampoline(FPDF_FORMFILLINFO* info, int id);
103 };
104
105 #endif  // TESTING_EMBEDDER_TEST_H_