Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/netwerk/cache2/CacheFileInputStream.h
Line
Count
Source (jump to first uncovered line)
1
/* This Source Code Form is subject to the terms of the Mozilla Public
2
 * License, v. 2.0. If a copy of the MPL was not distributed with this
3
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5
#ifndef CacheFileInputStream__h__
6
#define CacheFileInputStream__h__
7
8
#include "nsIAsyncInputStream.h"
9
#include "nsISeekableStream.h"
10
#include "nsCOMPtr.h"
11
#include "nsAutoPtr.h"
12
#include "CacheFileChunk.h"
13
14
namespace mozilla {
15
namespace net {
16
17
class CacheFile;
18
19
class CacheFileInputStream : public nsIAsyncInputStream
20
                           , public nsISeekableStream
21
                           , public CacheFileChunkListener
22
{
23
  NS_DECL_THREADSAFE_ISUPPORTS
24
  NS_DECL_NSIINPUTSTREAM
25
  NS_DECL_NSIASYNCINPUTSTREAM
26
  NS_DECL_NSISEEKABLESTREAM
27
28
public:
29
  explicit CacheFileInputStream(CacheFile *aFile, nsISupports *aEntry,
30
                                bool aAlternativeData);
31
32
  NS_IMETHOD OnChunkRead(nsresult aResult, CacheFileChunk *aChunk) override;
33
  NS_IMETHOD OnChunkWritten(nsresult aResult, CacheFileChunk *aChunk) override;
34
  NS_IMETHOD OnChunkAvailable(nsresult aResult, uint32_t aChunkIdx,
35
                              CacheFileChunk *aChunk) override;
36
  NS_IMETHOD OnChunkUpdated(CacheFileChunk *aChunk) override;
37
38
  // Memory reporting
39
  size_t SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const;
40
41
0
  uint32_t GetPosition() const { return mPos; };
42
0
  bool IsAlternativeData() const { return mAlternativeData; };
43
0
  int64_t GetChunkIdx() const { return mChunk ? static_cast<int64_t>(mChunk->Index()) : -1; };
44
45
private:
46
  virtual ~CacheFileInputStream();
47
48
  nsresult CloseWithStatusLocked(nsresult aStatus);
49
  void CleanUp();
50
  void ReleaseChunk();
51
  void EnsureCorrectChunk(bool aReleaseOnly);
52
53
  // CanRead returns negative value when output stream truncates the data before
54
  // the input stream's mPos.
55
  int64_t CanRead(CacheFileChunkReadHandle *aHandle);
56
  void NotifyListener();
57
  void MaybeNotifyListener();
58
59
  RefPtr<CacheFile>      mFile;
60
  RefPtr<CacheFileChunk> mChunk;
61
  int64_t                mPos;
62
  nsresult               mStatus;
63
  bool                   mClosed : 1;
64
  bool                   mInReadSegments : 1;
65
  bool                   mWaitingForUpdate : 1;
66
  bool const             mAlternativeData : 1;
67
  int64_t                mListeningForChunk;
68
69
  nsCOMPtr<nsIInputStreamCallback> mCallback;
70
  uint32_t                         mCallbackFlags;
71
  nsCOMPtr<nsIEventTarget>         mCallbackTarget;
72
  // Held purely for referencing purposes
73
  RefPtr<nsISupports>              mCacheEntryHandle;
74
};
75
76
77
} // namespace net
78
} // namespace mozilla
79
80
#endif