Bug 1874684 - Part 4: Prefer const references instead of copying Instant values....
[gecko.git] / dom / simpledb / ActorsChild.cpp
blobf6c234fa1db33a8764b2b07660af56b7396af399
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "ActorsChild.h"
9 // Local includes
10 #include "SDBConnection.h"
11 #include "SDBRequest.h"
12 #include "SDBResults.h"
14 // Global includes
15 #include "mozilla/Assertions.h"
16 #include "mozilla/dom/PBackgroundSDBRequest.h"
17 #include "nsError.h"
18 #include "nsID.h"
19 #include "nsISDBResults.h"
20 #include "nsVariant.h"
22 namespace mozilla::dom {
24 /*******************************************************************************
25 * SDBConnectionChild
26 ******************************************************************************/
28 SDBConnectionChild::SDBConnectionChild(SDBConnection* aConnection)
29 : mConnection(aConnection) {
30 AssertIsOnOwningThread();
31 MOZ_ASSERT(aConnection);
33 MOZ_COUNT_CTOR(SDBConnectionChild);
36 SDBConnectionChild::~SDBConnectionChild() {
37 AssertIsOnOwningThread();
39 MOZ_COUNT_DTOR(SDBConnectionChild);
42 void SDBConnectionChild::SendDeleteMeInternal() {
43 AssertIsOnOwningThread();
45 if (mConnection) {
46 mConnection->ClearBackgroundActor();
47 mConnection = nullptr;
49 MOZ_ALWAYS_TRUE(PBackgroundSDBConnectionChild::SendDeleteMe());
53 void SDBConnectionChild::ActorDestroy(ActorDestroyReason aWhy) {
54 AssertIsOnOwningThread();
56 if (mConnection) {
57 mConnection->ClearBackgroundActor();
58 #ifdef DEBUG
59 mConnection = nullptr;
60 #endif
64 PBackgroundSDBRequestChild* SDBConnectionChild::AllocPBackgroundSDBRequestChild(
65 const SDBRequestParams& aParams) {
66 AssertIsOnOwningThread();
68 MOZ_CRASH(
69 "PBackgroundSDBRequestChild actors should be manually "
70 "constructed!");
73 bool SDBConnectionChild::DeallocPBackgroundSDBRequestChild(
74 PBackgroundSDBRequestChild* aActor) {
75 AssertIsOnOwningThread();
76 MOZ_ASSERT(aActor);
78 delete static_cast<SDBRequestChild*>(aActor);
79 return true;
82 mozilla::ipc::IPCResult SDBConnectionChild::RecvAllowToClose() {
83 AssertIsOnOwningThread();
85 if (mConnection) {
86 mConnection->AllowToClose();
89 return IPC_OK();
92 mozilla::ipc::IPCResult SDBConnectionChild::RecvClosed() {
93 AssertIsOnOwningThread();
95 if (mConnection) {
96 mConnection->OnClose(/* aAbnormal */ true);
99 return IPC_OK();
102 /*******************************************************************************
103 * SDBRequestChild
104 ******************************************************************************/
106 SDBRequestChild::SDBRequestChild(SDBRequest* aRequest)
107 : mConnection(aRequest->GetConnection()), mRequest(aRequest) {
108 AssertIsOnOwningThread();
109 MOZ_ASSERT(aRequest);
111 MOZ_COUNT_CTOR(SDBRequestChild);
114 SDBRequestChild::~SDBRequestChild() {
115 AssertIsOnOwningThread();
117 MOZ_COUNT_DTOR(SDBRequestChild);
120 #ifdef DEBUG
122 void SDBRequestChild::AssertIsOnOwningThread() const {
123 MOZ_ASSERT(mRequest);
124 mRequest->AssertIsOnOwningThread();
127 #endif // DEBUG
129 void SDBRequestChild::HandleResponse(nsresult aResponse) {
130 AssertIsOnOwningThread();
131 MOZ_ASSERT(NS_FAILED(aResponse));
132 MOZ_ASSERT(mRequest);
134 mRequest->SetError(aResponse);
137 void SDBRequestChild::HandleResponse() {
138 AssertIsOnOwningThread();
139 MOZ_ASSERT(mRequest);
141 RefPtr<nsVariant> variant = new nsVariant();
142 variant->SetAsVoid();
144 mRequest->SetResult(variant);
147 void SDBRequestChild::HandleResponse(const nsCString& aResponse) {
148 AssertIsOnOwningThread();
149 MOZ_ASSERT(mRequest);
151 RefPtr<SDBResult> result = new SDBResult(aResponse);
153 RefPtr<nsVariant> variant = new nsVariant();
154 variant->SetAsInterface(NS_GET_IID(nsISDBResult), result);
156 mRequest->SetResult(variant);
159 void SDBRequestChild::ActorDestroy(ActorDestroyReason aWhy) {
160 AssertIsOnOwningThread();
162 if (mConnection) {
163 mConnection->AssertIsOnOwningThread();
165 mConnection->OnRequestFinished();
166 #ifdef DEBUG
167 mConnection = nullptr;
168 #endif
172 mozilla::ipc::IPCResult SDBRequestChild::Recv__delete__(
173 const SDBRequestResponse& aResponse) {
174 AssertIsOnOwningThread();
175 MOZ_ASSERT(mRequest);
176 MOZ_ASSERT(mConnection);
178 switch (aResponse.type()) {
179 case SDBRequestResponse::Tnsresult:
180 HandleResponse(aResponse.get_nsresult());
181 break;
183 case SDBRequestResponse::TSDBRequestOpenResponse:
184 HandleResponse();
186 mConnection->OnOpen();
188 break;
190 case SDBRequestResponse::TSDBRequestSeekResponse:
191 HandleResponse();
192 break;
194 case SDBRequestResponse::TSDBRequestReadResponse:
195 HandleResponse(aResponse.get_SDBRequestReadResponse().data());
196 break;
198 case SDBRequestResponse::TSDBRequestWriteResponse:
199 HandleResponse();
200 break;
202 case SDBRequestResponse::TSDBRequestCloseResponse:
203 HandleResponse();
205 mConnection->OnClose(/* aAbnormal */ false);
207 break;
209 default:
210 MOZ_CRASH("Unknown response type!");
213 mConnection->OnRequestFinished();
215 // Null this out so that we don't try to call OnRequestFinished() again in
216 // ActorDestroy.
217 mConnection = nullptr;
219 return IPC_OK();
222 } // namespace mozilla::dom