Index: mojo/public/cpp/bindings/lib/validation_errors.h |
diff --git a/mojo/public/cpp/bindings/lib/validation_errors.h b/mojo/public/cpp/bindings/lib/validation_errors.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d0b7438087be1f1390baa396d26ff7ee92f7e55c |
--- /dev/null |
+++ b/mojo/public/cpp/bindings/lib/validation_errors.h |
@@ -0,0 +1,66 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATION_ERRORS_H_ |
+#define MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATION_ERRORS_H_ |
+ |
+#include "mojo/public/cpp/system/macros.h" |
+ |
+namespace mojo { |
+namespace internal { |
+ |
+enum ValidationError { |
+ // There is no validation error. |
+ VALIDATION_ERROR_NONE, |
+ // An object (struct or array) is not 8-byte aligned. |
+ VALIDATION_ERROR_MISALIGNED_OBJECT, |
+ // An object is not contained inside the message data, or it overlaps other |
+ // objects. |
+ VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE, |
+ // A struct header doesn't make sense, for example: |
+ // - |num_bytes| is smaller than the size of the oldest version that we |
+ // support. |
+ // - |num_fields| is smaller than the field number of the oldest version that |
+ // we support. |
+ // - |num_bytes| and |num_fields| don't match. |
+ VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER, |
+ // An array header doesn't make sense, for example: |
+ // - |num_bytes| is smaller than the size of the header plus the size required |
+ // to store |num_elements| elements. |
+ VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER, |
+ // An encoded handle is illegal. |
+ VALIDATION_ERROR_ILLEGAL_HANDLE, |
+ // An encoded pointer is illegal. |
+ VALIDATION_ERROR_ILLEGAL_POINTER, |
+ // |flags| in the message header is an invalid flag combination. |
+ VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINAION, |
+ // |flags| in the message header indicates that a request ID is required but |
+ // there isn't one. |
+ VALIDATION_ERROR_MESSAGE_HEADER_MISSING_REQUEST_ID, |
+}; |
+ |
+const char* ValidationErrorToString(ValidationError error); |
+ |
+void ReportValidationError(ValidationError error); |
+ |
+// Only used by validation tests and when there is only one thread doing message |
+// validation. |
+class ValidationErrorObserverForTesting { |
+ public: |
+ ValidationErrorObserverForTesting(); |
+ ~ValidationErrorObserverForTesting(); |
+ |
+ ValidationError last_error() const { return last_error_; } |
+ void set_last_error(ValidationError error) { last_error_ = error; } |
+ |
+ private: |
+ ValidationError last_error_; |
+ |
+ MOJO_DISALLOW_COPY_AND_ASSIGN(ValidationErrorObserverForTesting); |
+}; |
+ |
+} // namespace internal |
+} // namespace mojo |
+ |
+#endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATION_ERRORS_H_ |