2 * Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file.
8 * Error codes and data structures used to report errors when loading a nexe.
11 #ifndef NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_PLUGIN_ERROR_H
12 #define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_PLUGIN_ERROR_H
16 #include "native_client/src/include/nacl_macros.h"
20 // These error codes are reported via UMA so, if you edit them:
21 // 1) make sure you understand UMA, first.
22 // 2) update src/tools/histograms/histograms.xml in
23 // svn://svn.chromium.org/chrome-internal/trunk/src-internal
24 // Values are explicitly specified to make sure they don't shift around when
25 // edited, and also to make reading about:histograms easier.
26 enum PluginErrorCode
{
27 ERROR_LOAD_SUCCESS
= 0,
28 ERROR_LOAD_ABORTED
= 1,
30 ERROR_MANIFEST_RESOLVE_URL
= 3,
31 ERROR_MANIFEST_LOAD_URL
= 4,
32 ERROR_MANIFEST_STAT
= 5,
33 ERROR_MANIFEST_TOO_LARGE
= 6,
34 ERROR_MANIFEST_OPEN
= 7,
35 ERROR_MANIFEST_MEMORY_ALLOC
= 8,
36 ERROR_MANIFEST_READ
= 9,
37 ERROR_MANIFEST_PARSING
= 10,
38 ERROR_MANIFEST_SCHEMA_VALIDATE
= 11,
39 ERROR_MANIFEST_GET_NEXE_URL
= 12,
40 ERROR_NEXE_LOAD_URL
= 13,
41 ERROR_NEXE_ORIGIN_PROTOCOL
= 14,
42 ERROR_NEXE_FH_DUP
= 15,
44 ERROR_ELF_CHECK_IO
= 17,
45 ERROR_ELF_CHECK_FAIL
= 18,
46 ERROR_SEL_LDR_INIT
= 19,
47 ERROR_SEL_LDR_CREATE_LAUNCHER
= 20,
48 ERROR_SEL_LDR_FD
= 21,
49 ERROR_SEL_LDR_LAUNCH
= 22,
50 // Deprecated, safe to reuse the # because never logged in UMA.
51 // ERROR_SEL_LDR_COMMUNICATION = 23,
52 ERROR_SEL_LDR_SEND_NEXE
= 24,
53 ERROR_SEL_LDR_HANDLE_PASSING
= 25,
54 ERROR_SEL_LDR_START_MODULE
= 26,
55 ERROR_SEL_LDR_START_STATUS
= 27,
56 ERROR_SRPC_CONNECTION_FAIL
= 28,
57 ERROR_START_PROXY_CHECK_PPP
= 29,
58 ERROR_START_PROXY_ALLOC
= 30,
59 ERROR_START_PROXY_MODULE
= 31,
60 ERROR_START_PROXY_INSTANCE
= 32,
61 ERROR_SEL_LDR_COMMUNICATION_CMD_CHANNEL
= 33,
62 ERROR_SEL_LDR_COMMUNICATION_REV_SETUP
= 34,
63 ERROR_SEL_LDR_COMMUNICATION_WRAPPER
= 35,
64 ERROR_SEL_LDR_COMMUNICATION_REV_SERVICE
= 36,
65 ERROR_START_PROXY_CRASH
= 37,
66 ERROR_MANIFEST_PROGRAM_MISSING_ARCH
= 38,
67 ERROR_PNACL_CACHE_OPEN_INPROGRESS
= 39,
68 ERROR_PNACL_CACHE_OPEN_NOACCESS
= 40,
69 ERROR_PNACL_CACHE_OPEN_NOQUOTA
= 41,
70 ERROR_PNACL_CACHE_OPEN_NOSPACE
= 42,
71 ERROR_PNACL_CACHE_OPEN_OTHER
= 43,
72 ERROR_PNACL_CACHE_DIRECTORY_CREATE
= 44,
73 ERROR_PNACL_CACHE_FILEOPEN_NOACCESS
= 45,
74 ERROR_PNACL_CACHE_FILEOPEN_NOQUOTA
= 46,
75 ERROR_PNACL_CACHE_FILEOPEN_NOSPACE
= 47,
76 ERROR_PNACL_CACHE_FILEOPEN_NOTAFILE
= 48,
77 ERROR_PNACL_CACHE_FILEOPEN_OTHER
= 49,
78 ERROR_PNACL_CACHE_FETCH_NOACCESS
= 50,
79 ERROR_PNACL_CACHE_FETCH_NOTFOUND
= 51,
80 ERROR_PNACL_CACHE_FETCH_OTHER
= 52,
81 ERROR_PNACL_CACHE_FINALIZE_COPY_NOQUOTA
= 53,
82 ERROR_PNACL_CACHE_FINALIZE_COPY_NOSPACE
= 54,
83 ERROR_PNACL_CACHE_FINALIZE_COPY_OTHER
= 55,
84 ERROR_PNACL_CACHE_FINALIZE_RENAME_NOACCESS
= 56,
85 ERROR_PNACL_CACHE_FINALIZE_RENAME_OTHER
= 57,
86 ERROR_PNACL_RESOURCE_FETCH
= 58,
87 ERROR_PNACL_PEXE_FETCH_ABORTED
= 59,
88 ERROR_PNACL_PEXE_FETCH_NOACCESS
= 60,
89 ERROR_PNACL_PEXE_FETCH_OTHER
= 61,
90 ERROR_PNACL_THREAD_CREATE
= 62,
91 ERROR_PNACL_LLC_SETUP
= 63,
92 ERROR_PNACL_LD_SETUP
= 64,
93 ERROR_PNACL_LLC_INTERNAL
= 65,
94 ERROR_PNACL_LD_INTERNAL
= 66,
95 ERROR_PNACL_CREATE_TEMP
= 67,
96 // This entry is no longer used, but should not be removed, because UMA
97 // numbers need to be kept consistent.
98 ERROR_PNACL_NOT_ENABLED
= 68,
99 ERROR_MANIFEST_NOACCESS_URL
= 69,
100 ERROR_NEXE_NOACCESS_URL
= 70,
101 ERROR_PNACL_CRASH_THROTTLED
= 71,
102 // If you add a code, read the enum comment above on how to update histograms.
113 SetReport(ERROR_UNKNOWN
, std::string());
116 void SetReport(PluginErrorCode error_code
, const std::string
& message
) {
117 error_code_
= error_code
;
119 console_message_
= message
;
122 // console_message is a part of the error that is logged to
123 // the JavaScript console but is not reported to JavaScript via
124 // the lastError property. This is used to report internal errors which
125 // may easily change in new versions of the browser and we don't want apps
126 // to come to depend on the details of these errors.
127 void SetReportWithConsoleOnlyError(PluginErrorCode error_code
,
128 const std::string
& message
,
129 const std::string
& console_message
) {
130 error_code_
= error_code
;
132 console_message_
= message
+ "; " + console_message
;
135 PluginErrorCode
error_code() const {
139 void PrependMessage(const std::string
& prefix
) {
140 message_
= prefix
+ message_
;
141 console_message_
= prefix
+ console_message_
;
144 const std::string
& message() const {
148 const std::string
& console_message() const {
149 return console_message_
;
153 PluginErrorCode error_code_
;
154 std::string message_
;
155 std::string console_message_
;
156 NACL_DISALLOW_COPY_AND_ASSIGN(ErrorInfo
);
159 } // namespace plugin
161 #endif // NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_PLUGIN_ERROR_H