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
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "mozilla/dom/cache/StreamControl.h"
13 void StreamControl::AddReadStream(ReadStream::Controllable
* aReadStream
) {
15 MOZ_DIAGNOSTIC_ASSERT(aReadStream
);
16 MOZ_ASSERT(!mReadStreamList
.Contains(aReadStream
));
17 mReadStreamList
.AppendElement(aReadStream
);
20 void StreamControl::ForgetReadStream(ReadStream::Controllable
* aReadStream
) {
22 MOZ_ALWAYS_TRUE(mReadStreamList
.RemoveElement(aReadStream
));
25 void StreamControl::NoteClosed(ReadStream::Controllable
* aReadStream
,
28 ForgetReadStream(aReadStream
);
29 NoteClosedAfterForget(aId
);
32 StreamControl::~StreamControl() {
33 // owning thread only, but can't call virtual AssertOwningThread in destructor
34 MOZ_DIAGNOSTIC_ASSERT(mReadStreamList
.IsEmpty());
37 void StreamControl::CloseReadStreams(const nsID
& aId
) {
39 #ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED
40 uint32_t closedCount
= 0;
43 ReadStreamList::ForwardIterator
iter(mReadStreamList
);
44 while (iter
.HasMore()) {
45 RefPtr
<ReadStream::Controllable
> stream
= iter
.GetNext();
46 if (stream
->MatchId(aId
)) {
47 stream
->CloseStream();
48 #ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED
54 MOZ_DIAGNOSTIC_ASSERT(closedCount
> 0);
57 void StreamControl::CloseAllReadStreams() {
60 ReadStreamList::ForwardIterator
iter(mReadStreamList
);
61 while (iter
.HasMore()) {
62 iter
.GetNext()->CloseStream();
66 void StreamControl::CloseAllReadStreamsWithoutReporting() {
69 ReadStreamList::ForwardIterator
iter(mReadStreamList
);
70 while (iter
.HasMore()) {
71 RefPtr
<ReadStream::Controllable
> stream
= iter
.GetNext();
72 // Note, we cannot trigger IPC traffic here. So use
73 // CloseStreamWithoutReporting().
74 stream
->CloseStreamWithoutReporting();
78 bool StreamControl::HasEverBeenRead() const {
79 ReadStreamList::ForwardIterator
iter(mReadStreamList
);
80 while (iter
.HasMore()) {
81 if (iter
.GetNext()->HasEverBeenRead()) {
90 } // namespace mozilla