| Index: pdf/pdfium/pdfium_engine.h | 
| =================================================================== | 
| --- pdf/pdfium/pdfium_engine.h	(revision 0) | 
| +++ pdf/pdfium/pdfium_engine.h	(revision 0) | 
| @@ -0,0 +1,621 @@ | 
| +// 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" | 
| + | 
| +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_; | 
| +  }; | 
| + | 
| +  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); | 
| + | 
| +  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); | 
| + | 
| +  // 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_; | 
| + | 
| +  // 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_; | 
| + | 
| +  // 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); | 
| +}; | 
| + | 
| +}  // namespace chrome_pdf | 
| + | 
| +#endif  // PDF_PDFIUM_PDFIUM_ENGINE_H_ | 
|  | 
| Property changes on: pdf\pdfium\pdfium_engine.h | 
| ___________________________________________________________________ | 
| Added: svn:eol-style | 
| + LF | 
|  | 
|  |