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
14class SkPdfNativeObject;
15class 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.
21enum 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.
33enum 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.
66void 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
75void 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.
83void 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