123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- #include "mozilla/dom/cache/StreamControl.h"
- namespace mozilla {
- namespace dom {
- namespace cache {
- void
- StreamControl::AddReadStream(ReadStream::Controllable* aReadStream)
- {
- AssertOwningThread();
- MOZ_DIAGNOSTIC_ASSERT(aReadStream);
- MOZ_ASSERT(!mReadStreamList.Contains(aReadStream));
- mReadStreamList.AppendElement(aReadStream);
- }
- void
- StreamControl::ForgetReadStream(ReadStream::Controllable* aReadStream)
- {
- AssertOwningThread();
- MOZ_ALWAYS_TRUE(mReadStreamList.RemoveElement(aReadStream));
- }
- void
- StreamControl::NoteClosed(ReadStream::Controllable* aReadStream,
- const nsID& aId)
- {
- AssertOwningThread();
- ForgetReadStream(aReadStream);
- NoteClosedAfterForget(aId);
- }
- StreamControl::~StreamControl()
- {
- // owning thread only, but can't call virtual AssertOwningThread in destructor
- MOZ_DIAGNOSTIC_ASSERT(mReadStreamList.IsEmpty());
- }
- void
- StreamControl::CloseReadStreams(const nsID& aId)
- {
- AssertOwningThread();
- #if defined(DEBUG) || !defined(RELEASE_OR_BETA)
- uint32_t closedCount = 0;
- #endif
- ReadStreamList::ForwardIterator iter(mReadStreamList);
- while (iter.HasMore()) {
- RefPtr<ReadStream::Controllable> stream = iter.GetNext();
- if (stream->MatchId(aId)) {
- stream->CloseStream();
- #if defined(DEBUG) || !defined(RELEASE_OR_BETA)
- closedCount += 1;
- #endif
- }
- }
- MOZ_DIAGNOSTIC_ASSERT(closedCount > 0);
- }
- void
- StreamControl::CloseAllReadStreams()
- {
- AssertOwningThread();
- auto readStreamList = mReadStreamList;
- ReadStreamList::ForwardIterator iter(readStreamList);
- while (iter.HasMore()) {
- iter.GetNext()->CloseStream();
- }
- }
- void
- StreamControl::CloseAllReadStreamsWithoutReporting()
- {
- AssertOwningThread();
- ReadStreamList::ForwardIterator iter(mReadStreamList);
- while (iter.HasMore()) {
- RefPtr<ReadStream::Controllable> stream = iter.GetNext();
- // Note, we cannot trigger IPC traffic here. So use
- // CloseStreamWithoutReporting().
- stream->CloseStreamWithoutReporting();
- }
- }
- bool
- StreamControl::HasEverBeenRead() const
- {
- ReadStreamList::ForwardIterator iter(mReadStreamList);
- while (iter.HasMore()) {
- if (iter.GetNext()->HasEverBeenRead()) {
- return true;
- }
- }
- return false;
- }
- } // namespace cache
- } // namespace dom
- } // namespace mozilla
|