Bug 1572460 - Refactor `selection` out of the `InspectorFront`. r=yulia
[gecko.git] / dom / cache / StreamControl.cpp
blob288279aaa1a34d6936f14178e04edcb157b87b75
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"
9 namespace mozilla {
10 namespace dom {
11 namespace cache {
13 void StreamControl::AddReadStream(ReadStream::Controllable* aReadStream) {
14 AssertOwningThread();
15 MOZ_DIAGNOSTIC_ASSERT(aReadStream);
16 MOZ_ASSERT(!mReadStreamList.Contains(aReadStream));
17 mReadStreamList.AppendElement(aReadStream);
20 void StreamControl::ForgetReadStream(ReadStream::Controllable* aReadStream) {
21 AssertOwningThread();
22 MOZ_ALWAYS_TRUE(mReadStreamList.RemoveElement(aReadStream));
25 void StreamControl::NoteClosed(ReadStream::Controllable* aReadStream,
26 const nsID& aId) {
27 AssertOwningThread();
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) {
38 AssertOwningThread();
39 #ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED
40 uint32_t closedCount = 0;
41 #endif
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
49 closedCount += 1;
50 #endif
54 MOZ_DIAGNOSTIC_ASSERT(closedCount > 0);
57 void StreamControl::CloseAllReadStreams() {
58 AssertOwningThread();
60 ReadStreamList::ForwardIterator iter(mReadStreamList);
61 while (iter.HasMore()) {
62 iter.GetNext()->CloseStream();
66 void StreamControl::CloseAllReadStreamsWithoutReporting() {
67 AssertOwningThread();
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()) {
82 return true;
85 return false;
88 } // namespace cache
89 } // namespace dom
90 } // namespace mozilla