validation_errors.h revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
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#ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATION_ERRORS_H_
6#define MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATION_ERRORS_H_
7
8#include "mojo/public/cpp/system/macros.h"
9
10namespace mojo {
11namespace internal {
12
13enum ValidationError {
14  // There is no validation error.
15  VALIDATION_ERROR_NONE,
16  // An object (struct or array) is not 8-byte aligned.
17  VALIDATION_ERROR_MISALIGNED_OBJECT,
18  // An object is not contained inside the message data, or it overlaps other
19  // objects.
20  VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE,
21  // A struct header doesn't make sense, for example:
22  // - |num_bytes| is smaller than the size of the oldest version that we
23  // support.
24  // - |num_fields| is smaller than the field number of the oldest version that
25  // we support.
26  // - |num_bytes| and |num_fields| don't match.
27  VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER,
28  // An array header doesn't make sense, for example:
29  // - |num_bytes| is smaller than the size of the header plus the size required
30  // to store |num_elements| elements.
31  VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER,
32  // An encoded handle is illegal.
33  VALIDATION_ERROR_ILLEGAL_HANDLE,
34  // An encoded pointer is illegal.
35  VALIDATION_ERROR_ILLEGAL_POINTER,
36  // |flags| in the message header is an invalid flag combination.
37  VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINAION,
38  // |flags| in the message header indicates that a request ID is required but
39  // there isn't one.
40  VALIDATION_ERROR_MESSAGE_HEADER_MISSING_REQUEST_ID,
41};
42
43const char* ValidationErrorToString(ValidationError error);
44
45void ReportValidationError(ValidationError error);
46
47// Only used by validation tests and when there is only one thread doing message
48// validation.
49class ValidationErrorObserverForTesting {
50 public:
51  ValidationErrorObserverForTesting();
52  ~ValidationErrorObserverForTesting();
53
54  ValidationError last_error() const { return last_error_; }
55  void set_last_error(ValidationError error) { last_error_ = error; }
56
57 private:
58  ValidationError last_error_;
59
60  MOJO_DISALLOW_COPY_AND_ASSIGN(ValidationErrorObserverForTesting);
61};
62
63}  // namespace internal
64}  // namespace mojo
65
66#endif  // MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATION_ERRORS_H_
67