1 : //
2 : // Automatically generated by ipdlc.
3 : // Edit at your own risk
4 : //
5 :
6 :
7 : #include "mozilla/dom/PCrashReporterParent.h"
8 :
9 : #include "mozilla/dom/PContentParent.h"
10 : #include "mozilla/plugins/PPluginModuleParent.h"
11 :
12 : typedef IPC::Message Message;
13 : typedef mozilla::ipc::RPCChannel Channel;
14 : typedef mozilla::ipc::RPCChannel::RPCListener ChannelListener;
15 : typedef base::ProcessHandle ProcessHandle;
16 : typedef mozilla::ipc::AsyncChannel AsyncChannel;
17 : typedef mozilla::ipc::SharedMemory SharedMemory;
18 : typedef mozilla::ipc::Trigger Trigger;
19 : typedef mozilla::ipc::ActorHandle ActorHandle;
20 : typedef mozilla::dom::Mapping Mapping;
21 : typedef mozilla::ipc::Shmem Shmem;
22 : using mozilla::dom::PContentParent;
23 : using mozilla::plugins::PPluginModuleParent;
24 :
25 : namespace mozilla {
26 : namespace dom {
27 :
28 :
29 : bool
30 0 : PCrashReporterParent::Recv__delete__()
31 : {
32 0 : return true;
33 : }
34 :
35 : void
36 0 : PCrashReporterParent::ActorDestroy(ActorDestroyReason why)
37 : {
38 0 : }
39 :
40 0 : PCrashReporterParent::PCrashReporterParent() :
41 : mId(0),
42 0 : mState(PCrashReporter::__Dead)
43 : {
44 0 : MOZ_COUNT_CTOR(PCrashReporterParent);
45 0 : }
46 :
47 0 : PCrashReporterParent::~PCrashReporterParent()
48 : {
49 0 : MOZ_COUNT_DTOR(PCrashReporterParent);
50 0 : }
51 :
52 : PCrashReporter::State
53 0 : PCrashReporterParent::state()
54 : {
55 0 : return mState;
56 : }
57 :
58 : int32
59 0 : PCrashReporterParent::Register(ChannelListener* aRouted)
60 : {
61 0 : return (mManager)->Register(aRouted);
62 : }
63 :
64 : int32
65 0 : PCrashReporterParent::RegisterID(
66 : ChannelListener* aRouted,
67 : int32 aId)
68 : {
69 0 : return (mManager)->RegisterID(aRouted, aId);
70 : }
71 :
72 : ChannelListener*
73 0 : PCrashReporterParent::Lookup(int32 aId)
74 : {
75 0 : return (mManager)->Lookup(aId);
76 : }
77 :
78 : void
79 0 : PCrashReporterParent::Unregister(int32 aId)
80 : {
81 0 : return (mManager)->Unregister(aId);
82 : }
83 :
84 : void
85 0 : PCrashReporterParent::RemoveManagee(
86 : int32 aProtocolId,
87 : ChannelListener* aListener)
88 : {
89 0 : NS_RUNTIMEABORT("unreached");
90 : return;
91 : }
92 :
93 : Shmem::SharedMemory*
94 0 : PCrashReporterParent::CreateSharedMemory(
95 : size_t aSize,
96 : Shmem::SharedMemory::SharedMemoryType type,
97 : bool unsafe,
98 : Shmem::id_t* aId)
99 : {
100 0 : return (mManager)->CreateSharedMemory(aSize, type, unsafe, aId);
101 : }
102 :
103 : bool
104 0 : PCrashReporterParent::AdoptSharedMemory(
105 : Shmem::SharedMemory* segment,
106 : Shmem::id_t* aId)
107 : {
108 0 : return (mManager)->AdoptSharedMemory(segment, aId);
109 : }
110 :
111 : Shmem::SharedMemory*
112 0 : PCrashReporterParent::LookupSharedMemory(Shmem::id_t aId)
113 : {
114 0 : return (mManager)->LookupSharedMemory(aId);
115 : }
116 :
117 : bool
118 0 : PCrashReporterParent::IsTrackingSharedMemory(Shmem::SharedMemory* segment)
119 : {
120 0 : return (mManager)->IsTrackingSharedMemory(segment);
121 : }
122 :
123 : bool
124 0 : PCrashReporterParent::DestroySharedMemory(Shmem& aShmem)
125 : {
126 0 : return (mManager)->DestroySharedMemory(aShmem);
127 : }
128 :
129 : ProcessHandle
130 0 : PCrashReporterParent::OtherProcess() const
131 : {
132 0 : return (mManager)->OtherProcess();
133 : }
134 :
135 : AsyncChannel*
136 0 : PCrashReporterParent::GetIPCChannel()
137 : {
138 0 : return mChannel;
139 : }
140 :
141 : PCrashReporterParent::Result
142 0 : PCrashReporterParent::OnMessageReceived(const Message& __msg)
143 : {
144 0 : switch ((__msg).type()) {
145 : case PCrashReporter::Msg_AddLibraryMappings__ID:
146 : {
147 0 : (const_cast<Message&>(__msg)).set_name("PCrashReporter::Msg_AddLibraryMappings");
148 0 : if (mozilla::ipc::LoggingEnabled()) {
149 0 : (static_cast<const PCrashReporter::Msg_AddLibraryMappings*>((&(__msg))))->Log("[PCrashReporterParent] Received ", stderr);
150 : }
151 :
152 0 : void* __iter = 0;
153 0 : InfallibleTArray<Mapping> m;
154 :
155 0 : if ((!(Read((&(m)), (&(__msg)), (&(__iter)))))) {
156 0 : FatalError("error deserializing (better message TODO)");
157 0 : return MsgValueError;
158 : }
159 0 : (__msg).EndRead(__iter);
160 0 : if ((!(PCrashReporter::Transition(mState, Trigger(Trigger::Recv, PCrashReporter::Msg_AddLibraryMappings__ID), (&(mState)))))) {
161 0 : NS_WARNING("bad state transition!");
162 : }
163 0 : if ((!(RecvAddLibraryMappings(m)))) {
164 0 : return MsgProcessingError;
165 : }
166 :
167 0 : return MsgProcessed;
168 : }
169 : case PCrashReporter::Msg_AnnotateCrashReport__ID:
170 : {
171 0 : (const_cast<Message&>(__msg)).set_name("PCrashReporter::Msg_AnnotateCrashReport");
172 0 : if (mozilla::ipc::LoggingEnabled()) {
173 0 : (static_cast<const PCrashReporter::Msg_AnnotateCrashReport*>((&(__msg))))->Log("[PCrashReporterParent] Received ", stderr);
174 : }
175 :
176 0 : void* __iter = 0;
177 0 : nsCString key;
178 0 : nsCString data;
179 :
180 0 : if ((!(Read((&(key)), (&(__msg)), (&(__iter)))))) {
181 0 : FatalError("error deserializing (better message TODO)");
182 0 : return MsgValueError;
183 : }
184 0 : if ((!(Read((&(data)), (&(__msg)), (&(__iter)))))) {
185 0 : FatalError("error deserializing (better message TODO)");
186 0 : return MsgValueError;
187 : }
188 0 : (__msg).EndRead(__iter);
189 0 : if ((!(PCrashReporter::Transition(mState, Trigger(Trigger::Recv, PCrashReporter::Msg_AnnotateCrashReport__ID), (&(mState)))))) {
190 0 : NS_WARNING("bad state transition!");
191 : }
192 0 : if ((!(RecvAnnotateCrashReport(key, data)))) {
193 0 : return MsgProcessingError;
194 : }
195 :
196 0 : return MsgProcessed;
197 : }
198 : case PCrashReporter::Msg_AppendAppNotes__ID:
199 : {
200 0 : (const_cast<Message&>(__msg)).set_name("PCrashReporter::Msg_AppendAppNotes");
201 0 : if (mozilla::ipc::LoggingEnabled()) {
202 0 : (static_cast<const PCrashReporter::Msg_AppendAppNotes*>((&(__msg))))->Log("[PCrashReporterParent] Received ", stderr);
203 : }
204 :
205 0 : void* __iter = 0;
206 0 : nsCString data;
207 :
208 0 : if ((!(Read((&(data)), (&(__msg)), (&(__iter)))))) {
209 0 : FatalError("error deserializing (better message TODO)");
210 0 : return MsgValueError;
211 : }
212 0 : (__msg).EndRead(__iter);
213 0 : if ((!(PCrashReporter::Transition(mState, Trigger(Trigger::Recv, PCrashReporter::Msg_AppendAppNotes__ID), (&(mState)))))) {
214 0 : NS_WARNING("bad state transition!");
215 : }
216 0 : if ((!(RecvAppendAppNotes(data)))) {
217 0 : return MsgProcessingError;
218 : }
219 :
220 0 : return MsgProcessed;
221 : }
222 : case PCrashReporter::Msg___delete____ID:
223 : {
224 0 : (const_cast<Message&>(__msg)).set_name("PCrashReporter::Msg___delete__");
225 0 : if (mozilla::ipc::LoggingEnabled()) {
226 0 : (static_cast<const PCrashReporter::Msg___delete__*>((&(__msg))))->Log("[PCrashReporterParent] Received ", stderr);
227 : }
228 :
229 0 : void* __iter = 0;
230 : PCrashReporterParent* actor;
231 :
232 0 : if ((!(Read((&(actor)), (&(__msg)), (&(__iter)), false)))) {
233 0 : FatalError("error deserializing (better message TODO)");
234 0 : return MsgValueError;
235 : }
236 0 : (__msg).EndRead(__iter);
237 0 : if ((!(PCrashReporter::Transition(mState, Trigger(Trigger::Recv, PCrashReporter::Msg___delete____ID), (&(mState)))))) {
238 0 : NS_WARNING("bad state transition!");
239 : }
240 0 : if ((!(Recv__delete__()))) {
241 0 : return MsgProcessingError;
242 : }
243 :
244 0 : (actor)->DestroySubtree(Deletion);
245 0 : (actor)->DeallocSubtree();
246 0 : ((actor)->mManager)->RemoveManagee(PCrashReporterMsgStart, actor);
247 :
248 :
249 0 : return MsgProcessed;
250 : }
251 : default:
252 : {
253 0 : return MsgNotKnown;
254 : }
255 : }
256 : }
257 :
258 : PCrashReporterParent::Result
259 0 : PCrashReporterParent::OnMessageReceived(
260 : const Message& __msg,
261 : Message*& __reply)
262 : {
263 0 : return MsgNotKnown;
264 : }
265 :
266 : PCrashReporterParent::Result
267 0 : PCrashReporterParent::OnCallReceived(
268 : const Message& __msg,
269 : Message*& __reply)
270 : {
271 0 : return MsgNotKnown;
272 : }
273 :
274 : void
275 0 : PCrashReporterParent::OnProcessingError(Result code)
276 : {
277 0 : NS_RUNTIMEABORT("`OnProcessingError' called on non-toplevel actor");
278 0 : }
279 :
280 : bool
281 0 : PCrashReporterParent::OnReplyTimeout()
282 : {
283 0 : NS_RUNTIMEABORT("`OnReplyTimeout' called on non-toplevel actor");
284 0 : return false;
285 : }
286 :
287 : void
288 0 : PCrashReporterParent::OnChannelClose()
289 : {
290 0 : NS_RUNTIMEABORT("`OnClose' called on non-toplevel actor");
291 0 : }
292 :
293 : void
294 0 : PCrashReporterParent::OnChannelError()
295 : {
296 0 : NS_RUNTIMEABORT("`OnError' called on non-toplevel actor");
297 0 : }
298 :
299 : void
300 0 : PCrashReporterParent::OnChannelConnected(int32 pid)
301 : {
302 0 : NS_RUNTIMEABORT("'OnConnected' called on non-toplevel actor");
303 0 : }
304 :
305 : bool
306 0 : PCrashReporterParent::AllocShmem(
307 : size_t aSize,
308 : Shmem::SharedMemory::SharedMemoryType aType,
309 : Shmem* aMem)
310 : {
311 : Shmem::id_t aId;
312 0 : nsAutoPtr<Shmem::SharedMemory> rawmem(CreateSharedMemory(aSize, aType, false, (&(aId))));
313 0 : if ((!(rawmem))) {
314 0 : return false;
315 : }
316 :
317 0 : (*(aMem)) = Shmem(Shmem::IHadBetterBeIPDLCodeCallingThis_OtherwiseIAmADoodyhead(), (rawmem).forget(), aId);
318 0 : return true;
319 : }
320 :
321 : bool
322 0 : PCrashReporterParent::AllocUnsafeShmem(
323 : size_t aSize,
324 : Shmem::SharedMemory::SharedMemoryType aType,
325 : Shmem* aMem)
326 : {
327 : Shmem::id_t aId;
328 0 : nsAutoPtr<Shmem::SharedMemory> rawmem(CreateSharedMemory(aSize, aType, true, (&(aId))));
329 0 : if ((!(rawmem))) {
330 0 : return false;
331 : }
332 :
333 0 : (*(aMem)) = Shmem(Shmem::IHadBetterBeIPDLCodeCallingThis_OtherwiseIAmADoodyhead(), (rawmem).forget(), aId);
334 0 : return true;
335 : }
336 :
337 : bool
338 0 : PCrashReporterParent::AdoptShmem(
339 : Shmem& aMem,
340 : Shmem* aOutMem)
341 : {
342 0 : Shmem::SharedMemory* rawmem = (aMem).Segment(Shmem::IHadBetterBeIPDLCodeCallingThis_OtherwiseIAmADoodyhead());
343 0 : if (((!(rawmem))) || (IsTrackingSharedMemory(rawmem))) {
344 0 : NS_RUNTIMEABORT("bad Shmem");
345 : }
346 :
347 : Shmem::id_t aId;
348 0 : if ((!(AdoptSharedMemory(rawmem, (&(aId)))))) {
349 0 : return false;
350 : }
351 :
352 0 : (*(aOutMem)) = Shmem(Shmem::IHadBetterBeIPDLCodeCallingThis_OtherwiseIAmADoodyhead(), rawmem, aId);
353 0 : return true;
354 : }
355 :
356 : bool
357 0 : PCrashReporterParent::DeallocShmem(Shmem& aMem)
358 : {
359 0 : bool ok = DestroySharedMemory(aMem);
360 0 : (aMem).forget(Shmem::IHadBetterBeIPDLCodeCallingThis_OtherwiseIAmADoodyhead());
361 0 : return ok;
362 : }
363 :
364 : void
365 0 : PCrashReporterParent::FatalError(const char* const msg) const
366 : {
367 : // Virtual method to prevent inlining.
368 : // This give us better error reporting.
369 : // See bug 589371
370 :
371 0 : NS_ERROR("IPDL error:");
372 0 : NS_ERROR(msg);
373 :
374 0 : NS_ERROR("[PCrashReporterParent] killing child side as a result");
375 :
376 0 : if ((!(base::KillProcess(OtherProcess(), base::PROCESS_END_KILLED_BY_USER, false)))) {
377 0 : NS_ERROR(" may have failed to kill child!");
378 : }
379 0 : }
380 :
381 : void
382 0 : PCrashReporterParent::DestroySubtree(ActorDestroyReason why)
383 : {
384 : // Unregister from our manager.
385 0 : Unregister(mId);
386 0 : mId = 1;
387 :
388 : // Finally, destroy "us".
389 0 : ActorDestroy(why);
390 0 : }
391 :
392 : void
393 0 : PCrashReporterParent::DeallocSubtree()
394 : {
395 0 : }
396 :
397 : void
398 0 : PCrashReporterParent::Write(
399 : const InfallibleTArray<Mapping>& __v,
400 : Message* __msg)
401 : {
402 0 : uint32 length = (__v).Length();
403 0 : Write(length, __msg);
404 :
405 0 : for (uint32 i = 0; (i) < (length); (++(i))) {
406 0 : Write(__v[i], __msg);
407 : }
408 0 : }
409 :
410 : bool
411 0 : PCrashReporterParent::Read(
412 : InfallibleTArray<Mapping>* __v,
413 : const Message* __msg,
414 : void** __iter)
415 : {
416 0 : InfallibleTArray<Mapping>& a = (*(__v));
417 : uint32 length;
418 0 : if ((!(Read((&(length)), __msg, __iter)))) {
419 0 : return false;
420 : }
421 :
422 0 : (__v)->SetLength(length);
423 0 : for (uint32 i = 0; (i) < (length); (++(i))) {
424 0 : if ((!(Read((&(a[i])), __msg, __iter)))) {
425 0 : return false;
426 : }
427 : }
428 0 : return true;
429 : }
430 :
431 : void
432 0 : PCrashReporterParent::Write(
433 : PCrashReporterParent* __v,
434 : Message* __msg,
435 : bool __nullable)
436 : {
437 : int32 id;
438 0 : if ((!(__v))) {
439 0 : if ((!(__nullable))) {
440 0 : NS_RUNTIMEABORT("NULL actor value passed to non-nullable param");
441 : }
442 0 : id = 0;
443 : }
444 : else {
445 0 : id = (__v)->mId;
446 0 : if ((1) == (id)) {
447 0 : NS_RUNTIMEABORT("actor has been |delete|d");
448 : }
449 : }
450 :
451 0 : Write(id, __msg);
452 0 : }
453 :
454 : bool
455 0 : PCrashReporterParent::Read(
456 : PCrashReporterParent** __v,
457 : const Message* __msg,
458 : void** __iter,
459 : bool __nullable)
460 : {
461 : int32 id;
462 0 : if ((!(Read((&(id)), __msg, __iter)))) {
463 0 : return false;
464 : }
465 0 : if (((1) == (id)) || (((0) == (id)) && ((!(__nullable))))) {
466 0 : return false;
467 : }
468 :
469 0 : if ((0) == (id)) {
470 0 : (*(__v)) = 0;
471 : }
472 : else {
473 0 : (*(__v)) = static_cast<PCrashReporterParent*>(Lookup(id));
474 0 : if ((!((*(__v))))) {
475 0 : return false;
476 : }
477 : }
478 0 : return true;
479 : }
480 :
481 : void
482 0 : PCrashReporterParent::Write(
483 : const Mapping& __v,
484 : Message* __msg)
485 : {
486 0 : Write((__v).library_name(), __msg);
487 0 : Write((__v).file_id(), __msg);
488 0 : Write((__v).start_address(), __msg);
489 0 : Write((__v).mapping_length(), __msg);
490 0 : Write((__v).file_offset(), __msg);
491 0 : }
492 :
493 : bool
494 0 : PCrashReporterParent::Read(
495 : Mapping* __v,
496 : const Message* __msg,
497 : void** __iter)
498 : {
499 0 : if ((!(Read((&((__v)->library_name())), __msg, __iter)))) {
500 0 : return false;
501 : }
502 0 : if ((!(Read((&((__v)->file_id())), __msg, __iter)))) {
503 0 : return false;
504 : }
505 0 : if ((!(Read((&((__v)->start_address())), __msg, __iter)))) {
506 0 : return false;
507 : }
508 0 : if ((!(Read((&((__v)->mapping_length())), __msg, __iter)))) {
509 0 : return false;
510 : }
511 0 : if ((!(Read((&((__v)->file_offset())), __msg, __iter)))) {
512 0 : return false;
513 : }
514 0 : return true;
515 : }
516 :
517 :
518 :
519 : } // namespace dom
520 : } // namespace mozilla
|