Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / mojo / public / cpp / bindings / lib / validation_errors.cc
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 "mojo/public/cpp/environment/logging.h"
8
9 namespace mojo {
10 namespace internal {
11 namespace {
12
13 ValidationErrorObserverForTesting* g_validation_error_observer = NULL;
14
15 }  // namespace
16
17 const char* ValidationErrorToString(ValidationError error) {
18   switch (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";
41   }
42
43   return "Unknown error";
44 }
45
46 void ReportValidationError(ValidationError error) {
47   if (g_validation_error_observer)
48     g_validation_error_observer->set_last_error(error);
49   else
50     MOJO_LOG(ERROR) << "Invalid message: " << ValidationErrorToString(error);
51 }
52
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!";
59 }
60
61 ValidationErrorObserverForTesting::~ValidationErrorObserverForTesting() {
62   MOJO_DCHECK(g_validation_error_observer == this);
63   g_validation_error_observer = NULL;
64 }
65
66 bool IsNonNullableValidationEnabled() {
67   return !!g_validation_error_observer;
68 }
69
70 }  // namespace internal
71 }  // namespace mojo