• 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 #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 
10 namespace mojo {
11 namespace internal {
12 
13 enum 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_COMBINATION,
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 
43 const char* ValidationErrorToString(ValidationError error);
44 
45 void ReportValidationError(ValidationError error);
46 
47 // Only used by validation tests and when there is only one thread doing message
48 // validation.
49 class ValidationErrorObserverForTesting {
50  public:
51   ValidationErrorObserverForTesting();
52   ~ValidationErrorObserverForTesting();
53 
last_error()54   ValidationError last_error() const { return last_error_; }
set_last_error(ValidationError 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