1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "mojo/public/cpp/bindings/lib/validation_errors.h" 6 7 #include <assert.h> 8 #include <stdio.h> 9 10 namespace mojo { 11 namespace internal { 12 namespace { 13 14 ValidationErrorObserverForTesting* g_validation_error_observer = NULL; 15 16 } // namespace 17 ValidationErrorToString(ValidationError error)18const char* ValidationErrorToString(ValidationError error) { 19 switch (error) { 20 case VALIDATION_ERROR_NONE: 21 return "VALIDATION_ERROR_NONE"; 22 case VALIDATION_ERROR_MISALIGNED_OBJECT: 23 return "VALIDATION_ERROR_MISALIGNED_OBJECT"; 24 case VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE: 25 return "VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE"; 26 case VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER: 27 return "VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER"; 28 case VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER: 29 return "VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER"; 30 case VALIDATION_ERROR_ILLEGAL_HANDLE: 31 return "VALIDATION_ERROR_ILLEGAL_HANDLE"; 32 case VALIDATION_ERROR_ILLEGAL_POINTER: 33 return "VALIDATION_ERROR_ILLEGAL_POINTER"; 34 case VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINATION: 35 return "VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINATION"; 36 case VALIDATION_ERROR_MESSAGE_HEADER_MISSING_REQUEST_ID: 37 return "VALIDATION_ERROR_MESSAGE_HEADER_MISSING_REQUEST_ID"; 38 } 39 40 return "Unknown error"; 41 } 42 ReportValidationError(ValidationError error)43void ReportValidationError(ValidationError error) { 44 if (g_validation_error_observer) { 45 g_validation_error_observer->set_last_error(error); 46 } else { 47 // TODO(yzshen): Consider adding better logging support. 48 fprintf(stderr, "Invalid message: %s\n", ValidationErrorToString(error)); 49 } 50 } 51 ValidationErrorObserverForTesting()52ValidationErrorObserverForTesting::ValidationErrorObserverForTesting() 53 : last_error_(VALIDATION_ERROR_NONE) { 54 assert(!g_validation_error_observer); 55 g_validation_error_observer = this; 56 } 57 ~ValidationErrorObserverForTesting()58ValidationErrorObserverForTesting::~ValidationErrorObserverForTesting() { 59 assert(g_validation_error_observer == this); 60 g_validation_error_observer = NULL; 61 } 62 63 } // namespace internal 64 } // namespace mojo 65