• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)18 const 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)43 void 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()52 ValidationErrorObserverForTesting::ValidationErrorObserverForTesting()
53     : last_error_(VALIDATION_ERROR_NONE) {
54   assert(!g_validation_error_observer);
55   g_validation_error_observer = this;
56 }
57 
~ValidationErrorObserverForTesting()58 ValidationErrorObserverForTesting::~ValidationErrorObserverForTesting() {
59   assert(g_validation_error_observer == this);
60   g_validation_error_observer = NULL;
61 }
62 
63 }  // namespace internal
64 }  // namespace mojo
65