OLD | NEW |
| (Empty) |
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 <string> | |
8 | |
9 #include "mojo/public/cpp/environment/logging.h" | |
10 | |
11 namespace mojo { | |
12 namespace internal { | |
13 namespace { | |
14 | |
15 ValidationErrorObserverForTesting* g_validation_error_observer = nullptr; | |
16 | |
17 } // namespace | |
18 | |
19 // TODO(vardhan): There are golden files | |
20 // (mojo/public/interfaces/bindings/tests/data/validation/*expected) with these | |
21 // strings shared between languages, so changing them here requires changing | |
22 // them in all languages, along with the golden files. | |
23 const char* ValidationErrorToString(ValidationError error) { | |
24 switch (error) { | |
25 case ValidationError::NONE: | |
26 return "VALIDATION_ERROR_NONE"; | |
27 case ValidationError::MISALIGNED_OBJECT: | |
28 return "VALIDATION_ERROR_MISALIGNED_OBJECT"; | |
29 case ValidationError::ILLEGAL_MEMORY_RANGE: | |
30 return "VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE"; | |
31 case ValidationError::UNEXPECTED_STRUCT_HEADER: | |
32 return "VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER"; | |
33 case ValidationError::UNEXPECTED_ARRAY_HEADER: | |
34 return "VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER"; | |
35 case ValidationError::ILLEGAL_HANDLE: | |
36 return "VALIDATION_ERROR_ILLEGAL_HANDLE"; | |
37 case ValidationError::UNEXPECTED_INVALID_HANDLE: | |
38 return "VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE"; | |
39 case ValidationError::ILLEGAL_POINTER: | |
40 return "VALIDATION_ERROR_ILLEGAL_POINTER"; | |
41 case ValidationError::UNEXPECTED_NULL_POINTER: | |
42 return "VALIDATION_ERROR_UNEXPECTED_NULL_POINTER"; | |
43 case ValidationError::MESSAGE_HEADER_INVALID_FLAGS: | |
44 return "VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAGS"; | |
45 case ValidationError::MESSAGE_HEADER_MISSING_REQUEST_ID: | |
46 return "VALIDATION_ERROR_MESSAGE_HEADER_MISSING_REQUEST_ID"; | |
47 case ValidationError::MESSAGE_HEADER_UNKNOWN_METHOD: | |
48 return "VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD"; | |
49 case ValidationError::DIFFERENT_SIZED_ARRAYS_IN_MAP: | |
50 return "VALIDATION_ERROR_DIFFERENT_SIZED_ARRAYS_IN_MAP"; | |
51 case ValidationError::UNEXPECTED_NULL_UNION: | |
52 return "VALIDATION_ERROR_UNEXPECTED_NULL_UNION"; | |
53 } | |
54 | |
55 return "Unknown error"; | |
56 } | |
57 | |
58 void ReportValidationError(ValidationError error, std::string* description) { | |
59 if (g_validation_error_observer) { | |
60 g_validation_error_observer->set_last_error(error); | |
61 } else if (description) { | |
62 MOJO_LOG(ERROR) << "Invalid message: " << ValidationErrorToString(error) | |
63 << " (" << *description << ")"; | |
64 } else { | |
65 MOJO_LOG(ERROR) << "Invalid message: " << ValidationErrorToString(error); | |
66 } | |
67 } | |
68 | |
69 ValidationErrorObserverForTesting::ValidationErrorObserverForTesting() | |
70 : last_error_(ValidationError::NONE) { | |
71 MOJO_DCHECK(!g_validation_error_observer); | |
72 g_validation_error_observer = this; | |
73 } | |
74 | |
75 ValidationErrorObserverForTesting::~ValidationErrorObserverForTesting() { | |
76 MOJO_DCHECK(g_validation_error_observer == this); | |
77 g_validation_error_observer = nullptr; | |
78 } | |
79 | |
80 ValidationErrorStringStream::ValidationErrorStringStream(std::string* err_msg) | |
81 : err_msg_(err_msg) {} | |
82 | |
83 ValidationErrorStringStream::~ValidationErrorStringStream() { | |
84 if (err_msg_) | |
85 *err_msg_ = stream_.str(); | |
86 } | |
87 | |
88 } // namespace internal | |
89 } // namespace mojo | |
OLD | NEW |