| OLD | NEW |
| 1 // Copyright 2014 The Crashpad Authors. All rights reserved. | 1 // Copyright 2014 The Crashpad Authors. All rights reserved. |
| 2 // | 2 // |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
| 5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
| 6 // | 6 // |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 // | 8 // |
| 9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
| 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 // See the License for the specific language governing permissions and | 12 // See the License for the specific language governing permissions and |
| 13 // limitations under the License. | 13 // limitations under the License. |
| 14 | 14 |
| 15 #ifndef CRASHPAD_CLIENT_CRASHPAD_INFO_H_ | 15 #ifndef CRASHPAD_CLIENT_CRASHPAD_INFO_H_ |
| 16 #define CRASHPAD_CLIENT_CRASHPAD_INFO_H_ | 16 #define CRASHPAD_CLIENT_CRASHPAD_INFO_H_ |
| 17 | 17 |
| 18 #include "base/basictypes.h" | 18 #include "base/basictypes.h" |
| 19 | 19 |
| 20 #include <stdint.h> | 20 #include <stdint.h> |
| 21 | 21 |
| 22 #include "client/simple_string_dictionary.h" | 22 #include "client/simple_string_dictionary.h" |
| 23 #include "util/misc/tri_state.h" |
| 23 | 24 |
| 24 namespace crashpad { | 25 namespace crashpad { |
| 25 | 26 |
| 26 //! \brief A structure that can be used by a Crashpad-enabled program to | 27 //! \brief A structure that can be used by a Crashpad-enabled program to |
| 27 //! provide information to the Crashpad crash handler. | 28 //! provide information to the Crashpad crash handler. |
| 28 //! | 29 //! |
| 29 //! It is possible for one CrashpadInfo structure to appear in each loaded code | 30 //! It is possible for one CrashpadInfo structure to appear in each loaded code |
| 30 //! module in a process, but from the perspective of the user of the client | 31 //! module in a process, but from the perspective of the user of the client |
| 31 //! interface, there is only one global CrashpadInfo structure, located in the | 32 //! interface, there is only one global CrashpadInfo structure, located in the |
| 32 //! module that contains the client interface code. | 33 //! module that contains the client interface code. |
| 33 struct CrashpadInfo { | 34 struct CrashpadInfo { |
| 34 public: | 35 public: |
| 35 //! \brief Returns the global CrashpadInfo structure. | 36 //! \brief Returns the global CrashpadInfo structure. |
| 36 static CrashpadInfo* GetCrashpadInfo(); | 37 static CrashpadInfo* GetCrashpadInfo(); |
| 37 | 38 |
| 38 CrashpadInfo(); | 39 CrashpadInfo(); |
| 39 | 40 |
| 40 void set_simple_annotations(SimpleStringDictionary* simple_annotations) { | 41 void set_simple_annotations(SimpleStringDictionary* simple_annotations) { |
| 41 simple_annotations_ = simple_annotations; | 42 simple_annotations_ = simple_annotations; |
| 42 } | 43 } |
| 43 | 44 |
| 45 //! \brief Enables or disables Crashpad handler processing. |
| 46 //! |
| 47 //! When handling an exception, the Crashpad handler will scan all modules in |
| 48 //! a process. The first one that has a CrashpadInfo structure populated with |
| 49 //! a value other than #kUnset for this field will dictate whether the handler |
| 50 //! is functional or not. If all modules with a CrashpadInfo structure specify |
| 51 //! #kUnset, the handler will be enabled. If disabled, the Crashpad handler |
| 52 //! will still run and receive exceptions, but will not take any action on an |
| 53 //! exception on its own behalf, except for the action necessary to determine |
| 54 //! that it has been disabled. |
| 55 //! |
| 56 //! The Crashpad handler should not normally be disabled. More commonly, it |
| 57 //! is appropraite to disable crash report upload by calling |
| 58 //! Settings::SetUploadsEnabled(). |
| 59 void set_crashpad_handler_behavior(TriState crashpad_handler_behavior) { |
| 60 crashpad_handler_behavior_ = crashpad_handler_behavior; |
| 61 } |
| 62 |
| 63 //! \brief Enables or disables Crashpad forwarding of exceptions to the |
| 64 //! system’s crash reporter. |
| 65 //! |
| 66 //! When handling an exception, the Crashpad handler will scan all modules in |
| 67 //! a process. The first one that has a CrashpadInfo structure populated with |
| 68 //! a value other than #kUnset for this field will dictate whether the |
| 69 //! exception is forwarded to the system’s crash reporter. If all modules with |
| 70 //! a CrashpadInfo structure specify #kUnset, forwarding will be enabled. |
| 71 //! Unless disabled, forwarding may still occur if the Crashpad handler is |
| 72 //! disabled by SetCrashpadHandlerState(). Even when forwarding is enabled, |
| 73 //! the Crashpad handler may choose not to forward all exceptions to the |
| 74 //! system’s crash reporter in cases where it has reason to believe that the |
| 75 //! system’s crash reporter would not normally have handled the exception in |
| 76 //! Crashpad’s absence. |
| 77 void set_system_crash_reporter_forwarding( |
| 78 TriState system_crash_reporter_forwarding) { |
| 79 system_crash_reporter_forwarding_ = system_crash_reporter_forwarding; |
| 80 } |
| 81 |
| 44 static const uint32_t kSignature = 'CPad'; | 82 static const uint32_t kSignature = 'CPad'; |
| 45 | 83 |
| 46 private: | 84 private: |
| 47 // The compiler won’t necessarily see anyone using these fields, but it | 85 // The compiler won’t necessarily see anyone using these fields, but it |
| 48 // shouldn’t warn about that. These fields aren’t intended for use by the | 86 // shouldn’t warn about that. These fields aren’t intended for use by the |
| 49 // process they’re found in, they’re supposed to be read by the crash | 87 // process they’re found in, they’re supposed to be read by the crash |
| 50 // reporting process. | 88 // reporting process. |
| 51 #if defined(__clang__) | 89 #if defined(__clang__) |
| 52 #pragma clang diagnostic push | 90 #pragma clang diagnostic push |
| 53 #pragma clang diagnostic ignored "-Wunused-private-field" | 91 #pragma clang diagnostic ignored "-Wunused-private-field" |
| 54 #endif | 92 #endif |
| 55 | 93 |
| 56 // Fields present in version 1: | 94 // Fields present in version 1: |
| 57 uint32_t signature_; // kSignature | 95 uint32_t signature_; // kSignature |
| 58 uint32_t size_; // The size of the entire CrashpadInfo structure. | 96 uint32_t size_; // The size of the entire CrashpadInfo structure. |
| 59 uint32_t version_; // kVersion | 97 uint32_t version_; // kVersion |
| 60 uint32_t padding_0_; | 98 TriState crashpad_handler_behavior_; |
| 99 TriState system_crash_reporter_forwarding_; |
| 100 uint16_t padding_0_; |
| 61 SimpleStringDictionary* simple_annotations_; // weak | 101 SimpleStringDictionary* simple_annotations_; // weak |
| 62 | 102 |
| 63 #if defined(__clang__) | 103 #if defined(__clang__) |
| 64 #pragma clang diagnostic pop | 104 #pragma clang diagnostic pop |
| 65 #endif | 105 #endif |
| 66 | 106 |
| 67 DISALLOW_COPY_AND_ASSIGN(CrashpadInfo); | 107 DISALLOW_COPY_AND_ASSIGN(CrashpadInfo); |
| 68 }; | 108 }; |
| 69 | 109 |
| 70 } // namespace crashpad | 110 } // namespace crashpad |
| 71 | 111 |
| 72 #endif // CRASHPAD_CLIENT_CRASHPAD_INFO_H_ | 112 #endif // CRASHPAD_CLIENT_CRASHPAD_INFO_H_ |
| OLD | NEW |