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.
5 #include "mojo/public/cpp/bindings/lib/validation_errors.h"
7 #include "mojo/public/cpp/environment/logging.h"
13 ValidationErrorObserverForTesting* g_validation_error_observer = NULL;
17 const char* ValidationErrorToString(ValidationError error) {
19 case VALIDATION_ERROR_NONE:
20 return "VALIDATION_ERROR_NONE";
21 case VALIDATION_ERROR_MISALIGNED_OBJECT:
22 return "VALIDATION_ERROR_MISALIGNED_OBJECT";
23 case VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE:
24 return "VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE";
25 case VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER:
26 return "VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER";
27 case VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER:
28 return "VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER";
29 case VALIDATION_ERROR_ILLEGAL_HANDLE:
30 return "VALIDATION_ERROR_ILLEGAL_HANDLE";
31 case VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE:
32 return "VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE";
33 case VALIDATION_ERROR_ILLEGAL_POINTER:
34 return "VALIDATION_ERROR_ILLEGAL_POINTER";
35 case VALIDATION_ERROR_UNEXPECTED_NULL_POINTER:
36 return "VALIDATION_ERROR_UNEXPECTED_NULL_POINTER";
37 case VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINATION:
38 return "VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINATION";
39 case VALIDATION_ERROR_MESSAGE_HEADER_MISSING_REQUEST_ID:
40 return "VALIDATION_ERROR_MESSAGE_HEADER_MISSING_REQUEST_ID";
43 return "Unknown error";
46 void ReportValidationError(ValidationError error) {
47 if (g_validation_error_observer)
48 g_validation_error_observer->set_last_error(error);
50 MOJO_LOG(ERROR) << "Invalid message: " << ValidationErrorToString(error);
53 ValidationErrorObserverForTesting::ValidationErrorObserverForTesting()
54 : last_error_(VALIDATION_ERROR_NONE) {
55 MOJO_DCHECK(!g_validation_error_observer);
56 g_validation_error_observer = this;
57 MOJO_LOG(WARNING) << "Non-nullable validation is turned on for testing but "
58 << "not for production code yet!";
61 ValidationErrorObserverForTesting::~ValidationErrorObserverForTesting() {
62 MOJO_DCHECK(g_validation_error_observer == this);
63 g_validation_error_observer = NULL;
66 bool IsNonNullableValidationEnabled() {
67 return !!g_validation_error_observer;
70 } // namespace internal