summaryrefslogtreecommitdiff
path: root/xfa_test/pdf/pdfium/pdfium_engine.h
diff options
context:
space:
mode:
Diffstat (limited to 'xfa_test/pdf/pdfium/pdfium_engine.h')
-rw-r--r--xfa_test/pdf/pdfium/pdfium_engine.h687
1 files changed, 0 insertions, 687 deletions
diff --git a/xfa_test/pdf/pdfium/pdfium_engine.h b/xfa_test/pdf/pdfium/pdfium_engine.h
deleted file mode 100644
index 242c33df27..0000000000
--- a/xfa_test/pdf/pdfium/pdfium_engine.h
+++ /dev/null
@@ -1,687 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef PDF_PDFIUM_PDFIUM_ENGINE_H_
-#define PDF_PDFIUM_PDFIUM_ENGINE_H_
-
-#include <map>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "base/memory/scoped_ptr.h"
-#include "base/time/time.h"
-#include "pdf/document_loader.h"
-#include "pdf/pdf_engine.h"
-#include "pdf/pdfium/pdfium_page.h"
-#include "pdf/pdfium/pdfium_range.h"
-#include "ppapi/cpp/completion_callback.h"
-#include "ppapi/cpp/dev/buffer_dev.h"
-#include "ppapi/cpp/image_data.h"
-#include "ppapi/cpp/point.h"
-#include "third_party/pdfium/fpdfsdk/include/fpdf_dataavail.h"
-#include "third_party/pdfium/fpdfsdk/include/fpdf_progressive.h"
-#include "third_party/pdfium/fpdfsdk/include/fpdfformfill.h"
-#include "third_party/pdfium/fpdfsdk/include/fpdfview.h"
-
-#define _TEST_XFA
-#ifdef _TEST_XFA
-# if defined(WIN32)
-# define FXQA_TESTFILE(filename) "E:/"#filename
-# else
-# define FXQA_TESTFILE(filename) "/home/"#filename
-# endif
-#endif
-
-namespace pp {
-class KeyboardInputEvent;
-class MouseInputEvent;
-}
-
-namespace chrome_pdf {
-
-class ShadowMatrix;
-
-class PDFiumEngine : public PDFEngine,
- public DocumentLoader::Client,
- public FPDF_FORMFILLINFO,
- public IPDF_JSPLATFORM,
- public IFSDK_PAUSE {
- public:
- explicit PDFiumEngine(PDFEngine::Client* client);
- virtual ~PDFiumEngine();
-
- // PDFEngine implementation.
- virtual bool New(const char* url);
- virtual bool New(const char* url,
- const char* headers);
- virtual void PageOffsetUpdated(const pp::Point& page_offset);
- virtual void PluginSizeUpdated(const pp::Size& size);
- virtual void ScrolledToXPosition(int position);
- virtual void ScrolledToYPosition(int position);
- virtual void PrePaint();
- virtual void Paint(const pp::Rect& rect,
- pp::ImageData* image_data,
- std::vector<pp::Rect>* ready,
- std::vector<pp::Rect>* pending);
- virtual void PostPaint();
- virtual bool HandleDocumentLoad(const pp::URLLoader& loader);
- virtual bool HandleEvent(const pp::InputEvent& event);
- virtual uint32_t QuerySupportedPrintOutputFormats();
- virtual void PrintBegin();
- virtual pp::Resource PrintPages(
- const PP_PrintPageNumberRange_Dev* page_ranges,
- uint32_t page_range_count,
- const PP_PrintSettings_Dev& print_settings);
- virtual void PrintEnd();
- virtual void StartFind(const char* text, bool case_sensitive);
- virtual bool SelectFindResult(bool forward);
- virtual void StopFind();
- virtual void ZoomUpdated(double new_zoom_level);
- virtual void RotateClockwise();
- virtual void RotateCounterclockwise();
- virtual std::string GetSelectedText();
- virtual std::string GetLinkAtPosition(const pp::Point& point);
- virtual bool IsSelecting();
- virtual bool HasPermission(DocumentPermission permission) const;
- virtual void SelectAll();
- virtual int GetNumberOfPages();
- virtual int GetNamedDestinationPage(const std::string& destination);
- virtual int GetFirstVisiblePage();
- virtual int GetMostVisiblePage();
- virtual pp::Rect GetPageRect(int index);
- virtual pp::Rect GetPageContentsRect(int index);
- virtual int GetVerticalScrollbarYPosition() { return position_.y(); }
- virtual void PaintThumbnail(pp::ImageData* image_data, int index);
- virtual void SetGrayscale(bool grayscale);
- virtual void OnCallback(int id);
- virtual std::string GetPageAsJSON(int index);
- virtual bool GetPrintScaling();
- virtual void AppendBlankPages(int num_pages);
- virtual void AppendPage(PDFEngine* engine, int index);
- virtual pp::Point GetScrollPosition();
- virtual void SetScrollPosition(const pp::Point& position);
- virtual bool IsProgressiveLoad();
-
- // DocumentLoader::Client implementation.
- virtual pp::Instance* GetPluginInstance();
- virtual pp::URLLoader CreateURLLoader();
- virtual void OnPartialDocumentLoaded();
- virtual void OnPendingRequestComplete();
- virtual void OnNewDataAvailable();
- virtual void OnDocumentComplete();
-
- void UnsupportedFeature(int type);
-
- std::string current_find_text() const { return current_find_text_; }
-
- FPDF_DOCUMENT doc() { return doc_; }
- FPDF_FORMHANDLE form() { return form_; }
-
- private:
- // This helper class is used to detect the difference in selection between
- // construction and destruction. At destruction, it invalidates all the
- // parts that are newly selected, along with all the parts that used to be
- // selected but are not anymore.
- class SelectionChangeInvalidator {
- public:
- explicit SelectionChangeInvalidator(PDFiumEngine* engine);
- ~SelectionChangeInvalidator();
- private:
- // Sets the given container to the all the currently visible selection
- // rectangles, in screen coordinates.
- void GetVisibleSelectionsScreenRects(std::vector<pp::Rect>* rects);
-
- PDFiumEngine* engine_;
- // Screen rectangles that were selected on construction.
- std::vector<pp::Rect> old_selections_;
- // The origin at the time this object was constructed.
- pp::Point previous_origin_;
- };
-
- // Used to store mouse down state to handle it in other mouse event handlers.
- class MouseDownState {
- public:
- MouseDownState(const PDFiumPage::Area& area,
- const PDFiumPage::LinkTarget& target);
- ~MouseDownState();
-
- void Set(const PDFiumPage::Area& area,
- const PDFiumPage::LinkTarget& target);
- void Reset();
- bool Matches(const PDFiumPage::Area& area,
- const PDFiumPage::LinkTarget& target) const;
-
- private:
- PDFiumPage::Area area_;
- PDFiumPage::LinkTarget target_;
-
- DISALLOW_COPY_AND_ASSIGN(MouseDownState);
- };
-
- friend class SelectionChangeInvalidator;
-
- struct FileAvail : public FX_FILEAVAIL {
- DocumentLoader* loader;
- };
-
- struct DownloadHints : public FX_DOWNLOADHINTS {
- DocumentLoader* loader;
- };
-
- // PDFium interface to get block of data.
- static int GetBlock(void* param, unsigned long position,
- unsigned char* buffer, unsigned long size);
-
- // PDFium interface to check is block of data is available.
- static bool IsDataAvail(FX_FILEAVAIL* param,
- size_t offset, size_t size);
-
- // PDFium interface to request download of the block of data.
- static void AddSegment(FX_DOWNLOADHINTS* param,
- size_t offset, size_t size);
-
- // We finished getting the pdf file, so load it. This will complete
- // asynchronously (due to password fetching) and may be run multiple times.
- void LoadDocument();
-
- // Try loading the document. Returns true if the document is successfully
- // loaded or is already loaded otherwise it will return false. If
- // |with_password| is set to true, the document will be loaded with
- // |password|. If the document could not be loaded and needs a password,
- // |needs_password| will be set to true.
- bool TryLoadingDoc(bool with_password,
- const std::string& password,
- bool* needs_password);
-
- // Ask the user for the document password and then continue loading the
- // document.
- void GetPasswordAndLoad();
-
- // Called when the password has been retrieved.
- void OnGetPasswordComplete(int32_t result,
- const pp::Var& password);
-
- // Continues loading the document when the password has been retrieved, or if
- // there is no password.
- void ContinueLoadingDocument(bool has_password,
- const std::string& password);
-
- // Finish loading the document and notify the client that the document has
- // been loaded. This should only be run after |doc_| has been loaded and the
- // document is fully downloaded. If this has been run once, it will result in
- // a no-op.
- void FinishLoadingDocument();
-
- // Loads information about the pages in the document and calculate the
- // document size.
- void LoadPageInfo(bool reload);
-
- // Calculate which pages should be displayed right now.
- void CalculateVisiblePages();
-
- // Returns true iff the given page index is visible. CalculateVisiblePages
- // must have been called first.
- bool IsPageVisible(int index) const;
-
- // Checks if a page is now available, and if so marks it as such and returns
- // true. Otherwise, it will return false and will add the index to the given
- // array if it's not already there.
- bool CheckPageAvailable(int index, std::vector<int>* pending);
-
- // Helper function to get a given page's size in pixels. This is not part of
- // PDFiumPage because we might not have that structure when we need this.
- pp::Size GetPageSize(int index);
-
- void UpdateTickMarks();
-
- // Called to continue searching so we don't block the main thread.
- void ContinueFind(int32_t result);
-
- // Inserts a find result into find_results_, which is sorted.
- void AddFindResult(const PDFiumRange& result);
-
- // Search a page using PDFium's methods. Doesn't work with unicode. This
- // function is just kept arount in case PDFium code is fixed.
- void SearchUsingPDFium(const base::string16& term,
- bool case_sensitive,
- bool first_search,
- int character_to_start_searching_from,
- int current_page);
-
- // Search a page ourself using ICU.
- void SearchUsingICU(const base::string16& term,
- bool case_sensitive,
- bool first_search,
- int character_to_start_searching_from,
- int current_page);
-
- // Input event handlers.
- bool OnMouseDown(const pp::MouseInputEvent& event);
- bool OnMouseUp(const pp::MouseInputEvent& event);
- bool OnMouseMove(const pp::MouseInputEvent& event);
- bool OnKeyDown(const pp::KeyboardInputEvent& event);
- bool OnKeyUp(const pp::KeyboardInputEvent& event);
- bool OnChar(const pp::KeyboardInputEvent& event);
-
- FPDF_DOCUMENT CreateSinglePageRasterPdf(
- double source_page_width,
- double source_page_height,
- const PP_PrintSettings_Dev& print_settings,
- PDFiumPage* page_to_print);
-
- pp::Buffer_Dev PrintPagesAsRasterPDF(
- const PP_PrintPageNumberRange_Dev* page_ranges,
- uint32_t page_range_count,
- const PP_PrintSettings_Dev& print_settings);
-
- pp::Buffer_Dev PrintPagesAsPDF(const PP_PrintPageNumberRange_Dev* page_ranges,
- uint32_t page_range_count,
- const PP_PrintSettings_Dev& print_settings);
-
- pp::Buffer_Dev GetFlattenedPrintData(const FPDF_DOCUMENT& doc);
- void FitContentsToPrintableAreaIfRequired(
- const FPDF_DOCUMENT& doc,
- const PP_PrintSettings_Dev& print_settings);
- void SaveSelectedFormForPrint();
-
- // Given a mouse event, returns which page and character location it's closest
- // to.
- PDFiumPage::Area GetCharIndex(const pp::MouseInputEvent& event,
- int* page_index,
- int* char_index,
- PDFiumPage::LinkTarget* target);
- PDFiumPage::Area GetCharIndex(const pp::Point& point,
- int* page_index,
- int* char_index,
- PDFiumPage::LinkTarget* target);
-
- void OnSingleClick(int page_index, int char_index);
- void OnMultipleClick(int click_count, int page_index, int char_index);
-
- // Starts a progressive paint operation given a rectangle in screen
- // coordinates. Returns the index in progressive_rects_.
- int StartPaint(int page_index, const pp::Rect& dirty);
-
- // Continues a paint operation that was started earlier. Returns true if the
- // paint is done, or false if it needs to be continued.
- bool ContinuePaint(int progressive_index, pp::ImageData* image_data);
-
- // Called once PDFium is finished rendering a page so that we draw our
- // borders, highlighting etc.
- void FinishPaint(int progressive_index, pp::ImageData* image_data);
-
- // Stops any paints that are in progress.
- void CancelPaints();
-
- // Invalidates all pages. Use this when some global parameter, such as page
- // orientation, has changed.
- void InvalidateAllPages();
-
- // If the page is narrower than the document size, paint the extra space
- // with the page background.
- void FillPageSides(int progressive_index);
-
- void PaintPageShadow(int progressive_index, pp::ImageData* image_data);
-
- // Highlight visible find results and selections.
- void DrawSelections(int progressive_index, pp::ImageData* image_data);
-
- // Paints an page that hasn't finished downloading.
- void PaintUnavailablePage(int page_index,
- const pp::Rect& dirty,
- pp::ImageData* image_data);
-
- // Given a page index, returns the corresponding index in progressive_rects_,
- // or -1 if it doesn't exist.
- int GetProgressiveIndex(int page_index) const;
-
- // Creates a FPDF_BITMAP from a rectangle in screen coordinates.
- FPDF_BITMAP CreateBitmap(const pp::Rect& rect,
- pp::ImageData* image_data) const;
-
- // Given a rectangle in screen coordinates, returns the coordinates in the
- // units that PDFium rendering functions expect.
- void GetPDFiumRect(int page_index, const pp::Rect& rect, int* start_x,
- int* start_y, int* size_x, int* size_y) const;
-
- // Returns the rendering flags to pass to PDFium.
- int GetRenderingFlags() const;
-
- // Returns the currently visible rectangle in document coordinates.
- pp::Rect GetVisibleRect() const;
-
- // Returns a page's rect in screen coordinates, as well as its surrounding
- // border areas and bottom separator.
- pp::Rect GetPageScreenRect(int page_index) const;
-
- // Given a rectangle in document coordinates, returns the rectange into screen
- // coordinates (i.e. 0,0 is top left corner of plugin area). If it's not
- // visible, an empty rectangle is returned.
- pp::Rect GetScreenRect(const pp::Rect& rect) const;
-
- // Highlights the given rectangle.
- void Highlight(void* buffer,
- int stride,
- const pp::Rect& rect,
- std::vector<pp::Rect>* highlighted_rects);
-
- // Helper function to convert a device to page coordinates. If the page is
- // not yet loaded, page_x and page_y will be set to 0.
- void DeviceToPage(int page_index,
- float device_x,
- float device_y,
- double* page_x,
- double* page_y);
-
- // Helper function to get the index of a given FPDF_PAGE. Returns -1 if not
- // found.
- int GetVisiblePageIndex(FPDF_PAGE page);
-
- // Helper function to change the current page, running page open/close
- // triggers as necessary.
- void SetCurrentPage(int index);
-
- // Transform |page| contents to fit in the selected printer paper size.
- void TransformPDFPageForPrinting(FPDF_PAGE page,
- const PP_PrintSettings_Dev& print_settings);
-
- void DrawPageShadow(const pp::Rect& page_rect,
- const pp::Rect& shadow_rect,
- const pp::Rect& clip_rect,
- pp::ImageData* image_data);
-
- void GetRegion(const pp::Point& location,
- pp::ImageData* image_data,
- void** region,
- int* stride) const;
-
- // Called when the selection changes.
- void OnSelectionChanged();
-
- // FPDF_FORMFILLINFO callbacks.
- static void Form_Invalidate(FPDF_FORMFILLINFO* param,
- FPDF_PAGE page,
- double left,
- double top,
- double right,
- double bottom);
- static void Form_OutputSelectedRect(FPDF_FORMFILLINFO* param,
- FPDF_PAGE page,
- double left,
- double top,
- double right,
- double bottom);
- static void Form_SetCursor(FPDF_FORMFILLINFO* param, int cursor_type);
- static int Form_SetTimer(FPDF_FORMFILLINFO* param,
- int elapse,
- TimerCallback timer_func);
- static void Form_KillTimer(FPDF_FORMFILLINFO* param, int timer_id);
- static FPDF_SYSTEMTIME Form_GetLocalTime(FPDF_FORMFILLINFO* param);
- static void Form_OnChange(FPDF_FORMFILLINFO* param);
- static FPDF_PAGE Form_GetPage(FPDF_FORMFILLINFO* param,
- FPDF_DOCUMENT document,
- int page_index);
- static FPDF_PAGE Form_GetCurrentPage(FPDF_FORMFILLINFO* param,
- FPDF_DOCUMENT document);
- static int Form_GetRotation(FPDF_FORMFILLINFO* param, FPDF_PAGE page);
- static void Form_ExecuteNamedAction(FPDF_FORMFILLINFO* param,
- FPDF_BYTESTRING named_action);
- static void Form_SetTextFieldFocus(FPDF_FORMFILLINFO* param,
- FPDF_WIDESTRING value,
- FPDF_DWORD valueLen,
- FPDF_BOOL is_focus);
- static void Form_DoURIAction(FPDF_FORMFILLINFO* param, FPDF_BYTESTRING uri);
- static void Form_DoGoToAction(FPDF_FORMFILLINFO* param,
- int page_index,
- int zoom_mode,
- float* position_array,
- int size_of_array);
-
- // IPDF_JSPLATFORM callbacks.
- static int Form_Alert(IPDF_JSPLATFORM* param,
- FPDF_WIDESTRING message,
- FPDF_WIDESTRING title,
- int type,
- int icon);
- static void Form_Beep(IPDF_JSPLATFORM* param, int type);
- static int Form_Response(IPDF_JSPLATFORM* param,
- FPDF_WIDESTRING question,
- FPDF_WIDESTRING title,
- FPDF_WIDESTRING default_response,
- FPDF_WIDESTRING label,
- FPDF_BOOL password,
- void* response,
- int length);
- static int Form_GetFilePath(IPDF_JSPLATFORM* param,
- void* file_path,
- int length);
- static void Form_Mail(IPDF_JSPLATFORM* param,
- void* mail_data,
- int length,
- FPDF_BOOL ui,
- FPDF_WIDESTRING to,
- FPDF_WIDESTRING subject,
- FPDF_WIDESTRING cc,
- FPDF_WIDESTRING bcc,
- FPDF_WIDESTRING message);
- static void Form_Print(IPDF_JSPLATFORM* param,
- FPDF_BOOL ui,
- int start,
- int end,
- FPDF_BOOL silent,
- FPDF_BOOL shrink_to_fit,
- FPDF_BOOL print_as_image,
- FPDF_BOOL reverse,
- FPDF_BOOL annotations);
- static void Form_SubmitForm(IPDF_JSPLATFORM* param,
- void* form_data,
- int length,
- FPDF_WIDESTRING url);
- static void Form_GotoPage(IPDF_JSPLATFORM* param, int page_number);
- static int Form_Browse(IPDF_JSPLATFORM* param, void* file_path, int length);
-#ifdef _TEST_XFA
- static void Form_EmailTo(FPDF_FORMFILLINFO* pThis, FPDF_FILEHANDLER* fileHandler,
- FPDF_WIDESTRING to, FPDF_WIDESTRING subject, FPDF_WIDESTRING cc, FPDF_WIDESTRING bcc, FPDF_WIDESTRING message);
- static void Form_DisplayCaret(FPDF_FORMFILLINFO* pThis, FPDF_PAGE page, FPDF_BOOL bVisible, double left, double top, double right, double bottom);
- //static int Form_GetCurDocumentIndex(FPDF_FORMFILLINFO* pThis);
- //static int Form_GetDocumentCount(FPDF_FORMFILLINFO* pThis);
- static void Form_SetCurrentPage(FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document, int iCurPage);
- static int Form_GetCurrentPageIndex(FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document);
- static void Form_GetPageViewRect(FPDF_FORMFILLINFO* pThis, FPDF_PAGE page, double* left, double* top, double* right, double* bottom);
- static int Form_GetPlatform(FPDF_FORMFILLINFO* pThis, void* platform, int length);
- static FPDF_BOOL Form_PopupMenu(FPDF_FORMFILLINFO* pThis, FPDF_PAGE page, FPDF_WIDGET hWidget, int menuFlag, float x, float y);
- static FPDF_BOOL Form_PostRequestURL(FPDF_FORMFILLINFO* pThis, FPDF_WIDESTRING wsURL, FPDF_WIDESTRING wsData, FPDF_WIDESTRING wsContentType, FPDF_WIDESTRING wsEncode, FPDF_WIDESTRING wsHeader, FPDF_BSTR* respone);
- static FPDF_BOOL Form_PutRequestURL(FPDF_FORMFILLINFO* pThis, FPDF_WIDESTRING wsURL, FPDF_WIDESTRING wsData, FPDF_WIDESTRING wsEncode);
- //static FPDF_BOOL Form_ShowFileDialog(FPDF_FORMFILLINFO* pThis, FPDF_WIDESTRING wsTitle, FPDF_WIDESTRING wsFilter, FPDF_BOOL isOpen, FPDF_STRINGHANDLE pathArr);
- static void Form_UploadTo(FPDF_FORMFILLINFO* pThis, FPDF_FILEHANDLER* fileHandler, int fileFlag, FPDF_WIDESTRING uploadTo);
- static FPDF_LPFILEHANDLER Form_DownloadFromURL(FPDF_FORMFILLINFO* pThis, FPDF_WIDESTRING URL);
- //static FPDF_BOOL MyForm_GetFilePath(FPDF_FORMFILLINFO* pThis, FPDF_FILEHANDLER* pFileHandler, void* filePath, int length);
- static FPDF_FILEHANDLER* Form_OpenFile(FPDF_FORMFILLINFO* pThis, int fileFlag, FPDF_WIDESTRING wsURL, const char* mode);
- static void Form_GotoURL(FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document, FPDF_WIDESTRING wsURL);
- static int Form_GetLanguage(FPDF_FORMFILLINFO* pThis, void* language, int length);
-#endif // _TEST_XFA
- // IFSDK_PAUSE callbacks
- static FPDF_BOOL Pause_NeedToPauseNow(IFSDK_PAUSE* param);
-
- PDFEngine::Client* client_;
- pp::Size document_size_; // Size of document in pixels.
-
- // The scroll position in screen coordinates.
- pp::Point position_;
- // The offset of the page into the viewport.
- pp::Point page_offset_;
- // The plugin size in screen coordinates.
- pp::Size plugin_size_;
- double current_zoom_;
- unsigned int current_rotation_;
-
- DocumentLoader doc_loader_; // Main document's loader.
- std::string url_;
- std::string headers_;
- pp::CompletionCallbackFactory<PDFiumEngine> find_factory_;
-
- pp::CompletionCallbackFactory<PDFiumEngine> password_factory_;
- int32_t password_tries_remaining_;
-
- // The current text used for searching.
- std::string current_find_text_;
-
- // The PDFium wrapper object for the document.
- FPDF_DOCUMENT doc_;
-
- // The PDFium wrapper for form data. Used even if there are no form controls
- // on the page.
- FPDF_FORMHANDLE form_;
-
- // The page(s) of the document. Store a vector of pointers so that when the
- // vector is resized we don't close the pages that are used in pending
- // paints.
- std::vector<PDFiumPage*> pages_;
-
- // The indexes of the pages currently visible.
- std::vector<int> visible_pages_;
-
- // The indexes of the pages pending download.
- std::vector<int> pending_pages_;
-
- // During handling of input events we don't want to unload any pages in
- // callbacks to us from PDFium, since the current page can change while PDFium
- // code still has a pointer to it.
- bool defer_page_unload_;
- std::vector<int> deferred_page_unloads_;
-
- // Used for selection. There could be more than one range if selection spans
- // more than one page.
- std::vector<PDFiumRange> selection_;
- // True if we're in the middle of selection.
- bool selecting_;
-
- MouseDownState mouse_down_state_;
-
- // Used for searching.
- typedef std::vector<PDFiumRange> FindResults;
- FindResults find_results_;
- // Which page to search next.
- int next_page_to_search_;
- // Where to stop searching.
- int last_page_to_search_;
- int last_character_index_to_search_; // -1 if search until end of page.
- // Which result the user has currently selected.
- int current_find_index_;
- // Where to resume searching.
- int resume_find_index_;
-
- // Permissions bitfield.
- unsigned long permissions_;
-
- // Interface structure to provide access to document stream.
- FPDF_FILEACCESS file_access_;
- // Interface structure to check data availability in the document stream.
- FileAvail file_availability_;
- // Interface structure to request data chunks from the document stream.
- DownloadHints download_hints_;
- // Pointer to the document availability interface.
- FPDF_AVAIL fpdf_availability_;
-
- pp::Size default_page_size_;
-
- // Used to manage timers that form fill API needs. The pair holds the timer
- // period, in ms, and the callback function.
- std::map<int, std::pair<int, TimerCallback> > timers_;
- int next_timer_id_;
-
- // Holds the page index of the last page that the mouse clicked on.
- int last_page_mouse_down_;
-
- // Holds the page index of the first visible page; refreshed by calling
- // CalculateVisiblePages()
- int first_visible_page_;
-
- // Holds the page index of the most visible page; refreshed by calling
- // CalculateVisiblePages()
- int most_visible_page_;
-
- // Set to true after FORM_DoDocumentJSAction/FORM_DoDocumentOpenAction have
- // been called. Only after that can we call FORM_DoPageAAction.
- bool called_do_document_action_;
-
- // Records parts of form fields that need to be highlighted at next paint, in
- // screen coordinates.
- std::vector<pp::Rect> form_highlights_;
-
- // Whether to render in grayscale or in color.
- bool render_grayscale_;
-
- // The link currently under the cursor.
- std::string link_under_cursor_;
-
- // Pending progressive paints.
- struct ProgressivePaint {
- pp::Rect rect; // In screen coordinates.
- FPDF_BITMAP bitmap;
- int page_index;
- // Temporary used to figure out if in a series of Paint() calls whether this
- // pending paint was updated or not.
- int painted_;
- };
- std::vector<ProgressivePaint> progressive_paints_;
-
- // Keeps track of when we started the last progressive paint, so that in our
- // callback we can determine if we need to pause.
- base::Time last_progressive_start_time_;
-
- // The timeout to use for the current progressive paint.
- int progressive_paint_timeout_;
-
- // Shadow matrix for generating the page shadow bitmap.
- scoped_ptr<ShadowMatrix> page_shadow_;
-
- // Set to true if the user is being prompted for their password. Will be set
- // to false after the user finishes getting their password.
- bool getting_password_;
-};
-
-// Create a local variable of this when calling PDFium functions which can call
-// our global callback when an unsupported feature is reached.
-class ScopedUnsupportedFeature {
- public:
- explicit ScopedUnsupportedFeature(PDFiumEngine* engine);
- ~ScopedUnsupportedFeature();
- private:
- PDFiumEngine* engine_;
- PDFiumEngine* old_engine_;
-};
-
-class PDFiumEngineExports : public PDFEngineExports {
- public:
- PDFiumEngineExports() {}
-#if defined(OS_WIN)
- // See the definition of RenderPDFPageToDC in pdf.cc for details.
- virtual bool RenderPDFPageToDC(const void* pdf_buffer,
- int buffer_size,
- int page_number,
- const RenderingSettings& settings,
- HDC dc);
-#endif // OS_WIN
- virtual bool RenderPDFPageToBitmap(const void* pdf_buffer,
- int pdf_buffer_size,
- int page_number,
- const RenderingSettings& settings,
- void* bitmap_buffer);
-
- virtual bool GetPDFDocInfo(const void* pdf_buffer,
- int buffer_size,
- int* page_count,
- double* max_page_width);
-
- // See the definition of GetPDFPageSizeByIndex in pdf.cc for details.
- virtual bool GetPDFPageSizeByIndex(const void* pdf_buffer,
- int pdf_buffer_size, int page_number,
- double* width, double* height);
-};
-
-} // namespace chrome_pdf
-
-#endif // PDF_PDFIUM_PDFIUM_ENGINE_H_