Home | History | Annotate | Download | only in PdfViewer
      1 /*
      2  * Copyright 2013 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 
      9 #ifndef SkPdfReporter_DEFINED
     10 #define SkPdfReporter_DEFINED
     11 
     12 #include "SkPdfConfig.h"
     13 
     14 class SkPdfNativeObject;
     15 class SkPdfContext;
     16 
     17 // TODO(edisonn): ability to turn on asserts for known good files
     18 
     19 // Severity of the issue, if it something interesting info, the result of an NYI feature,
     20 // sme ignorable defect in pdf or a major issue.
     21 enum SkPdfIssueSeverity {
     22     kInfo_SkPdfIssueSeverity,
     23     kCodeWarning_SkPdfIssueSeverity, // e.g. like NYI, PDF file is Ok.
     24     kWarning_SkPdfIssueSeverity,
     25     kIgnoreError_SkPdfIssueSeverity,
     26     kError_SkPdfIssueSeverity,
     27     kFatalError_SkPdfIssueSeverity,
     28 
     29     _kCount__SkPdfIssueSeverity
     30 };
     31 
     32 // The type of the issue.
     33 enum SkPdfIssue {
     34     kNoIssue_SkPdfIssue,
     35 
     36     kNullObject_SkPdfIssue,
     37     kUnusedObject_SkPdfIssue,
     38     kUnexpectedArraySize_SkPdfIssue,
     39     kMissingEncoding_SkPdfIssue,
     40     kNYI_SkPdfIssue,
     41     kIncostistentSizes_SkPdfIssue,
     42     kMissingRequiredKey_SkPdfIssue,
     43     kRecursiveReferencing_SkPdfIssue,
     44     kStackNestingOverflow_SkPdfIssue,
     45     kStackOverflow_SkPdfIssue,
     46     kIncositentSyntax_SkPdfIssue,
     47     kMissingFont_SkPdfIssue,
     48     kInvalidFont_SkPdfIssue,
     49     kMissingBT_SkPdfIssue,
     50     kOutOfRange_SkPdfIssue,
     51     kUnknownBlendMode_SkPdfIssue,
     52     kMissingExtGState_SkPdfIssue,
     53     kMissingXObject_SkPdfIssue,
     54     kReadStreamError_SkPdfIssue,
     55     kMissingToken_SkPdfIssue,
     56     kBadReference_SkPdfIssue,
     57     kNoFlateLibrary_SkPdfIssue,
     58     kBadStream_SkPdfIssue,
     59 
     60     _kCount__SkPdfIssue
     61 };
     62 
     63 #ifdef PDF_REPORT
     64 
     65 // Calls SkPdfReport(...) if report is true.
     66 void SkPdfReportIf(bool report,
     67                    SkPdfIssueSeverity sev, SkPdfIssue issue,
     68                    const char* context,
     69                    const SkPdfNativeObject* obj,
     70                    SkPdfContext* pdfContext);
     71 
     72 // Reports an issue, along with information where it happened, for example obj can be used to report
     73 // where exactly in th pdf there is a corruption
     74 // TODO(edisonn): add ability to report the callstack
     75 void SkPdfReport(SkPdfIssueSeverity sev, SkPdfIssue issue,
     76                  const char* context,
     77                  const SkPdfNativeObject* obj,
     78                  SkPdfContext* pdfContext);
     79 
     80 // Reports that an object does not have the expected type
     81 // TODO(edisonn): replace with SkPdfReportIfUnexpectedType() to simplify the callers?
     82 // TODO(edisonn): pass the keyword/operator too which triggers the issue.
     83 void SkPdfReportUnexpectedType(SkPdfIssueSeverity sev,
     84                                const char* context,
     85                                const SkPdfNativeObject* obj, int anyOfTypes,
     86                                SkPdfContext* pdfContext);
     87 
     88 // Code only in builds with reporting turn on.
     89 #define SkPdfREPORTCODE(code) code
     90 
     91 #else  // !PDF_REPORT
     92 
     93 #define SkPdfReportIf(a,b,c,d,e,f)
     94 #define SkPdfReport(a,b,c,d,e)
     95 #define SkPdfReportUnexpectedType(a,b,c,d,e)
     96 #define SkPdfREPORTCODE(code)
     97 
     98 #endif  // PDF_REPORT
     99 
    100 #endif   // SkPdfReporter_DEFINED
    101