1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set sw=2 ts=8 et tw=80 : */ 3 4 /* This Source Code Form is subject to the terms of the Mozilla Public 5 * License, v. 2.0. If a copy of the MPL was not distributed with this 6 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 7 8 #include "mozilla/net/AltDataOutputStreamParent.h" 9 #include "mozilla/Unused.h" 10 11 namespace mozilla { 12 namespace net { 13 NS_IMPL_ISUPPORTS0(AltDataOutputStreamParent)14NS_IMPL_ISUPPORTS0(AltDataOutputStreamParent) 15 16 AltDataOutputStreamParent::AltDataOutputStreamParent(nsIOutputStream* aStream) 17 : mOutputStream(aStream), mStatus(NS_OK), mIPCOpen(true) { 18 MOZ_ASSERT(NS_IsMainThread(), "Main thread only"); 19 } 20 ~AltDataOutputStreamParent()21AltDataOutputStreamParent::~AltDataOutputStreamParent() { 22 MOZ_ASSERT(NS_IsMainThread(), "Main thread only"); 23 } 24 RecvWriteData(const nsCString & data)25mozilla::ipc::IPCResult AltDataOutputStreamParent::RecvWriteData( 26 const nsCString& data) { 27 if (NS_FAILED(mStatus)) { 28 if (mIPCOpen) { 29 Unused << SendError(mStatus); 30 } 31 return IPC_OK(); 32 } 33 nsresult rv; 34 uint32_t n; 35 if (mOutputStream) { 36 rv = mOutputStream->Write(data.BeginReading(), data.Length(), &n); 37 MOZ_ASSERT(n == data.Length() || NS_FAILED(rv)); 38 if (NS_FAILED(rv) && mIPCOpen) { 39 Unused << SendError(rv); 40 } 41 } 42 return IPC_OK(); 43 } 44 RecvClose()45mozilla::ipc::IPCResult AltDataOutputStreamParent::RecvClose() { 46 if (NS_FAILED(mStatus)) { 47 if (mIPCOpen) { 48 Unused << SendError(mStatus); 49 } 50 return IPC_OK(); 51 } 52 nsresult rv; 53 if (mOutputStream) { 54 rv = mOutputStream->Close(); 55 if (NS_FAILED(rv) && mIPCOpen) { 56 Unused << SendError(rv); 57 } 58 mOutputStream = nullptr; 59 } 60 return IPC_OK(); 61 } 62 ActorDestroy(ActorDestroyReason aWhy)63void AltDataOutputStreamParent::ActorDestroy(ActorDestroyReason aWhy) { 64 mIPCOpen = false; 65 } 66 RecvDeleteSelf()67mozilla::ipc::IPCResult AltDataOutputStreamParent::RecvDeleteSelf() { 68 mIPCOpen = false; 69 Unused << SendDeleteSelf(); 70 return IPC_OK(); 71 } 72 73 } // namespace net 74 } // namespace mozilla 75