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