Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/media/CloneableWithRangeMediaResource.h
Line
Count
Source (jump to first uncovered line)
1
/* vim:set ts=2 sw=2 sts=2 et cindent: */
2
/* This Source Code Form is subject to the terms of the Mozilla Public
3
 * License, v. 2.0. If a copy of the MPL was not distributed with this
4
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6
#ifndef mozilla_dom_media_CloneableWithRangeMediaResource_h
7
#define mozilla_dom_media_CloneableWithRangeMediaResource_h
8
9
#include "BaseMediaResource.h"
10
#include "nsICloneableInputStream.h"
11
12
namespace mozilla {
13
14
class CloneableWithRangeMediaResource : public BaseMediaResource
15
{
16
public:
17
  CloneableWithRangeMediaResource(MediaResourceCallback* aCallback,
18
                                  nsIChannel* aChannel,
19
                                  nsIURI* aURI,
20
                                  nsIInputStream* aStream,
21
                                  uint64_t aSize)
22
    : BaseMediaResource(aCallback, aChannel, aURI)
23
    , mStream(do_QueryInterface(aStream))
24
    , mSize(aSize)
25
    , mInitialized(false)
26
0
  {
27
0
    MOZ_ASSERT(mStream);
28
0
  }
29
30
  ~CloneableWithRangeMediaResource()
31
0
  {
32
0
  }
33
34
  // Main thread
35
  nsresult Open(nsIStreamListener** aStreamListener) override;
36
  nsresult Close() override;
37
0
  void     Suspend(bool aCloseImmediately) override {}
38
0
  void     Resume() override {}
39
  already_AddRefed<nsIPrincipal> GetCurrentPrincipal() override;
40
  nsresult ReadFromCache(char* aBuffer, int64_t aOffset, uint32_t aCount) override;
41
42
  // These methods are called off the main thread.
43
44
  // Other thread
45
0
  void     SetReadMode(MediaCacheStream::ReadMode aMode) override {}
46
0
  void     SetPlaybackRate(uint32_t aBytesPerSecond) override {}
47
  nsresult ReadAt(int64_t aOffset, char* aBuffer,
48
                  uint32_t aCount, uint32_t* aBytes) override;
49
  // (Probably) file-based, caching recommended.
50
0
  bool ShouldCacheReads() override { return true; }
51
52
  // Any thread
53
0
  void    Pin() override {}
54
0
  void    Unpin() override {}
55
56
  double  GetDownloadRate(bool* aIsReliable) override
57
0
  {
58
0
    // The data's all already here
59
0
    *aIsReliable = true;
60
0
    return 100*1024*1024; // arbitray, use 100MB/s
61
0
  }
62
63
  int64_t GetLength() override
64
0
  {
65
0
    MaybeInitialize();
66
0
    return mSize;
67
0
  }
68
69
  int64_t GetNextCachedData(int64_t aOffset) override
70
0
  {
71
0
    MaybeInitialize();
72
0
    return (aOffset < (int64_t)mSize) ? aOffset : -1;
73
0
  }
74
75
  int64_t GetCachedDataEnd(int64_t aOffset) override
76
0
  {
77
0
    MaybeInitialize();
78
0
    return std::max(aOffset, (int64_t)mSize);
79
0
  }
80
81
0
  bool    IsDataCachedToEndOfResource(int64_t aOffset) override { return true; }
82
0
  bool    IsTransportSeekable() override { return true; }
83
84
  nsresult GetCachedRanges(MediaByteRangeSet& aRanges) override;
85
86
  size_t SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const override
87
0
  {
88
0
    return BaseMediaResource::SizeOfExcludingThis(aMallocSizeOf);
89
0
  }
90
91
  size_t SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const override
92
0
  {
93
0
    return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf);
94
0
  }
95
96
private:
97
  void MaybeInitialize();
98
99
  // Input stream for the media data. This can be used from any
100
  // thread.
101
  nsCOMPtr<nsICloneableInputStreamWithRange> mStream;
102
103
  // The stream size.
104
  uint64_t mSize;
105
106
  bool mInitialized;
107
};
108
109
} // namespace mozilla
110
111
#endif // mozilla_dom_media_CloneableWithRangeMediaResource_h