Bug 1314254 - Add mozilla::ipc::IPCResult type and convert IPDL handlers to use new return type. r=billm
authorKan-Ru Chen <kanru@kanru.info>
Tue, 15 Nov 2016 04:26:00 +0100
changeset 350610 39ac4382a2c019178604b90acd816753fe142908
parent 350609 eca8f585871bbe8074fe5f4476f3157fc7848adf
child 350611 71f75f75b4e73cfa09a564f8c3c1a7e56f797641
push id10621
push userjlund@mozilla.com
push dateMon, 23 Jan 2017 16:02:43 +0000
treeherdermozilla-aurora@dca7b42e6c67 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersbillm
bugs1314254
milestone53.0a1
Bug 1314254 - Add mozilla::ipc::IPCResult type and convert IPDL handlers to use new return type. r=billm We will use the new type for the generated IPDL message handler prototype to make sure correct error handling method is called. MozReview-Commit-ID: AzVbApxFGZ0
accessible/ipc/DocAccessibleParent.cpp
accessible/ipc/DocAccessibleParent.h
accessible/ipc/other/DocAccessibleChild.cpp
accessible/ipc/other/DocAccessibleChild.h
devtools/shared/heapsnapshot/HeapSnapshotTempFileHelperParent.cpp
devtools/shared/heapsnapshot/HeapSnapshotTempFileHelperParent.h
dom/asmjscache/AsmJSCache.cpp
dom/base/nsContentPermissionHelper.cpp
dom/base/nsContentPermissionHelper.h
dom/broadcastchannel/BroadcastChannelChild.cpp
dom/broadcastchannel/BroadcastChannelChild.h
dom/broadcastchannel/BroadcastChannelParent.cpp
dom/broadcastchannel/BroadcastChannelParent.h
dom/cache/CacheOpChild.cpp
dom/cache/CacheOpChild.h
dom/cache/CacheParent.cpp
dom/cache/CacheParent.h
dom/cache/CacheStorageParent.cpp
dom/cache/CacheStorageParent.h
dom/cache/CacheStreamControlChild.cpp
dom/cache/CacheStreamControlChild.h
dom/cache/CacheStreamControlParent.cpp
dom/cache/CacheStreamControlParent.h
dom/canvas/DocumentRendererParent.cpp
dom/canvas/DocumentRendererParent.h
dom/devicestorage/DeviceStorageRequestChild.cpp
dom/devicestorage/DeviceStorageRequestChild.h
dom/filehandle/ActorsChild.cpp
dom/filehandle/ActorsChild.h
dom/filehandle/ActorsParent.cpp
dom/filehandle/ActorsParent.h
dom/filesystem/FileSystemTaskBase.cpp
dom/filesystem/FileSystemTaskBase.h
dom/flyweb/FlyWebPublishedServer.cpp
dom/flyweb/FlyWebPublishedServerIPC.h
dom/gamepad/ipc/GamepadEventChannelChild.cpp
dom/gamepad/ipc/GamepadEventChannelChild.h
dom/gamepad/ipc/GamepadEventChannelParent.cpp
dom/gamepad/ipc/GamepadEventChannelParent.h
dom/gamepad/ipc/GamepadTestChannelChild.cpp
dom/gamepad/ipc/GamepadTestChannelChild.h
dom/gamepad/ipc/GamepadTestChannelParent.cpp
dom/gamepad/ipc/GamepadTestChannelParent.h
dom/indexedDB/ActorsChild.cpp
dom/indexedDB/ActorsChild.h
dom/indexedDB/ActorsParent.cpp
dom/ipc/Blob.cpp
dom/ipc/BlobChild.h
dom/ipc/BlobParent.h
dom/ipc/ColorPickerParent.cpp
dom/ipc/ColorPickerParent.h
dom/ipc/ContentBridgeChild.cpp
dom/ipc/ContentBridgeChild.h
dom/ipc/ContentBridgeParent.cpp
dom/ipc/ContentBridgeParent.h
dom/ipc/ContentChild.cpp
dom/ipc/ContentChild.h
dom/ipc/ContentParent.cpp
dom/ipc/ContentParent.h
dom/ipc/CrashReporterParent.cpp
dom/ipc/CrashReporterParent.h
dom/ipc/DatePickerParent.cpp
dom/ipc/DatePickerParent.h
dom/ipc/FilePickerParent.cpp
dom/ipc/FilePickerParent.h
dom/ipc/ProcessHangMonitor.cpp
dom/ipc/ScreenManagerParent.cpp
dom/ipc/ScreenManagerParent.h
dom/ipc/TabChild.cpp
dom/ipc/TabChild.h
dom/ipc/TabParent.cpp
dom/ipc/TabParent.h
dom/ipc/nsIContentChild.cpp
dom/ipc/nsIContentChild.h
dom/ipc/nsIContentParent.cpp
dom/ipc/nsIContentParent.h
dom/media/gmp/GMPAudioDecoderChild.cpp
dom/media/gmp/GMPAudioDecoderChild.h
dom/media/gmp/GMPAudioDecoderParent.cpp
dom/media/gmp/GMPAudioDecoderParent.h
dom/media/gmp/GMPChild.cpp
dom/media/gmp/GMPChild.h
dom/media/gmp/GMPContentChild.cpp
dom/media/gmp/GMPContentChild.h
dom/media/gmp/GMPDecryptorChild.cpp
dom/media/gmp/GMPDecryptorChild.h
dom/media/gmp/GMPDecryptorParent.cpp
dom/media/gmp/GMPDecryptorParent.h
dom/media/gmp/GMPParent.cpp
dom/media/gmp/GMPParent.h
dom/media/gmp/GMPServiceParent.cpp
dom/media/gmp/GMPServiceParent.h
dom/media/gmp/GMPStorageChild.cpp
dom/media/gmp/GMPStorageChild.h
dom/media/gmp/GMPStorageParent.cpp
dom/media/gmp/GMPStorageParent.h
dom/media/gmp/GMPTimerChild.cpp
dom/media/gmp/GMPTimerChild.h
dom/media/gmp/GMPTimerParent.cpp
dom/media/gmp/GMPTimerParent.h
dom/media/gmp/GMPVideoDecoderChild.cpp
dom/media/gmp/GMPVideoDecoderChild.h
dom/media/gmp/GMPVideoDecoderParent.cpp
dom/media/gmp/GMPVideoDecoderParent.h
dom/media/gmp/GMPVideoEncoderChild.cpp
dom/media/gmp/GMPVideoEncoderChild.h
dom/media/gmp/GMPVideoEncoderParent.cpp
dom/media/gmp/GMPVideoEncoderParent.h
dom/media/ipc/VideoDecoderChild.cpp
dom/media/ipc/VideoDecoderChild.h
dom/media/ipc/VideoDecoderManagerParent.cpp
dom/media/ipc/VideoDecoderManagerParent.h
dom/media/ipc/VideoDecoderParent.cpp
dom/media/ipc/VideoDecoderParent.h
dom/media/systemservices/CamerasChild.cpp
dom/media/systemservices/CamerasChild.h
dom/media/systemservices/CamerasParent.cpp
dom/media/systemservices/CamerasParent.h
dom/media/systemservices/MediaChild.cpp
dom/media/systemservices/MediaChild.h
dom/media/systemservices/MediaParent.cpp
dom/media/systemservices/MediaParent.h
dom/media/systemservices/MediaSystemResourceManagerChild.cpp
dom/media/systemservices/MediaSystemResourceManagerChild.h
dom/media/systemservices/MediaSystemResourceManagerParent.cpp
dom/media/systemservices/MediaSystemResourceManagerParent.h
dom/media/webspeech/synth/ipc/SpeechSynthesisChild.cpp
dom/media/webspeech/synth/ipc/SpeechSynthesisChild.h
dom/media/webspeech/synth/ipc/SpeechSynthesisParent.cpp
dom/media/webspeech/synth/ipc/SpeechSynthesisParent.h
dom/messagechannel/MessagePortChild.cpp
dom/messagechannel/MessagePortChild.h
dom/messagechannel/MessagePortParent.cpp
dom/messagechannel/MessagePortParent.h
dom/network/TCPServerSocketChild.cpp
dom/network/TCPServerSocketChild.h
dom/network/TCPServerSocketParent.cpp
dom/network/TCPServerSocketParent.h
dom/network/TCPSocketChild.cpp
dom/network/TCPSocketChild.h
dom/network/TCPSocketParent.cpp
dom/network/TCPSocketParent.h
dom/network/UDPSocketChild.cpp
dom/network/UDPSocketChild.h
dom/network/UDPSocketParent.cpp
dom/network/UDPSocketParent.h
dom/plugins/ipc/BrowserStreamChild.cpp
dom/plugins/ipc/BrowserStreamChild.h
dom/plugins/ipc/BrowserStreamParent.cpp
dom/plugins/ipc/BrowserStreamParent.h
dom/plugins/ipc/PluginInstanceChild.cpp
dom/plugins/ipc/PluginInstanceChild.h
dom/plugins/ipc/PluginInstanceParent.cpp
dom/plugins/ipc/PluginInstanceParent.h
dom/plugins/ipc/PluginModuleChild.cpp
dom/plugins/ipc/PluginModuleChild.h
dom/plugins/ipc/PluginModuleParent.cpp
dom/plugins/ipc/PluginModuleParent.h
dom/plugins/ipc/PluginScriptableObjectChild.cpp
dom/plugins/ipc/PluginScriptableObjectChild.h
dom/plugins/ipc/PluginScriptableObjectParent.cpp
dom/plugins/ipc/PluginScriptableObjectParent.h
dom/plugins/ipc/PluginStreamChild.cpp
dom/plugins/ipc/PluginStreamChild.h
dom/plugins/ipc/PluginStreamParent.cpp
dom/plugins/ipc/PluginStreamParent.h
dom/plugins/ipc/PluginWidgetParent.cpp
dom/plugins/ipc/PluginWidgetParent.h
dom/plugins/ipc/StreamNotifyChild.h
dom/plugins/ipc/StreamNotifyParent.h
dom/presentation/ipc/PresentationBuilderChild.cpp
dom/presentation/ipc/PresentationBuilderChild.h
dom/presentation/ipc/PresentationBuilderParent.cpp
dom/presentation/ipc/PresentationBuilderParent.h
dom/presentation/ipc/PresentationChild.cpp
dom/presentation/ipc/PresentationChild.h
dom/presentation/ipc/PresentationParent.cpp
dom/presentation/ipc/PresentationParent.h
dom/quota/ActorsChild.cpp
dom/quota/ActorsChild.h
dom/quota/ActorsParent.cpp
dom/storage/DOMStorageIPC.cpp
dom/storage/DOMStorageIPC.h
dom/workers/ServiceWorkerManagerChild.cpp
dom/workers/ServiceWorkerManagerChild.h
dom/workers/ServiceWorkerManagerParent.cpp
dom/workers/ServiceWorkerManagerParent.h
embedding/components/printingui/ipc/PrintProgressDialogChild.cpp
embedding/components/printingui/ipc/PrintProgressDialogChild.h
embedding/components/printingui/ipc/PrintProgressDialogParent.cpp
embedding/components/printingui/ipc/PrintProgressDialogParent.h
embedding/components/printingui/ipc/PrintSettingsDialogChild.cpp
embedding/components/printingui/ipc/PrintSettingsDialogChild.h
embedding/components/printingui/ipc/PrintingParent.cpp
embedding/components/printingui/ipc/PrintingParent.h
embedding/components/webbrowserpersist/WebBrowserPersistDocumentChild.cpp
embedding/components/webbrowserpersist/WebBrowserPersistDocumentChild.h
embedding/components/webbrowserpersist/WebBrowserPersistDocumentParent.cpp
embedding/components/webbrowserpersist/WebBrowserPersistDocumentParent.h
embedding/components/webbrowserpersist/WebBrowserPersistResourcesParent.cpp
embedding/components/webbrowserpersist/WebBrowserPersistResourcesParent.h
embedding/components/webbrowserpersist/WebBrowserPersistSerializeParent.cpp
embedding/components/webbrowserpersist/WebBrowserPersistSerializeParent.h
extensions/spellcheck/hunspell/glue/RemoteSpellCheckEngineParent.cpp
extensions/spellcheck/hunspell/glue/RemoteSpellCheckEngineParent.h
gfx/ipc/GPUChild.cpp
gfx/ipc/GPUChild.h
gfx/ipc/GPUParent.cpp
gfx/ipc/GPUParent.h
gfx/ipc/VsyncBridgeParent.cpp
gfx/ipc/VsyncBridgeParent.h
gfx/layers/IPDLActor.h
gfx/layers/client/TextureClient.cpp
gfx/layers/composite/TextureHost.cpp
gfx/layers/ipc/APZCTreeManagerChild.cpp
gfx/layers/ipc/APZCTreeManagerChild.h
gfx/layers/ipc/APZCTreeManagerParent.cpp
gfx/layers/ipc/APZCTreeManagerParent.h
gfx/layers/ipc/APZChild.cpp
gfx/layers/ipc/APZChild.h
gfx/layers/ipc/CompositorBridgeChild.cpp
gfx/layers/ipc/CompositorBridgeChild.h
gfx/layers/ipc/CompositorBridgeParent.cpp
gfx/layers/ipc/CompositorBridgeParent.h
gfx/layers/ipc/CrossProcessCompositorBridgeParent.cpp
gfx/layers/ipc/CrossProcessCompositorBridgeParent.h
gfx/layers/ipc/ImageBridgeChild.cpp
gfx/layers/ipc/ImageBridgeChild.h
gfx/layers/ipc/ImageBridgeParent.cpp
gfx/layers/ipc/ImageBridgeParent.h
gfx/layers/ipc/ImageContainerParent.cpp
gfx/layers/ipc/ImageContainerParent.h
gfx/layers/ipc/LayerTransactionParent.cpp
gfx/layers/ipc/LayerTransactionParent.h
gfx/vr/ipc/VRLayerParent.cpp
gfx/vr/ipc/VRLayerParent.h
gfx/vr/ipc/VRManagerChild.cpp
gfx/vr/ipc/VRManagerChild.h
gfx/vr/ipc/VRManagerParent.cpp
gfx/vr/ipc/VRManagerParent.h
hal/sandbox/SandboxHal.cpp
ipc/glue/BackgroundChildImpl.cpp
ipc/glue/BackgroundParentImpl.cpp
ipc/glue/BackgroundParentImpl.h
ipc/glue/FileDescriptorSetChild.cpp
ipc/glue/FileDescriptorSetChild.h
ipc/glue/FileDescriptorSetParent.cpp
ipc/glue/FileDescriptorSetParent.h
ipc/glue/MessageChannel.cpp
ipc/glue/MessageChannel.h
ipc/glue/ProtocolUtils.cpp
ipc/glue/ProtocolUtils.h
ipc/glue/SendStreamChild.cpp
ipc/glue/SendStreamParent.cpp
ipc/ipdl/ipdl/lower.py
ipc/ipdl/test/cxx/TestActorPunning.cpp
ipc/ipdl/test/cxx/TestActorPunning.h
ipc/ipdl/test/cxx/TestBadActor.cpp
ipc/ipdl/test/cxx/TestBadActor.h
ipc/ipdl/test/cxx/TestBridgeMain.cpp
ipc/ipdl/test/cxx/TestBridgeMain.h
ipc/ipdl/test/cxx/TestCancel.cpp
ipc/ipdl/test/cxx/TestCancel.h
ipc/ipdl/test/cxx/TestCrashCleanup.cpp
ipc/ipdl/test/cxx/TestCrashCleanup.h
ipc/ipdl/test/cxx/TestDataStructures.cpp
ipc/ipdl/test/cxx/TestDataStructures.h
ipc/ipdl/test/cxx/TestDemon.cpp
ipc/ipdl/test/cxx/TestDemon.h
ipc/ipdl/test/cxx/TestDesc.cpp
ipc/ipdl/test/cxx/TestDesc.h
ipc/ipdl/test/cxx/TestEndpointBridgeMain.cpp
ipc/ipdl/test/cxx/TestEndpointBridgeMain.h
ipc/ipdl/test/cxx/TestEndpointOpens.cpp
ipc/ipdl/test/cxx/TestEndpointOpens.h
ipc/ipdl/test/cxx/TestFailedCtor.cpp
ipc/ipdl/test/cxx/TestFailedCtor.h
ipc/ipdl/test/cxx/TestHangs.cpp
ipc/ipdl/test/cxx/TestHangs.h
ipc/ipdl/test/cxx/TestHighestPrio.cpp
ipc/ipdl/test/cxx/TestHighestPrio.h
ipc/ipdl/test/cxx/TestInterruptErrorCleanup.cpp
ipc/ipdl/test/cxx/TestInterruptErrorCleanup.h
ipc/ipdl/test/cxx/TestInterruptRaces.cpp
ipc/ipdl/test/cxx/TestInterruptRaces.h
ipc/ipdl/test/cxx/TestInterruptShutdownRace.cpp
ipc/ipdl/test/cxx/TestInterruptShutdownRace.h
ipc/ipdl/test/cxx/TestJSON.cpp
ipc/ipdl/test/cxx/TestJSON.h
ipc/ipdl/test/cxx/TestLatency.cpp
ipc/ipdl/test/cxx/TestLatency.h
ipc/ipdl/test/cxx/TestManyChildAllocs.cpp
ipc/ipdl/test/cxx/TestManyChildAllocs.h
ipc/ipdl/test/cxx/TestMultiMgrs.cpp
ipc/ipdl/test/cxx/TestMultiMgrs.h
ipc/ipdl/test/cxx/TestNestedLoops.cpp
ipc/ipdl/test/cxx/TestNestedLoops.h
ipc/ipdl/test/cxx/TestOpens.cpp
ipc/ipdl/test/cxx/TestOpens.h
ipc/ipdl/test/cxx/TestRPC.cpp
ipc/ipdl/test/cxx/TestRPC.h
ipc/ipdl/test/cxx/TestRaceDeadlock.cpp
ipc/ipdl/test/cxx/TestRaceDeadlock.h
ipc/ipdl/test/cxx/TestRaceDeferral.cpp
ipc/ipdl/test/cxx/TestRaceDeferral.h
ipc/ipdl/test/cxx/TestRacyInterruptReplies.cpp
ipc/ipdl/test/cxx/TestRacyInterruptReplies.h
ipc/ipdl/test/cxx/TestRacyReentry.cpp
ipc/ipdl/test/cxx/TestRacyReentry.h
ipc/ipdl/test/cxx/TestRacyUndefer.cpp
ipc/ipdl/test/cxx/TestRacyUndefer.h
ipc/ipdl/test/cxx/TestSanity.cpp
ipc/ipdl/test/cxx/TestSanity.h
ipc/ipdl/test/cxx/TestShmem.cpp
ipc/ipdl/test/cxx/TestShmem.h
ipc/ipdl/test/cxx/TestShutdown.cpp
ipc/ipdl/test/cxx/TestShutdown.h
ipc/ipdl/test/cxx/TestStackHooks.cpp
ipc/ipdl/test/cxx/TestStackHooks.h
ipc/ipdl/test/cxx/TestSyncError.cpp
ipc/ipdl/test/cxx/TestSyncError.h
ipc/ipdl/test/cxx/TestSyncWakeup.cpp
ipc/ipdl/test/cxx/TestSyncWakeup.h
ipc/ipdl/test/cxx/TestUrgency.cpp
ipc/ipdl/test/cxx/TestUrgency.h
ipc/ipdl/test/cxx/TestUrgentHangs.cpp
ipc/ipdl/test/cxx/TestUrgentHangs.h
ipc/testshell/TestShellChild.cpp
ipc/testshell/TestShellChild.h
ipc/testshell/TestShellParent.h
js/ipc/JavaScriptBase.h
js/ipc/JavaScriptChild.cpp
js/ipc/JavaScriptChild.h
layout/ipc/RenderFrameParent.cpp
layout/ipc/RenderFrameParent.h
layout/ipc/VsyncChild.cpp
layout/ipc/VsyncChild.h
layout/ipc/VsyncParent.cpp
layout/ipc/VsyncParent.h
layout/printing/ipc/RemotePrintJobChild.cpp
layout/printing/ipc/RemotePrintJobChild.h
layout/printing/ipc/RemotePrintJobParent.cpp
layout/printing/ipc/RemotePrintJobParent.h
media/webrtc/signaling/src/peerconnection/WebrtcGlobalChild.h
media/webrtc/signaling/src/peerconnection/WebrtcGlobalInformation.cpp
media/webrtc/signaling/src/peerconnection/WebrtcGlobalParent.h
netwerk/cookie/CookieServiceParent.cpp
netwerk/cookie/CookieServiceParent.h
netwerk/dns/DNSRequestChild.cpp
netwerk/dns/DNSRequestChild.h
netwerk/dns/DNSRequestParent.cpp
netwerk/dns/DNSRequestParent.h
netwerk/ipc/NeckoChild.cpp
netwerk/ipc/NeckoChild.h
netwerk/ipc/NeckoParent.cpp
netwerk/ipc/NeckoParent.h
netwerk/protocol/ftp/FTPChannelChild.cpp
netwerk/protocol/ftp/FTPChannelChild.h
netwerk/protocol/ftp/FTPChannelParent.cpp
netwerk/protocol/ftp/FTPChannelParent.h
netwerk/protocol/http/AltDataOutputStreamChild.cpp
netwerk/protocol/http/AltDataOutputStreamChild.h
netwerk/protocol/http/AltDataOutputStreamParent.cpp
netwerk/protocol/http/AltDataOutputStreamParent.h
netwerk/protocol/http/HttpChannelChild.cpp
netwerk/protocol/http/HttpChannelChild.h
netwerk/protocol/http/HttpChannelParent.cpp
netwerk/protocol/http/HttpChannelParent.h
netwerk/protocol/websocket/WebSocketChannelChild.cpp
netwerk/protocol/websocket/WebSocketChannelChild.h
netwerk/protocol/websocket/WebSocketChannelParent.cpp
netwerk/protocol/websocket/WebSocketChannelParent.h
netwerk/protocol/websocket/WebSocketEventListenerChild.cpp
netwerk/protocol/websocket/WebSocketEventListenerChild.h
netwerk/protocol/websocket/WebSocketEventListenerParent.cpp
netwerk/protocol/websocket/WebSocketEventListenerParent.h
netwerk/protocol/wyciwyg/WyciwygChannelChild.cpp
netwerk/protocol/wyciwyg/WyciwygChannelChild.h
netwerk/protocol/wyciwyg/WyciwygChannelParent.cpp
netwerk/protocol/wyciwyg/WyciwygChannelParent.h
security/manager/ssl/PSMContentListener.cpp
security/manager/ssl/PSMContentListener.h
uriloader/exthandler/ExternalHelperAppChild.cpp
uriloader/exthandler/ExternalHelperAppChild.h
uriloader/exthandler/ExternalHelperAppParent.cpp
uriloader/exthandler/ExternalHelperAppParent.h
uriloader/exthandler/HandlerServiceParent.cpp
uriloader/exthandler/HandlerServiceParent.h
uriloader/prefetch/OfflineCacheUpdateChild.cpp
uriloader/prefetch/OfflineCacheUpdateChild.h
widget/gtk/CompositorWidgetChild.cpp
widget/gtk/CompositorWidgetChild.h
widget/gtk/CompositorWidgetParent.cpp
widget/gtk/CompositorWidgetParent.h
widget/nsColorPickerProxy.cpp
widget/nsColorPickerProxy.h
widget/nsDatePickerProxy.cpp
widget/nsDatePickerProxy.h
widget/nsFilePickerProxy.cpp
widget/nsFilePickerProxy.h
widget/windows/CompositorWidgetChild.cpp
widget/windows/CompositorWidgetChild.h
widget/windows/CompositorWidgetParent.cpp
widget/windows/CompositorWidgetParent.h
--- a/accessible/ipc/DocAccessibleParent.cpp
+++ b/accessible/ipc/DocAccessibleParent.cpp
@@ -10,79 +10,79 @@
 #include "xpcAccessibleDocument.h"
 #include "xpcAccEvents.h"
 #include "nsAccUtils.h"
 #include "nsCoreUtils.h"
 
 namespace mozilla {
 namespace a11y {
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleParent::RecvShowEvent(const ShowEventData& aData,
                                    const bool& aFromUser)
 {
   if (mShutdown)
-    return true;
+    return IPC_OK();
 
   MOZ_DIAGNOSTIC_ASSERT(CheckDocTree());
 
   if (aData.NewTree().IsEmpty()) {
     NS_ERROR("no children being added");
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   ProxyAccessible* parent = GetAccessible(aData.ID());
 
   // XXX This should really never happen, but sometimes we fail to fire the
   // required show events.
   if (!parent) {
     NS_ERROR("adding child to unknown accessible");
-    return true;
+    return IPC_OK();
   }
 
   uint32_t newChildIdx = aData.Idx();
   if (newChildIdx > parent->ChildrenCount()) {
     NS_ERROR("invalid index to add child at");
-    return true;
+    return IPC_OK();
   }
 
   uint32_t consumed = AddSubtree(parent, aData.NewTree(), 0, newChildIdx);
   MOZ_ASSERT(consumed == aData.NewTree().Length());
 
   // XXX This shouldn't happen, but if we failed to add children then the below
   // is pointless and can crash.
   if (!consumed) {
-    return true;
+    return IPC_OK();
   }
 
 #ifdef DEBUG
   for (uint32_t i = 0; i < consumed; i++) {
     uint64_t id = aData.NewTree()[i].ID();
     MOZ_ASSERT(mAccessibles.GetEntry(id));
   }
 #endif
 
   MOZ_DIAGNOSTIC_ASSERT(CheckDocTree());
 
   ProxyAccessible* target = parent->ChildAt(newChildIdx);
   ProxyShowHideEvent(target, parent, true, aFromUser);
 
   if (!nsCoreUtils::AccEventObserversExist()) {
-    return true;
+    return IPC_OK();
   }
 
   uint32_t type = nsIAccessibleEvent::EVENT_SHOW;
   xpcAccessibleGeneric* xpcAcc = GetXPCAccessible(target);
   xpcAccessibleDocument* doc = GetAccService()->GetXPCDocument(this);
   nsIDOMNode* node = nullptr;
   RefPtr<xpcAccEvent> event = new xpcAccEvent(type, xpcAcc, doc, node,
                                               aFromUser);
   nsCoreUtils::DispatchAccEvent(Move(event));
 
-  return true;
+  return IPC_OK();
 }
 
 uint32_t
 DocAccessibleParent::AddSubtree(ProxyAccessible* aParent,
                                 const nsTArray<a11y::AccessibleData>& aNewTree,
                                 uint32_t aIdx, uint32_t aIdxInParent)
 {
   if (aNewTree.Length() <= aIdx) {
@@ -125,42 +125,42 @@ DocAccessibleParent::AddSubtree(ProxyAcc
     accessibles += consumed;
   }
 
   MOZ_ASSERT(newProxy->ChildrenCount() == kids);
 
   return accessibles;
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleParent::RecvHideEvent(const uint64_t& aRootID,
                                    const bool& aFromUser)
 {
   if (mShutdown)
-    return true;
+    return IPC_OK();
 
   MOZ_DIAGNOSTIC_ASSERT(CheckDocTree());
 
   // We shouldn't actually need this because mAccessibles shouldn't have an
   // entry for the document itself, but it doesn't hurt to be explicit.
   if (!aRootID) {
     NS_ERROR("trying to hide entire document?");
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   ProxyEntry* rootEntry = mAccessibles.GetEntry(aRootID);
   if (!rootEntry) {
     NS_ERROR("invalid root being removed!");
-    return true;
+    return IPC_OK();
   }
 
   ProxyAccessible* root = rootEntry->mProxy;
   if (!root) {
     NS_ERROR("invalid root being removed!");
-    return true;
+    return IPC_OK();
   }
 
   ProxyAccessible* parent = root->Parent();
   ProxyShowHideEvent(root, parent, false, aFromUser);
 
   RefPtr<xpcAccHideEvent> event = nullptr;
   if (nsCoreUtils::AccEventObserversExist()) {
     uint32_t type = nsIAccessibleEvent::EVENT_HIDE;
@@ -180,191 +180,194 @@ DocAccessibleParent::RecvHideEvent(const
   root->Shutdown();
 
   MOZ_DIAGNOSTIC_ASSERT(CheckDocTree());
 
   if (event) {
     nsCoreUtils::DispatchAccEvent(Move(event));
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleParent::RecvEvent(const uint64_t& aID, const uint32_t& aEventType)
 {
   ProxyAccessible* proxy = GetAccessible(aID);
   if (!proxy) {
     NS_ERROR("no proxy for event!");
-    return true;
+    return IPC_OK();
   }
 
   ProxyEvent(proxy, aEventType);
 
   if (!nsCoreUtils::AccEventObserversExist()) {
-    return true;
+    return IPC_OK();
   }
 
   xpcAccessibleGeneric* xpcAcc = GetXPCAccessible(proxy);
   xpcAccessibleDocument* doc = GetAccService()->GetXPCDocument(this);
   nsIDOMNode* node = nullptr;
   bool fromUser = true; // XXX fix me
   RefPtr<xpcAccEvent> event = new xpcAccEvent(aEventType, xpcAcc, doc, node,
                                               fromUser);
   nsCoreUtils::DispatchAccEvent(Move(event));
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleParent::RecvStateChangeEvent(const uint64_t& aID,
                                           const uint64_t& aState,
                                           const bool& aEnabled)
 {
   ProxyAccessible* target = GetAccessible(aID);
   if (!target) {
     NS_ERROR("we don't know about the target of a state change event!");
-    return true;
+    return IPC_OK();
   }
 
   ProxyStateChangeEvent(target, aState, aEnabled);
 
   if (!nsCoreUtils::AccEventObserversExist()) {
-    return true;
+    return IPC_OK();
   }
 
   xpcAccessibleGeneric* xpcAcc = GetXPCAccessible(target);
   xpcAccessibleDocument* doc = GetAccService()->GetXPCDocument(this);
   uint32_t type = nsIAccessibleEvent::EVENT_STATE_CHANGE;
   bool extra;
   uint32_t state = nsAccUtils::To32States(aState, &extra);
   bool fromUser = true; // XXX fix this
   nsIDOMNode* node = nullptr; // XXX can we do better?
   RefPtr<xpcAccStateChangeEvent> event =
     new xpcAccStateChangeEvent(type, xpcAcc, doc, node, fromUser, state, extra,
                                aEnabled);
   nsCoreUtils::DispatchAccEvent(Move(event));
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleParent::RecvCaretMoveEvent(const uint64_t& aID, const int32_t& aOffset)
 {
   ProxyAccessible* proxy = GetAccessible(aID);
   if (!proxy) {
     NS_ERROR("unknown caret move event target!");
-    return true;
+    return IPC_OK();
   }
 
   ProxyCaretMoveEvent(proxy, aOffset);
 
   if (!nsCoreUtils::AccEventObserversExist()) {
-    return true;
+    return IPC_OK();
   }
 
   xpcAccessibleGeneric* xpcAcc = GetXPCAccessible(proxy);
   xpcAccessibleDocument* doc = GetAccService()->GetXPCDocument(this);
   nsIDOMNode* node = nullptr;
   bool fromUser = true; // XXX fix me
   uint32_t type = nsIAccessibleEvent::EVENT_TEXT_CARET_MOVED;
   RefPtr<xpcAccCaretMoveEvent> event =
     new xpcAccCaretMoveEvent(type, xpcAcc, doc, node, fromUser, aOffset);
   nsCoreUtils::DispatchAccEvent(Move(event));
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleParent::RecvTextChangeEvent(const uint64_t& aID,
                                          const nsString& aStr,
                                          const int32_t& aStart,
                                          const uint32_t& aLen,
                                          const bool& aIsInsert,
                                          const bool& aFromUser)
 {
   ProxyAccessible* target = GetAccessible(aID);
   if (!target) {
     NS_ERROR("text change event target is unknown!");
-    return true;
+    return IPC_OK();
   }
 
   ProxyTextChangeEvent(target, aStr, aStart, aLen, aIsInsert, aFromUser);
 
   if (!nsCoreUtils::AccEventObserversExist()) {
-    return true;
+    return IPC_OK();
   }
 
   xpcAccessibleGeneric* xpcAcc = GetXPCAccessible(target);
   xpcAccessibleDocument* doc = GetAccService()->GetXPCDocument(this);
   uint32_t type = aIsInsert ? nsIAccessibleEvent::EVENT_TEXT_INSERTED :
                               nsIAccessibleEvent::EVENT_TEXT_REMOVED;
   nsIDOMNode* node = nullptr;
   RefPtr<xpcAccTextChangeEvent> event =
     new xpcAccTextChangeEvent(type, xpcAcc, doc, node, aFromUser, aStart, aLen,
                               aIsInsert, aStr);
   nsCoreUtils::DispatchAccEvent(Move(event));
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleParent::RecvSelectionEvent(const uint64_t& aID,
                                         const uint64_t& aWidgetID,
                                         const uint32_t& aType)
 {
   ProxyAccessible* target = GetAccessible(aID);
   ProxyAccessible* widget = GetAccessible(aWidgetID);
   if (!target || !widget) {
     NS_ERROR("invalid id in selection event");
-    return true;
+    return IPC_OK();
   }
 
   ProxySelectionEvent(target, widget, aType);
   if (!nsCoreUtils::AccEventObserversExist()) {
-    return true;
+    return IPC_OK();
   }
   xpcAccessibleGeneric* xpcTarget = GetXPCAccessible(target);
   xpcAccessibleDocument* xpcDoc = GetAccService()->GetXPCDocument(this);
   RefPtr<xpcAccEvent> event = new xpcAccEvent(aType, xpcTarget, xpcDoc,
                                               nullptr, false);
   nsCoreUtils::DispatchAccEvent(Move(event));
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleParent::RecvRoleChangedEvent(const uint32_t& aRole)
 {
  if (aRole >= roles::LAST_ROLE) {
    NS_ERROR("child sent bad role in RoleChangedEvent");
-   return false;
+   return IPC_FAIL_NO_REASON(this);
  }
 
  mRole = static_cast<a11y::role>(aRole);
- return true;
+ return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleParent::RecvBindChildDoc(PDocAccessibleParent* aChildDoc, const uint64_t& aID)
 {
   // One document should never directly be the child of another.
   // We should always have at least an outer doc accessible in between.
   MOZ_ASSERT(aID);
   if (!aID)
-    return false;
+    return IPC_FAIL_NO_REASON(this);
 
   MOZ_DIAGNOSTIC_ASSERT(CheckDocTree());
 
   auto childDoc = static_cast<DocAccessibleParent*>(aChildDoc);
   childDoc->Unbind();
   bool result = AddChildDoc(childDoc, aID, false);
   MOZ_ASSERT(result);
   MOZ_DIAGNOSTIC_ASSERT(CheckDocTree());
-  return result;
+  if (!result) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
 }
 
 bool
 DocAccessibleParent::AddChildDoc(DocAccessibleParent* aChildDoc,
                                  uint64_t aParentID, bool aCreating)
 {
   // We do not use GetAccessible here because we want to be sure to not get the
   // document it self.
@@ -390,26 +393,28 @@ DocAccessibleParent::AddChildDoc(DocAcce
 
   if (aCreating) {
     ProxyCreated(aChildDoc, Interfaces::DOCUMENT | Interfaces::HYPERTEXT);
   }
 
   return true;
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleParent::RecvShutdown()
 {
   Destroy();
 
   if (!static_cast<dom::TabParent*>(Manager())->IsDestroyed()) {
-  return PDocAccessibleParent::Send__delete__(this);
+    if (!PDocAccessibleParent::Send__delete__(this)) {
+      return IPC_FAIL_NO_REASON(this);
+    }
   }
 
-  return true;
+  return IPC_OK();
 }
 
 void
 DocAccessibleParent::Destroy()
 {
   NS_ASSERTION(mChildDocs.IsEmpty(),
                "why weren't the child docs destroyed already?");
   MOZ_ASSERT(!mShutdown);
@@ -460,28 +465,28 @@ DocAccessibleParent::GetXPCAccessible(Pr
 
 #if defined(XP_WIN)
 /**
  * @param aCOMProxy COM Proxy to the document in the content process.
  * @param aParentCOMProxy COM Proxy to the OuterDocAccessible that is
  *        the parent of the document. The content process will use this
  *        proxy when traversing up across the content/chrome boundary.
  */
-bool
+mozilla::ipc::IPCResult
 DocAccessibleParent::RecvCOMProxy(const IAccessibleHolder& aCOMProxy,
                                   IAccessibleHolder* aParentCOMProxy)
 {
   RefPtr<IAccessible> ptr(aCOMProxy.Get());
   SetCOMInterface(ptr);
 
   Accessible* outerDoc = OuterDocOfRemoteBrowser();
   IAccessible* rawNative = nullptr;
   if (outerDoc) {
     outerDoc->GetNativeInterface((void**) &rawNative);
   }
 
   aParentCOMProxy->Set(IAccessibleHolder::COMPtrType(rawNative));
-  return true;
+  return IPC_OK();
 }
 #endif // defined(XP_WIN)
 
 } // a11y
 } // mozilla
--- a/accessible/ipc/DocAccessibleParent.h
+++ b/accessible/ipc/DocAccessibleParent.h
@@ -42,54 +42,54 @@ public:
   bool IsTopLevel() const { return mTopLevel; }
 
   bool IsShutdown() const { return mShutdown; }
 
   /*
    * Called when a message from a document in a child process notifies the main
    * process it is firing an event.
    */
-  virtual bool RecvEvent(const uint64_t& aID, const uint32_t& aType)
+  virtual mozilla::ipc::IPCResult RecvEvent(const uint64_t& aID, const uint32_t& aType)
     override;
 
-  virtual bool RecvShowEvent(const ShowEventData& aData, const bool& aFromUser)
+  virtual mozilla::ipc::IPCResult RecvShowEvent(const ShowEventData& aData, const bool& aFromUser)
     override;
-  virtual bool RecvHideEvent(const uint64_t& aRootID, const bool& aFromUser)
+  virtual mozilla::ipc::IPCResult RecvHideEvent(const uint64_t& aRootID, const bool& aFromUser)
     override;
-  virtual bool RecvStateChangeEvent(const uint64_t& aID,
-                                    const uint64_t& aState,
-                                    const bool& aEnabled) override final;
+  virtual mozilla::ipc::IPCResult RecvStateChangeEvent(const uint64_t& aID,
+                                                       const uint64_t& aState,
+                                                       const bool& aEnabled) override final;
 
-  virtual bool RecvCaretMoveEvent(const uint64_t& aID, const int32_t& aOffset)
+  virtual mozilla::ipc::IPCResult RecvCaretMoveEvent(const uint64_t& aID, const int32_t& aOffset)
     override final;
 
-  virtual bool RecvTextChangeEvent(const uint64_t& aID, const nsString& aStr,
-                                   const int32_t& aStart, const uint32_t& aLen,
-                                   const bool& aIsInsert,
-                                   const bool& aFromUser) override;
+  virtual mozilla::ipc::IPCResult RecvTextChangeEvent(const uint64_t& aID, const nsString& aStr,
+                                                      const int32_t& aStart, const uint32_t& aLen,
+                                                      const bool& aIsInsert,
+                                                      const bool& aFromUser) override;
 
-  virtual bool RecvSelectionEvent(const uint64_t& aID,
-                                  const uint64_t& aWidgetID,
-                                  const uint32_t& aType) override;
+  virtual mozilla::ipc::IPCResult RecvSelectionEvent(const uint64_t& aID,
+                                                     const uint64_t& aWidgetID,
+                                                     const uint32_t& aType) override;
 
-  virtual bool RecvRoleChangedEvent(const uint32_t& aRole) override final;
+  virtual mozilla::ipc::IPCResult RecvRoleChangedEvent(const uint32_t& aRole) override final;
 
-  virtual bool RecvBindChildDoc(PDocAccessibleParent* aChildDoc, const uint64_t& aID) override;
+  virtual mozilla::ipc::IPCResult RecvBindChildDoc(PDocAccessibleParent* aChildDoc, const uint64_t& aID) override;
 
   void Unbind()
   {
     mParent = nullptr;
     if (DocAccessibleParent* parent = ParentDoc()) {
       parent->mChildDocs.RemoveElement(this);
     }
 
     mParentDoc = nullptr;
   }
 
-  virtual bool RecvShutdown() override;
+  virtual mozilla::ipc::IPCResult RecvShutdown() override;
   void Destroy();
   virtual void ActorDestroy(ActorDestroyReason aWhy) override
   {
     MOZ_DIAGNOSTIC_ASSERT(CheckDocTree());
     if (!mShutdown)
       Destroy();
   }
 
@@ -139,18 +139,18 @@ public:
   const ProxyAccessible* GetAccessible(uintptr_t aID) const
     { return const_cast<DocAccessibleParent*>(this)->GetAccessible(aID); }
 
   size_t ChildDocCount() const { return mChildDocs.Length(); }
   const DocAccessibleParent* ChildDocAt(size_t aIdx) const
     { return mChildDocs[aIdx]; }
 
 #if defined(XP_WIN)
-  virtual bool RecvCOMProxy(const IAccessibleHolder& aCOMProxy,
-                            IAccessibleHolder* aParentCOMProxy) override;
+  virtual mozilla::ipc::IPCResult RecvCOMProxy(const IAccessibleHolder& aCOMProxy,
+                                               IAccessibleHolder* aParentCOMProxy) override;
 #endif
 
 private:
 
   class ProxyEntry : public PLDHashEntryHdr
   {
   public:
     explicit ProxyEntry(const void*) : mProxy(nullptr) {}
--- a/accessible/ipc/other/DocAccessibleChild.cpp
+++ b/accessible/ipc/other/DocAccessibleChild.cpp
@@ -80,99 +80,102 @@ DocAccessibleChild::IdToTableCellAccessi
 
 TableAccessible*
 DocAccessibleChild::IdToTableAccessible(const uint64_t& aID) const
 {
   Accessible* acc = IdToAccessible(aID);
   return (acc && acc->IsTable()) ? acc->AsTable() : nullptr;
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvState(const uint64_t& aID, uint64_t* aState)
 {
   Accessible* acc = IdToAccessible(aID);
   if (!acc) {
     *aState = states::DEFUNCT;
-    return true;
+    return IPC_OK();
   }
 
   *aState = acc->State();
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvNativeState(const uint64_t& aID, uint64_t* aState)
 {
   Accessible* acc = IdToAccessible(aID);
   if (!acc) {
     *aState = states::DEFUNCT;
-    return true;
+    return IPC_OK();
   }
 
   *aState = acc->NativeState();
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvName(const uint64_t& aID, nsString* aName)
 {
   Accessible* acc = IdToAccessible(aID);
   if (!acc)
-    return true;
+    return IPC_OK();
 
   acc->Name(*aName);
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvValue(const uint64_t& aID, nsString* aValue)
 {
   Accessible* acc = IdToAccessible(aID);
   if (!acc) {
-    return true;
+    return IPC_OK();
   }
 
   acc->Value(*aValue);
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvHelp(const uint64_t& aID, nsString* aHelp)
 {
   Accessible* acc = IdToAccessible(aID);
   if (!acc) {
-    return true;
+    return IPC_OK();
   }
 
   acc->Help(*aHelp);
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvDescription(const uint64_t& aID, nsString* aDesc)
 {
   Accessible* acc = IdToAccessible(aID);
   if (!acc)
-    return true;
+    return IPC_OK();
 
   acc->Description(*aDesc);
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvAttributes(const uint64_t& aID, nsTArray<Attribute>* aAttributes)
 {
   Accessible* acc = IdToAccessible(aID);
   if (!acc)
-    return true;
+    return IPC_OK();
 
   nsCOMPtr<nsIPersistentProperties> props = acc->Attributes();
-  return PersistentPropertiesToArray(props, aAttributes);
+  if (!PersistentPropertiesToArray(props, aAttributes)) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
 }
 
 bool
 DocAccessibleChild::PersistentPropertiesToArray(nsIPersistentProperties* aProps,
                                                 nsTArray<Attribute>* aAttributes)
 {
   if (!aProps) {
     return true;
@@ -199,31 +202,31 @@ DocAccessibleChild::PersistentProperties
     NS_ENSURE_SUCCESS(rv, false);
 
     aAttributes->AppendElement(Attribute(name, value));
     }
 
   return true;
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvRelationByType(const uint64_t& aID,
                                        const uint32_t& aType,
                                        nsTArray<uint64_t>* aTargets)
 {
   Accessible* acc = IdToAccessible(aID);
   if (!acc)
-    return true;
+    return IPC_OK();
 
   auto type = static_cast<RelationType>(aType);
   Relation rel = acc->RelationByType(type);
   while (Accessible* target = rel.Next())
     aTargets->AppendElement(reinterpret_cast<uintptr_t>(target));
 
-  return true;
+  return IPC_OK();
 }
 
 static void
 AddRelation(Accessible* aAcc, RelationType aType,
             nsTArray<RelationTargets>* aTargets)
 {
   Relation rel = aAcc->RelationByType(aType);
   nsTArray<uint64_t> targets;
@@ -233,309 +236,315 @@ AddRelation(Accessible* aAcc, RelationTy
   if (!targets.IsEmpty()) {
     RelationTargets* newRelation =
       aTargets->AppendElement(RelationTargets(static_cast<uint32_t>(aType),
                                               nsTArray<uint64_t>()));
     newRelation->Targets().SwapElements(targets);
   }
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvRelations(const uint64_t& aID,
                                   nsTArray<RelationTargets>* aRelations)
 {
   Accessible* acc = IdToAccessible(aID);
   if (!acc)
-    return true;
+    return IPC_OK();
 
 #define RELATIONTYPE(gecko, s, a, m, i) AddRelation(acc, RelationType::gecko, aRelations);
 
 #include "RelationTypeMap.h"
 #undef RELATIONTYPE
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvIsSearchbox(const uint64_t& aID, bool* aRetVal)
 {
   Accessible* acc = IdToAccessible(aID);
   if (!acc)
-    return true;
+    return IPC_OK();
 
   *aRetVal = acc->IsSearchbox();
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvLandmarkRole(const uint64_t& aID, nsString* aLandmark)
 {
   Accessible* acc = IdToAccessible(aID);
   if (!acc) {
-    return true;
+    return IPC_OK();
   }
 
   if (nsIAtom* roleAtom = acc->LandmarkRole()) {
     roleAtom->ToString(*aLandmark);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvARIARoleAtom(const uint64_t& aID, nsString* aRole)
 {
   Accessible* acc = IdToAccessible(aID);
   if (!acc) {
-    return true;
+    return IPC_OK();
   }
 
   if (const nsRoleMapEntry* roleMap = acc->ARIARoleMap()) {
     if (nsIAtom* roleAtom = *(roleMap->roleAtom)) {
       roleAtom->ToString(*aRole);
     }
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvGetLevelInternal(const uint64_t& aID, int32_t* aLevel)
 {
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     *aLevel = acc->GetLevelInternal();
   }
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvScrollTo(const uint64_t& aID,
                                  const uint32_t& aScrollType)
 {
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     nsCoreUtils::ScrollTo(acc->Document()->PresShell(), acc->GetContent(),
                           aScrollType);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvScrollToPoint(const uint64_t& aID, const uint32_t& aScrollType, const int32_t& aX, const int32_t& aY)
 {
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     acc->ScrollToPoint(aScrollType, aX, aY);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvCaretLineNumber(const uint64_t& aID, int32_t* aLineNumber)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   *aLineNumber = acc && acc->IsTextRole() ? acc->CaretLineNumber() : 0;
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvCaretOffset(const uint64_t& aID, int32_t* aOffset)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   *aOffset = acc && acc->IsTextRole() ? acc->CaretOffset() : 0;
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvSetCaretOffset(const uint64_t& aID,
                                        const int32_t& aOffset)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc && acc->IsTextRole() && acc->IsValidOffset(aOffset)) {
     acc->SetCaretOffset(aOffset);
   }
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvCharacterCount(const uint64_t& aID, int32_t* aCount)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   *aCount = acc ? acc->CharacterCount() : 0;
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvSelectionCount(const uint64_t& aID, int32_t* aCount)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   *aCount = acc ? acc->SelectionCount() : 0;
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTextSubstring(const uint64_t& aID,
                                       const int32_t& aStartOffset,
                                       const int32_t& aEndOffset,
                                       nsString* aText, bool* aValid)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (!acc) {
-    return true;
+    return IPC_OK();
   }
 
   *aValid = acc->IsValidRange(aStartOffset, aEndOffset);
   acc->TextSubstring(aStartOffset, aEndOffset, *aText);
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvGetTextAfterOffset(const uint64_t& aID,
                                            const int32_t& aOffset,
                                            const int32_t& aBoundaryType,
                                            nsString* aText,
                                            int32_t* aStartOffset,
                                            int32_t* aEndOffset)
 {
   *aStartOffset = 0;
   *aEndOffset = 0;
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc) {
     acc->TextAfterOffset(aOffset, aBoundaryType,
                          aStartOffset, aEndOffset, *aText);
   }
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvGetTextAtOffset(const uint64_t& aID,
                                         const int32_t& aOffset,
                                         const int32_t& aBoundaryType,
                                         nsString* aText,
                                         int32_t* aStartOffset,
                                         int32_t* aEndOffset)
 {
   *aStartOffset = 0;
   *aEndOffset = 0;
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc) {
     acc->TextAtOffset(aOffset, aBoundaryType,
                       aStartOffset, aEndOffset, *aText);
   }
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvGetTextBeforeOffset(const uint64_t& aID,
                                             const int32_t& aOffset,
                                             const int32_t& aBoundaryType,
                                             nsString* aText,
                                             int32_t* aStartOffset,
                                             int32_t* aEndOffset)
 {
   *aStartOffset = 0;
   *aEndOffset = 0;
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc) {
     acc->TextBeforeOffset(aOffset, aBoundaryType,
                           aStartOffset, aEndOffset, *aText);
   }
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvCharAt(const uint64_t& aID,
                                const int32_t& aOffset,
                                uint16_t* aChar)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   *aChar = acc && acc->IsTextRole() ?
     static_cast<uint16_t>(acc->CharAt(aOffset)) : 0;
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTextAttributes(const uint64_t& aID,
                                        const bool& aIncludeDefAttrs,
                                        const int32_t& aOffset,
                                        nsTArray<Attribute>* aAttributes,
                                        int32_t* aStartOffset,
                                        int32_t* aEndOffset)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (!acc || !acc->IsTextRole()) {
-    return true;
+    return IPC_OK();
   }
 
   nsCOMPtr<nsIPersistentProperties> props =
     acc->TextAttributes(aIncludeDefAttrs, aOffset, aStartOffset, aEndOffset);
-  return PersistentPropertiesToArray(props, aAttributes);
+  if (!PersistentPropertiesToArray(props, aAttributes)) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvDefaultTextAttributes(const uint64_t& aID,
                                               nsTArray<Attribute> *aAttributes)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (!acc || !acc->IsTextRole()) {
-    return true;
+    return IPC_OK();
   }
 
   nsCOMPtr<nsIPersistentProperties> props = acc->DefaultTextAttributes();
-  return PersistentPropertiesToArray(props, aAttributes);
+  if (!PersistentPropertiesToArray(props, aAttributes)) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTextBounds(const uint64_t& aID,
                                    const int32_t& aStartOffset,
                                    const int32_t& aEndOffset,
                                    const uint32_t& aCoordType,
                                    nsIntRect* aRetVal)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc && acc->IsTextRole()) {
     *aRetVal = acc->TextBounds(aStartOffset, aEndOffset, aCoordType);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvCharBounds(const uint64_t& aID,
                                    const int32_t& aOffset,
                                    const uint32_t& aCoordType,
                                    nsIntRect* aRetVal)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc && acc->IsTextRole()) {
     *aRetVal = acc->CharBounds(aOffset, aCoordType);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvOffsetAtPoint(const uint64_t& aID,
                                       const int32_t& aX,
                                       const int32_t& aY,
                                       const uint32_t& aCoordType,
                                       int32_t* aRetVal)
 {
   *aRetVal = -1;
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc && acc->IsTextRole()) {
     *aRetVal = acc->OffsetAtPoint(aX, aY, aCoordType);
   }
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvSelectionBoundsAt(const uint64_t& aID,
                                           const int32_t& aSelectionNum,
                                           bool* aSucceeded,
                                           nsString* aData,
                                           int32_t* aStartOffset,
                                           int32_t* aEndOffset)
 {
   *aSucceeded = false;
@@ -545,581 +554,581 @@ DocAccessibleChild::RecvSelectionBoundsA
   if (acc && acc->IsTextRole()) {
     *aSucceeded =
       acc->SelectionBoundsAt(aSelectionNum, aStartOffset, aEndOffset);
     if (*aSucceeded) {
       acc->TextSubstring(*aStartOffset, *aEndOffset, *aData);
     }
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvSetSelectionBoundsAt(const uint64_t& aID,
                                              const int32_t& aSelectionNum,
                                              const int32_t& aStartOffset,
                                              const int32_t& aEndOffset,
                                              bool* aSucceeded)
 {
   *aSucceeded = false;
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc && acc->IsTextRole()) {
     *aSucceeded =
       acc->SetSelectionBoundsAt(aSelectionNum, aStartOffset, aEndOffset);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvAddToSelection(const uint64_t& aID,
                                        const int32_t& aStartOffset,
                                        const int32_t& aEndOffset,
                                        bool* aSucceeded)
 {
   *aSucceeded = false;
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc && acc->IsTextRole()) {
     *aSucceeded = acc->AddToSelection(aStartOffset, aEndOffset);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvRemoveFromSelection(const uint64_t& aID,
                                             const int32_t& aSelectionNum,
                                             bool* aSucceeded)
 {
   *aSucceeded = false;
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc && acc->IsTextRole()) {
     *aSucceeded = acc->RemoveFromSelection(aSelectionNum);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvScrollSubstringTo(const uint64_t& aID,
                                           const int32_t& aStartOffset,
                                           const int32_t& aEndOffset,
                                           const uint32_t& aScrollType)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc) {
     acc->ScrollSubstringTo(aStartOffset, aEndOffset, aScrollType);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvScrollSubstringToPoint(const uint64_t& aID,
                                                const int32_t& aStartOffset,
                                                const int32_t& aEndOffset,
                                                const uint32_t& aCoordinateType,
                                                const int32_t& aX,
                                                const int32_t& aY)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc) {
     acc->ScrollSubstringToPoint(aStartOffset, aEndOffset, aCoordinateType,
                                 aX, aY);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvText(const uint64_t& aID,
                              nsString* aText)
 {
   TextLeafAccessible* acc = IdToTextLeafAccessible(aID);
   if (acc) {
     *aText = acc->Text();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvReplaceText(const uint64_t& aID,
                                     const nsString& aText)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc && acc->IsTextRole()) {
     acc->ReplaceText(aText);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvInsertText(const uint64_t& aID,
                                    const nsString& aText,
                                    const int32_t& aPosition, bool* aValid)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc && acc->IsTextRole()) {
     *aValid = acc->IsValidOffset(aPosition);
     acc->InsertText(aText, aPosition);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvCopyText(const uint64_t& aID,
                                  const int32_t& aStartPos,
                                  const int32_t& aEndPos, bool* aValid)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc && acc->IsTextRole()) {
     acc->CopyText(aStartPos, aEndPos);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvCutText(const uint64_t& aID,
                                 const int32_t& aStartPos,
                                 const int32_t& aEndPos, bool* aValid)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc && acc->IsTextRole()) {
     *aValid = acc->IsValidRange(aStartPos, aEndPos);
     acc->CutText(aStartPos, aEndPos);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvDeleteText(const uint64_t& aID,
                                    const int32_t& aStartPos,
                                    const int32_t& aEndPos, bool* aValid)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc && acc->IsTextRole()) {
     *aValid = acc->IsValidRange(aStartPos, aEndPos);
     acc->DeleteText(aStartPos, aEndPos);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvPasteText(const uint64_t& aID,
                                   const int32_t& aPosition, bool* aValid)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc && acc->IsTextRole()) {
     *aValid = acc->IsValidOffset(aPosition);
     acc->PasteText(aPosition);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvImagePosition(const uint64_t& aID,
                                       const uint32_t& aCoordType,
                                       nsIntPoint* aRetVal)
 {
   ImageAccessible* acc = IdToImageAccessible(aID);
   if (acc) {
     *aRetVal = acc->Position(aCoordType);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvImageSize(const uint64_t& aID,
                                   nsIntSize* aRetVal)
 {
 
   ImageAccessible* acc = IdToImageAccessible(aID);
   if (acc) {
     *aRetVal = acc->Size();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvStartOffset(const uint64_t& aID,
                                     uint32_t* aRetVal,
                                     bool* aOk)
 {
   Accessible* acc = IdToAccessibleLink(aID);
   if (acc) {
     *aRetVal = acc->StartOffset();
     *aOk = true;
   } else {
     *aRetVal = 0;
     *aOk = false;
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvEndOffset(const uint64_t& aID,
                                   uint32_t* aRetVal,
                                   bool* aOk)
 {
   Accessible* acc = IdToAccessibleLink(aID);
   if (acc) {
     *aRetVal = acc->EndOffset();
     *aOk = true;
   } else {
     *aRetVal = 0;
     *aOk = false;
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvIsLinkValid(const uint64_t& aID,
                                     bool* aRetVal)
 {
   Accessible* acc = IdToAccessibleLink(aID);
   if (acc) {
     *aRetVal = acc->IsLinkValid();
   } else {
     *aRetVal = false;
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvAnchorCount(const uint64_t& aID,
                                     uint32_t* aRetVal,
                                     bool* aOk)
 {
   Accessible* acc = IdToAccessibleLink(aID);
   if (acc) {
     *aRetVal = acc->AnchorCount();
     *aOk = true;
   } else {
     *aRetVal = 0;
     *aOk = false;
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvAnchorURIAt(const uint64_t& aID,
                                     const uint32_t& aIndex,
                                     nsCString* aURI,
                                     bool* aOk)
 {
   Accessible* acc = IdToAccessibleLink(aID);
   *aOk = false;
   if (acc) {
     nsCOMPtr<nsIURI> uri = acc->AnchorURIAt(aIndex);
     if (uri) {
       uri->GetSpec(*aURI);
       *aOk = true;
     }
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvAnchorAt(const uint64_t& aID,
                                  const uint32_t& aIndex,
                                  uint64_t* aIDOfAnchor,
                                  bool* aOk)
 {
   *aIDOfAnchor = 0;
   *aOk = false;
   Accessible* acc = IdToAccessibleLink(aID);
   if (acc) {
     Accessible* anchor = acc->AnchorAt(aIndex);
     if (anchor) {
       *aIDOfAnchor = reinterpret_cast<uint64_t>(anchor->UniqueID());
       *aOk = true;
     }
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvLinkCount(const uint64_t& aID,
                                   uint32_t* aCount)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   *aCount = acc ? acc->LinkCount() : 0;
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvLinkAt(const uint64_t& aID,
                                const uint32_t& aIndex,
                                uint64_t* aIDOfLink,
                                bool* aOk)
 {
   *aIDOfLink = 0;
   *aOk = false;
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   if (acc) {
     Accessible* link = acc->LinkAt(aIndex);
     if (link) {
       *aIDOfLink = reinterpret_cast<uint64_t>(link->UniqueID());
       *aOk = true;
     }
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvLinkIndexOf(const uint64_t& aID,
                                     const uint64_t& aLinkID,
                                     int32_t* aIndex)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   Accessible* link = IdToAccessible(aLinkID);
   *aIndex = -1;
   if (acc && link) {
     *aIndex = acc->LinkIndexOf(link);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvLinkIndexAtOffset(const uint64_t& aID,
                                           const uint32_t& aOffset,
                                           int32_t* aIndex)
 {
   HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
   *aIndex = acc ? acc->LinkIndexAtOffset(aOffset) : -1;
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableOfACell(const uint64_t& aID,
                                      uint64_t* aTableID,
                                      bool* aOk)
 {
   *aTableID = 0;
   *aOk = false;
   TableCellAccessible* acc = IdToTableCellAccessible(aID);
   if (acc) {
     TableAccessible* table = acc->Table();
     if (table) {
       *aTableID = reinterpret_cast<uint64_t>(table->AsAccessible()->UniqueID());
       *aOk = true;
     }
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvColIdx(const uint64_t& aID,
                                uint32_t* aIndex)
 {
   *aIndex = 0;
   TableCellAccessible* acc = IdToTableCellAccessible(aID);
   if (acc) {
     *aIndex = acc->ColIdx();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvRowIdx(const uint64_t& aID,
                                uint32_t* aIndex)
 {
   *aIndex = 0;
   TableCellAccessible* acc = IdToTableCellAccessible(aID);
   if (acc) {
     *aIndex = acc->RowIdx();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvGetPosition(const uint64_t& aID,
                                uint32_t* aColIdx, uint32_t* aRowIdx)
 {
   *aColIdx = 0;
   *aRowIdx = 0;
   TableCellAccessible* acc = IdToTableCellAccessible(aID);
   if (acc) {
     *aColIdx = acc->ColIdx();
     *aRowIdx = acc->RowIdx();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvGetColRowExtents(const uint64_t& aID,
                                          uint32_t* aColIdx, uint32_t* aRowIdx,
                                          uint32_t* aColExtent, uint32_t* aRowExtent)
 {
   *aColIdx = 0;
   *aRowIdx = 0;
   *aColExtent = 0;
   *aRowExtent = 0;
   TableCellAccessible* acc = IdToTableCellAccessible(aID);
   if (acc) {
     *aColIdx = acc->ColIdx();
     *aRowIdx = acc->RowIdx();
     *aColExtent = acc->ColExtent();
     *aRowExtent = acc->RowExtent();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvColExtent(const uint64_t& aID,
                                   uint32_t* aExtent)
 {
   *aExtent = 0;
   TableCellAccessible* acc = IdToTableCellAccessible(aID);
   if (acc) {
     *aExtent = acc->ColExtent();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvRowExtent(const uint64_t& aID,
                                   uint32_t* aExtent)
 {
   *aExtent = 0;
   TableCellAccessible* acc = IdToTableCellAccessible(aID);
   if (acc) {
     *aExtent = acc->RowExtent();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvColHeaderCells(const uint64_t& aID,
                                        nsTArray<uint64_t>* aCells)
 {
   TableCellAccessible* acc = IdToTableCellAccessible(aID);
   if (acc) {
     AutoTArray<Accessible*, 10> headerCells;
     acc->ColHeaderCells(&headerCells);
     aCells->SetCapacity(headerCells.Length());
     for (uint32_t i = 0; i < headerCells.Length(); ++i) {
       aCells->AppendElement(
         reinterpret_cast<uint64_t>(headerCells[i]->UniqueID()));
     }
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvRowHeaderCells(const uint64_t& aID,
                                        nsTArray<uint64_t>* aCells)
 {
   TableCellAccessible* acc = IdToTableCellAccessible(aID);
   if (acc) {
     AutoTArray<Accessible*, 10> headerCells;
     acc->RowHeaderCells(&headerCells);
     aCells->SetCapacity(headerCells.Length());
     for (uint32_t i = 0; i < headerCells.Length(); ++i) {
       aCells->AppendElement(
         reinterpret_cast<uint64_t>(headerCells[i]->UniqueID()));
     }
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvIsCellSelected(const uint64_t& aID,
                                        bool* aSelected)
 {
   TableCellAccessible* acc = IdToTableCellAccessible(aID);
   *aSelected = acc && acc->Selected();
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableCaption(const uint64_t& aID,
                                      uint64_t* aCaptionID,
                                      bool* aOk)
 {
   *aCaptionID = 0;
   *aOk = false;
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     Accessible* caption = acc->Caption();
     if (caption) {
       *aCaptionID = reinterpret_cast<uint64_t>(caption->UniqueID());
       *aOk = true;
     }
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableSummary(const uint64_t& aID,
                                      nsString* aSummary)
 {
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     acc->Summary(*aSummary);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableColumnCount(const uint64_t& aID,
                                          uint32_t* aColCount)
 {
   *aColCount = 0;
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     *aColCount = acc->ColCount();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableRowCount(const uint64_t& aID,
                                       uint32_t* aRowCount)
 {
   *aRowCount = 0;
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     *aRowCount = acc->RowCount();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableCellAt(const uint64_t& aID,
                                     const uint32_t& aRow,
                                     const uint32_t& aCol,
                                     uint64_t* aCellID,
                                     bool* aOk)
 {
   *aCellID = 0;
   *aOk = false;
@@ -1127,332 +1136,332 @@ DocAccessibleChild::RecvTableCellAt(cons
   if (acc) {
     Accessible* cell = acc->CellAt(aRow, aCol);
     if (cell) {
       *aCellID = reinterpret_cast<uint64_t>(cell->UniqueID());
       *aOk = true;
     }
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableCellIndexAt(const uint64_t& aID,
                                          const uint32_t& aRow,
                                          const uint32_t& aCol,
                                          int32_t* aIndex)
 {
   *aIndex = -1;
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     *aIndex = acc->CellIndexAt(aRow, aCol);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableColumnIndexAt(const uint64_t& aID,
                                            const uint32_t& aCellIndex,
                                            int32_t* aCol)
 {
   *aCol = -1;
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     *aCol = acc->ColIndexAt(aCellIndex);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableRowIndexAt(const uint64_t& aID,
                                         const uint32_t& aCellIndex,
                                         int32_t* aRow)
 {
   *aRow = -1;
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     *aRow = acc->RowIndexAt(aCellIndex);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableRowAndColumnIndicesAt(const uint64_t& aID,
                                                   const uint32_t& aCellIndex,
                                                   int32_t* aRow,
                                                   int32_t* aCol)
 {
   *aRow = -1;
   *aCol = -1;
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     acc->RowAndColIndicesAt(aCellIndex, aRow, aCol);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableColumnExtentAt(const uint64_t& aID,
                                             const uint32_t& aRow,
                                             const uint32_t& aCol,
                                             uint32_t* aExtent)
 {
   *aExtent = 0;
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     *aExtent = acc->ColExtentAt(aRow, aCol);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableRowExtentAt(const uint64_t& aID,
                                          const uint32_t& aRow,
                                          const uint32_t& aCol,
                                          uint32_t* aExtent)
 {
   *aExtent = 0;
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     *aExtent = acc->RowExtentAt(aRow, aCol);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableColumnDescription(const uint64_t& aID,
                                                const uint32_t& aCol,
                                                nsString* aDescription)
 {
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     acc->ColDescription(aCol, *aDescription);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableRowDescription(const uint64_t& aID,
                                             const uint32_t& aRow,
                                             nsString* aDescription)
 {
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     acc->RowDescription(aRow, *aDescription);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableColumnSelected(const uint64_t& aID,
                                             const uint32_t& aCol,
                                             bool* aSelected)
 {
   *aSelected = false;
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     *aSelected = acc->IsColSelected(aCol);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableRowSelected(const uint64_t& aID,
                                          const uint32_t& aRow,
                                          bool* aSelected)
 {
   *aSelected = false;
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     *aSelected = acc->IsRowSelected(aRow);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableCellSelected(const uint64_t& aID,
                                           const uint32_t& aRow,
                                           const uint32_t& aCol,
                                           bool* aSelected)
 {
   *aSelected = false;
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     *aSelected = acc->IsCellSelected(aRow, aCol);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableSelectedCellCount(const uint64_t& aID,
                                                uint32_t* aSelectedCells)
 {
   *aSelectedCells = 0;
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     *aSelectedCells = acc->SelectedCellCount();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableSelectedColumnCount(const uint64_t& aID,
                                                  uint32_t* aSelectedColumns)
 {
   *aSelectedColumns = 0;
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     *aSelectedColumns = acc->SelectedColCount();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableSelectedRowCount(const uint64_t& aID,
                                               uint32_t* aSelectedRows)
 {
   *aSelectedRows = 0;
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     *aSelectedRows = acc->SelectedRowCount();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableSelectedCells(const uint64_t& aID,
                                            nsTArray<uint64_t>* aCellIDs)
 {
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     AutoTArray<Accessible*, 30> cells;
     acc->SelectedCells(&cells);
     aCellIDs->SetCapacity(cells.Length());
     for (uint32_t i = 0; i < cells.Length(); ++i) {
       aCellIDs->AppendElement(
         reinterpret_cast<uint64_t>(cells[i]->UniqueID()));
     }
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableSelectedCellIndices(const uint64_t& aID,
                                                  nsTArray<uint32_t>* aCellIndices)
 {
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     acc->SelectedCellIndices(aCellIndices);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableSelectedColumnIndices(const uint64_t& aID,
                                                    nsTArray<uint32_t>* aColumnIndices)
 {
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     acc->SelectedColIndices(aColumnIndices);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableSelectedRowIndices(const uint64_t& aID,
                                                 nsTArray<uint32_t>* aRowIndices)
 {
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     acc->SelectedRowIndices(aRowIndices);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableSelectColumn(const uint64_t& aID,
                                           const uint32_t& aCol)
 {
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     acc->SelectCol(aCol);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableSelectRow(const uint64_t& aID,
                                        const uint32_t& aRow)
 {
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     acc->SelectRow(aRow);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableUnselectColumn(const uint64_t& aID,
                                             const uint32_t& aCol)
 {
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     acc->UnselectCol(aCol);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableUnselectRow(const uint64_t& aID,
                                          const uint32_t& aRow)
 {
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     acc->UnselectRow(aRow);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTableIsProbablyForLayout(const uint64_t& aID,
                                                  bool* aForLayout)
 {
   *aForLayout = false;
   TableAccessible* acc = IdToTableAccessible(aID);
   if (acc) {
     *aForLayout = acc->IsProbablyLayoutTable();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvAtkTableColumnHeader(const uint64_t& aID,
                                              const int32_t& aCol,
                                              uint64_t* aHeader,
                                              bool* aOk)
 {
   *aHeader = 0;
   *aOk = false;
 
@@ -1462,20 +1471,20 @@ DocAccessibleChild::RecvAtkTableColumnHe
     Accessible* header = AccessibleWrap::GetColumnHeader(acc, aCol);
     if (header) {
       *aHeader = reinterpret_cast<uint64_t>(header->UniqueID());
       *aOk = true;
     }
   }
 #endif
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvAtkTableRowHeader(const uint64_t& aID,
                                           const int32_t& aRow,
                                           uint64_t* aHeader,
                                           bool* aOk)
 {
   *aHeader = 0;
   *aOk = false;
 
@@ -1485,434 +1494,434 @@ DocAccessibleChild::RecvAtkTableRowHeade
     Accessible* header = AccessibleWrap::GetRowHeader(acc, aRow);
     if (header) {
       *aHeader = reinterpret_cast<uint64_t>(header->UniqueID());
       *aOk = true;
     }
   }
 #endif
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvSelectedItems(const uint64_t& aID,
                                       nsTArray<uint64_t>* aSelectedItemIDs)
 {
   Accessible* acc = IdToAccessibleSelect(aID);
   if (acc) {
     AutoTArray<Accessible*, 10> selectedItems;
     acc->SelectedItems(&selectedItems);
     aSelectedItemIDs->SetCapacity(selectedItems.Length());
     for (size_t i = 0; i < selectedItems.Length(); ++i) {
       aSelectedItemIDs->AppendElement(
         reinterpret_cast<uint64_t>(selectedItems[i]->UniqueID()));
     }
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvSelectedItemCount(const uint64_t& aID,
                                           uint32_t* aCount)
 {
   *aCount = 0;
   Accessible* acc = IdToAccessibleSelect(aID);
   if (acc) {
     *aCount = acc->SelectedItemCount();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvGetSelectedItem(const uint64_t& aID,
                                         const uint32_t& aIndex,
                                         uint64_t* aSelected,
                                         bool* aOk)
 {
   *aSelected = 0;
   *aOk = false;
   Accessible* acc = IdToAccessibleSelect(aID);
   if (acc) {
     Accessible* item = acc->GetSelectedItem(aIndex);
     if (item) {
       *aSelected = reinterpret_cast<uint64_t>(item->UniqueID());
       *aOk = true;
     }
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvIsItemSelected(const uint64_t& aID,
                                        const uint32_t& aIndex,
                                        bool* aSelected)
 {
   *aSelected = false;
   Accessible* acc = IdToAccessibleSelect(aID);
   if (acc) {
     *aSelected = acc->IsItemSelected(aIndex);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvAddItemToSelection(const uint64_t& aID,
                                            const uint32_t& aIndex,
                                            bool* aSuccess)
 {
   *aSuccess = false;
   Accessible* acc = IdToAccessibleSelect(aID);
   if (acc) {
     *aSuccess = acc->AddItemToSelection(aIndex);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvRemoveItemFromSelection(const uint64_t& aID,
                                                 const uint32_t& aIndex,
                                                 bool* aSuccess)
 {
   *aSuccess = false;
   Accessible* acc = IdToAccessibleSelect(aID);
   if (acc) {
     *aSuccess = acc->RemoveItemFromSelection(aIndex);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvSelectAll(const uint64_t& aID,
                                   bool* aSuccess)
 {
   *aSuccess = false;
   Accessible* acc = IdToAccessibleSelect(aID);
   if (acc) {
     *aSuccess = acc->SelectAll();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvUnselectAll(const uint64_t& aID,
                                     bool* aSuccess)
 {
   *aSuccess = false;
   Accessible* acc = IdToAccessibleSelect(aID);
   if (acc) {
     *aSuccess = acc->UnselectAll();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTakeSelection(const uint64_t& aID)
 {
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     acc->TakeSelection();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvSetSelected(const uint64_t& aID, const bool& aSelect)
 {
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     acc->SetSelected(aSelect);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvDoAction(const uint64_t& aID,
                                  const uint8_t& aIndex,
                                  bool* aSuccess)
 {
   *aSuccess = false;
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     *aSuccess = acc->DoAction(aIndex);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvActionCount(const uint64_t& aID,
                                     uint8_t* aCount)
 {
   *aCount = 0;
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     *aCount = acc->ActionCount();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvActionDescriptionAt(const uint64_t& aID,
                                             const uint8_t& aIndex,
                                             nsString* aDescription)
 {
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     acc->ActionDescriptionAt(aIndex, *aDescription);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvActionNameAt(const uint64_t& aID,
                                      const uint8_t& aIndex,
                                      nsString* aName)
 {
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     acc->ActionNameAt(aIndex, *aName);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvAccessKey(const uint64_t& aID,
                                   uint32_t* aKey,
                                   uint32_t* aModifierMask)
 {
   *aKey = 0;
   *aModifierMask = 0;
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     KeyBinding kb = acc->AccessKey();
     *aKey = kb.Key();
     *aModifierMask = kb.ModifierMask();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvKeyboardShortcut(const uint64_t& aID,
                                          uint32_t* aKey,
                                          uint32_t* aModifierMask)
 {
   *aKey = 0;
   *aModifierMask = 0;
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     KeyBinding kb = acc->KeyboardShortcut();
     *aKey = kb.Key();
     *aModifierMask = kb.ModifierMask();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvAtkKeyBinding(const uint64_t& aID,
                                       nsString* aResult)
 {
 #ifdef MOZ_ACCESSIBILITY_ATK
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     AccessibleWrap::GetKeyBinding(acc, *aResult);
   }
 #endif
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvCurValue(const uint64_t& aID,
                                  double* aValue)
 {
   *aValue = UnspecifiedNaN<double>();
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     *aValue = acc->CurValue();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvSetCurValue(const uint64_t& aID,
                                     const double& aValue,
                                     bool* aRetVal)
 {
   *aRetVal = false;
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     *aRetVal = acc->SetCurValue(aValue);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvMinValue(const uint64_t& aID,
                                  double* aValue)
 {
   *aValue = UnspecifiedNaN<double>();
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     *aValue = acc->MinValue();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvMaxValue(const uint64_t& aID,
                                  double* aValue)
 {
   *aValue = UnspecifiedNaN<double>();
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     *aValue = acc->MaxValue();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvStep(const uint64_t& aID,
                              double* aStep)
 {
   *aStep = UnspecifiedNaN<double>();
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     *aStep = acc->Step();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTakeFocus(const uint64_t& aID)
 {
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     acc->TakeFocus();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvFocusedChild(const uint64_t& aID,
                                        uint64_t* aChild,
                                        bool* aOk)
 {
   *aChild = 0;
   *aOk = false;
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     Accessible* child = acc->FocusedChild();
     if (child) {
       *aChild = reinterpret_cast<uint64_t>(child->UniqueID());
       *aOk = true;
     }
   }
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvLanguage(const uint64_t& aID,
                                  nsString* aLocale)
 {
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     acc->Language(*aLocale);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvDocType(const uint64_t& aID,
                                 nsString* aType)
 {
   Accessible* acc = IdToAccessible(aID);
   if (acc && acc->IsDoc()) {
     acc->AsDoc()->DocType(*aType);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvTitle(const uint64_t& aID,
                             nsString* aTitle)
 {
   Accessible* acc = IdToAccessible(aID);
   if (acc) {
     mozilla::ErrorResult rv;
     acc->GetContent()->GetTextContent(*aTitle, rv);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvURL(const uint64_t& aID,
                             nsString* aURL)
 {
   Accessible* acc = IdToAccessible(aID);
   if (acc && acc->IsDoc()) {
     acc->AsDoc()->URL(*aURL);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvMimeType(const uint64_t& aID,
                                  nsString* aMime)
 {
   Accessible* acc = IdToAccessible(aID);
   if (acc && acc->IsDoc()) {
     acc->AsDoc()->MimeType(*aMime);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvURLDocTypeMimeType(const uint64_t& aID,
                                            nsString* aURL,
                                            nsString* aDocType,
                                            nsString* aMimeType)
 {
   Accessible* acc = IdToAccessible(aID);
   if (acc && acc->IsDoc()) {
     DocAccessible* doc = acc->AsDoc();
     doc->URL(*aURL);
     doc->DocType(*aDocType);
     doc->MimeType(*aMimeType);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvAccessibleAtPoint(const uint64_t& aID,
                                           const int32_t& aX,
                                           const int32_t& aY,
                                           const bool& aNeedsScreenCoords,
                                           const uint32_t& aWhich,
                                           uint64_t* aResult,
                                           bool* aOk)
 {
@@ -1933,20 +1942,20 @@ DocAccessibleChild::RecvAccessibleAtPoin
       acc->ChildAtPoint(x, y,
                         static_cast<Accessible::EWhichChildAtPoint>(aWhich));
     if (result) {
       *aResult = reinterpret_cast<uint64_t>(result->UniqueID());
       *aOk = true;
     }
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvExtents(const uint64_t& aID,
                                 const bool& aNeedsScreenCoords,
                                 int32_t* aX,
                                 int32_t* aY,
                                 int32_t* aWidth,
                                 int32_t* aHeight)
 {
   *aX = 0;
@@ -1965,34 +1974,34 @@ DocAccessibleChild::RecvExtents(const ui
       }
 
       *aX = screenRect.x;
       *aY = screenRect.y;
       *aWidth = screenRect.width;
       *aHeight = screenRect.height;
     }
   }
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 DocAccessibleChild::RecvDOMNodeID(const uint64_t& aID, nsString* aDOMNodeID)
 {
   Accessible* acc = IdToAccessible(aID);
   if (!acc) {
-    return true;
+    return IPC_OK();
   }
 
   nsIContent* content = acc->GetContent();
   if (!content) {
-    return true;
+    return IPC_OK();
   }
 
   nsIAtom* id = content->GetID();
   if (id) {
     id->ToString(*aDOMNodeID);
   }
 
-  return true;
+  return IPC_OK();
 }
 
 }
 }
--- a/accessible/ipc/other/DocAccessibleChild.h
+++ b/accessible/ipc/other/DocAccessibleChild.h
@@ -35,444 +35,444 @@ public:
   ~DocAccessibleChild()
   {
     MOZ_COUNT_DTOR_INHERITED(DocAccessibleChild, DocAccessibleChildBase);
   }
 
   /*
    * Return the state for the accessible with given ID.
    */
-  virtual bool RecvState(const uint64_t& aID, uint64_t* aState) override;
+  virtual mozilla::ipc::IPCResult RecvState(const uint64_t& aID, uint64_t* aState) override;
 
   /*
    * Return the native state for the accessible with given ID.
    */
-  virtual bool RecvNativeState(const uint64_t& aID, uint64_t* aState) override;
+  virtual mozilla::ipc::IPCResult RecvNativeState(const uint64_t& aID, uint64_t* aState) override;
 
   /*
    * Get the name for the accessible with given id.
    */
-  virtual bool RecvName(const uint64_t& aID, nsString* aName) override;
+  virtual mozilla::ipc::IPCResult RecvName(const uint64_t& aID, nsString* aName) override;
 
-  virtual bool RecvValue(const uint64_t& aID, nsString* aValue) override;
+  virtual mozilla::ipc::IPCResult RecvValue(const uint64_t& aID, nsString* aValue) override;
 
-  virtual bool RecvHelp(const uint64_t& aID, nsString* aHelp) override;
+  virtual mozilla::ipc::IPCResult RecvHelp(const uint64_t& aID, nsString* aHelp) override;
 
   /*
    * Get the description for the accessible with given id.
    */
-  virtual bool RecvDescription(const uint64_t& aID, nsString* aDesc) override;
-  virtual bool RecvRelationByType(const uint64_t& aID, const uint32_t& aType,
-                                  nsTArray<uint64_t>* aTargets) override;
-  virtual bool RecvRelations(const uint64_t& aID,
-                             nsTArray<RelationTargets>* aRelations)
+  virtual mozilla::ipc::IPCResult RecvDescription(const uint64_t& aID, nsString* aDesc) override;
+  virtual mozilla::ipc::IPCResult RecvRelationByType(const uint64_t& aID, const uint32_t& aType,
+                                                     nsTArray<uint64_t>* aTargets) override;
+  virtual mozilla::ipc::IPCResult RecvRelations(const uint64_t& aID,
+                                                nsTArray<RelationTargets>* aRelations)
     override;
 
-  virtual bool RecvIsSearchbox(const uint64_t& aID, bool* aRetVal) override;
+  virtual mozilla::ipc::IPCResult RecvIsSearchbox(const uint64_t& aID, bool* aRetVal) override;
 
-  virtual bool RecvLandmarkRole(const uint64_t& aID, nsString* aLandmark) override;
+  virtual mozilla::ipc::IPCResult RecvLandmarkRole(const uint64_t& aID, nsString* aLandmark) override;
 
-  virtual bool RecvARIARoleAtom(const uint64_t& aID, nsString* aRole) override;
+  virtual mozilla::ipc::IPCResult RecvARIARoleAtom(const uint64_t& aID, nsString* aRole) override;
 
-  virtual bool RecvGetLevelInternal(const uint64_t& aID, int32_t* aLevel) override;
+  virtual mozilla::ipc::IPCResult RecvGetLevelInternal(const uint64_t& aID, int32_t* aLevel) override;
 
-  virtual bool RecvAttributes(const uint64_t& aID,
-                              nsTArray<Attribute> *aAttributes) override;
-  virtual bool RecvScrollTo(const uint64_t& aID, const uint32_t& aScrollType)
+  virtual mozilla::ipc::IPCResult RecvAttributes(const uint64_t& aID,
+                                                 nsTArray<Attribute> *aAttributes) override;
+  virtual mozilla::ipc::IPCResult RecvScrollTo(const uint64_t& aID, const uint32_t& aScrollType)
     override;
-  virtual bool RecvScrollToPoint(const uint64_t& aID,
-                                 const uint32_t& aScrollType,
-                                 const int32_t& aX, const int32_t& aY) override;
+  virtual mozilla::ipc::IPCResult RecvScrollToPoint(const uint64_t& aID,
+                                                    const uint32_t& aScrollType,
+                                                    const int32_t& aX, const int32_t& aY) override;
 
-  virtual bool RecvCaretLineNumber(const uint64_t& aID, int32_t* aLineNumber)
+  virtual mozilla::ipc::IPCResult RecvCaretLineNumber(const uint64_t& aID, int32_t* aLineNumber)
     override;
-  virtual bool RecvCaretOffset(const uint64_t& aID, int32_t* aOffset)
+  virtual mozilla::ipc::IPCResult RecvCaretOffset(const uint64_t& aID, int32_t* aOffset)
     override;
-  virtual bool RecvSetCaretOffset(const uint64_t& aID, const int32_t& aOffset)
+  virtual mozilla::ipc::IPCResult RecvSetCaretOffset(const uint64_t& aID, const int32_t& aOffset)
     override;
 
-  virtual bool RecvCharacterCount(const uint64_t& aID, int32_t* aCount)
+  virtual mozilla::ipc::IPCResult RecvCharacterCount(const uint64_t& aID, int32_t* aCount)
      override;
-  virtual bool RecvSelectionCount(const uint64_t& aID, int32_t* aCount)
+  virtual mozilla::ipc::IPCResult RecvSelectionCount(const uint64_t& aID, int32_t* aCount)
      override;
 
-  virtual bool RecvTextSubstring(const uint64_t& aID,
-                                 const int32_t& aStartOffset,
-                                 const int32_t& aEndOffset, nsString* aText,
-                                 bool* aValid) override;
+  virtual mozilla::ipc::IPCResult RecvTextSubstring(const uint64_t& aID,
+                                                    const int32_t& aStartOffset,
+                                                    const int32_t& aEndOffset, nsString* aText,
+                                                    bool* aValid) override;
 
-  virtual bool RecvGetTextAfterOffset(const uint64_t& aID,
-                                      const int32_t& aOffset,
-                                      const int32_t& aBoundaryType,
-                                      nsString* aText, int32_t* aStartOffset,
-                                      int32_t* aEndOffset) override;
-  virtual bool RecvGetTextAtOffset(const uint64_t& aID,
-                                   const int32_t& aOffset,
-                                   const int32_t& aBoundaryType,
-                                   nsString* aText, int32_t* aStartOffset,
-                                   int32_t* aEndOffset) override;
-  virtual bool RecvGetTextBeforeOffset(const uint64_t& aID,
-                                       const int32_t& aOffset,
-                                       const int32_t& aBoundaryType,
-                                       nsString* aText, int32_t* aStartOffset,
-                                       int32_t* aEndOffset) override;
+  virtual mozilla::ipc::IPCResult RecvGetTextAfterOffset(const uint64_t& aID,
+                                                         const int32_t& aOffset,
+                                                         const int32_t& aBoundaryType,
+                                                         nsString* aText, int32_t* aStartOffset,
+                                                         int32_t* aEndOffset) override;
+  virtual mozilla::ipc::IPCResult RecvGetTextAtOffset(const uint64_t& aID,
+                                                      const int32_t& aOffset,
+                                                      const int32_t& aBoundaryType,
+                                                      nsString* aText, int32_t* aStartOffset,
+                                                      int32_t* aEndOffset) override;
+  virtual mozilla::ipc::IPCResult RecvGetTextBeforeOffset(const uint64_t& aID,
+                                                          const int32_t& aOffset,
+                                                          const int32_t& aBoundaryType,
+                                                          nsString* aText, int32_t* aStartOffset,
+                                                          int32_t* aEndOffset) override;
 
-  virtual bool RecvCharAt(const uint64_t& aID,
-                          const int32_t& aOffset,
-                          uint16_t* aChar) override;
+  virtual mozilla::ipc::IPCResult RecvCharAt(const uint64_t& aID,
+                                             const int32_t& aOffset,
+                                             uint16_t* aChar) override;
 
-  virtual bool RecvTextAttributes(const uint64_t& aID,
-                                  const bool& aIncludeDefAttrs,
-                                  const int32_t& aOffset,
-                                  nsTArray<Attribute>* aAttributes,
-                                  int32_t* aStartOffset,
-                                  int32_t* aEndOffset)
+  virtual mozilla::ipc::IPCResult RecvTextAttributes(const uint64_t& aID,
+                                                     const bool& aIncludeDefAttrs,
+                                                     const int32_t& aOffset,
+                                                     nsTArray<Attribute>* aAttributes,
+                                                     int32_t* aStartOffset,
+                                                     int32_t* aEndOffset)
     override;
 
-  virtual bool RecvDefaultTextAttributes(const uint64_t& aID,
-                                         nsTArray<Attribute>* aAttributes)
+  virtual mozilla::ipc::IPCResult RecvDefaultTextAttributes(const uint64_t& aID,
+                                                            nsTArray<Attribute>* aAttributes)
     override;
 
-  virtual bool RecvTextBounds(const uint64_t& aID,
-                              const int32_t& aStartOffset,
-                              const int32_t& aEndOffset,
-                              const uint32_t& aCoordType,
-                              nsIntRect* aRetVal) override;
+  virtual mozilla::ipc::IPCResult RecvTextBounds(const uint64_t& aID,
+                                                 const int32_t& aStartOffset,
+                                                 const int32_t& aEndOffset,
+                                                 const uint32_t& aCoordType,
+                                                 nsIntRect* aRetVal) override;
 
-  virtual bool RecvCharBounds(const uint64_t& aID,
-                              const int32_t& aOffset,
-                              const uint32_t& aCoordType,
-                              nsIntRect* aRetVal) override;
+  virtual mozilla::ipc::IPCResult RecvCharBounds(const uint64_t& aID,
+                                                 const int32_t& aOffset,
+                                                 const uint32_t& aCoordType,
+                                                 nsIntRect* aRetVal) override;
 
-  virtual bool RecvOffsetAtPoint(const uint64_t& aID,
-                                 const int32_t& aX,
-                                 const int32_t& aY,
-                                 const uint32_t& aCoordType,
-                                 int32_t* aRetVal) override;
+  virtual mozilla::ipc::IPCResult RecvOffsetAtPoint(const uint64_t& aID,
+                                                    const int32_t& aX,
+                                                    const int32_t& aY,
+                                                    const uint32_t& aCoordType,
+                                                    int32_t* aRetVal) override;
 
-  virtual bool RecvSelectionBoundsAt(const uint64_t& aID,
-                                     const int32_t& aSelectionNum,
-                                     bool* aSucceeded,
-                                     nsString* aData,
-                                     int32_t* aStartOffset,
-                                     int32_t* aEndOffset) override;
+  virtual mozilla::ipc::IPCResult RecvSelectionBoundsAt(const uint64_t& aID,
+                                                        const int32_t& aSelectionNum,
+                                                        bool* aSucceeded,
+                                                        nsString* aData,
+                                                        int32_t* aStartOffset,
+                                                        int32_t* aEndOffset) override;
 
-  virtual bool RecvSetSelectionBoundsAt(const uint64_t& aID,
-                                        const int32_t& aSelectionNum,
-                                        const int32_t& aStartOffset,
-                                        const int32_t& aEndOffset,
-                                        bool* aSucceeded) override;
+  virtual mozilla::ipc::IPCResult RecvSetSelectionBoundsAt(const uint64_t& aID,
+                                                           const int32_t& aSelectionNum,
+                                                           const int32_t& aStartOffset,
+                                                           const int32_t& aEndOffset,
+                                                           bool* aSucceeded) override;
 
-  virtual bool RecvAddToSelection(const uint64_t& aID,
-                                  const int32_t& aStartOffset,
-                                  const int32_t& aEndOffset,
-                                  bool* aSucceeded) override;
+  virtual mozilla::ipc::IPCResult RecvAddToSelection(const uint64_t& aID,
+                                                     const int32_t& aStartOffset,
+                                                     const int32_t& aEndOffset,
+                                                     bool* aSucceeded) override;
 
-  virtual bool RecvRemoveFromSelection(const uint64_t& aID,
-                                       const int32_t& aSelectionNum,
-                                       bool* aSucceeded) override;
+  virtual mozilla::ipc::IPCResult RecvRemoveFromSelection(const uint64_t& aID,
+                                                          const int32_t& aSelectionNum,
+                                                          bool* aSucceeded) override;
 
-  virtual bool RecvScrollSubstringTo(const uint64_t& aID,
-                                     const int32_t& aStartOffset,
-                                     const int32_t& aEndOffset,
-                                     const uint32_t& aScrollType) override;
+  virtual mozilla::ipc::IPCResult RecvScrollSubstringTo(const uint64_t& aID,
+                                                        const int32_t& aStartOffset,
+                                                        const int32_t& aEndOffset,
+                                                        const uint32_t& aScrollType) override;
 
-  virtual bool RecvScrollSubstringToPoint(const uint64_t& aID,
-                                          const int32_t& aStartOffset,
-                                          const int32_t& aEndOffset,
-                                          const uint32_t& aCoordinateType,
-                                          const int32_t& aX,
-                                          const int32_t& aY) override;
+  virtual mozilla::ipc::IPCResult RecvScrollSubstringToPoint(const uint64_t& aID,
+                                                             const int32_t& aStartOffset,
+                                                             const int32_t& aEndOffset,
+                                                             const uint32_t& aCoordinateType,
+                                                             const int32_t& aX,
+                                                             const int32_t& aY) override;
 
-  virtual bool RecvText(const uint64_t& aID,
-                        nsString* aText) override;
+  virtual mozilla::ipc::IPCResult RecvText(const uint64_t& aID,
+                                           nsString* aText) override;
 
-  virtual bool RecvReplaceText(const uint64_t& aID,
-                               const nsString& aText) override;
+  virtual mozilla::ipc::IPCResult RecvReplaceText(const uint64_t& aID,
+                                                  const nsString& aText) override;
 
-  virtual bool RecvInsertText(const uint64_t& aID,
-                              const nsString& aText,
-                              const int32_t& aPosition, bool* aValid) override;
+  virtual mozilla::ipc::IPCResult RecvInsertText(const uint64_t& aID,
+                                                 const nsString& aText,
+                                                 const int32_t& aPosition, bool* aValid) override;
 
-  virtual bool RecvCopyText(const uint64_t& aID,
-                            const int32_t& aStartPos,
-                            const int32_t& aEndPos, bool* aValid) override;
+  virtual mozilla::ipc::IPCResult RecvCopyText(const uint64_t& aID,
+                                               const int32_t& aStartPos,
+                                               const int32_t& aEndPos, bool* aValid) override;
 
-  virtual bool RecvCutText(const uint64_t& aID,
-                           const int32_t& aStartPos,
-                           const int32_t& aEndPos, bool* aValid) override;
+  virtual mozilla::ipc::IPCResult RecvCutText(const uint64_t& aID,
+                                              const int32_t& aStartPos,
+                                              const int32_t& aEndPos, bool* aValid) override;
 
-  virtual bool RecvDeleteText(const uint64_t& aID,
-                              const int32_t& aStartPos,
-                              const int32_t& aEndPos, bool* aValid) override;
+  virtual mozilla::ipc::IPCResult RecvDeleteText(const uint64_t& aID,
+                                                 const int32_t& aStartPos,
+                                                 const int32_t& aEndPos, bool* aValid) override;
 
-  virtual bool RecvPasteText(const uint64_t& aID,
-                             const int32_t& aPosition, bool* aValid) override;
+  virtual mozilla::ipc::IPCResult RecvPasteText(const uint64_t& aID,
+                                                const int32_t& aPosition, bool* aValid) override;
 
-  virtual bool RecvImagePosition(const uint64_t& aID,
-                                 const uint32_t& aCoordType,
-                                 nsIntPoint* aRetVal) override;
+  virtual mozilla::ipc::IPCResult RecvImagePosition(const uint64_t& aID,
+                                                    const uint32_t& aCoordType,
+                                                    nsIntPoint* aRetVal) override;
 
-  virtual bool RecvImageSize(const uint64_t& aID,
-                             nsIntSize* aRetVal) override;
+  virtual mozilla::ipc::IPCResult RecvImageSize(const uint64_t& aID,
+                                                nsIntSize* aRetVal) override;
 
-  virtual bool RecvStartOffset(const uint64_t& aID,
-                               uint32_t* aRetVal,
-                               bool* aOk) override;
-  virtual bool RecvEndOffset(const uint64_t& aID,
-                             uint32_t* aRetVal,
-                             bool* aOk) override;
-  virtual bool RecvIsLinkValid(const uint64_t& aID,
-                               bool* aRetVal) override;
-  virtual bool RecvAnchorCount(const uint64_t& aID,
-                               uint32_t* aRetVal, bool* aOk) override;
-  virtual bool RecvAnchorURIAt(const uint64_t& aID,
-                               const uint32_t& aIndex,
-                               nsCString* aURI,
-                               bool* aOk) override;
-  virtual bool RecvAnchorAt(const uint64_t& aID,
-                            const uint32_t& aIndex,
-                            uint64_t* aIDOfAnchor,
-                            bool* aOk) override;
+  virtual mozilla::ipc::IPCResult RecvStartOffset(const uint64_t& aID,
+                                                  uint32_t* aRetVal,
+                                                  bool* aOk) override;
+  virtual mozilla::ipc::IPCResult RecvEndOffset(const uint64_t& aID,
+                                                uint32_t* aRetVal,
+                                                bool* aOk) override;
+  virtual mozilla::ipc::IPCResult RecvIsLinkValid(const uint64_t& aID,
+                                                  bool* aRetVal) override;
+  virtual mozilla::ipc::IPCResult RecvAnchorCount(const uint64_t& aID,
+                                                  uint32_t* aRetVal, bool* aOk) override;
+  virtual mozilla::ipc::IPCResult RecvAnchorURIAt(const uint64_t& aID,
+                                                  const uint32_t& aIndex,
+                                                  nsCString* aURI,
+                                                  bool* aOk) override;
+  virtual mozilla::ipc::IPCResult RecvAnchorAt(const uint64_t& aID,
+                                               const uint32_t& aIndex,
+                                               uint64_t* aIDOfAnchor,
+                                               bool* aOk) override;
 
-  virtual bool RecvLinkCount(const uint64_t& aID,
-                             uint32_t* aCount) override;
+  virtual mozilla::ipc::IPCResult RecvLinkCount(const uint64_t& aID,
+                                                uint32_t* aCount) override;
 
-  virtual bool RecvLinkAt(const uint64_t& aID,
-                          const uint32_t& aIndex,
-                          uint64_t* aIDOfLink,
-                          bool* aOk) override;
+  virtual mozilla::ipc::IPCResult RecvLinkAt(const uint64_t& aID,
+                                             const uint32_t& aIndex,
+                                             uint64_t* aIDOfLink,
+                                             bool* aOk) override;
 
-  virtual bool RecvLinkIndexOf(const uint64_t& aID,
-                               const uint64_t& aLinkID,
-                               int32_t* aIndex) override;
+  virtual mozilla::ipc::IPCResult RecvLinkIndexOf(const uint64_t& aID,
+                                                  const uint64_t& aLinkID,
+                                                  int32_t* aIndex) override;
 
-  virtual bool RecvLinkIndexAtOffset(const uint64_t& aID,
-                                     const uint32_t& aOffset,
-                                     int32_t* aIndex) override;
+  virtual mozilla::ipc::IPCResult RecvLinkIndexAtOffset(const uint64_t& aID,
+                                                        const uint32_t& aOffset,
+                                                        int32_t* aIndex) override;
 
-  virtual bool RecvTableOfACell(const uint64_t& aID,
-                                uint64_t* aTableID,
-                                bool* aOk) override;
+  virtual mozilla::ipc::IPCResult RecvTableOfACell(const uint64_t& aID,
+                                                   uint64_t* aTableID,
+                                                   bool* aOk) override;
 
-  virtual bool RecvColIdx(const uint64_t& aID, uint32_t* aIndex) override;
+  virtual mozilla::ipc::IPCResult RecvColIdx(const uint64_t& aID, uint32_t* aIndex) override;
 
-  virtual bool RecvRowIdx(const uint64_t& aID, uint32_t* aIndex) override;
+  virtual mozilla::ipc::IPCResult RecvRowIdx(const uint64_t& aID, uint32_t* aIndex) override;
 
-  virtual bool RecvColExtent(const uint64_t& aID, uint32_t* aExtent) override;
+  virtual mozilla::ipc::IPCResult RecvColExtent(const uint64_t& aID, uint32_t* aExtent) override;
 
-  virtual bool RecvGetPosition(const uint64_t& aID,
-                               uint32_t* aColIdx, uint32_t* aRowIdx) override;
+  virtual mozilla::ipc::IPCResult RecvGetPosition(const uint64_t& aID,
+                                                  uint32_t* aColIdx, uint32_t* aRowIdx) override;
 
-  virtual bool RecvGetColRowExtents(const uint64_t& aID,
-                                  uint32_t* aColIdx, uint32_t* aRowIdx,
-                                  uint32_t* aColExtent, uint32_t* aRowExtent) override;
+  virtual mozilla::ipc::IPCResult RecvGetColRowExtents(const uint64_t& aID,
+                                                       uint32_t* aColIdx, uint32_t* aRowIdx,
+                                                       uint32_t* aColExtent, uint32_t* aRowExtent) override;
 
-  virtual bool RecvRowExtent(const uint64_t& aID, uint32_t* aExtent) override;
+  virtual mozilla::ipc::IPCResult RecvRowExtent(const uint64_t& aID, uint32_t* aExtent) override;
 
-  virtual bool RecvColHeaderCells(const uint64_t& aID,
-                                  nsTArray<uint64_t>* aCells) override;
+  virtual mozilla::ipc::IPCResult RecvColHeaderCells(const uint64_t& aID,
+                                                     nsTArray<uint64_t>* aCells) override;
 
-  virtual bool RecvRowHeaderCells(const uint64_t& aID,
-                                  nsTArray<uint64_t>* aCells) override;
+  virtual mozilla::ipc::IPCResult RecvRowHeaderCells(const uint64_t& aID,
+                                                     nsTArray<uint64_t>* aCells) override;
 
-  virtual bool RecvIsCellSelected(const uint64_t& aID,
-                                  bool* aSelected) override;
+  virtual mozilla::ipc::IPCResult RecvIsCellSelected(const uint64_t& aID,
+                                                     bool* aSelected) override;
 
-  virtual bool RecvTableCaption(const uint64_t& aID,
-                                uint64_t* aCaptionID,
-                                bool* aOk) override;
-  virtual bool RecvTableSummary(const uint64_t& aID,
-                                nsString* aSummary) override;
-  virtual bool RecvTableColumnCount(const uint64_t& aID,
-                                    uint32_t* aColCount) override;
-  virtual bool RecvTableRowCount(const uint64_t& aID,
-                                 uint32_t* aRowCount) override;
-  virtual bool RecvTableCellAt(const uint64_t& aID,
-                               const uint32_t& aRow,
-                               const uint32_t& aCol,
-                               uint64_t* aCellID,
-                               bool* aOk) override;
-  virtual bool RecvTableCellIndexAt(const uint64_t& aID,
-                                    const uint32_t& aRow,
-                                    const uint32_t& aCol,
-                                    int32_t* aIndex) override;
-  virtual bool RecvTableColumnIndexAt(const uint64_t& aID,
-                                      const uint32_t& aCellIndex,
-                                      int32_t* aCol) override;
-  virtual bool RecvTableRowIndexAt(const uint64_t& aID,
-                                   const uint32_t& aCellIndex,
-                                   int32_t* aRow) override;
-  virtual bool RecvTableRowAndColumnIndicesAt(const uint64_t& aID,
-                                             const uint32_t& aCellIndex,
-                                             int32_t* aRow,
-                                             int32_t* aCol) override;
-  virtual bool RecvTableColumnExtentAt(const uint64_t& aID,
-                                       const uint32_t& aRow,
-                                       const uint32_t& aCol,
-                                       uint32_t* aExtent) override;
-  virtual bool RecvTableRowExtentAt(const uint64_t& aID,
-                                    const uint32_t& aRow,
-                                    const uint32_t& aCol,
-                                    uint32_t* aExtent) override;
-  virtual bool RecvTableColumnDescription(const uint64_t& aID,
-                                          const uint32_t& aCol,
-                                          nsString* aDescription) override;
-  virtual bool RecvTableRowDescription(const uint64_t& aID,
-                                       const uint32_t& aRow,
-                                       nsString* aDescription) override;
-  virtual bool RecvTableColumnSelected(const uint64_t& aID,
-                                       const uint32_t& aCol,
-                                       bool* aSelected) override;
-  virtual bool RecvTableRowSelected(const uint64_t& aID,
-                                    const uint32_t& aRow,
-                                    bool* aSelected) override;
-  virtual bool RecvTableCellSelected(const uint64_t& aID,
-                                     const uint32_t& aRow,
-                                     const uint32_t& aCol,
-                                     bool* aSelected) override;
-  virtual bool RecvTableSelectedCellCount(const uint64_t& aID,
-                                          uint32_t* aSelectedCells) override;
-  virtual bool RecvTableSelectedColumnCount(const uint64_t& aID,
-                                            uint32_t* aSelectedColumns) override;
-  virtual bool RecvTableSelectedRowCount(const uint64_t& aID,
-                                         uint32_t* aSelectedRows) override;
-  virtual bool RecvTableSelectedCells(const uint64_t& aID,
-                                      nsTArray<uint64_t>* aCellIDs) override;
-  virtual bool RecvTableSelectedCellIndices(const uint64_t& aID,
-                                            nsTArray<uint32_t>* aCellIndices) override;
-  virtual bool RecvTableSelectedColumnIndices(const uint64_t& aID,
-                                              nsTArray<uint32_t>* aColumnIndices) override;
-  virtual bool RecvTableSelectedRowIndices(const uint64_t& aID,
-                                           nsTArray<uint32_t>* aRowIndices) override;
-  virtual bool RecvTableSelectColumn(const uint64_t& aID,
-                                     const uint32_t& aCol) override;
-  virtual bool RecvTableSelectRow(const uint64_t& aID,
-                                  const uint32_t& aRow) override;
-  virtual bool RecvTableUnselectColumn(const uint64_t& aID,
-                                       const uint32_t& aCol) override;
-  virtual bool RecvTableUnselectRow(const uint64_t& aID,
-                                    const uint32_t& aRow) override;
-  virtual bool RecvTableIsProbablyForLayout(const uint64_t& aID,
-                                            bool* aForLayout) override;
-  virtual bool RecvAtkTableColumnHeader(const uint64_t& aID,
-                                        const int32_t& aCol,
-                                        uint64_t* aHeader,
-                                        bool* aOk) override;
-  virtual bool RecvAtkTableRowHeader(const uint64_t& aID,
-                                     const int32_t& aRow,
-                                     uint64_t* aHeader,
-                                     bool* aOk) override;
+  virtual mozilla::ipc::IPCResult RecvTableCaption(const uint64_t& aID,
+                                                   uint64_t* aCaptionID,
+                                                   bool* aOk) override;
+  virtual mozilla::ipc::IPCResult RecvTableSummary(const uint64_t& aID,
+                                                   nsString* aSummary) override;
+  virtual mozilla::ipc::IPCResult RecvTableColumnCount(const uint64_t& aID,
+                                                       uint32_t* aColCount) override;
+  virtual mozilla::ipc::IPCResult RecvTableRowCount(const uint64_t& aID,
+                                                    uint32_t* aRowCount) override;
+  virtual mozilla::ipc::IPCResult RecvTableCellAt(const uint64_t& aID,
+                                                  const uint32_t& aRow,
+                                                  const uint32_t& aCol,
+                                                  uint64_t* aCellID,
+                                                  bool* aOk) override;
+  virtual mozilla::ipc::IPCResult RecvTableCellIndexAt(const uint64_t& aID,
+                                                       const uint32_t& aRow,
+                                                       const uint32_t& aCol,
+                                                       int32_t* aIndex) override;
+  virtual mozilla::ipc::IPCResult RecvTableColumnIndexAt(const uint64_t& aID,
+                                                         const uint32_t& aCellIndex,
+                                                         int32_t* aCol) override;
+  virtual mozilla::ipc::IPCResult RecvTableRowIndexAt(const uint64_t& aID,
+                                                      const uint32_t& aCellIndex,
+                                                      int32_t* aRow) override;
+  virtual mozilla::ipc::IPCResult RecvTableRowAndColumnIndicesAt(const uint64_t& aID,
+                                                                 const uint32_t& aCellIndex,
+                                                                 int32_t* aRow,
+                                                                 int32_t* aCol) override;
+  virtual mozilla::ipc::IPCResult RecvTableColumnExtentAt(const uint64_t& aID,
+                                                          const uint32_t& aRow,
+                                                          const uint32_t& aCol,
+                                                          uint32_t* aExtent) override;
+  virtual mozilla::ipc::IPCResult RecvTableRowExtentAt(const uint64_t& aID,
+                                                       const uint32_t& aRow,
+                                                       const uint32_t& aCol,
+                                                       uint32_t* aExtent) override;
+  virtual mozilla::ipc::IPCResult RecvTableColumnDescription(const uint64_t& aID,
+                                                             const uint32_t& aCol,
+                                                             nsString* aDescription) override;
+  virtual mozilla::ipc::IPCResult RecvTableRowDescription(const uint64_t& aID,
+                                                          const uint32_t& aRow,
+                                                          nsString* aDescription) override;
+  virtual mozilla::ipc::IPCResult RecvTableColumnSelected(const uint64_t& aID,
+                                                          const uint32_t& aCol,
+                                                          bool* aSelected) override;
+  virtual mozilla::ipc::IPCResult RecvTableRowSelected(const uint64_t& aID,
+                                                       const uint32_t& aRow,
+                                                       bool* aSelected) override;
+  virtual mozilla::ipc::IPCResult RecvTableCellSelected(const uint64_t& aID,
+                                                        const uint32_t& aRow,
+                                                        const uint32_t& aCol,
+                                                        bool* aSelected) override;
+  virtual mozilla::ipc::IPCResult RecvTableSelectedCellCount(const uint64_t& aID,
+                                                             uint32_t* aSelectedCells) override;
+  virtual mozilla::ipc::IPCResult RecvTableSelectedColumnCount(const uint64_t& aID,
+                                                               uint32_t* aSelectedColumns) override;
+  virtual mozilla::ipc::IPCResult RecvTableSelectedRowCount(const uint64_t& aID,
+                                                            uint32_t* aSelectedRows) override;
+  virtual mozilla::ipc::IPCResult RecvTableSelectedCells(const uint64_t& aID,
+                                                         nsTArray<uint64_t>* aCellIDs) override;
+  virtual mozilla::ipc::IPCResult RecvTableSelectedCellIndices(const uint64_t& aID,
+                                                               nsTArray<uint32_t>* aCellIndices) override;
+  virtual mozilla::ipc::IPCResult RecvTableSelectedColumnIndices(const uint64_t& aID,
+                                                                 nsTArray<uint32_t>* aColumnIndices) override;
+  virtual mozilla::ipc::IPCResult RecvTableSelectedRowIndices(const uint64_t& aID,
+                                                              nsTArray<uint32_t>* aRowIndices) override;
+  virtual mozilla::ipc::IPCResult RecvTableSelectColumn(const uint64_t& aID,
+                                                        const uint32_t& aCol) override;
+  virtual mozilla::ipc::IPCResult RecvTableSelectRow(const uint64_t& aID,
+                                                     const uint32_t& aRow) override;
+  virtual mozilla::ipc::IPCResult RecvTableUnselectColumn(const uint64_t& aID,
+                                                          const uint32_t& aCol) override;
+  virtual mozilla::ipc::IPCResult RecvTableUnselectRow(const uint64_t& aID,
+                                                       const uint32_t& aRow) override;
+  virtual mozilla::ipc::IPCResult RecvTableIsProbablyForLayout(const uint64_t& aID,
+                                                               bool* aForLayout) override;
+  virtual mozilla::ipc::IPCResult RecvAtkTableColumnHeader(const uint64_t& aID,
+                                                           const int32_t& aCol,
+                                                           uint64_t* aHeader,
+                                                           bool* aOk) override;
+  virtual mozilla::ipc::IPCResult RecvAtkTableRowHeader(const uint64_t& aID,
+                                                        const int32_t& aRow,
+                                                        uint64_t* aHeader,
+                                                        bool* aOk) override;
 
-  virtual bool RecvSelectedItems(const uint64_t& aID,
-                                 nsTArray<uint64_t>* aSelectedItemIDs) override;
+  virtual mozilla::ipc::IPCResult RecvSelectedItems(const uint64_t& aID,
+                                                    nsTArray<uint64_t>* aSelectedItemIDs) override;
 
-  virtual bool RecvSelectedItemCount(const uint64_t& aID,
-                                     uint32_t* aCount) override;
+  virtual mozilla::ipc::IPCResult RecvSelectedItemCount(const uint64_t& aID,
+                                                        uint32_t* aCount) override;
 
-  virtual bool RecvGetSelectedItem(const uint64_t& aID,
-                                   const uint32_t& aIndex,
-                                   uint64_t* aSelected,
-                                   bool* aOk) override;
+  virtual mozilla::ipc::IPCResult RecvGetSelectedItem(const uint64_t& aID,
+                                                      const uint32_t& aIndex,
+                                                      uint64_t* aSelected,
+                                                      bool* aOk) override;
 
-  virtual bool RecvIsItemSelected(const uint64_t& aID,
-                                  const uint32_t& aIndex,
-                                  bool* aSelected) override;
+  virtual mozilla::ipc::IPCResult RecvIsItemSelected(const uint64_t& aID,
+                                                     const uint32_t& aIndex,
+                                                     bool* aSelected) override;
 
-  virtual bool RecvAddItemToSelection(const uint64_t& aID,
-                                      const uint32_t& aIndex,
-                                      bool* aSuccess) override;
+  virtual mozilla::ipc::IPCResult RecvAddItemToSelection(const uint64_t& aID,
+                                                         const uint32_t& aIndex,
+                                                         bool* aSuccess) override;
 
-  virtual bool RecvRemoveItemFromSelection(const uint64_t& aID,
-                                           const uint32_t& aIndex,
-                                           bool* aSuccess) override;
+  virtual mozilla::ipc::IPCResult RecvRemoveItemFromSelection(const uint64_t& aID,
+                                                              const uint32_t& aIndex,
+                                                              bool* aSuccess) override;
 
-  virtual bool RecvSelectAll(const uint64_t& aID,
-                             bool* aSuccess) override;
+  virtual mozilla::ipc::IPCResult RecvSelectAll(const uint64_t& aID,
+                                                bool* aSuccess) override;
 
-  virtual bool RecvUnselectAll(const uint64_t& aID,
-                               bool* aSuccess) override;
+  virtual mozilla::ipc::IPCResult RecvUnselectAll(const uint64_t& aID,
+                                                  bool* aSuccess) override;
 
-  virtual bool RecvTakeSelection(const uint64_t& aID) override;
-  virtual bool RecvSetSelected(const uint64_t& aID,
-                               const bool& aSelect) override;
+  virtual mozilla::ipc::IPCResult RecvTakeSelection(const uint64_t& aID) override;
+  virtual mozilla::ipc::IPCResult RecvSetSelected(const uint64_t& aID,
+                                                  const bool& aSelect) override;
 
-  virtual bool RecvDoAction(const uint64_t& aID,
-                            const uint8_t& aIndex,
-                            bool* aSuccess) override;
+  virtual mozilla::ipc::IPCResult RecvDoAction(const uint64_t& aID,
+                                               const uint8_t& aIndex,
+                                               bool* aSuccess) override;
 
-  virtual bool RecvActionCount(const uint64_t& aID,
-                               uint8_t* aCount) override;
+  virtual mozilla::ipc::IPCResult RecvActionCount(const uint64_t& aID,
+                                                  uint8_t* aCount) override;
 
-  virtual bool RecvActionDescriptionAt(const uint64_t& aID,
-                                       const uint8_t& aIndex,
-                                       nsString* aDescription) override;
+  virtual mozilla::ipc::IPCResult RecvActionDescriptionAt(const uint64_t& aID,
+                                                          const uint8_t& aIndex,
+                                                          nsString* aDescription) override;
 
-  virtual bool RecvActionNameAt(const uint64_t& aID,
-                                const uint8_t& aIndex,
-                                nsString* aName) override;
+  virtual mozilla::ipc::IPCResult RecvActionNameAt(const uint64_t& aID,
+                                                   const uint8_t& aIndex,
+                                                   nsString* aName) override;
 
-  virtual bool RecvAccessKey(const uint64_t& aID,
-                             uint32_t* aKey,
-                             uint32_t* aModifierMask) override;
+  virtual mozilla::ipc::IPCResult RecvAccessKey(const uint64_t& aID,
+                                                uint32_t* aKey,
+                                                uint32_t* aModifierMask) override;
 
-  virtual bool RecvKeyboardShortcut(const uint64_t& aID,
-                                    uint32_t* aKey,
-                                    uint32_t* aModifierMask) override;
+  virtual mozilla::ipc::IPCResult RecvKeyboardShortcut(const uint64_t& aID,
+                                                       uint32_t* aKey,
+                                                       uint32_t* aModifierMask) override;
 
-  virtual bool RecvAtkKeyBinding(const uint64_t& aID,
-                                 nsString* aResult) override;
+  virtual mozilla::ipc::IPCResult RecvAtkKeyBinding(const uint64_t& aID,
+                                                    nsString* aResult) override;
 
-  virtual bool RecvCurValue(const uint64_t& aID,
-                            double* aValue) override;
+  virtual mozilla::ipc::IPCResult RecvCurValue(const uint64_t& aID,
+                                               double* aValue) override;
 
-  virtual bool RecvSetCurValue(const uint64_t& aID,
-                               const double& aValue,
-                               bool* aRetVal) override;
+  virtual mozilla::ipc::IPCResult RecvSetCurValue(const uint64_t& aID,
+                                                  const double& aValue,
+                                                  bool* aRetVal) override;
 
-  virtual bool RecvMinValue(const uint64_t& aID,
-                            double* aValue) override;
+  virtual mozilla::ipc::IPCResult RecvMinValue(const uint64_t& aID,
+                                               double* aValue) override;
 
-  virtual bool RecvMaxValue(const uint64_t& aID,
-                            double* aValue) override;
+  virtual mozilla::ipc::IPCResult RecvMaxValue(const uint64_t& aID,
+                                               double* aValue) override;
 
-  virtual bool RecvStep(const uint64_t& aID,
-                        double* aStep) override;
+  virtual mozilla::ipc::IPCResult RecvStep(const uint64_t& aID,
+                                           double* aStep) override;
 
-  virtual bool RecvTakeFocus(const uint64_t& aID) override;
+  virtual mozilla::ipc::IPCResult RecvTakeFocus(const uint64_t& aID) override;
 
-  virtual bool RecvFocusedChild(const uint64_t& aID,
-                                uint64_t* aChild,
-                                bool* aOk) override;
+  virtual mozilla::ipc::IPCResult RecvFocusedChild(const uint64_t& aID,
+                                                   uint64_t* aChild,
+                                                   bool* aOk) override;
 
-  virtual bool RecvLanguage(const uint64_t& aID, nsString* aLocale) override;
-  virtual bool RecvDocType(const uint64_t& aID, nsString* aType) override;
-  virtual bool RecvTitle(const uint64_t& aID, nsString* aTitle) override;
-  virtual bool RecvURL(const uint64_t& aID, nsString* aURL) override;
-  virtual bool RecvMimeType(const uint64_t& aID, nsString* aMime) override;
-  virtual bool RecvURLDocTypeMimeType(const uint64_t& aID,
-                                      nsString* aURL,
-                                      nsString* aDocType,
-                                      nsString* aMimeType) override;
+  virtual mozilla::ipc::IPCResult RecvLanguage(const uint64_t& aID, nsString* aLocale) override;
+  virtual mozilla::ipc::IPCResult RecvDocType(const uint64_t& aID, nsString* aType) override;
+  virtual mozilla::ipc::IPCResult RecvTitle(const uint64_t& aID, nsString* aTitle) override;
+  virtual mozilla::ipc::IPCResult RecvURL(const uint64_t& aID, nsString* aURL) override;
+  virtual mozilla::ipc::IPCResult RecvMimeType(const uint64_t& aID, nsString* aMime) override;
+  virtual mozilla::ipc::IPCResult RecvURLDocTypeMimeType(const uint64_t& aID,
+                                                         nsString* aURL,
+                                                         nsString* aDocType,
+                                                         nsString* aMimeType) override;
 
-  virtual bool RecvAccessibleAtPoint(const uint64_t& aID,
-                                     const int32_t& aX,
-                                     const int32_t& aY,
-                                     const bool& aNeedsScreenCoords,
-                                     const uint32_t& aWhich,
-                                     uint64_t* aResult,
-                                     bool* aOk) override;
+  virtual mozilla::ipc::IPCResult RecvAccessibleAtPoint(const uint64_t& aID,
+                                                        const int32_t& aX,
+                                                        const int32_t& aY,
+                                                        const bool& aNeedsScreenCoords,
+                                                        const uint32_t& aWhich,
+                                                        uint64_t* aResult,
+                                                        bool* aOk) override;
 
-  virtual bool RecvExtents(const uint64_t& aID,
-                           const bool& aNeedsScreenCoords,
-                           int32_t* aX,
-                           int32_t* aY,
-                           int32_t* aWidth,
-                           int32_t* aHeight) override;
-  virtual bool RecvDOMNodeID(const uint64_t& aID, nsString* aDOMNodeID) override;
+  virtual mozilla::ipc::IPCResult RecvExtents(const uint64_t& aID,
+                                              const bool& aNeedsScreenCoords,
+                                              int32_t* aX,
+                                              int32_t* aY,
+                                              int32_t* aWidth,
+                                              int32_t* aHeight) override;
+  virtual mozilla::ipc::IPCResult RecvDOMNodeID(const uint64_t& aID, nsString* aDOMNodeID) override;
 private:
 
   Accessible* IdToAccessible(const uint64_t& aID) const;
   Accessible* IdToAccessibleLink(const uint64_t& aID) const;
   Accessible* IdToAccessibleSelect(const uint64_t& aID) const;
   HyperTextAccessible* IdToHyperTextAccessible(const uint64_t& aID) const;
   TextLeafAccessible* IdToTextLeafAccessible(const uint64_t& aID) const;
   ImageAccessible* IdToImageAccessible(const uint64_t& aID) const;
--- a/devtools/shared/heapsnapshot/HeapSnapshotTempFileHelperParent.cpp
+++ b/devtools/shared/heapsnapshot/HeapSnapshotTempFileHelperParent.cpp
@@ -19,35 +19,43 @@ using ipc::FileDescriptor;
 static bool
 openFileFailure(ErrorResult& rv,
                 OpenHeapSnapshotTempFileResponse* outResponse)
 {
     *outResponse = rv.StealNSResult();
     return true;
 }
 
-bool
+mozilla::ipc::IPCResult
 HeapSnapshotTempFileHelperParent::RecvOpenHeapSnapshotTempFile(
     OpenHeapSnapshotTempFileResponse* outResponse)
 {
     auto start = TimeStamp::Now();
     ErrorResult rv;
     nsAutoString filePath;
     nsCOMPtr<nsIFile> file = HeapSnapshot::CreateUniqueCoreDumpFile(rv,
                                                                     start,
                                                                     filePath);
-    if (NS_WARN_IF(rv.Failed()))
-        return openFileFailure(rv, outResponse);
+    if (NS_WARN_IF(rv.Failed())) {
+        if (!openFileFailure(rv, outResponse)) {
+          return IPC_FAIL_NO_REASON(this);
+        }
+        return IPC_OK();
+    }
 
     PRFileDesc* prfd;
     rv = file->OpenNSPRFileDesc(PR_WRONLY, 0, &prfd);
-    if (NS_WARN_IF(rv.Failed()))
-        return openFileFailure(rv, outResponse);
+    if (NS_WARN_IF(rv.Failed())) {
+        if (!openFileFailure(rv, outResponse)) {
+          return IPC_FAIL_NO_REASON(this);
+        }
+        return IPC_OK();
+    }
 
     FileDescriptor::PlatformHandleType handle =
         FileDescriptor::PlatformHandleType(PR_FileDesc2NativeHandle(prfd));
     FileDescriptor fd(handle);
     *outResponse = OpenedFile(filePath, fd);
-    return true;
+    return IPC_OK();
 }
 
 } // namespace devtools
 } // namespace mozilla
--- a/devtools/shared/heapsnapshot/HeapSnapshotTempFileHelperParent.h
+++ b/devtools/shared/heapsnapshot/HeapSnapshotTempFileHelperParent.h
@@ -11,17 +11,17 @@
 
 namespace mozilla {
 namespace devtools {
 
 class HeapSnapshotTempFileHelperParent : public PHeapSnapshotTempFileHelperParent
 {
     explicit HeapSnapshotTempFileHelperParent() { }
     void ActorDestroy(ActorDestroyReason why) override { }
-    bool RecvOpenHeapSnapshotTempFile(OpenHeapSnapshotTempFileResponse* outResponse)
+    mozilla::ipc::IPCResult RecvOpenHeapSnapshotTempFile(OpenHeapSnapshotTempFileResponse* outResponse)
         override;
 
   public:
     static inline PHeapSnapshotTempFileHelperParent* Create();
 };
 
 /* static */ inline PHeapSnapshotTempFileHelperParent*
 HeapSnapshotTempFileHelperParent::Create()
--- a/dom/asmjscache/AsmJSCache.cpp
+++ b/dom/asmjscache/AsmJSCache.cpp
@@ -511,31 +511,31 @@ private:
   // OpenDirectoryListener overrides.
   void
   DirectoryLockAcquired(DirectoryLock* aLock) override;
 
   void
   DirectoryLockFailed() override;
 
   // IPDL methods.
-  bool
+  mozilla::ipc::IPCResult
   Recv__delete__(const JS::AsmJSCacheResult& aResult) override
   {
     AssertIsOnOwningThread();
     MOZ_ASSERT(mState != eFinished);
 
     if (mOpened) {
       Close();
     } else {
       Fail();
     }
 
     MOZ_ASSERT(mState == eFinished);
 
-    return true;
+    return IPC_OK();
   }
 
   void
   ActorDestroy(ActorDestroyReason why) override
   {
     AssertIsOnOwningThread();
     MOZ_ASSERT(!mActorDestroyed);
 
@@ -552,40 +552,40 @@ private:
       Close();
     } else {
       Fail();
     }
 
     MOZ_ASSERT(mState == eFinished);
   }
 
-  bool
+  mozilla::ipc::IPCResult
   RecvSelectCacheFileToRead(const uint32_t& aModuleIndex) override
   {
     AssertIsOnOwningThread();
     MOZ_ASSERT(mState == eWaitingToOpenCacheFileForRead);
     MOZ_ASSERT(mOpenMode == eOpenForRead);
 
     // A cache entry has been selected to open.
 
     mModuleIndex = aModuleIndex;
     mState = eReadyToOpenCacheFileForRead;
     DispatchToIOThread();
 
-    return true;
+    return IPC_OK();
   }
 
-  bool
+  mozilla::ipc::IPCResult
   RecvCacheMiss() override
   {
     AssertIsOnOwningThread();
 
     CacheMiss();
 
-    return true;
+    return IPC_OK();
   }
 
   nsCOMPtr<nsIEventTarget> mOwningThread;
   const PrincipalInfo mPrincipalInfo;
   const OpenMode mOpenMode;
   const WriteParams mWriteParams;
 
   // State initialized during eInitial:
@@ -1281,58 +1281,64 @@ private:
     MOZ_ASSERT(!mWaiting, "Shouldn't be destroyed while thread is waiting");
     MOZ_ASSERT(!mOpened);
     MOZ_ASSERT(mState == eFinished);
     MOZ_ASSERT(mActorDestroyed);
     MOZ_COUNT_DTOR(ChildRunnable);
   }
 
   // IPDL methods.
-  bool
+  mozilla::ipc::IPCResult
   RecvOnOpenMetadataForRead(const Metadata& aMetadata) override
   {
     MOZ_ASSERT(NS_IsMainThread());
     MOZ_ASSERT(mState == eOpening);
 
     uint32_t moduleIndex;
     if (FindHashMatch(aMetadata, mReadParams, &moduleIndex)) {
-      return SendSelectCacheFileToRead(moduleIndex);
+      if (!SendSelectCacheFileToRead(moduleIndex)) {
+        return IPC_FAIL_NO_REASON(this);
+      }
+      return IPC_OK();
     }
 
-    return SendCacheMiss();
+    if (!SendCacheMiss()) {
+      return IPC_FAIL_NO_REASON(this);
+    }
+    return IPC_OK();
   }
 
-  bool
+  mozilla::ipc::IPCResult
   RecvOnOpenCacheFile(const int64_t& aFileSize,
                       const FileDescriptor& aFileDesc) override
   {
     MOZ_ASSERT(NS_IsMainThread());
     MOZ_ASSERT(mState == eOpening);
 
     mFileSize = aFileSize;
 
     auto rawFD = aFileDesc.ClonePlatformHandle();
     mFileDesc = PR_ImportFile(PROsfd(rawFD.release()));
     if (!mFileDesc) {
-      return false;
+      return IPC_FAIL_NO_REASON(this);
     }
 
     mState = eOpened;
     Notify(JS::AsmJSCache_Success);
-    return true;
+    return IPC_OK();
   }
 
-  bool
+  mozilla::ipc::IPCResult
   Recv__delete__(const JS::AsmJSCacheResult& aResult) override
   {
     MOZ_ASSERT(NS_IsMainThread());
     MOZ_ASSERT(mState == eOpening);
 
     Fail(aResult);
-    return true;
+    return IPC_OK();
   }
 
   void
   ActorDestroy(ActorDestroyReason why) override
   {
     MOZ_ASSERT(NS_IsMainThread());
     NoteActorDestroyed();
   }
--- a/dom/base/nsContentPermissionHelper.cpp
+++ b/dom/base/nsContentPermissionHelper.cpp
@@ -139,19 +139,19 @@ class ContentPermissionRequestParent : p
   bool IsBeingDestroyed();
 
   nsCOMPtr<nsIPrincipal> mPrincipal;
   nsCOMPtr<Element> mElement;
   RefPtr<nsContentPermissionRequestProxy> mProxy;
   nsTArray<PermissionRequest> mRequests;
 
  private:
-  virtual bool Recvprompt();
-  virtual bool RecvNotifyVisibility(const bool& aIsVisible);
-  virtual bool RecvDestroy();
+  virtual mozilla::ipc::IPCResult Recvprompt();
+  virtual mozilla::ipc::IPCResult RecvNotifyVisibility(const bool& aIsVisible);
+  virtual mozilla::ipc::IPCResult RecvDestroy();
   virtual void ActorDestroy(ActorDestroyReason why);
 };
 
 ContentPermissionRequestParent::ContentPermissionRequestParent(const nsTArray<PermissionRequest>& aRequests,
                                                                Element* aElement,
                                                                const IPC::Principal& aPrincipal)
 {
   MOZ_COUNT_CTOR(ContentPermissionRequestParent);
@@ -161,41 +161,41 @@ ContentPermissionRequestParent::ContentP
   mRequests  = aRequests;
 }
 
 ContentPermissionRequestParent::~ContentPermissionRequestParent()
 {
   MOZ_COUNT_DTOR(ContentPermissionRequestParent);
 }
 
-bool
+mozilla::ipc::IPCResult
 ContentPermissionRequestParent::Recvprompt()
 {
   mProxy = new nsContentPermissionRequestProxy();
   if (NS_FAILED(mProxy->Init(mRequests, this))) {
     mProxy->Cancel();
   }
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 ContentPermissionRequestParent::RecvNotifyVisibility(const bool& aIsVisible)
 {
   if (!mProxy) {
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
   mProxy->NotifyVisibility(aIsVisible);
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 ContentPermissionRequestParent::RecvDestroy()
 {
   Unused << PContentPermissionRequestParent::Send__delete__(this);
-  return true;
+  return IPC_OK();
 }
 
 void
 ContentPermissionRequestParent::ActorDestroy(ActorDestroyReason why)
 {
   if (mProxy) {
     mProxy->OnParentDestroyed();
   }
@@ -775,68 +775,68 @@ RemotePermissionRequest::DoCancel()
 void
 RemotePermissionRequest::DoAllow(JS::HandleValue aChoices)
 {
   NS_ASSERTION(mRequest, "We need a request");
   mRequest->Allow(aChoices);
 }
 
 // PContentPermissionRequestChild
-bool
+mozilla::ipc::IPCResult
 RemotePermissionRequest::RecvNotifyResult(const bool& aAllow,
                                           InfallibleTArray<PermissionChoice>&& aChoices)
 {
   Destroy();
 
   if (aAllow && mWindow->IsCurrentInnerWindow()) {
     // Use 'undefined' if no choice is provided.
     if (aChoices.IsEmpty()) {
       DoAllow(JS::UndefinedHandleValue);
-      return true;
+      return IPC_OK();
     }
 
     // Convert choices to a JS val if any.
     // {"type1": "choice1", "type2": "choiceA"}
     AutoJSAPI jsapi;
     if (NS_WARN_IF(!jsapi.Init(mWindow))) {
-      return true; // This is not an IPC error.
+      return IPC_OK(); // This is not an IPC error.
     }
 
     JSContext* cx = jsapi.cx();
     JS::Rooted<JSObject*> obj(cx);
     obj = JS_NewPlainObject(cx);
     for (uint32_t i = 0; i < aChoices.Length(); ++i) {
       const nsString& choice = aChoices[i].choice();
       const nsCString& type = aChoices[i].type();
       JS::Rooted<JSString*> jChoice(cx, JS_NewUCStringCopyN(cx, choice.get(), choice.Length()));
       JS::Rooted<JS::Value> vChoice(cx, StringValue(jChoice));
       if (!JS_SetProperty(cx, obj, type.get(), vChoice)) {
-        return false;
+        return IPC_FAIL_NO_REASON(this);
       }
     }
     JS::RootedValue val(cx, JS::ObjectValue(*obj));
     DoAllow(val);
   } else {
     DoCancel();
   }
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 RemotePermissionRequest::RecvGetVisibility()
 {
   nsCOMPtr<nsIDocShell> docshell = mWindow->GetDocShell();
   if (!docshell) {
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   bool isActive = false;
   docshell->GetIsActive(&isActive);
   Unused << SendNotifyVisibility(isActive);
-  return true;
+  return IPC_OK();
 }
 
 void
 RemotePermissionRequest::Destroy()
 {
   if (!IPCOpen()) {
     return;
   }
--- a/dom/base/nsContentPermissionHelper.h
+++ b/dom/base/nsContentPermissionHelper.h
@@ -172,20 +172,20 @@ class RemotePermissionRequest final : pu
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_NSICONTENTPERMISSIONREQUESTCALLBACK
 
   RemotePermissionRequest(nsIContentPermissionRequest* aRequest,
                           nsPIDOMWindowInner* aWindow);
 
   // It will be called when prompt dismissed.
-  virtual bool RecvNotifyResult(const bool &aAllow,
-                                InfallibleTArray<PermissionChoice>&& aChoices) override;
+  virtual mozilla::ipc::IPCResult RecvNotifyResult(const bool &aAllow,
+                                                   InfallibleTArray<PermissionChoice>&& aChoices) override;
 
-  virtual bool RecvGetVisibility() override;
+  virtual mozilla::ipc::IPCResult RecvGetVisibility() override;
 
   void IPDLAddRef()
   {
     mIPCOpen = true;
     AddRef();
   }
 
   void IPDLRelease()
--- a/dom/broadcastchannel/BroadcastChannelChild.cpp
+++ b/dom/broadcastchannel/BroadcastChannelChild.cpp
@@ -33,17 +33,17 @@ BroadcastChannelChild::BroadcastChannelC
   CopyUTF8toUTF16(aOrigin, mOrigin);
 }
 
 BroadcastChannelChild::~BroadcastChannelChild()
 {
   MOZ_ASSERT(!mBC);
 }
 
-bool
+mozilla::ipc::IPCResult
 BroadcastChannelChild::RecvNotify(const ClonedMessageData& aData)
 {
   // Make sure to retrieve all blobs from the message before returning to avoid
   // leaking their actors.
   nsTArray<RefPtr<BlobImpl>> blobs;
   if (!aData.blobsChild().IsEmpty()) {
     blobs.SetCapacity(aData.blobsChild().Length());
 
@@ -55,23 +55,23 @@ BroadcastChannelChild::RecvNotify(const 
     }
   }
 
   nsCOMPtr<DOMEventTargetHelper> helper = mBC;
   nsCOMPtr<EventTarget> eventTarget = do_QueryInterface(helper);
 
   // The object is going to be deleted soon. No notify is required.
   if (!eventTarget) {
-    return true;
+    return IPC_OK();
   }
 
   // CheckInnerWindowCorrectness can be used also without a window when
   // BroadcastChannel is running in a worker. In this case, it's a NOP.
   if (NS_FAILED(mBC->CheckInnerWindowCorrectness())) {
-    return true;
+    return IPC_OK();
   }
 
   mBC->RemoveDocFromBFCache();
 
   AutoJSAPI jsapi;
   nsCOMPtr<nsIGlobalObject> globalObject;
 
   if (NS_IsMainThread()) {
@@ -79,55 +79,55 @@ BroadcastChannelChild::RecvNotify(const 
   } else {
     WorkerPrivate* workerPrivate = GetCurrentThreadWorkerPrivate();
     MOZ_ASSERT(workerPrivate);
     globalObject = workerPrivate->GlobalScope();
   }
 
   if (!globalObject || !jsapi.Init(globalObject)) {
     NS_WARNING("Failed to initialize AutoJSAPI object.");
-    return true;
+    return IPC_OK();
   }
 
   ipc::StructuredCloneData cloneData;
   cloneData.BlobImpls().AppendElements(blobs);
 
   const SerializedStructuredCloneBuffer& buffer = aData.data();
   JSContext* cx = jsapi.cx();
   JS::Rooted<JS::Value> value(cx, JS::NullValue());
   if (buffer.data.Size()) {
     ErrorResult rv;
     cloneData.UseExternalData(buffer.data);
     cloneData.Read(cx, &value, rv);
     if (NS_WARN_IF(rv.Failed())) {
       rv.SuppressException();
-      return true;
+      return IPC_OK();
     }
   }
 
   RootedDictionary<MessageEventInit> init(cx);
   init.mBubbles = false;
   init.mCancelable = false;
   init.mOrigin = mOrigin;
   init.mData = value;
 
   ErrorResult rv;
   RefPtr<MessageEvent> event =
     MessageEvent::Constructor(mBC, NS_LITERAL_STRING("message"), init, rv);
   if (NS_WARN_IF(rv.Failed())) {
     rv.SuppressException();
-    return true;
+    return IPC_OK();
   }
 
   event->SetTrusted(true);
 
   bool status;
   mBC->DispatchEvent(static_cast<Event*>(event.get()), &status);
 
-  return true;
+  return IPC_OK();
 }
 
 void
 BroadcastChannelChild::ActorDestroy(ActorDestroyReason aWhy)
 {
   mActorDestroyed = true;
 }
 
--- a/dom/broadcastchannel/BroadcastChannelChild.h
+++ b/dom/broadcastchannel/BroadcastChannelChild.h
@@ -26,17 +26,17 @@ class BroadcastChannelChild final : publ
 public:
   NS_INLINE_DECL_REFCOUNTING(BroadcastChannelChild)
 
   void SetParent(BroadcastChannel* aBC)
   {
     mBC = aBC;
   }
 
-  virtual bool RecvNotify(const ClonedMessageData& aData) override;
+  virtual mozilla::ipc::IPCResult RecvNotify(const ClonedMessageData& aData) override;
 
   bool IsActorDestroyed() const
   {
     return mActorDestroyed;
   }
 
 private:
   explicit BroadcastChannelChild(const nsACString& aOrigin);
--- a/dom/broadcastchannel/BroadcastChannelParent.cpp
+++ b/dom/broadcastchannel/BroadcastChannelParent.cpp
@@ -26,44 +26,44 @@ BroadcastChannelParent::BroadcastChannel
   mService->RegisterActor(this, mOriginChannelKey);
 }
 
 BroadcastChannelParent::~BroadcastChannelParent()
 {
   AssertIsOnBackgroundThread();
 }
 
-bool
+mozilla::ipc::IPCResult
 BroadcastChannelParent::RecvPostMessage(const ClonedMessageData& aData)
 {
   AssertIsOnBackgroundThread();
 
   if (NS_WARN_IF(!mService)) {
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   mService->PostMessage(this, aData, mOriginChannelKey);
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 BroadcastChannelParent::RecvClose()
 {
   AssertIsOnBackgroundThread();
 
   if (NS_WARN_IF(!mService)) {
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   mService->UnregisterActor(this, mOriginChannelKey);
   mService = nullptr;
 
   Unused << Send__delete__(this);
 
-  return true;
+  return IPC_OK();
 }
 
 void
 BroadcastChannelParent::ActorDestroy(ActorDestroyReason aWhy)
 {
   AssertIsOnBackgroundThread();
 
   if (mService) {
--- a/dom/broadcastchannel/BroadcastChannelParent.h
+++ b/dom/broadcastchannel/BroadcastChannelParent.h
@@ -28,20 +28,20 @@ class BroadcastChannelParent final : pub
 
 public:
   void Deliver(const ClonedMessageData& aData);
 
 private:
   explicit BroadcastChannelParent(const nsAString& aOriginChannelKey);
   ~BroadcastChannelParent();
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvPostMessage(const ClonedMessageData& aData) override;
 
-  virtual bool RecvClose() override;
+  virtual mozilla::ipc::IPCResult RecvClose() override;
 
   virtual void ActorDestroy(ActorDestroyReason aWhy) override;
 
   RefPtr<BroadcastChannelService> mService;
   const nsString mOriginChannelKey;
 };
 
 } // namespace dom
--- a/dom/cache/CacheOpChild.cpp
+++ b/dom/cache/CacheOpChild.cpp
@@ -94,30 +94,30 @@ CacheOpChild::ActorDestroy(ActorDestroyR
   if (mPromise) {
     mPromise->MaybeReject(NS_ERROR_FAILURE);
     mPromise = nullptr;
   }
 
   RemoveWorkerHolder();
 }
 
-bool
+mozilla::ipc::IPCResult
 CacheOpChild::Recv__delete__(const ErrorResult& aRv,
                              const CacheOpResult& aResult)
 {
   NS_ASSERT_OWNINGTHREAD(CacheOpChild);
 
   if (NS_WARN_IF(aRv.Failed())) {
     MOZ_ASSERT(aResult.type() == CacheOpResult::Tvoid_t);
     // TODO: Remove this const_cast (bug 1152078).
     // It is safe for now since this ErrorResult is handed off to us by IPDL
     // and is thrown into the trash afterwards.
     mPromise->MaybeReject(const_cast<ErrorResult&>(aRv));
     mPromise = nullptr;
-    return true;
+    return IPC_OK();
   }
 
   switch (aResult.type()) {
     case CacheOpResult::TCacheMatchResult:
     {
       HandleResponse(aResult.get_CacheMatchResult().responseOrVoid());
       break;
     }
@@ -171,17 +171,17 @@ CacheOpChild::Recv__delete__(const Error
       break;
     }
     default:
       MOZ_CRASH("Unknown Cache op result type!");
   }
 
   mPromise = nullptr;
 
-  return true;
+  return IPC_OK();
 }
 
 void
 CacheOpChild::StartDestroy()
 {
   NS_ASSERT_OWNINGTHREAD(CacheOpChild);
 
   // Do not cancel on-going operations when WorkerHolder calls this.  Instead,
--- a/dom/cache/CacheOpChild.h
+++ b/dom/cache/CacheOpChild.h
@@ -34,17 +34,17 @@ private:
   CacheOpChild(CacheWorkerHolder* aWorkerHolder, nsIGlobalObject* aGlobal,
                nsISupports* aParent, Promise* aPromise);
   ~CacheOpChild();
 
   // PCacheOpChild methods
   virtual void
   ActorDestroy(ActorDestroyReason aReason) override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   Recv__delete__(const ErrorResult& aRv, const CacheOpResult& aResult) override;
 
   // ActorChild methods
   virtual void
   StartDestroy() override;
 
   // TypeUtils methods
   virtual nsIGlobalObject*
--- a/dom/cache/CacheParent.cpp
+++ b/dom/cache/CacheParent.cpp
@@ -60,30 +60,30 @@ CacheParent::AllocPCacheOpParent(const C
 
 bool
 CacheParent::DeallocPCacheOpParent(PCacheOpParent* aActor)
 {
   delete aActor;
   return true;
 }
 
-bool
+mozilla::ipc::IPCResult
 CacheParent::RecvPCacheOpConstructor(PCacheOpParent* aActor,
                                      const CacheOpArgs& aOpArgs)
 {
   auto actor = static_cast<CacheOpParent*>(aActor);
   actor->Execute(mManager);
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 CacheParent::RecvTeardown()
 {
   if (!Send__delete__(this)) {
     // child process is gone, warn and allow actor to clean up normally
     NS_WARNING("Cache failed to send delete.");
   }
-  return true;
+  return IPC_OK();
 }
 
 } // namespace cache
 } // namespace dom
 } // namespace mozilla
--- a/dom/cache/CacheParent.h
+++ b/dom/cache/CacheParent.h
@@ -27,21 +27,21 @@ private:
   virtual void ActorDestroy(ActorDestroyReason aReason) override;
 
   virtual PCacheOpParent*
   AllocPCacheOpParent(const CacheOpArgs& aOpArgs) override;
 
   virtual bool
   DeallocPCacheOpParent(PCacheOpParent* aActor) override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvPCacheOpConstructor(PCacheOpParent* actor,
                           const CacheOpArgs& aOpArgs) override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvTeardown() override;
 
   RefPtr<cache::Manager> mManager;
   const CacheId mCacheId;
 };
 
 } // namespace cache
 } // namespace dom
--- a/dom/cache/CacheStorageParent.cpp
+++ b/dom/cache/CacheStorageParent.cpp
@@ -83,48 +83,48 @@ CacheStorageParent::AllocPCacheOpParent(
 
 bool
 CacheStorageParent::DeallocPCacheOpParent(PCacheOpParent* aActor)
 {
   delete aActor;
   return true;
 }
 
-bool
+mozilla::ipc::IPCResult
 CacheStorageParent::RecvPCacheOpConstructor(PCacheOpParent* aActor,
                                             const CacheOpArgs& aOpArgs)
 {
   auto actor = static_cast<CacheOpParent*>(aActor);
 
   if (mVerifier) {
     MOZ_ASSERT(!mManagerId);
     actor->WaitForVerification(mVerifier);
-    return true;
+    return IPC_OK();
   }
 
   if (NS_WARN_IF(NS_FAILED(mVerifiedStatus))) {
     ErrorResult result(mVerifiedStatus);
     Unused << CacheOpParent::Send__delete__(actor, result, void_t());
     result.SuppressException();
-    return true;
+    return IPC_OK();
   }
 
   MOZ_ASSERT(mManagerId);
   actor->Execute(mManagerId);
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 CacheStorageParent::RecvTeardown()
 {
   if (!Send__delete__(this)) {
     // child process is gone, warn and allow actor to clean up normally
     NS_WARNING("CacheStorage failed to delete actor.");
   }
-  return true;
+  return IPC_OK();
 }
 
 void
 CacheStorageParent::OnPrincipalVerified(nsresult aRv, ManagerId* aManagerId)
 {
   MOZ_ASSERT(mVerifier);
   MOZ_ASSERT(!mManagerId);
   MOZ_ASSERT(NS_SUCCEEDED(mVerifiedStatus));
--- a/dom/cache/CacheStorageParent.h
+++ b/dom/cache/CacheStorageParent.h
@@ -31,21 +31,21 @@ private:
   ActorDestroy(ActorDestroyReason aReason) override;
 
   virtual PCacheOpParent*
   AllocPCacheOpParent(const CacheOpArgs& aOpArgs) override;
 
   virtual bool
   DeallocPCacheOpParent(PCacheOpParent* aActor) override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvPCacheOpConstructor(PCacheOpParent* actor,
                           const CacheOpArgs& aOpArgs) override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvTeardown() override;
 
   // PrincipalVerifier::Listener methods
   virtual void OnPrincipalVerified(nsresult aRv,
                                    ManagerId* aManagerId) override;
 
   const Namespace mNamespace;
   RefPtr<PrincipalVerifier> mVerifier;
--- a/dom/cache/CacheStreamControlChild.cpp
+++ b/dom/cache/CacheStreamControlChild.cpp
@@ -133,27 +133,27 @@ CacheStreamControlChild::AssertOwningThr
 void
 CacheStreamControlChild::ActorDestroy(ActorDestroyReason aReason)
 {
   NS_ASSERT_OWNINGTHREAD(CacheStreamControlChild);
   CloseAllReadStreamsWithoutReporting();
   RemoveWorkerHolder();
 }
 
-bool
+mozilla::ipc::IPCResult
 CacheStreamControlChild::RecvClose(const nsID& aId)
 {
   NS_ASSERT_OWNINGTHREAD(CacheStreamControlChild);
   CloseReadStreams(aId);
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 CacheStreamControlChild::RecvCloseAll()
 {
   NS_ASSERT_OWNINGTHREAD(CacheStreamControlChild);
   CloseAllReadStreams();
-  return true;
+  return IPC_OK();
 }
 
 } // namespace cache
 } // namespace dom
 } // namespace mozilla
--- a/dom/cache/CacheStreamControlChild.h
+++ b/dom/cache/CacheStreamControlChild.h
@@ -46,18 +46,18 @@ private:
 
 #ifdef DEBUG
   virtual void
   AssertOwningThread() override;
 #endif
 
   // PCacheStreamControlChild methods
   virtual void ActorDestroy(ActorDestroyReason aReason) override;
-  virtual bool RecvClose(const nsID& aId) override;
-  virtual bool RecvCloseAll() override;
+  virtual mozilla::ipc::IPCResult RecvClose(const nsID& aId) override;
+  virtual mozilla::ipc::IPCResult RecvCloseAll() override;
 
   bool mDestroyStarted;
   bool mDestroyDelayed;
 
   NS_DECL_OWNINGTHREAD
 };
 
 } // namespace cache
--- a/dom/cache/CacheStreamControlParent.cpp
+++ b/dom/cache/CacheStreamControlParent.cpp
@@ -84,23 +84,23 @@ CacheStreamControlParent::ActorDestroy(A
 {
   NS_ASSERT_OWNINGTHREAD(CacheStreamControlParent);
   CloseAllReadStreamsWithoutReporting();
   mStreamList->RemoveStreamControl(this);
   mStreamList->NoteClosedAll();
   mStreamList = nullptr;
 }
 
-bool
+mozilla::ipc::IPCResult
 CacheStreamControlParent::RecvNoteClosed(const nsID& aId)
 {
   NS_ASSERT_OWNINGTHREAD(CacheStreamControlParent);
   MOZ_ASSERT(mStreamList);
   mStreamList->NoteClosed(aId);
-  return true;
+  return IPC_OK();
 }
 
 void
 CacheStreamControlParent::SetStreamList(StreamList* aStreamList)
 {
   NS_ASSERT_OWNINGTHREAD(CacheStreamControlParent);
   MOZ_ASSERT(!mStreamList);
   mStreamList = aStreamList;
--- a/dom/cache/CacheStreamControlParent.h
+++ b/dom/cache/CacheStreamControlParent.h
@@ -47,17 +47,17 @@ private:
 
 #ifdef DEBUG
   virtual void
   AssertOwningThread() override;
 #endif
 
   // PCacheStreamControlParent methods
   virtual void ActorDestroy(ActorDestroyReason aReason) override;
-  virtual bool RecvNoteClosed(const nsID& aId) override;
+  virtual mozilla::ipc::IPCResult RecvNoteClosed(const nsID& aId) override;
 
   void NotifyClose(const nsID& aId);
   void NotifyCloseAll();
 
   // Cycle with StreamList via a weak-ref to us.  Cleanup occurs when the actor
   // is deleted by the PBackground manager.  ActorDestroy() then calls
   // StreamList::RemoveStreamControl() to clear the weak ref.
   RefPtr<StreamList> mStreamList;
--- a/dom/canvas/DocumentRendererParent.cpp
+++ b/dom/canvas/DocumentRendererParent.cpp
@@ -49,15 +49,15 @@ void DocumentRendererParent::DrawToCanva
 }
 
 void
 DocumentRendererParent::ActorDestroy(ActorDestroyReason aWhy)
 {
   // Implement me! Bug 1005139
 }
 
-bool
+mozilla::ipc::IPCResult
 DocumentRendererParent::Recv__delete__(const nsIntSize& renderedSize,
                                        const nsCString& data)
 {
     DrawToCanvas(renderedSize, data);
-    return true;
+    return IPC_OK();
 }
--- a/dom/canvas/DocumentRendererParent.h
+++ b/dom/canvas/DocumentRendererParent.h
@@ -23,18 +23,18 @@ public:
 
     void SetCanvasContext(nsICanvasRenderingContextInternal* aCanvas,
 			  gfxContext* ctx);
     void DrawToCanvas(const nsIntSize& renderedSize,
 		      const nsCString& aData);
 
     virtual void ActorDestroy(ActorDestroyReason aWhy) override;
 
-    virtual bool Recv__delete__(const nsIntSize& renderedSize,
-                                const nsCString& data) override;
+    virtual mozilla::ipc::IPCResult Recv__delete__(const nsIntSize& renderedSize,
+                                                   const nsCString& data) override;
 
 private:
     nsCOMPtr<nsICanvasRenderingContextInternal> mCanvas;
     RefPtr<gfxContext> mCanvasContext;
 
     DISALLOW_EVIL_CONSTRUCTORS(DocumentRendererParent);
 };
 
--- a/dom/devicestorage/DeviceStorageRequestChild.cpp
+++ b/dom/devicestorage/DeviceStorageRequestChild.cpp
@@ -26,17 +26,17 @@ DeviceStorageRequestChild::DeviceStorage
   MOZ_ASSERT(aRequest);
   MOZ_COUNT_CTOR(DeviceStorageRequestChild);
 }
 
 DeviceStorageRequestChild::~DeviceStorageRequestChild() {
   MOZ_COUNT_DTOR(DeviceStorageRequestChild);
 }
 
-bool
+mozilla::ipc::IPCResult
 DeviceStorageRequestChild::
   Recv__delete__(const DeviceStorageResponseValue& aValue)
 {
   switch (aValue.type()) {
 
     case DeviceStorageResponseValue::TErrorResponse:
     {
       DS_LOG_INFO("error %u", mRequest->GetId());
@@ -138,14 +138,14 @@ DeviceStorageRequestChild::
 
     default:
     {
       DS_LOG_ERROR("unknown %u", mRequest->GetId());
       NS_RUNTIMEABORT("not reached");
       break;
     }
   }
-  return true;
+  return IPC_OK();
 }
 
 } // namespace devicestorage
 } // namespace dom
 } // namespace mozilla
--- a/dom/devicestorage/DeviceStorageRequestChild.h
+++ b/dom/devicestorage/DeviceStorageRequestChild.h
@@ -26,17 +26,17 @@ class DeviceStorageRequestChildCallback
 
 class DeviceStorageRequestChild : public PDeviceStorageRequestChild
 {
 public:
   DeviceStorageRequestChild();
   explicit DeviceStorageRequestChild(DeviceStorageRequest* aRequest);
   ~DeviceStorageRequestChild();
 
-  virtual bool Recv__delete__(const DeviceStorageResponseValue& value);
+  virtual mozilla::ipc::IPCResult Recv__delete__(const DeviceStorageResponseValue& value);
 
 private:
   RefPtr<DeviceStorageRequest> mRequest;
 };
 
 } // namespace devicestorage
 } // namespace dom
 } // namespace mozilla
--- a/dom/filehandle/ActorsChild.cpp
+++ b/dom/filehandle/ActorsChild.cpp
@@ -534,26 +534,26 @@ BackgroundFileHandleChild::NoteComplete(
 void
 BackgroundFileHandleChild::ActorDestroy(ActorDestroyReason aWhy)
 {
   AssertIsOnOwningThread();
 
   NoteActorDestroyed();
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundFileHandleChild::RecvComplete(const bool& aAborted)
 {
   AssertIsOnOwningThread();
   MOZ_ASSERT(mFileHandle);
 
   mFileHandle->HandleCompleteOrAbort(aAborted);
 
   NoteComplete();
-  return true;
+  return IPC_OK();
 }
 
 PBackgroundFileRequestChild*
 BackgroundFileHandleChild::AllocPBackgroundFileRequestChild(
                                                const FileRequestParams& aParams)
 {
   MOZ_CRASH("PBackgroundFileRequestChild actors should be manually "
             "constructed!");
@@ -666,17 +666,17 @@ BackgroundFileRequestChild::ActorDestroy
 
     mFileHandle->OnRequestFinished(/* aActorDestroyedNormally */
                                    aWhy == Deletion);
 
     DEBUGONLY(mFileHandle = nullptr;)
   }
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundFileRequestChild::Recv__delete__(const FileRequestResponse& aResponse)
 {
   AssertIsOnOwningThread();
   MOZ_ASSERT(mFileRequest);
   MOZ_ASSERT(mFileHandle);
 
   if (mFileHandle->IsAborted()) {
     // Always handle an "error" with ABORT_ERR if the file handle was aborted,
@@ -719,25 +719,25 @@ BackgroundFileRequestChild::Recv__delete
   }
 
   mFileHandle->OnRequestFinished(/* aActorDestroyedNormally */ true);
 
   // Null this out so that we don't try to call OnRequestFinished() again in
   // ActorDestroy.
   mFileHandle = nullptr;
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundFileRequestChild::RecvProgress(const uint64_t& aProgress,
                                          const uint64_t& aProgressMax)
 {
   AssertIsOnOwningThread();
   MOZ_ASSERT(mFileRequest);
 
   mFileRequest->OnProgress(aProgress, aProgressMax);
 
-  return true;
+  return IPC_OK();
 }
 
 } // namespace dom
 } // namespace mozilla
--- a/dom/filehandle/ActorsChild.h
+++ b/dom/filehandle/ActorsChild.h
@@ -102,17 +102,17 @@ private:
 
   void
   NoteComplete();
 
   // IPDL methods are only called by IPDL.
   virtual void
   ActorDestroy(ActorDestroyReason aWhy) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvComplete(const bool& aAborted) override;
 
   virtual PBackgroundFileRequestChild*
   AllocPBackgroundFileRequestChild(const FileRequestParams& aParams)
                                    override;
 
   virtual bool
   DeallocPBackgroundFileRequestChild(PBackgroundFileRequestChild* aActor)
@@ -155,20 +155,20 @@ private:
 
   void
   HandleResponse(JS::Handle<JS::Value> aResponse);
 
   // IPDL methods are only called by IPDL.
   virtual void
   ActorDestroy(ActorDestroyReason aWhy) override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   Recv__delete__(const FileRequestResponse& aResponse) override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvProgress(const uint64_t& aProgress,
                const uint64_t& aProgressMax) override;
 };
 
 } // namespace dom
 } // namespace mozilla
 
 #endif // mozilla_dom_filehandle_ActorsChild_h
--- a/dom/filehandle/ActorsParent.cpp
+++ b/dom/filehandle/ActorsParent.cpp
@@ -338,29 +338,29 @@ private:
 
   void
   FinishOrAbort();
 
   // IPDL methods are only called by IPDL.
   virtual void
   ActorDestroy(ActorDestroyReason aWhy) override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvDeleteMe() override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvFinish() override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvAbort() override;
 
   virtual PBackgroundFileRequestParent*
   AllocPBackgroundFileRequestParent(const FileRequestParams& aParams) override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvPBackgroundFileRequestConstructor(PBackgroundFileRequestParent* aActor,
                                         const FileRequestParams& aParams)
                                         override;
 
   virtual bool
   DeallocPBackgroundFileRequestParent(PBackgroundFileRequestParent* aActor)
                                       override;
 };
@@ -1467,17 +1467,17 @@ BackgroundMutableFileParentBase::AllocPB
     return nullptr;
   }
 
   RefPtr<FileHandle> fileHandle = new FileHandle(this, aMode);
 
   return fileHandle.forget().take();
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundMutableFileParentBase::RecvPBackgroundFileHandleConstructor(
                                             PBackgroundFileHandleParent* aActor,
                                             const FileMode& aMode)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
   MOZ_ASSERT(aMode == FileMode::Readonly || aMode == FileMode::Readwrite);
 
@@ -1489,50 +1489,53 @@ BackgroundMutableFileParentBase::RecvPBa
 
   // Add a placeholder for this file handle immediately.
   fileHandleThreadPool->Enqueue(fileHandle, nullptr, false);
 
   fileHandle->SetActive();
 
   if (NS_WARN_IF(!RegisterFileHandle(fileHandle))) {
     fileHandle->Abort(/* aForce */ false);
-    return true;
+    return IPC_OK();
   }
 
-  return true;
+  return IPC_OK();
 }
 
 bool
 BackgroundMutableFileParentBase::DeallocPBackgroundFileHandleParent(
                                             PBackgroundFileHandleParent* aActor)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
 
   RefPtr<FileHandle> fileHandle =
     dont_AddRef(static_cast<FileHandle*>(aActor));
   return true;
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundMutableFileParentBase::RecvDeleteMe()
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(!mActorDestroyed);
 
-  return PBackgroundMutableFileParent::Send__delete__(this);
+  if (!PBackgroundMutableFileParent::Send__delete__(this)) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundMutableFileParentBase::RecvGetFileId(int64_t* aFileId)
 {
   AssertIsOnBackgroundThread();
 
   *aFileId = -1;
-  return true;
+  return IPC_OK();
 }
 
 /*******************************************************************************
  * FileHandle
  ******************************************************************************/
 
 FileHandle::FileHandle(BackgroundMutableFileParentBase* aMutableFile,
                        FileMode aMode)
@@ -1829,55 +1832,58 @@ FileHandle::ActorDestroy(ActorDestroyRea
     mAborted = true;
 
     mForceAborted = true;
 
     MaybeFinishOrAbort();
   }
 }
 
-bool
+mozilla::ipc::IPCResult
 FileHandle::RecvDeleteMe()
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(!IsActorDestroyed());
 
-  return PBackgroundFileHandleParent::Send__delete__(this);
+  if (!PBackgroundFileHandleParent::Send__delete__(this)) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 FileHandle::RecvFinish()
 {
   AssertIsOnBackgroundThread();
 
   if (NS_WARN_IF(mFinishOrAbortReceived)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   mFinishOrAbortReceived = true;
 
   MaybeFinishOrAbort();
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 FileHandle::RecvAbort()
 {
   AssertIsOnBackgroundThread();
 
   if (NS_WARN_IF(mFinishOrAbortReceived)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   mFinishOrAbortReceived = true;
 
   Abort(/* aForce */ false);
-  return true;
+  return IPC_OK();
 }
 
 PBackgroundFileRequestParent*
 FileHandle::AllocPBackgroundFileRequestParent(const FileRequestParams& aParams)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aParams.type() != FileRequestParams::T__None);
 
@@ -1933,34 +1939,34 @@ FileHandle::AllocPBackgroundFileRequestP
   }
 
   MOZ_ASSERT(actor);
 
   // Transfer ownership to IPDL.
   return actor.forget().take();
 }
 
-bool
+mozilla::ipc::IPCResult
 FileHandle::RecvPBackgroundFileRequestConstructor(
                                            PBackgroundFileRequestParent* aActor,
                                            const FileRequestParams& aParams)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
   MOZ_ASSERT(aParams.type() != FileRequestParams::T__None);
 
   auto* op = static_cast<NormalFileHandleOp*>(aActor);
 
   if (NS_WARN_IF(!op->Init(this))) {
     op->Cleanup();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   op->Enqueue();
-  return true;
+  return IPC_OK();
 }
 
 bool
 FileHandle::DeallocPBackgroundFileRequestParent(
                                            PBackgroundFileRequestParent* aActor)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
--- a/dom/filehandle/ActorsParent.h
+++ b/dom/filehandle/ActorsParent.h
@@ -195,27 +195,27 @@ protected:
 
   // IPDL methods are only called by IPDL.
   virtual void
   ActorDestroy(ActorDestroyReason aWhy) override;
 
   virtual PBackgroundFileHandleParent*
   AllocPBackgroundFileHandleParent(const FileMode& aMode) override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvPBackgroundFileHandleConstructor(PBackgroundFileHandleParent* aActor,
                                        const FileMode& aMode) override;
 
   virtual bool
   DeallocPBackgroundFileHandleParent(PBackgroundFileHandleParent* aActor)
                                      override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvDeleteMe() override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvGetFileId(int64_t* aFileId) override;
 };
 
 } // namespace dom
 } // namespace mozilla
 
 #endif // mozilla_dom_filehandle_ActorsParent_h
--- a/dom/filesystem/FileSystemTaskBase.cpp
+++ b/dom/filesystem/FileSystemTaskBase.cpp
@@ -179,24 +179,24 @@ FileSystemTaskChildBase::SetRequestResul
     mErrorValue = r.error();
   } else {
     ErrorResult rv;
     SetSuccessRequestResult(aValue, rv);
     mErrorValue = rv.StealNSResult();
   }
 }
 
-bool
+mozilla::ipc::IPCResult
 FileSystemTaskChildBase::Recv__delete__(const FileSystemResponseValue& aValue)
 {
   mFileSystem->AssertIsOnOwningThread();
 
   SetRequestResult(aValue);
   HandlerCallback();
-  return true;
+  return IPC_OK();
 }
 
 void
 FileSystemTaskChildBase::SetError(const nsresult& aErrorValue)
 {
   mErrorValue = FileSystemErrorFromNsError(aErrorValue);
 }
 
--- a/dom/filesystem/FileSystemTaskBase.h
+++ b/dom/filesystem/FileSystemTaskBase.h
@@ -182,17 +182,17 @@ protected:
    * message is received in the child process and we want to get the task
    * success result. This method runs in the owning thread.
    */
   virtual void
   SetSuccessRequestResult(const FileSystemResponseValue& aValue,
                           ErrorResult& aRv) = 0;
 
   // Overrides PFileSystemRequestChild
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   Recv__delete__(const FileSystemResponseValue& value) override;
 
   nsresult mErrorValue;
   RefPtr<FileSystemBase> mFileSystem;
 
 private:
 
   /*
--- a/dom/flyweb/FlyWebPublishedServer.cpp
+++ b/dom/flyweb/FlyWebPublishedServer.cpp
@@ -283,52 +283,52 @@ FlyWebPublishedServerChild::PermissionGr
   FlyWebPublishOptions options;
   options.mUiUrl = mUiUrl;
 
   // Proceed with initialization.
   ContentChild::GetSingleton()->
     SendPFlyWebPublishedServerConstructor(this, mName, options);
 }
 
-bool
+mozilla::ipc::IPCResult
 FlyWebPublishedServerChild::RecvServerReady(const nsresult& aStatus)
 {
   LOG_I("FlyWebPublishedServerChild::RecvServerReady(%p)", this);
   MOZ_ASSERT(mActorExists);
 
   PublishedServerStarted(aStatus);
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 FlyWebPublishedServerChild::RecvServerClose()
 {
   LOG_I("FlyWebPublishedServerChild::RecvServerClose(%p)", this);
   MOZ_ASSERT(mActorExists);
 
   Close();
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 FlyWebPublishedServerChild::RecvFetchRequest(const IPCInternalRequest& aRequest,
                                              const uint64_t& aRequestId)
 {
   LOG_I("FlyWebPublishedServerChild::RecvFetchRequest(%p)", this);
   MOZ_ASSERT(mActorExists);
 
   RefPtr<InternalRequest> request = new InternalRequest(aRequest);
   mPendingRequests.Put(request, aRequestId);
   FireFetchEvent(request);
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 FlyWebPublishedServerChild::RecvWebSocketRequest(const IPCInternalRequest& aRequest,
                                                  const uint64_t& aRequestId,
                                                  PTransportProviderChild* aProvider)
 {
   LOG_I("FlyWebPublishedServerChild::RecvWebSocketRequest(%p)", this);
   MOZ_ASSERT(mActorExists);
 
   RefPtr<InternalRequest> request = new InternalRequest(aRequest);
@@ -336,17 +336,17 @@ FlyWebPublishedServerChild::RecvWebSocke
 
   // Not addreffing here. The addref was already done when the
   // PTransportProvider child constructor original ran.
   mPendingTransportProviders.Put(aRequestId,
     dont_AddRef(static_cast<TransportProviderChild*>(aProvider)));
 
   FireWebsocketEvent(request);
 
-  return true;
+  return IPC_OK();
 }
 
 void
 FlyWebPublishedServerChild::ActorDestroy(ActorDestroyReason aWhy)
 {
   LOG_I("FlyWebPublishedServerChild::ActorDestroy(%p)", this);
 
   mActorExists = false;
@@ -561,115 +561,115 @@ FlyWebPublishedServerParent::HandleEvent
     return NS_OK;
   }
 
   MOZ_CRASH("Unknown event type");
 
   return NS_OK;
 }
 
-bool
+mozilla::ipc::IPCResult
 FlyWebPublishedServerParent::RecvFetchResponse(const IPCInternalResponse& aResponse,
                                                const uint64_t& aRequestId)
 {
   MOZ_ASSERT(!mActorDestroyed);
 
   RefPtr<InternalRequest> request;
   mPendingRequests.Remove(aRequestId, getter_AddRefs(request));
   if (!request) {
      static_cast<ContentParent*>(Manager())->KillHard("unknown request id");
-     return false;
+     return IPC_FAIL_NO_REASON(this);
   }
 
   RefPtr<InternalResponse> response = InternalResponse::FromIPC(aResponse);
 
   mPublishedServer->OnFetchResponse(request, response);
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 FlyWebPublishedServerParent::RecvWebSocketResponse(const IPCInternalResponse& aResponse,
                                                    const uint64_t& aRequestId)
 {
   MOZ_ASSERT(!mActorDestroyed);
 
   mPendingTransportProviders.Remove(aRequestId);
 
   RefPtr<InternalRequest> request;
   mPendingRequests.Remove(aRequestId, getter_AddRefs(request));
   if (!request) {
      static_cast<ContentParent*>(Manager())->KillHard("unknown websocket request id");
-     return false;
+     return IPC_FAIL_NO_REASON(this);
   }
 
   RefPtr<InternalResponse> response = InternalResponse::FromIPC(aResponse);
 
   mPublishedServer->OnWebSocketResponse(request, response);
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 FlyWebPublishedServerParent::RecvWebSocketAccept(const nsString& aProtocol,
                                                  const uint64_t& aRequestId)
 {
   MOZ_ASSERT(!mActorDestroyed);
 
   RefPtr<TransportProviderParent> providerIPC;
   mPendingTransportProviders.Remove(aRequestId, getter_AddRefs(providerIPC));
 
   RefPtr<InternalRequest> request;
   mPendingRequests.Remove(aRequestId, getter_AddRefs(request));
 
   if (!request || !providerIPC) {
      static_cast<ContentParent*>(Manager())->KillHard("unknown websocket request id");
-     return false;
+     return IPC_FAIL_NO_REASON(this);
   }
 
   Optional<nsAString> protocol;
   if (!aProtocol.IsVoid()) {
     protocol = &aProtocol;
   }
 
   ErrorResult result;
   nsCOMPtr<nsITransportProvider> providerServer =
     mPublishedServer->OnWebSocketAcceptInternal(request, protocol, result);
   if (result.Failed()) {
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   providerServer->SetListener(providerIPC);
 
-  return true;
+  return IPC_OK();
 }
 
 void
 FlyWebPublishedServerParent::ActorDestroy(ActorDestroyReason aWhy)
 {
   LOG_I("FlyWebPublishedServerParent::ActorDestroy(%p)", this);
 
   mActorDestroyed = true;
 }
 
-bool
+mozilla::ipc::IPCResult
 FlyWebPublishedServerParent::Recv__delete__()
 {
   LOG_I("FlyWebPublishedServerParent::Recv__delete__(%p)", this);
   MOZ_ASSERT(!mActorDestroyed);
 
   if (mPublishedServer) {
     mPublishedServer->RemoveEventListener(NS_LITERAL_STRING("fetch"),
                                           this, false);
     mPublishedServer->RemoveEventListener(NS_LITERAL_STRING("websocket"),
                                           this, false);
     mPublishedServer->RemoveEventListener(NS_LITERAL_STRING("close"),
                                           this, false);
     mPublishedServer->Close();
     mPublishedServer = nullptr;
   }
-  return true;
+  return IPC_OK();
 }
 
 } // namespace dom
 } // namespace mozilla
 
 
--- a/dom/flyweb/FlyWebPublishedServerIPC.h
+++ b/dom/flyweb/FlyWebPublishedServerIPC.h
@@ -95,23 +95,23 @@ class FlyWebPublishedServerChild final :
                                        , public PFlyWebPublishedServerChild
 {
 public:
   FlyWebPublishedServerChild(nsPIDOMWindowInner* aOwner,
                              const nsAString& aName,
                              const FlyWebPublishOptions& aOptions);
 
   virtual void PermissionGranted(bool aGranted) override;
-  virtual bool RecvServerReady(const nsresult& aStatus) override;
-  virtual bool RecvServerClose() override;
-  virtual bool RecvFetchRequest(const IPCInternalRequest& aRequest,
-                                const uint64_t& aRequestId) override;
-  virtual bool RecvWebSocketRequest(const IPCInternalRequest& aRequest,
-                                    const uint64_t& aRequestId,
-                                    PTransportProviderChild* aProvider) override;
+  virtual mozilla::ipc::IPCResult RecvServerReady(const nsresult& aStatus) override;
+  virtual mozilla::ipc::IPCResult RecvServerClose() override;
+  virtual mozilla::ipc::IPCResult RecvFetchRequest(const IPCInternalRequest& aRequest,
+                                                   const uint64_t& aRequestId) override;
+  virtual mozilla::ipc::IPCResult RecvWebSocketRequest(const IPCInternalRequest& aRequest,
+                                                       const uint64_t& aRequestId,
+                                                       PTransportProviderChild* aProvider) override;
 
   virtual void OnFetchResponse(InternalRequest* aRequest,
                                InternalResponse* aResponse) override;
   virtual void OnWebSocketResponse(InternalRequest* aConnectRequest,
                                    InternalResponse* aResponse) override;
   virtual already_AddRefed<nsITransportProvider>
     OnWebSocketAcceptInternal(InternalRequest* aConnectRequest,
                               const Optional<nsAString>& aProtocol,
@@ -139,25 +139,25 @@ public:
 
   NS_DECL_ISUPPORTS
   NS_DECL_NSIDOMEVENTLISTENER
 
 private:
   virtual void
   ActorDestroy(ActorDestroyReason aWhy) override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   Recv__delete__() override;
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvFetchResponse(const IPCInternalResponse& aResponse,
                     const uint64_t& aRequestId) override;
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvWebSocketResponse(const IPCInternalResponse& aResponse,
                         const uint64_t& aRequestId) override;
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvWebSocketAccept(const nsString& aProtocol,
                       const uint64_t& aRequestId) override;
 
   ~FlyWebPublishedServerParent() {}
 
   bool mActorDestroyed;
   uint64_t mNextRequestId;
   nsRefPtrHashtable<nsUint64HashKey, InternalRequest> mPendingRequests;
--- a/dom/gamepad/ipc/GamepadEventChannelChild.cpp
+++ b/dom/gamepad/ipc/GamepadEventChannelChild.cpp
@@ -23,20 +23,20 @@ class GamepadUpdateRunnable final : publ
     return NS_OK;
   }
  protected:
   GamepadChangeEvent mEvent;
 };
 
 } // namespace
 
-bool
+mozilla::ipc::IPCResult
 GamepadEventChannelChild::RecvGamepadUpdate(
                                        const GamepadChangeEvent& aGamepadEvent)
 {
   DebugOnly<nsresult> rv =
     NS_DispatchToMainThread(new GamepadUpdateRunnable(aGamepadEvent));
   NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), "NS_DispatchToMainThread failed");
-  return true;
+  return IPC_OK();
 }
 
 } // namespace dom
 } // namespace mozilla
--- a/dom/gamepad/ipc/GamepadEventChannelChild.h
+++ b/dom/gamepad/ipc/GamepadEventChannelChild.h
@@ -9,16 +9,16 @@
 namespace mozilla{
 namespace dom{
 
 class GamepadEventChannelChild final : public PGamepadEventChannelChild
 {
  public:
   GamepadEventChannelChild() {}
   ~GamepadEventChannelChild() {}
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvGamepadUpdate(const GamepadChangeEvent& aGamepadEvent) override;
 };
 
 }// namespace dom
 }// namespace mozilla
 
 #endif
--- a/dom/gamepad/ipc/GamepadEventChannelParent.cpp
+++ b/dom/gamepad/ipc/GamepadEventChannelParent.cpp
@@ -44,38 +44,38 @@ GamepadEventChannelParent::GamepadEventC
 {
   RefPtr<GamepadPlatformService> service =
     GamepadPlatformService::GetParentService();
   MOZ_ASSERT(service);
   service->AddChannelParent(this);
   mBackgroundThread = NS_GetCurrentThread();
 }
 
-bool
+mozilla::ipc::IPCResult
 GamepadEventChannelParent::RecvGamepadListenerAdded()
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(!mHasGamepadListener);
   mHasGamepadListener = true;
   StartGamepadMonitoring();
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 GamepadEventChannelParent::RecvGamepadListenerRemoved()
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(mHasGamepadListener);
   mHasGamepadListener = false;
   RefPtr<GamepadPlatformService> service =
     GamepadPlatformService::GetParentService();
   MOZ_ASSERT(service);
   service->RemoveChannelParent(this);
   Unused << Send__delete__(this);
-  return true;
+  return IPC_OK();
 }
 
 void
 GamepadEventChannelParent::ActorDestroy(ActorDestroyReason aWhy)
 {
   AssertIsOnBackgroundThread();
 
   // It may be called because IPDL child side crashed, we'll
--- a/dom/gamepad/ipc/GamepadEventChannelParent.h
+++ b/dom/gamepad/ipc/GamepadEventChannelParent.h
@@ -10,18 +10,18 @@ namespace mozilla{
 namespace dom{
 
 class GamepadEventChannelParent final : public PGamepadEventChannelParent
 {
  public:
   NS_INLINE_DECL_THREADSAFE_REFCOUNTING(GamepadEventChannelParent)
   GamepadEventChannelParent();
   virtual void ActorDestroy(ActorDestroyReason aWhy) override;
-  virtual bool RecvGamepadListenerAdded() override;
-  virtual bool RecvGamepadListenerRemoved() override;
+  virtual mozilla::ipc::IPCResult RecvGamepadListenerAdded() override;
+  virtual mozilla::ipc::IPCResult RecvGamepadListenerRemoved() override;
   void DispatchUpdateEvent(const GamepadChangeEvent& aEvent);
   bool HasGamepadListener() const { return mHasGamepadListener; }
  private:
   ~GamepadEventChannelParent() {}
   bool mHasGamepadListener;
   nsCOMPtr<nsIThread> mBackgroundThread;
 };
 
--- a/dom/gamepad/ipc/GamepadTestChannelChild.cpp
+++ b/dom/gamepad/ipc/GamepadTestChannelChild.cpp
@@ -9,24 +9,24 @@ namespace dom {
 
 void
 GamepadTestChannelChild::AddPromise(const uint32_t& aID, Promise* aPromise)
 {
   MOZ_ASSERT(!mPromiseList.Get(aID, nullptr));
   mPromiseList.Put(aID, aPromise);
 }
 
-bool
+mozilla::ipc::IPCResult
 GamepadTestChannelChild::RecvReplyGamepadIndex(const uint32_t& aID,
                                                const uint32_t& aIndex)
 {
   RefPtr<Promise> p;
   if (!mPromiseList.Get(aID, getter_AddRefs(p))) {
     MOZ_CRASH("We should always have a promise.");
   }
 
   p->MaybeResolve(aIndex);
   mPromiseList.Remove(aID);
-  return true;
+  return IPC_OK();
 }
 
 } // namespace dom
 } // namespace mozilla
--- a/dom/gamepad/ipc/GamepadTestChannelChild.h
+++ b/dom/gamepad/ipc/GamepadTestChannelChild.h
@@ -13,17 +13,17 @@ namespace dom {
 
 class GamepadTestChannelChild final : public PGamepadTestChannelChild
 {
  public:
   GamepadTestChannelChild() {}
   ~GamepadTestChannelChild() {}
   void AddPromise(const uint32_t& aID, Promise* aPromise);
  private:
-  virtual bool RecvReplyGamepadIndex(const uint32_t& aID,
-                                     const uint32_t& aIndex) override;
+  virtual mozilla::ipc::IPCResult RecvReplyGamepadIndex(const uint32_t& aID,
+                                                        const uint32_t& aIndex) override;
   nsRefPtrHashtable<nsUint32HashKey, Promise> mPromiseList;
 };
 
 }// namespace dom
 }// namespace mozilla
 
 #endif
--- a/dom/gamepad/ipc/GamepadTestChannelParent.cpp
+++ b/dom/gamepad/ipc/GamepadTestChannelParent.cpp
@@ -5,17 +5,17 @@
 #include "GamepadTestChannelParent.h"
 
 #include "mozilla/dom/GamepadPlatformService.h"
 #include "mozilla/Unused.h"
 
 namespace mozilla {
 namespace dom {
 
-bool
+mozilla::ipc::IPCResult
 GamepadTestChannelParent::RecvGamepadTestEvent(const uint32_t& aID,
                                                const GamepadChangeEvent& aEvent)
 {
   mozilla::ipc::AssertIsOnBackgroundThread();
   RefPtr<GamepadPlatformService>  service =
     GamepadPlatformService::GetParentService();
   MOZ_ASSERT(service);
   if (aEvent.type() == GamepadChangeEvent::TGamepadAdded) {
@@ -24,40 +24,40 @@ GamepadTestChannelParent::RecvGamepadTes
     LossyCopyUTF16toASCII(a.id(), gamepadID);
     uint32_t index = service->AddGamepad(gamepadID.get(),
                                          static_cast<GamepadMappingType>(a.mapping()),
                                          a.num_buttons(),
                                          a.num_axes());
     if (!mShuttingdown) {
       Unused << SendReplyGamepadIndex(aID, index);
     }
-    return true;
+    return IPC_OK();
   }
   if (aEvent.type() == GamepadChangeEvent::TGamepadRemoved) {
     const GamepadRemoved& a = aEvent.get_GamepadRemoved();
     service->RemoveGamepad(a.index());
-    return true;
+    return IPC_OK();
   }
   if (aEvent.type() == GamepadChangeEvent::TGamepadButtonInformation) {
     const GamepadButtonInformation& a = aEvent.get_GamepadButtonInformation();
     service->NewButtonEvent(a.index(), a.button(), a.pressed(), a.value());
-    return true;
+    return IPC_OK();
   }
   if (aEvent.type() == GamepadChangeEvent::TGamepadAxisInformation) {
     const GamepadAxisInformation& a = aEvent.get_GamepadAxisInformation();
     service->NewAxisMoveEvent(a.index(), a.axis(), a.value());
-    return true;
+    return IPC_OK();
   }
 
   NS_WARNING("Unknown event type.");
-  return false;
+  return IPC_FAIL_NO_REASON(this);
 }
 
-bool
+mozilla::ipc::IPCResult
 GamepadTestChannelParent::RecvShutdownChannel()
 {
   mShuttingdown = true;
   Unused << Send__delete__(this);
-  return true;
+  return IPC_OK();
 }
 
 } // namespace dom
 } // namespace mozilla
--- a/dom/gamepad/ipc/GamepadTestChannelParent.h
+++ b/dom/gamepad/ipc/GamepadTestChannelParent.h
@@ -12,20 +12,20 @@ namespace dom {
 
 class GamepadTestChannelParent final : public PGamepadTestChannelParent
 {
  public:
   NS_INLINE_DECL_THREADSAFE_REFCOUNTING(GamepadTestChannelParent)
   GamepadTestChannelParent()
     : mShuttingdown(false) {}
   virtual void ActorDestroy(ActorDestroyReason aWhy) override {}
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvGamepadTestEvent(const uint32_t& aID,
                        const GamepadChangeEvent& aGamepadEvent) override;
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvShutdownChannel() override;
  private:
   ~GamepadTestChannelParent() {}
   bool mShuttingdown;
 };
 
 }// namespace dom
 }// namespace mozilla
--- a/dom/indexedDB/ActorsChild.cpp
+++ b/dom/indexedDB/ActorsChild.cpp
@@ -581,17 +581,17 @@ public:
     MOZ_ASSERT(aFactory);
     aActor->AssertIsOnOwningThread();
   }
 
 protected:
   ~PermissionRequestChildProcessActor()
   { }
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   Recv__delete__(const uint32_t& aPermission) override;
 };
 
 void
 DeserializeStructuredCloneFiles(
                 IDBDatabase* aDatabase,
                 const nsTArray<SerializedStructuredCloneFile>& aSerializedFiles,
                 const nsTArray<RefPtr<JS::WasmModule>>* aModuleSet,
@@ -1025,17 +1025,17 @@ public:
     MOZ_ASSERT(NS_IsMainThread());
     MOZ_ASSERT(aChallenge);
   }
 
 protected:
   ~WorkerPermissionRequestChildProcessActor()
   {}
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   Recv__delete__(const uint32_t& aPermission) override;
 };
 
 class WorkerPermissionChallenge final : public Runnable
 {
 public:
   WorkerPermissionChallenge(WorkerPrivate* aWorkerPrivate,
                             BackgroundFactoryRequestChild* aActor,
@@ -1179,23 +1179,23 @@ bool
 WorkerPermissionOperationCompleted::WorkerRun(JSContext* aCx,
                                               WorkerPrivate* aWorkerPrivate)
 {
   aWorkerPrivate->AssertIsOnWorkerThread();
   mChallenge->OperationCompleted();
   return true;
 }
 
-bool
+mozilla::ipc::IPCResult
 WorkerPermissionRequestChildProcessActor::Recv__delete__(
                                               const uint32_t& /* aPermission */)
 {
   MOZ_ASSERT(NS_IsMainThread());
   mChallenge->OperationCompleted();
-  return true;
+  return IPC_OK();
 }
 
 } // namespace
 
 /*******************************************************************************
  * Actor class declarations
  ******************************************************************************/
 
@@ -1284,33 +1284,33 @@ PermissionRequestMainProcessHelper::OnPr
   MaybeCollectGarbageOnIPCMessage();
 
   mActor->SendPermissionRetry();
 
   mActor = nullptr;
   mFactory = nullptr;
 }
 
-bool
+mozilla::ipc::IPCResult
 PermissionRequestChildProcessActor::Recv__delete__(
                                               const uint32_t& /* aPermission */)
 {
   MOZ_ASSERT(mActor);
   mActor->AssertIsOnOwningThread();
   MOZ_ASSERT(mFactory);
 
   MaybeCollectGarbageOnIPCMessage();
 
   RefPtr<IDBFactory> factory;
   mFactory.swap(factory);
 
   mActor->SendPermissionRetry();
   mActor = nullptr;
 
-  return true;
+  return IPC_OK();
 }
 
 /*******************************************************************************
  * BackgroundRequestChildBase
  ******************************************************************************/
 
 BackgroundRequestChildBase::BackgroundRequestChildBase(IDBRequest* aRequest)
   : mRequest(aRequest)
@@ -1567,17 +1567,17 @@ BackgroundFactoryRequestChild::ActorDest
   if (aWhy != Deletion) {
     IDBOpenDBRequest* openRequest = GetOpenDBRequest();
     if (openRequest) {
       openRequest->NoteComplete();
     }
   }
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundFactoryRequestChild::Recv__delete__(
                                         const FactoryRequestResponse& aResponse)
 {
   AssertIsOnOwningThread();
   MOZ_ASSERT(mRequest);
 
   MaybeCollectGarbageOnIPCMessage();
 
@@ -1601,91 +1601,97 @@ BackgroundFactoryRequestChild::Recv__del
   }
 
   IDBOpenDBRequest* request = GetOpenDBRequest();
   MOZ_ASSERT(request);
 
   request->NoteComplete();
 
   if (NS_WARN_IF(!result)) {
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundFactoryRequestChild::RecvPermissionChallenge(
                                             const PrincipalInfo& aPrincipalInfo)
 {
   AssertIsOnOwningThread();
 
   MaybeCollectGarbageOnIPCMessage();
 
   if (!NS_IsMainThread()) {
     WorkerPrivate* workerPrivate = GetCurrentThreadWorkerPrivate();
     MOZ_ASSERT(workerPrivate);
     workerPrivate->AssertIsOnWorkerThread();
 
     RefPtr<WorkerPermissionChallenge> challenge =
       new WorkerPermissionChallenge(workerPrivate, this, mFactory,
                                     aPrincipalInfo);
-    return challenge->Dispatch();
+    if (!challenge->Dispatch()) {
+      return IPC_FAIL_NO_REASON(this);
+    }
+    return IPC_OK();
   }
 
   nsresult rv;
   nsCOMPtr<nsIPrincipal> principal =
     mozilla::ipc::PrincipalInfoToPrincipal(aPrincipalInfo, &rv);
   if (NS_WARN_IF(NS_FAILED(rv))) {
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   if (XRE_IsParentProcess()) {
     nsCOMPtr<nsPIDOMWindowInner> window = mFactory->GetParentObject();
     MOZ_ASSERT(window);
 
     nsCOMPtr<Element> ownerElement =
       do_QueryInterface(window->GetChromeEventHandler());
     if (NS_WARN_IF(!ownerElement)) {
       // If this fails, the page was navigated. Fail the permission check by
       // forcing an immediate retry.
-      return SendPermissionRetry();
+      if (!SendPermissionRetry()) {
+        return IPC_FAIL_NO_REASON(this);
+      }
+      return IPC_OK();
     }
 
     RefPtr<PermissionRequestMainProcessHelper> helper =
       new PermissionRequestMainProcessHelper(this, mFactory, ownerElement, principal);
 
     PermissionRequestBase::PermissionValue permission;
     if (NS_WARN_IF(NS_FAILED(helper->PromptIfNeeded(&permission)))) {
-      return false;
+      return IPC_FAIL_NO_REASON(this);
     }
 
     MOZ_ASSERT(permission == PermissionRequestBase::kPermissionAllowed ||
                permission == PermissionRequestBase::kPermissionDenied ||
                permission == PermissionRequestBase::kPermissionPrompt);
 
     if (permission != PermissionRequestBase::kPermissionPrompt) {
       SendPermissionRetry();
     }
-    return true;
+    return IPC_OK();
   }
 
   RefPtr<TabChild> tabChild = mFactory->GetTabChild();
   MOZ_ASSERT(tabChild);
 
   IPC::Principal ipcPrincipal(principal);
 
   auto* actor = new PermissionRequestChildProcessActor(this, mFactory);
 
   tabChild->SendPIndexedDBPermissionRequestConstructor(actor, ipcPrincipal);
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundFactoryRequestChild::RecvBlocked(const uint64_t& aCurrentVersion)
 {
   AssertIsOnOwningThread();
   MOZ_ASSERT(mRequest);
 
   MaybeCollectGarbageOnIPCMessage();
 
   const nsDependentString type(kBlockedEventType);
@@ -1711,17 +1717,17 @@ BackgroundFactoryRequestChild::RecvBlock
                IDB_LOG_ID_STRING(),
                kungFuDeathGrip->LoggingSerialNumber());
 
   bool dummy;
   if (NS_FAILED(kungFuDeathGrip->DispatchEvent(blockedEvent, &dummy))) {
     NS_WARNING("Failed to dispatch event!");
   }
 
-  return true;
+  return IPC_OK();
 }
 
 /*******************************************************************************
  * BackgroundDatabaseChild
  ******************************************************************************/
 
 BackgroundDatabaseChild::BackgroundDatabaseChild(
                                const DatabaseSpec& aSpec,
@@ -1883,17 +1889,17 @@ BackgroundDatabaseChild::AllocPBackgroun
   AssertIsOnOwningThread();
 
   IDBOpenDBRequest* request = mOpenRequestActor->GetOpenDBRequest();
   MOZ_ASSERT(request);
 
   return new BackgroundVersionChangeTransactionChild(request);
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundDatabaseChild::RecvPBackgroundIDBVersionChangeTransactionConstructor(
                             PBackgroundIDBVersionChangeTransactionChild* aActor,
                             const uint64_t& aCurrentVersion,
                             const uint64_t& aRequestedVersion,
                             const int64_t& aNextObjectStoreId,
                             const int64_t& aNextIndexId)
 {
   AssertIsOnOwningThread();
@@ -1919,17 +1925,17 @@ BackgroundDatabaseChild::RecvPBackground
     // This can happen if we receive events after a worker has begun its
     // shutdown process.
     MOZ_ASSERT(!NS_IsMainThread());
 
     // Report this to the console.
     IDB_REPORT_INTERNAL_ERR();
 
     MOZ_ALWAYS_TRUE(aActor->SendDeleteMe());
-    return true;
+    return IPC_OK();
   }
 
   transaction->AssertIsOnOwningThread();
 
   actor->SetDOMTransaction(transaction);
 
   mDatabase->EnterSetVersionTransaction(aRequestedVersion);
 
@@ -1941,17 +1947,17 @@ BackgroundDatabaseChild::RecvPBackground
                                   aCurrentVersion,
                                   aRequestedVersion);
   MOZ_ASSERT(upgradeNeededEvent);
 
   ResultHelper helper(request, transaction, mDatabase);
 
   DispatchSuccessEvent(&helper, upgradeNeededEvent);
 
-  return true;
+  return IPC_OK();
 }
 
 bool
 BackgroundDatabaseChild::DeallocPBackgroundIDBVersionChangeTransactionChild(
                             PBackgroundIDBVersionChangeTransactionChild* aActor)
 {
   MOZ_ASSERT(aActor);
 
@@ -1982,26 +1988,26 @@ BackgroundDatabaseChild::DeallocPBackgro
                                             PBackgroundMutableFileChild* aActor)
 {
   MOZ_ASSERT(aActor);
 
   delete static_cast<BackgroundMutableFileChild*>(aActor);
   return true;
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundDatabaseChild::RecvVersionChange(const uint64_t& aOldVersion,
                                            const NullableVersion& aNewVersion)
 {
   AssertIsOnOwningThread();
 
   MaybeCollectGarbageOnIPCMessage();
 
   if (!mDatabase || mDatabase->IsClosed()) {
-    return true;
+    return IPC_OK();
   }
 
   RefPtr<IDBDatabase> kungFuDeathGrip = mDatabase;
 
   // Handle bfcache'd windows.
   if (nsPIDOMWindowInner* owner = kungFuDeathGrip->GetOwner()) {
     // The database must be closed if the window is already frozen.
     bool shouldAbortAndClose = owner->IsFrozen();
@@ -2015,17 +2021,17 @@ BackgroundDatabaseChild::RecvVersionChan
       }
     }
 
     if (shouldAbortAndClose) {
       // Invalidate() doesn't close the database in the parent, so we have
       // to call Close() and AbortTransactions() manually.
       kungFuDeathGrip->AbortTransactions(/* aShouldWarn */ false);
       kungFuDeathGrip->Close();
-      return true;
+      return IPC_OK();
     }
   }
 
   // Otherwise fire a versionchange event.
   const nsDependentString type(kVersionChangeEventType);
 
   nsCOMPtr<nsIDOMEvent> versionChangeEvent;
 
@@ -2057,45 +2063,45 @@ BackgroundDatabaseChild::RecvVersionChan
   if (NS_FAILED(kungFuDeathGrip->DispatchEvent(versionChangeEvent, &dummy))) {
     NS_WARNING("Failed to dispatch event!");
   }
 
   if (!kungFuDeathGrip->IsClosed()) {
     SendBlocked();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundDatabaseChild::RecvInvalidate()
 {
   AssertIsOnOwningThread();
 
   MaybeCollectGarbageOnIPCMessage();
 
   if (mDatabase) {
     mDatabase->Invalidate();
   }
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundDatabaseChild::RecvCloseAfterInvalidationComplete()
 {
   AssertIsOnOwningThread();
 
   MaybeCollectGarbageOnIPCMessage();
 
   if (mDatabase) {
     mDatabase->DispatchTrustedEvent(nsDependentString(kCloseEventType));
   }
 
-  return true;
+  return IPC_OK();
 }
 
 /*******************************************************************************
  * BackgroundDatabaseRequestChild
  ******************************************************************************/
 
 BackgroundDatabaseRequestChild::BackgroundDatabaseRequestChild(
                                                          IDBDatabase* aDatabase,
@@ -2152,29 +2158,35 @@ BackgroundDatabaseRequestChild::HandleRe
 
   DispatchSuccessEvent(&helper);
 
   mutableFileActor->ReleaseDOMObject();
 
   return true;
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundDatabaseRequestChild::Recv__delete__(
                                        const DatabaseRequestResponse& aResponse)
 {
   AssertIsOnOwningThread();
   MOZ_ASSERT(mRequest);
 
   switch (aResponse.type()) {
     case DatabaseRequestResponse::Tnsresult:
-      return HandleResponse(aResponse.get_nsresult());
+      if (!HandleResponse(aResponse.get_nsresult())) {
+        return IPC_FAIL_NO_REASON(this);
+      }
+      return IPC_OK();
 
     case DatabaseRequestResponse::TCreateFileRequestResponse:
-      return HandleResponse(aResponse.get_CreateFileRequestResponse());
+      if (!HandleResponse(aResponse.get_CreateFileRequestResponse())) {
+        return IPC_FAIL_NO_REASON(this);
+      }
+      return IPC_OK();
 
     default:
       MOZ_CRASH("Unknown response type!");
   }
 
   MOZ_CRASH("Should never get here!");
 }
 
@@ -2300,28 +2312,28 @@ BackgroundTransactionChild::ActorDestroy
 {
   AssertIsOnOwningThread();
 
   MaybeCollectGarbageOnIPCMessage();
 
   NoteActorDestroyed();
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundTransactionChild::RecvComplete(const nsresult& aResult)
 {
   AssertIsOnOwningThread();
   MOZ_ASSERT(mTransaction);
 
   MaybeCollectGarbageOnIPCMessage();
 
   mTransaction->FireCompleteOrAbortEvents(aResult);
 
   NoteComplete();
-  return true;
+  return IPC_OK();
 }
 
 PBackgroundIDBRequestChild*
 BackgroundTransactionChild::AllocPBackgroundIDBRequestChild(
                                                    const RequestParams& aParams)
 {
   MOZ_CRASH("PBackgroundIDBRequestChild actors should be manually "
             "constructed!");
@@ -2409,25 +2421,25 @@ BackgroundVersionChangeTransactionChild:
 
   MaybeCollectGarbageOnIPCMessage();
 
   mOpenDBRequest = nullptr;
 
   NoteActorDestroyed();
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundVersionChangeTransactionChild::RecvComplete(const nsresult& aResult)
 {
   AssertIsOnOwningThread();
 
   MaybeCollectGarbageOnIPCMessage();
 
   if (!mTransaction) {
-    return true;
+    return IPC_OK();
   }
 
   MOZ_ASSERT(mOpenDBRequest);
 
   IDBDatabase* database = mTransaction->Database();
   MOZ_ASSERT(database);
 
   database->ExitSetVersionTransaction();
@@ -2437,17 +2449,17 @@ BackgroundVersionChangeTransactionChild:
   }
 
   mTransaction->FireCompleteOrAbortEvents(aResult);
 
   mOpenDBRequest->SetTransaction(nullptr);
   mOpenDBRequest = nullptr;
 
   NoteComplete();
-  return true;
+  return IPC_OK();
 }
 
 PBackgroundIDBRequestChild*
 BackgroundVersionChangeTransactionChild::AllocPBackgroundIDBRequestChild(
                                                    const RequestParams& aParams)
 {
   MOZ_CRASH("PBackgroundIDBRequestChild actors should be manually "
             "constructed!");
@@ -2840,17 +2852,17 @@ BackgroundRequestChild::ActorDestroy(Act
     mTransaction->OnRequestFinished(/* aActorDestroyedNormally */
                                     aWhy == Deletion);
 #ifdef DEBUG
     mTransaction = nullptr;
 #endif
   }
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundRequestChild::Recv__delete__(const RequestResponse& aResponse)
 {
   AssertIsOnOwningThread();
   MOZ_ASSERT(mRequest);
   MOZ_ASSERT(mTransaction);
 
   MaybeCollectGarbageOnIPCMessage();
 
@@ -2926,20 +2938,20 @@ BackgroundRequestChild::Recv__delete__(c
   }
 
   mTransaction->OnRequestFinished(/* aActorDestroyedNormally */ true);
 
   // Null this out so that we don't try to call OnRequestFinished() again in
   // ActorDestroy.
   mTransaction = nullptr;
 
-  return true;
+  return IPC_OK();
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundRequestChild::RecvPreprocess(const PreprocessParams& aParams)
 {
   AssertIsOnOwningThread();
   MOZ_ASSERT(mTransaction);
 
   MaybeCollectGarbageOnIPCMessage();
 
   nsresult rv;
@@ -2963,20 +2975,23 @@ BackgroundRequestChild::RecvPreprocess(c
       break;
     }
 
     default:
       MOZ_CRASH("Unknown params type!");
   }
 
   if (NS_WARN_IF(NS_FAILED(rv))) {
-    return SendContinue(rv);
+    if (!SendContinue(rv)) {
+      return IPC_FAIL_NO_REASON(this);
+    }
+    return IPC_OK();
   }
 
-  return true;
+  return IPC_OK();
 }
 
 nsresult
 BackgroundRequestChild::
 PreprocessHelper::Init(const nsTArray<StructuredCloneFile>& aFiles)
 {
   AssertIsOnOwningThread();
   MOZ_ASSERT(!aFiles.IsEmpty());
@@ -3489,17 +3504,17 @@ BackgroundCursorChild::ActorDestroy(Acto
 #ifdef DEBUG
   mRequest = nullptr;
   mTransaction = nullptr;
   mObjectStore = nullptr;
   mIndex = nullptr;
 #endif
 }
 
-bool
+mozilla::ipc::IPCResult
 BackgroundCursorChild::RecvResponse(const CursorResponse& aResponse)
 {
   AssertIsOnOwningThread();
   MOZ_ASSERT(aResponse.type() != CursorResponse::T__None);
   MOZ_ASSERT(mRequest);
   MOZ_ASSERT(mTransaction);
   MOZ_ASSERT_IF(mCursor, mStrongCursor);
   MOZ_ASSERT_IF(!mCursor, mStrongRequest);
@@ -3538,17 +3553,17 @@ BackgroundCursorChild::RecvResponse(cons
       break;
 
     default:
       MOZ_CRASH("Should never get here!");
   }
 
   mTransaction->OnRequestFinished(/* aActorDestroyedNormally */ true);
 
-  return true;
+  return IPC_OK();
 }
 
 NS_IMETHODIMP
 BackgroundCursorChild::
 DelayedActionRunnable::Run()
 {
   MOZ_ASSERT(mActor);
   mActor->AssertIsOnOwningThread();
--- a/dom/indexedDB/ActorsChild.h
+++ b/dom/indexedDB/ActorsChild.h
@@ -280,23 +280,23 @@ private:
 
   bool
   HandleResponse(const DeleteDatabaseRequestResponse& aResponse);
 
   // IPDL methods are only called by IPDL.
   virtual void
   ActorDestroy(ActorDestroyReason aWhy) override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   Recv__delete__(const FactoryRequestResponse& aResponse) override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvPermissionChallenge(const PrincipalInfo& aPrincipalInfo) override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvBlocked(const uint64_t& aCurrentVersion) override;
 };
 
 class BackgroundDatabaseChild final
   : public PBackgroundIDBDatabaseChild
 {
   friend class BackgroundFactoryChild;
   friend class BackgroundFactoryRequestChild;
@@ -388,17 +388,17 @@ private:
   virtual PBackgroundIDBVersionChangeTransactionChild*
   AllocPBackgroundIDBVersionChangeTransactionChild(
                                               const uint64_t& aCurrentVersion,
                                               const uint64_t& aRequestedVersion,
                                               const int64_t& aNextObjectStoreId,
                                               const int64_t& aNextIndexId)
                                               override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvPBackgroundIDBVersionChangeTransactionConstructor(
                             PBackgroundIDBVersionChangeTransactionChild* aActor,
                             const uint64_t& aCurrentVersion,
                             const uint64_t& aRequestedVersion,
                             const int64_t& aNextObjectStoreId,
                             const int64_t& aNextIndexId)
                             override;
 
@@ -410,25 +410,25 @@ private:
   virtual PBackgroundMutableFileChild*
   AllocPBackgroundMutableFileChild(const nsString& aName,
                                    const nsString& aType) override;
 
   virtual bool
   DeallocPBackgroundMutableFileChild(PBackgroundMutableFileChild* aActor)
                                      override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvVersionChange(const uint64_t& aOldVersion,
                     const NullableVersion& aNewVersion)
                     override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvInvalidate() override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvCloseAfterInvalidationComplete() override;
 
   bool
   SendDeleteMe() = delete;
 };
 
 class BackgroundDatabaseRequestChild final
   : public BackgroundRequestChildBase
@@ -449,17 +449,17 @@ private:
 
   bool
   HandleResponse(nsresult aResponse);
 
   bool
   HandleResponse(const CreateFileRequestResponse& aResponse);
 
   // IPDL methods are only called by IPDL.
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   Recv__delete__(const DatabaseRequestResponse& aResponse) override;
 };
 
 class BackgroundVersionChangeTransactionChild;
 
 class BackgroundTransactionBase
 {
   friend class BackgroundVersionChangeTransactionChild;
@@ -532,17 +532,17 @@ private:
 
   // Only destroyed by BackgroundDatabaseChild.
   ~BackgroundTransactionChild();
 
   // IPDL methods are only called by IPDL.
   virtual void
   ActorDestroy(ActorDestroyReason aWhy) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvComplete(const nsresult& aResult) override;
 
   virtual PBackgroundIDBRequestChild*
   AllocPBackgroundIDBRequestChild(const RequestParams& aParams) override;
 
   virtual bool
   DeallocPBackgroundIDBRequestChild(PBackgroundIDBRequestChild* aActor)
                                     override;
@@ -588,17 +588,17 @@ private:
   {
     BackgroundTransactionBase::SetDOMTransaction(aDOMObject);
   }
 
   // IPDL methods are only called by IPDL.
   virtual void
   ActorDestroy(ActorDestroyReason aWhy) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvComplete(const nsresult& aResult) override;
 
   virtual PBackgroundIDBRequestChild*
   AllocPBackgroundIDBRequestChild(const RequestParams& aParams) override;
 
   virtual bool
   DeallocPBackgroundIDBRequestChild(PBackgroundIDBRequestChild* aActor)
                                     override;
@@ -702,20 +702,20 @@ private:
 
   nsresult
   HandlePreprocess(const nsTArray<WasmModulePreprocessInfo>& aPreprocessInfos);
 
   // IPDL methods are only called by IPDL.
   virtual void
   ActorDestroy(ActorDestroyReason aWhy) override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   Recv__delete__(const RequestResponse& aResponse) override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvPreprocess(const PreprocessParams& aParams) override;
 };
 
 class BackgroundCursorChild final
   : public PBackgroundIDBCursorChild
 {
   friend class BackgroundTransactionChild;
   friend class BackgroundVersionChangeTransactionChild;
@@ -815,17 +815,17 @@ private:
 
   void
   HandleResponse(const IndexKeyCursorResponse& aResponse);
 
   // IPDL methods are only called by IPDL.
   virtual void
   ActorDestroy(ActorDestroyReason aWhy) override;
 
-  virtual bool
+  virtual mozilla::ipc::IPCResult
   RecvResponse(const CursorResponse& aResponse) override;
 
   // Force callers to use SendContinueInternal.
   bool
   SendContinue(const CursorRequestParams& aParams) = delete;
 
   bool
   SendDeleteMe() = delete;
--- a/dom/indexedDB/ActorsParent.cpp
+++ b/dom/indexedDB/ActorsParent.cpp
@@ -6186,27 +6186,27 @@ private:
 
   // Reference counted.
   ~Factory() override;
 
   // IPDL methods are only called by IPDL.
   void
   ActorDestroy(ActorDestroyReason aWhy) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvDeleteMe() override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvIncrementLoggingRequestSerialNumber() override;
 
   PBackgroundIDBFactoryRequestParent*
   AllocPBackgroundIDBFactoryRequestParent(const FactoryRequestParams& aParams)
                                           override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvPBackgroundIDBFactoryRequestConstructor(
                                      PBackgroundIDBFactoryRequestParent* aActor,
                                      const FactoryRequestParams& aParams)
                                      override;
 
   bool
   DeallocPBackgroundIDBFactoryRequestParent(
                                      PBackgroundIDBFactoryRequestParent* aActor)
@@ -6535,34 +6535,34 @@ private:
   DeallocPBackgroundIDBDatabaseFileParent(
                                        PBackgroundIDBDatabaseFileParent* aActor)
                                        override;
 
   PBackgroundIDBDatabaseRequestParent*
   AllocPBackgroundIDBDatabaseRequestParent(const DatabaseRequestParams& aParams)
                                            override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvPBackgroundIDBDatabaseRequestConstructor(
                                     PBackgroundIDBDatabaseRequestParent* aActor,
                                     const DatabaseRequestParams& aParams)
                                     override;
 
   bool
   DeallocPBackgroundIDBDatabaseRequestParent(
                                     PBackgroundIDBDatabaseRequestParent* aActor)
                                     override;
 
   PBackgroundIDBTransactionParent*
   AllocPBackgroundIDBTransactionParent(
                                     const nsTArray<nsString>& aObjectStoreNames,
                                     const Mode& aMode)
                                     override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvPBackgroundIDBTransactionConstructor(
                                     PBackgroundIDBTransactionParent* aActor,
                                     InfallibleTArray<nsString>&& aObjectStoreNames,
                                     const Mode& aMode)
                                     override;
 
   bool
   DeallocPBackgroundIDBTransactionParent(
@@ -6585,23 +6585,23 @@ private:
   PBackgroundMutableFileParent*
   AllocPBackgroundMutableFileParent(const nsString& aName,
                                     const nsString& aType) override;
 
   bool
   DeallocPBackgroundMutableFileParent(PBackgroundMutableFileParent* aActor)
                                       override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvDeleteMe() override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvBlocked() override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvClose() override;
 };
 
 class Database::StartTransactionOp final
   : public TransactionDatabaseOperationBase
 {
   friend class Database;
 
@@ -7033,41 +7033,41 @@ private:
   // Only called by TransactionBase.
   void
   SendCompleteNotification(nsresult aResult) override;
 
   // IPDL methods are only called by IPDL.
   void
   ActorDestroy(ActorDestroyReason aWhy) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvDeleteMe() override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvCommit() override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvAbort(const nsresult& aResultCode) override;
 
   PBackgroundIDBRequestParent*
   AllocPBackgroundIDBRequestParent(const RequestParams& aParams) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvPBackgroundIDBRequestConstructor(PBackgroundIDBRequestParent* aActor,
                                        const RequestParams& aParams)
                                        override;
 
   bool
   DeallocPBackgroundIDBRequestParent(PBackgroundIDBRequestParent* aActor)
                                      override;
 
   PBackgroundIDBCursorParent*
   AllocPBackgroundIDBCursorParent(const OpenCursorParams& aParams) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvPBackgroundIDBCursorConstructor(PBackgroundIDBCursorParent* aActor,
                                       const OpenCursorParams& aParams)
                                       override;
 
   bool
   DeallocPBackgroundIDBCursorParent(PBackgroundIDBCursorParent* aActor)
                                     override;
 };
@@ -7107,64 +7107,64 @@ private:
   // Only called by TransactionBase.
   void
   SendCompleteNotification(nsresult aResult) override;
 
   // IPDL methods are only called by IPDL.
   void
   ActorDestroy(ActorDestroyReason aWhy) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvDeleteMe() override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvCommit() override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvAbort(const nsresult& aResultCode) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvCreateObjectStore(const ObjectStoreMetadata& aMetadata) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvDeleteObjectStore(const int64_t& aObjectStoreId) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvRenameObjectStore(const int64_t& aObjectStoreId,
                         const nsString& aName) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvCreateIndex(const int64_t& aObjectStoreId,
                   const IndexMetadata& aMetadata) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvDeleteIndex(const int64_t& aObjectStoreId,
                   const int64_t& aIndexId) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvRenameIndex(const int64_t& aObjectStoreId,
                   const int64_t& aIndexId,
                   const nsString& aName) override;
 
   PBackgroundIDBRequestParent*
   AllocPBackgroundIDBRequestParent(const RequestParams& aParams) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvPBackgroundIDBRequestConstructor(PBackgroundIDBRequestParent* aActor,
                                        const RequestParams& aParams)
                                        override;
 
   bool
   DeallocPBackgroundIDBRequestParent(PBackgroundIDBRequestParent* aActor)
                                      override;
 
   PBackgroundIDBCursorParent*
   AllocPBackgroundIDBCursorParent(const OpenCursorParams& aParams) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvPBackgroundIDBCursorConstructor(PBackgroundIDBCursorParent* aActor,
                                       const OpenCursorParams& aParams)
                                       override;
 
   bool
   DeallocPBackgroundIDBCursorParent(PBackgroundIDBCursorParent* aActor)
                                     override;
 };
@@ -7219,21 +7219,21 @@ private:
               Database* aDatabase,
               FileInfo* aFileInfo);
 
   ~MutableFile() override;
 
   PBackgroundFileHandleParent*
   AllocPBackgroundFileHandleParent(const FileMode& aMode) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvPBackgroundFileHandleConstructor(PBackgroundFileHandleParent* aActor,
                                        const FileMode& aMode) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvGetFileId(int64_t* aFileId) override;
 };
 
 class FactoryOp
   : public DatabaseOperationBase
   , public OpenDirectoryListener
   , public PBackgroundIDBFactoryRequestParent
 {
@@ -7431,17 +7431,17 @@ protected:
 
   void
   DirectoryLockFailed() override;
 
   // IPDL methods.
   void
   ActorDestroy(ActorDestroyReason aWhy) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvPermissionRetry() override;
 
   virtual void
   SendBlockedNotification() = 0;
 
 private:
   nsresult
   CheckPermission(ContentParent* aContentParent,
@@ -8150,17 +8150,17 @@ private:
 
   bool
   SendFailureResult(nsresult aResultCode) override;
 
   // IPDL methods.
   void
   ActorDestroy(ActorDestroyReason aWhy) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvContinue(const PreprocessResponse& aResponse) override;
 };
 
 class ObjectStoreAddOrPutRequestOp final
   : public NormalTransactionOp
 {
   friend class TransactionBase;
 
@@ -8619,20 +8619,20 @@ private:
   // Must call SendResponseInternal!
   bool
   SendResponse(const CursorResponse& aResponse) = delete;
 
   // IPDL methods.
   void
   ActorDestroy(ActorDestroyReason aWhy) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvDeleteMe() override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvContinue(const CursorRequestParams& aParams) override;
 
   bool
   IsLocaleAware() const {
     return !mLocale.IsEmpty();
   }
 };
 
@@ -8757,20 +8757,20 @@ public:
 private:
   // Reference counted.
   ~Utils() override;
 
   // IPDL methods are only called by IPDL.
   void
   ActorDestroy(ActorDestroyReason aWhy) override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvDeleteMe() override;
 
-  bool
+  mozilla::ipc::IPCResult
   RecvGetFileReferences(const PersistenceType& aPersistenceType,
                         const nsCString& aOrigin,
                         const nsString& aDatabaseName,
                         const int64_t& aFileId,
                         int32_t* aRefCnt,
                         int32_t* aDBRefCnt,
                         int32_t* aSliceRefCnt,
                         bool* aResult) override;
@@ -13548,33 +13548,36 @@ Factory::ActorDestroy(ActorDestroyReason
 #ifdef DEBUG
   mActorDestroyed = true;
 #endif
 
   // Match the IncreaseBusyCount in Create().
   DecreaseBusyCount();
 }
 
-bool
+mozilla::ipc::IPCResult
 Factory::RecvDeleteMe()
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(!mActorDestroyed);
 
-  return PBackgroundIDBFactoryParent::Send__delete__(this);
-}
-
-bool
+  if (!PBackgroundIDBFactoryParent::Send__delete__(this)) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
+}
+
+mozilla::ipc::IPCResult
 Factory::RecvIncrementLoggingRequestSerialNumber()
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(mLoggingInfo);
 
   mLoggingInfo->NextRequestSN();
-  return true;
+  return IPC_OK();
 }
 
 PBackgroundIDBFactoryRequestParent*
 Factory::AllocPBackgroundIDBFactoryRequestParent(
                                             const FactoryRequestParams& aParams)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aParams.type() != FactoryRequestParams::T__None);
@@ -13637,30 +13640,30 @@ Factory::AllocPBackgroundIDBFactoryReque
   } else {
     actor = new DeleteDatabaseOp(this, contentParent.forget(), *commonParams);
   }
 
   // Transfer ownership to IPDL.
   return actor.forget().take();
 }
 
-bool
+mozilla::ipc::IPCResult
 Factory::RecvPBackgroundIDBFactoryRequestConstructor(
                                      PBackgroundIDBFactoryRequestParent* aActor,
                                      const FactoryRequestParams& aParams)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
   MOZ_ASSERT(aParams.type() != FactoryRequestParams::T__None);
   MOZ_ASSERT(!QuotaClient::IsShuttingDownOnBackgroundThread());
 
   auto* op = static_cast<FactoryOp*>(aActor);
 
   MOZ_ALWAYS_SUCCEEDS(NS_DispatchToMainThread(op));
-  return true;
+  return IPC_OK();
 }
 
 bool
 Factory::DeallocPBackgroundIDBFactoryRequestParent(
                                      PBackgroundIDBFactoryRequestParent* aActor)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
@@ -14267,30 +14270,30 @@ Database::AllocPBackgroundIDBDatabaseReq
   }
 
   MOZ_ASSERT(actor);
 
   // Transfer ownership to IPDL.
   return actor.forget().take();
 }
 
-bool
+mozilla::ipc::IPCResult
 Database::RecvPBackgroundIDBDatabaseRequestConstructor(
                                     PBackgroundIDBDatabaseRequestParent* aActor,
                                     const DatabaseRequestParams& aParams)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
   MOZ_ASSERT(aParams.type() != DatabaseRequestParams::T__None);
 
   auto* op = static_cast<DatabaseOp*>(aActor);
 
   op->RunImmediately();
 
-  return true;
+  return IPC_OK();
 }
 
 bool
 Database::DeallocPBackgroundIDBDatabaseRequestParent(
                                     PBackgroundIDBDatabaseRequestParent* aActor)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
@@ -14381,17 +14384,17 @@ Database::AllocPBackgroundIDBTransaction
   RefPtr<NormalTransaction> transaction =
     new NormalTransaction(this, aMode, infallibleObjectStores);
 
   MOZ_ASSERT(infallibleObjectStores.IsEmpty());
 
   return transaction.forget().take();
 }
 
-bool
+mozilla::ipc::IPCResult
 Database::RecvPBackgroundIDBTransactionConstructor(
                                     PBackgroundIDBTransactionParent* aActor,
                                     InfallibleTArray<nsString>&& aObjectStoreNames,
                                     const Mode& aMode)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
   MOZ_ASSERT(!aObjectStoreNames.IsEmpty());
@@ -14399,17 +14402,17 @@ Database::RecvPBackgroundIDBTransactionC
              aMode == IDBTransaction::READ_WRITE ||
              aMode == IDBTransaction::READ_WRITE_FLUSH ||
              aMode == IDBTransaction::CLEANUP);
   MOZ_ASSERT(!mClosed);
 
   if (IsInvalidated()) {
     // This is an expected race. We don't want the child to die here, just don't
     // actually do any work.
-    return true;
+    return IPC_OK();
   }
 
   if (!gConnectionPool) {
     gConnectionPool = new ConnectionPool();
   }
 
   auto* transaction = static_cast<NormalTransaction*>(aActor);
 
@@ -14422,20 +14425,20 @@ Database::RecvPBackgroundIDBTransactionC
                                    aObjectStoreNames,
                                    aMode != IDBTransaction::READ_ONLY);
 
   transaction->SetActive(transactionId);
 
   if (NS_WARN_IF(!RegisterTransaction(transaction))) {
     IDB_REPORT_INTERNAL_ERR();
     transaction->Abort(NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR, /* aForce */ false);
-    return true;
-  }
-
-  return true;
+    return IPC_OK();
+  }
+
+  return IPC_OK();
 }
 
 bool
 Database::DeallocPBackgroundIDBTransactionParent(
                                         PBackgroundIDBTransactionParent* aActor)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
@@ -14484,56 +14487,59 @@ Database::DeallocPBackgroundMutableFileP
   MOZ_ASSERT(aActor);
 
   // Transfer ownership back from IPDL.
   RefPtr<MutableFile> mutableFile =
     dont_AddRef(static_cast<MutableFile*>(aActor));
   return true;
 }
 
-bool
+mozilla::ipc::IPCResult
 Database::RecvDeleteMe()
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(!mActorDestroyed);
 
-  return PBackgroundIDBDatabaseParent::Send__delete__(this);
-}
-
-bool
+  if (!PBackgroundIDBDatabaseParent::Send__delete__(this)) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
+}
+
+mozilla::ipc::IPCResult
 Database::RecvBlocked()
 {
   AssertIsOnBackgroundThread();
 
   if (NS_WARN_IF(mClosed)) {
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   DatabaseActorInfo* info;
   MOZ_ALWAYS_TRUE(gLiveDatabaseHashtable->Get(Id(), &info));
 
   MOZ_ASSERT(info->mLiveDatabases.Contains(this));
   MOZ_ASSERT(info->mWaitingFactoryOp);
 
   info->mWaitingFactoryOp->NoteDatabaseBlocked(this);
 
-  return true;
-}
-
-bool
+  return IPC_OK();
+}
+
+mozilla::ipc::IPCResult
 Database::RecvClose()
 {
   AssertIsOnBackgroundThread();
 
   if (NS_WARN_IF(!CloseInternal())) {
     ASSERT_UNLESS_FUZZING();
-    return false;
-  }
-
-  return true;
+    return IPC_FAIL_NO_REASON(this);
+  }
+
+  return IPC_OK();
 }
 
 void
 Database::
 StartTransactionOp::RunOnConnectionThread()
 {
   MOZ_ASSERT(!IsOnBackgroundThread());
   MOZ_ASSERT(Transaction());
@@ -15606,61 +15612,73 @@ NormalTransaction::ActorDestroy(ActorDes
     }
 
     mForceAborted = true;
 
     MaybeCommitOrAbort();
   }
 }
 
-bool
+mozilla::ipc::IPCResult
 NormalTransaction::RecvDeleteMe()
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(!IsActorDestroyed());
 
-  return PBackgroundIDBTransactionParent::Send__delete__(this);
-}
-
-bool
+  if (!PBackgroundIDBTransactionParent::Send__delete__(this)) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
+}
+
+mozilla::ipc::IPCResult
 NormalTransaction::RecvCommit()
 {
   AssertIsOnBackgroundThread();
 
-  return TransactionBase::RecvCommit();
-}
-
-bool
+  if (!TransactionBase::RecvCommit()) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
+}
+
+mozilla::ipc::IPCResult
 NormalTransaction::RecvAbort(const nsresult& aResultCode)
 {
   AssertIsOnBackgroundThread();
 
-  return TransactionBase::RecvAbort(aResultCode);
+  if (!TransactionBase::RecvAbort(aResultCode)) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
 }
 
 PBackgroundIDBRequestParent*
 NormalTransaction::AllocPBackgroundIDBRequestParent(
                                                    const RequestParams& aParams)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aParams.type() != RequestParams::T__None);
 
   return AllocRequest(aParams, IsSameProcessActor());
 }
 
-bool
+mozilla::ipc::IPCResult
 NormalTransaction::RecvPBackgroundIDBRequestConstructor(
                                             PBackgroundIDBRequestParent* aActor,
                                             const RequestParams& aParams)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
   MOZ_ASSERT(aParams.type() != RequestParams::T__None);
 
-  return StartRequest(aActor);
+  if (!StartRequest(aActor)) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
 }
 
 bool
 NormalTransaction::DeallocPBackgroundIDBRequestParent(
                                             PBackgroundIDBRequestParent* aActor)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
@@ -15672,26 +15690,29 @@ PBackgroundIDBCursorParent*
 NormalTransaction::AllocPBackgroundIDBCursorParent(
                                                 const OpenCursorParams& aParams)
 {
   AssertIsOnBackgroundThread();
 
   return AllocCursor(aParams, IsSameProcessActor());
 }
 
-bool
+mozilla::ipc::IPCResult
 NormalTransaction::RecvPBackgroundIDBCursorConstructor(
                                              PBackgroundIDBCursorParent* aActor,
                                              const OpenCursorParams& aParams)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
   MOZ_ASSERT(aParams.type() != OpenCursorParams::T__None);
 
-  return StartCursor(aActor, aParams);
+  if (!StartCursor(aActor, aParams)) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
 }
 
 bool
 NormalTransaction::DeallocPBackgroundIDBCursorParent(
                                              PBackgroundIDBCursorParent* aActor)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
@@ -15897,128 +15918,137 @@ VersionChangeTransaction::ActorDestroy(A
     }
 
     mForceAborted = true;
 
     MaybeCommitOrAbort();
   }
 }
 
-bool
+mozilla::ipc::IPCResult
 VersionChangeTransaction::RecvDeleteMe()
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(!IsActorDestroyed());
 
-  return PBackgroundIDBVersionChangeTransactionParent::Send__delete__(this);
-}
-
-bool
+  if (!PBackgroundIDBVersionChangeTransactionParent::Send__delete__(this)) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
+}
+
+mozilla::ipc::IPCResult
 VersionChangeTransaction::RecvCommit()
 {
   AssertIsOnBackgroundThread();
 
-  return TransactionBase::RecvCommit();
-}
-
-bool
+  if (!TransactionBase::RecvCommit()) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
+}
+
+mozilla::ipc::IPCResult
 VersionChangeTransaction::RecvAbort(const nsresult& aResultCode)
 {
   AssertIsOnBackgroundThread();
 
-  return TransactionBase::RecvAbort(aResultCode);
-}
-
-bool
+  if (!TransactionBase::RecvAbort(aResultCode)) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
+}
+
+mozilla::ipc::IPCResult
 VersionChangeTransaction::RecvCreateObjectStore(
                                            const ObjectStoreMetadata& aMetadata)
 {
   AssertIsOnBackgroundThread();
 
   if (NS_WARN_IF(!aMetadata.id())) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   const RefPtr<FullDatabaseMetadata> dbMetadata = GetDatabase()->Metadata();
   MOZ_ASSERT(dbMetadata);
 
   if (NS_WARN_IF(aMetadata.id() != dbMetadata->mNextObjectStoreId)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   auto* foundMetadata =
     MetadataNameOrIdMatcher<FullObjectStoreMetadata>::Match(
       dbMetadata->mObjectStores, aMetadata.id(), aMetadata.name());
 
   if (NS_WARN_IF(foundMetadata)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   if (NS_WARN_IF(mCommitOrAbortReceived)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   RefPtr<FullObjectStoreMetadata> newMetadata = new FullObjectStoreMetadata();
   newMetadata->mCommonMetadata = aMetadata;
   newMetadata->mNextAutoIncrementId = aMetadata.autoIncrement() ? 1 : 0;
   newMetadata->mCommittedAutoIncrementId = newMetadata->mNextAutoIncrementId;
 
   if (NS_WARN_IF(!dbMetadata->mObjectStores.Put(aMetadata.id(), newMetadata,
                                                 fallible))) {
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   dbMetadata->mNextObjectStoreId++;
 
   RefPtr<CreateObjectStoreOp> op = new CreateObjectStoreOp(this, aMetadata);
 
   if (NS_WARN_IF(!op->Init(this))) {
     op->Cleanup();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   op->DispatchToConnectionPool();
 
-  return true;
-}
-
-bool
+  return IPC_OK();
+}
+
+mozilla::ipc::IPCResult
 VersionChangeTransaction::RecvDeleteObjectStore(const int64_t& aObjectStoreId)
 {
   AssertIsOnBackgroundThread();
 
   if (NS_WARN_IF(!aObjectStoreId)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   const RefPtr<FullDatabaseMetadata> dbMetadata = GetDatabase()->Metadata();
   MOZ_ASSERT(dbMetadata);
   MOZ_ASSERT(dbMetadata->mNextObjectStoreId > 0);
 
   if (NS_WARN_IF(aObjectStoreId >= dbMetadata->mNextObjectStoreId)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   RefPtr<FullObjectStoreMetadata> foundMetadata =
     GetMetadataForObjectStoreId(aObjectStoreId);
 
   if (NS_WARN_IF(!foundMetadata)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   if (NS_WARN_IF(mCommitOrAbortReceived)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   foundMetadata->mDeleted = true;
 
   bool isLastObjectStore = true;
   DebugOnly<bool> foundTargetId = false;
   for (auto iter = dbMetadata->mObjectStores.Iter();
        !iter.Done();
@@ -16032,192 +16062,192 @@ VersionChangeTransaction::RecvDeleteObje
   }
   MOZ_ASSERT_IF(isLastObjectStore, foundTargetId);
 
   RefPtr<DeleteObjectStoreOp> op =
     new DeleteObjectStoreOp(this, foundMetadata, isLastObjectStore);
 
   if (NS_WARN_IF(!op->Init(this))) {
     op->Cleanup();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   op->DispatchToConnectionPool();
 
-  return true;
-}
-
-bool
+  return IPC_OK();
+}
+
+mozilla::ipc::IPCResult
 VersionChangeTransaction::RecvRenameObjectStore(const int64_t& aObjectStoreId,
                                                 const nsString& aName)
 {
   AssertIsOnBackgroundThread();
 
   if (NS_WARN_IF(!aObjectStoreId)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   const RefPtr<FullDatabaseMetadata> dbMetadata = GetDatabase()->Metadata();
   MOZ_ASSERT(dbMetadata);
   MOZ_ASSERT(dbMetadata->mNextObjectStoreId > 0);
 
   if (NS_WARN_IF(aObjectStoreId >= dbMetadata->mNextObjectStoreId)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   RefPtr<FullObjectStoreMetadata> foundMetadata =
     GetMetadataForObjectStoreId(aObjectStoreId);
 
   if (NS_WARN_IF(!foundMetadata)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   if (NS_WARN_IF(mCommitOrAbortReceived)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   foundMetadata->mCommonMetadata.name() = aName;
 
   RefPtr<RenameObjectStoreOp> renameOp =
     new RenameObjectStoreOp(this, foundMetadata);
 
   if (NS_WARN_IF(!renameOp->Init(this))) {
     renameOp->Cleanup();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   renameOp->DispatchToConnectionPool();
 
-  return true;
-}
-
-bool
+  return IPC_OK();
+}
+
+mozilla::ipc::IPCResult
 VersionChangeTransaction::RecvCreateIndex(const int64_t& aObjectStoreId,
                                           const IndexMetadata& aMetadata)
 {
   AssertIsOnBackgroundThread();
 
   if (NS_WARN_IF(!aObjectStoreId)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   if (NS_WARN_IF(!aMetadata.id())) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   const RefPtr<FullDatabaseMetadata> dbMetadata = GetDatabase()->Metadata();
   MOZ_ASSERT(dbMetadata);
 
   if (NS_WARN_IF(aMetadata.id() != dbMetadata->mNextIndexId)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   RefPtr<FullObjectStoreMetadata> foundObjectStoreMetadata =
     GetMetadataForObjectStoreId(aObjectStoreId);
 
   if (NS_WARN_IF(!foundObjectStoreMetadata)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   RefPtr<FullIndexMetadata> foundIndexMetadata =
     MetadataNameOrIdMatcher<FullIndexMetadata>::Match(
       foundObjectStoreMetadata->mIndexes, aMetadata.id(), aMetadata.name());
 
   if (NS_WARN_IF(foundIndexMetadata)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   if (NS_WARN_IF(mCommitOrAbortReceived)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   RefPtr<FullIndexMetadata> newMetadata = new FullIndexMetadata();
   newMetadata->mCommonMetadata = aMetadata;
 
   if (NS_WARN_IF(!foundObjectStoreMetadata->mIndexes.Put(aMetadata.id(),
                                                          newMetadata,
                                                          fallible))) {
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   dbMetadata->mNextIndexId++;
 
   RefPtr<CreateIndexOp> op =
     new CreateIndexOp(this, aObjectStoreId, aMetadata);
 
   if (NS_WARN_IF(!op->Init(this))) {
     op->Cleanup();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   op->DispatchToConnectionPool();
 
-  return true;
-}
-
-bool
+  return IPC_OK();
+}
+
+mozilla::ipc::IPCResult
 VersionChangeTransaction::RecvDeleteIndex(const int64_t& aObjectStoreId,
                                           const int64_t& aIndexId)
 {
   AssertIsOnBackgroundThread();
 
   if (NS_WARN_IF(!aObjectStoreId)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   if (NS_WARN_IF(!aIndexId)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   const RefPtr<FullDatabaseMetadata> dbMetadata = GetDatabase()->Metadata();
   MOZ_ASSERT(dbMetadata);
   MOZ_ASSERT(dbMetadata->mNextObjectStoreId > 0);
   MOZ_ASSERT(dbMetadata->mNextIndexId > 0);
 
   if (NS_WARN_IF(aObjectStoreId >= dbMetadata->mNextObjectStoreId)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   if (NS_WARN_IF(aIndexId >= dbMetadata->mNextIndexId)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   RefPtr<FullObjectStoreMetadata> foundObjectStoreMetadata =
     GetMetadataForObjectStoreId(aObjectStoreId);
 
   if (NS_WARN_IF(!foundObjectStoreMetadata)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   RefPtr<FullIndexMetadata> foundIndexMetadata =
     GetMetadataForIndexId(foundObjectStoreMetadata, aIndexId);
 
   if (NS_WARN_IF(!foundIndexMetadata)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   if (NS_WARN_IF(mCommitOrAbortReceived)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   foundIndexMetadata->mDeleted = true;
 
   bool isLastIndex = true;
   DebugOnly<bool> foundTargetId = false;
   for (auto iter = foundObjectStoreMetadata->mIndexes.ConstIter();
        !iter.Done();
@@ -16235,112 +16265,115 @@ VersionChangeTransaction::RecvDeleteInde
     new DeleteIndexOp(this,
                       aObjectStoreId,
                       aIndexId,
                       foundIndexMetadata->mCommonMetadata.unique(),
                       isLastIndex);
 
   if (NS_WARN_IF(!op->Init(this))) {
     op->Cleanup();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   op->DispatchToConnectionPool();
 
-  return true;
-}
-
-bool
+  return IPC_OK();
+}
+
+mozilla::ipc::IPCResult
 VersionChangeTransaction::RecvRenameIndex(const int64_t& aObjectStoreId,
                                           const int64_t& aIndexId,
                                           const nsString& aName)
 {
   AssertIsOnBackgroundThread();
 
   if (NS_WARN_IF(!aObjectStoreId)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   if (NS_WARN_IF(!aIndexId)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   const RefPtr<FullDatabaseMetadata> dbMetadata = GetDatabase()->Metadata();
   MOZ_ASSERT(dbMetadata);
   MOZ_ASSERT(dbMetadata->mNextObjectStoreId > 0);
   MOZ_ASSERT(dbMetadata->mNextIndexId > 0);
 
   if (NS_WARN_IF(aObjectStoreId >= dbMetadata->mNextObjectStoreId)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   if (NS_WARN_IF(aIndexId >= dbMetadata->mNextIndexId)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   RefPtr<FullObjectStoreMetadata> foundObjectStoreMetadata =
     GetMetadataForObjectStoreId(aObjectStoreId);
 
   if (NS_WARN_IF(!foundObjectStoreMetadata)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   RefPtr<FullIndexMetadata> foundIndexMetadata =
     GetMetadataForIndexId(foundObjectStoreMetadata, aIndexId);
 
   if (NS_WARN_IF(!foundIndexMetadata)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   if (NS_WARN_IF(mCommitOrAbortReceived)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   foundIndexMetadata->mCommonMetadata.name() = aName;
 
   RefPtr<RenameIndexOp> renameOp =
     new RenameIndexOp(this, foundIndexMetadata, aObjectStoreId);
 
   if (NS_WARN_IF(!renameOp->Init(this))) {
     renameOp->Cleanup();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   renameOp->DispatchToConnectionPool();
 
-  return true;
+  return IPC_OK();
 }
 
 PBackgroundIDBRequestParent*
 VersionChangeTransaction::AllocPBackgroundIDBRequestParent(
                                                    const RequestParams& aParams)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aParams.type() != RequestParams::T__None);
 
   return AllocRequest(aParams, IsSameProcessActor());
 }
 
-bool
+mozilla::ipc::IPCResult
 VersionChangeTransaction::RecvPBackgroundIDBRequestConstructor(
                                             PBackgroundIDBRequestParent* aActor,
                                             const RequestParams& aParams)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
   MOZ_ASSERT(aParams.type() != RequestParams::T__None);
 
-  return StartRequest(aActor);
+  if (!StartRequest(aActor)) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
 }
 
 bool
 VersionChangeTransaction::DeallocPBackgroundIDBRequestParent(
                                             PBackgroundIDBRequestParent* aActor)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
@@ -16352,26 +16385,29 @@ PBackgroundIDBCursorParent*
 VersionChangeTransaction::AllocPBackgroundIDBCursorParent(
                                                 const OpenCursorParams& aParams)
 {
   AssertIsOnBackgroundThread();
 
   return AllocCursor(aParams, IsSameProcessActor());
 }
 
-bool
+mozilla::ipc::IPCResult
 VersionChangeTransaction::RecvPBackgroundIDBCursorConstructor(
                                              PBackgroundIDBCursorParent* aActor,
                                              const OpenCursorParams& aParams)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
   MOZ_ASSERT(aParams.type() != OpenCursorParams::T__None);
 
-  return StartCursor(aActor, aParams);
+  if (!StartCursor(aActor, aParams)) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
 }
 
 bool
 VersionChangeTransaction::DeallocPBackgroundIDBCursorParent(
                                              PBackgroundIDBCursorParent* aActor)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aActor);
@@ -16672,31 +16708,34 @@ Cursor::ActorDestroy(ActorDestroyReason 
   }
 
   mBackgroundParent = nullptr;
 
   mObjectStoreMetadata = nullptr;
   mIndexMetadata = nullptr;
 }
 
-bool
+mozilla::ipc::IPCResult
 Cursor::RecvDeleteMe()
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(!mActorDestroyed);
 
   if (NS_WARN_IF(mCurrentlyRunningOp)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
-  }
-
-  return PBackgroundIDBCursorParent::Send__delete__(this);
-}
-
-bool
+    return IPC_FAIL_NO_REASON(this);
+  }
+
+  if (!PBackgroundIDBCursorParent::Send__delete__(this)) {
+    return IPC_FAIL_NO_REASON(this);
+  }
+  return IPC_OK();
+}
+
+mozilla::ipc::IPCResult
 Cursor::RecvContinue(const CursorRequestParams& aParams)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aParams.type() != CursorRequestParams::T__None);
   MOZ_ASSERT(!mActorDestroyed);
   MOZ_ASSERT(mObjectStoreMetadata);
   MOZ_ASSERT_IF(mType == OpenCursorParams::TIndexOpenCursorParams ||
                   mType == OpenCursorParams::TIndexOpenKeyCursorParams,
@@ -16708,39 +16747,39 @@ Cursor::RecvContinue(const CursorRequest
     false
 #else
     mIsSameProcessActor
 #endif
     ;
 
   if (!trustParams && !VerifyRequestParams(aParams)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   if (NS_WARN_IF(mCurrentlyRunningOp)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   if (NS_WARN_IF(mTransaction->mCommitOrAbortReceived)) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   RefPtr<ContinueOp> continueOp = new ContinueOp(this, aParams);
   if (NS_WARN_IF(!continueOp->Init(mTransaction))) {
     continueOp->Cleanup();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   continueOp->DispatchToConnectionPool();
   mCurrentlyRunningOp = continueOp;
 
-  return true;
+  return IPC_OK();
 }
 
 /*******************************************************************************
  * FileManager
  ******************************************************************************/
 
 FileManager::FileManager(PersistenceType aPersistenceType,
                          const nsACString& aGroup,
@@ -20345,47 +20384,47 @@ MutableFile::AllocPBackgroundFileHandleP
 
     gFileHandleThreadPool = fileHandleThreadPool;
   }
 
   return BackgroundMutableFileParentBase::AllocPBackgroundFileHandleParent(
                                                                          aMode);
 }
 
-bool
+mozilla::ipc::IPCResult
 MutableFile::RecvPBackgroundFileHandleConstructor(
                                             PBackgroundFileHandleParent* aActor,
                                             const FileMode& aMode)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(!mDatabase->IsClosed());
 
   if (NS_WARN_IF(mDatabase->IsInvalidated())) {
     // This is an expected race. We don't want the child to die here, just don't
     // actually do any work.
-    return true;
+    return IPC_OK();
   }
 
   return BackgroundMutableFileParentBase::RecvPBackgroundFileHandleConstructor(
                                                                  aActor, aMode);
 }
 
-bool
+mozilla::ipc::IPCResult
 MutableFile::RecvGetFileId(int64_t* aFileId)
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(mFileInfo);
 
   if (NS_WARN_IF(!IndexedDatabaseManager::InTestingMode())) {
     ASSERT_UNLESS_FUZZING();
-    return false;
+    return IPC_FAIL_NO_REASON(this);
   }
 
   *aFileId = mFileInfo->Id();
-  return true;
+  return IPC_OK();
 }
 
 FactoryOp::FactoryOp(Factory* aFactory,
                      already_AddRefed<ContentParent> aContentParent,
                      const CommonFactoryRequestParams& aCommonParams,
                      bool aDeleting)
   : DatabaseOperationBase(aFactory->GetLoggingInfo()->Id(),
                           aFactory->GetLoggingInfo()->NextRequestSN())
@@ -21125,29 +21164,29 @@ FactoryOp::DirectoryLockFailed()
 void
 FactoryOp::ActorDestroy(ActorDestroyReason aWhy)
 {
   AssertIsOnBackgroundThread();
 
   NoteActorDestroyed();
 }
 
-bool
+mozilla::ipc::IPCResult
 FactoryOp::RecvPermissionRetry()
 {
   AssertIsOnOwningThread();
   MOZ_ASSERT(!IsActorDestroyed());
   MOZ_ASSERT(mState == State::PermissionChallenge);
 
   mContentParent = BackgroundParent::GetContentParent(Manager()->Manager());
 
   mState = State::PermissionRetry;
   MOZ_ALWAYS_SUCCEEDS(NS_DispatchToMainThread(this));
 
-  return true;
+  return IPC_OK();
 }
 
 OpenDatabaseOp::OpenDatabaseOp(Factory* aFactory,
                                already_AddRefed<ContentParent> aContentParent,
                                const CommonFactoryRequestParams& aParams)
   : FactoryOp(aFactory, Move(aContentParent), aParams, /* aDeleting */ false)
   , mMetadata(new FullDatabaseMetadata(aParams.metadata()))
   , mRequestedVersion(aParams.metadata().version())
@@ -25639,17 +25678,17 @@ NormalTransactionOp::Cleanup()
 void
 NormalTransactionOp::ActorDestroy(ActorDestroyReason aWhy)
 {
   AssertIsOnOwningThread();
 
   NoteActorDestroyed();
 }
 
-bool
+mozilla::ipc::IPCResult
 NormalTransactionOp::RecvContinue(const PreprocessResponse& aResponse)
 {
   AssertIsOnOwningThread();
 
   switch (aResponse.type()) {
     case PreprocessResponse::Tnsresult:
       mResultCode = aResponse.get_nsresult();
       break;
@@ -25661,17 +25700,17 @@ NormalTransactionOp::RecvContinue(const 
       break;
 
     default:
       MOZ_CRASH("Should never get here!");
   }
 
   NoteContinueReceived();
 
-  return true;
+  return IPC_OK();
 }
 
 ObjectStoreAddOrPutRequestOp::ObjectStoreAddOrPutRequestOp(
                                                   TransactionBase* aTransaction,
                                                   const RequestParams& aParams)
   : NormalTransactionOp(aTransaction)
   , mParams(aParams.type() == RequestParams::TObjectStoreAddParams ?
               aParams.get_ObjectStoreAddParams().commonParams() :
@@ -28889,26 +28928,29 @@ Utils::ActorDestroy(ActorDestroyReason a
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(!mActorDestroyed);
 
 #ifdef DEBUG
   mActorDestroyed = true;
 #endif
 }
 
-bool
+mozilla::ipc::IPCResult
 Utils::RecvDeleteMe()
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(!mActorDestroyed);
 
-  return PBackgroundIndexedDBUtilsParent::Send__delete__(this);
-}
-
-bool
+  if (!PBackgroundIndexedDBUtilsParent::Send__delete__(this)) {
+    return IPC_FAIL_NO_REASON(this);
+  }