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, |
(...skipping 13 matching lines...) Expand all Loading... |
24 #include "util/mach/exc_server_variants.h" | 24 #include "util/mach/exc_server_variants.h" |
25 #include "util/mach/exception_behaviors.h" | 25 #include "util/mach/exception_behaviors.h" |
26 #include "util/mach/mach_extensions.h" | 26 #include "util/mach/mach_extensions.h" |
27 #include "util/test/mac/mach_errors.h" | 27 #include "util/test/mac/mach_errors.h" |
28 #include "util/test/mac/mach_multiprocess.h" | 28 #include "util/test/mac/mach_multiprocess.h" |
29 | 29 |
30 namespace crashpad { | 30 namespace crashpad { |
31 namespace test { | 31 namespace test { |
32 namespace { | 32 namespace { |
33 | 33 |
34 class TestExcClientVariants : public UniversalMachExcServer, | 34 class TestExcClientVariants : public MachMultiprocess, |
35 public MachMultiprocess { | 35 public UniversalMachExcServer::Interface { |
36 public: | 36 public: |
37 TestExcClientVariants(exception_behavior_t behavior, bool all_fields) | 37 TestExcClientVariants(exception_behavior_t behavior, bool all_fields) |
38 : UniversalMachExcServer(), | 38 : MachMultiprocess(), |
39 MachMultiprocess(), | 39 UniversalMachExcServer::Interface(), |
40 behavior_(behavior), | 40 behavior_(behavior), |
41 all_fields_(all_fields), | 41 all_fields_(all_fields), |
42 handled_(false) { | 42 handled_(false) { |
43 ++exception_; | 43 ++exception_; |
44 ++exception_code_; | 44 ++exception_code_; |
45 ++exception_subcode_; | 45 ++exception_subcode_; |
46 } | 46 } |
47 | 47 |
48 // UniversalMachExcServer: | 48 // UniversalMachExcServer::Interface: |
49 | 49 |
50 virtual kern_return_t CatchMachException( | 50 virtual kern_return_t CatchMachException( |
51 exception_behavior_t behavior, | 51 exception_behavior_t behavior, |
52 exception_handler_t exception_port, | 52 exception_handler_t exception_port, |
53 thread_t thread, | 53 thread_t thread, |
54 task_t task, | 54 task_t task, |
55 exception_type_t exception, | 55 exception_type_t exception, |
56 const mach_exception_data_type_t* code, | 56 const mach_exception_data_type_t* code, |
57 mach_msg_type_number_t code_count, | 57 mach_msg_type_number_t code_count, |
58 thread_state_flavor_t* flavor, | 58 thread_state_flavor_t* flavor, |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 EXPECT_EQ(nullptr, new_state); | 128 EXPECT_EQ(nullptr, new_state); |
129 } | 129 } |
130 | 130 |
131 return KERN_SUCCESS; | 131 return KERN_SUCCESS; |
132 } | 132 } |
133 | 133 |
134 private: | 134 private: |
135 // MachMultiprocess: | 135 // MachMultiprocess: |
136 | 136 |
137 void MachMultiprocessParent() override { | 137 void MachMultiprocessParent() override { |
| 138 UniversalMachExcServer universal_mach_exc_server(this); |
| 139 |
138 kern_return_t kr = | 140 kern_return_t kr = |
139 MachMessageServer::Run(this, | 141 MachMessageServer::Run(&universal_mach_exc_server, |
140 LocalPort(), | 142 LocalPort(), |
141 MACH_MSG_OPTION_NONE, | 143 MACH_MSG_OPTION_NONE, |
142 MachMessageServer::kOneShot, | 144 MachMessageServer::kOneShot, |
143 MachMessageServer::kBlocking, | 145 MachMessageServer::kBlocking, |
144 MachMessageServer::kReceiveLargeError, | 146 MachMessageServer::kReceiveLargeError, |
145 0); | 147 0); |
146 EXPECT_EQ(KERN_SUCCESS, kr) | 148 EXPECT_EQ(KERN_SUCCESS, kr) |
147 << MachErrorMessage(kr, "MachMessageServer::Run"); | 149 << MachErrorMessage(kr, "MachMessageServer::Run"); |
148 | 150 |
149 EXPECT_TRUE(handled_); | 151 EXPECT_TRUE(handled_); |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 | 286 |
285 TestExcClientVariants test_exc_client_variants(behavior, true); | 287 TestExcClientVariants test_exc_client_variants(behavior, true); |
286 test_exc_client_variants.Run(); | 288 test_exc_client_variants.Run(); |
287 } | 289 } |
288 } | 290 } |
289 } | 291 } |
290 | 292 |
291 } // namespace | 293 } // namespace |
292 } // namespace test | 294 } // namespace test |
293 } // namespace crashpad | 295 } // namespace crashpad |
OLD | NEW |