Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/file/MultipartBlobImpl.h
Line
Count
Source (jump to first uncovered line)
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/. */
6
7
#ifndef mozilla_dom_MultipartBlobImpl_h
8
#define mozilla_dom_MultipartBlobImpl_h
9
10
#include "mozilla/Attributes.h"
11
#include "mozilla/ErrorResult.h"
12
#include "mozilla/Move.h"
13
#include "mozilla/dom/BaseBlobImpl.h"
14
15
namespace mozilla {
16
namespace dom {
17
18
class MultipartBlobImpl final : public BaseBlobImpl
19
{
20
public:
21
  NS_INLINE_DECL_REFCOUNTING_INHERITED(MultipartBlobImpl, BaseBlobImpl)
22
23
  // Create as a file
24
  static already_AddRefed<MultipartBlobImpl>
25
  Create(nsTArray<RefPtr<BlobImpl>>&& aBlobImpls,
26
         const nsAString& aName,
27
         const nsAString& aContentType,
28
         ErrorResult& aRv);
29
30
  // Create as a blob
31
  static already_AddRefed<MultipartBlobImpl>
32
  Create(nsTArray<RefPtr<BlobImpl>>&& aBlobImpls,
33
         const nsAString& aContentType,
34
         ErrorResult& aRv);
35
36
  // Create as a file to be later initialized
37
  explicit MultipartBlobImpl(const nsAString& aName)
38
    : BaseBlobImpl(aName, EmptyString(), UINT64_MAX),
39
      mIsFromNsIFile(false)
40
0
  {
41
0
  }
42
43
  // Create as a blob to be later initialized
44
  MultipartBlobImpl()
45
    : BaseBlobImpl(EmptyString(), UINT64_MAX),
46
      mIsFromNsIFile(false)
47
0
  {
48
0
  }
49
50
  void InitializeBlob(ErrorResult& aRv);
51
52
  void InitializeBlob(const Sequence<Blob::BlobPart>& aData,
53
                      const nsAString& aContentType,
54
                      bool aNativeEOL,
55
                      ErrorResult& aRv);
56
57
  nsresult InitializeChromeFile(nsIFile* aData,
58
                                const nsAString& aType,
59
                                const nsAString& aName,
60
                                bool aLastModifiedPassed,
61
                                int64_t aLastModified,
62
                                bool aIsFromNsIFile);
63
64
  virtual already_AddRefed<BlobImpl>
65
  CreateSlice(uint64_t aStart, uint64_t aLength,
66
              const nsAString& aContentType,
67
              ErrorResult& aRv) override;
68
69
  virtual uint64_t GetSize(ErrorResult& aRv) override
70
0
  {
71
0
    return mLength;
72
0
  }
73
74
  virtual void CreateInputStream(nsIInputStream** aInputStream,
75
                                 ErrorResult& aRv) override;
76
77
  virtual const nsTArray<RefPtr<BlobImpl>>* GetSubBlobImpls() const override
78
0
  {
79
0
    return mBlobImpls.Length() ? &mBlobImpls : nullptr;
80
0
  }
81
82
  virtual void GetMozFullPathInternal(nsAString& aFullPath,
83
                                      ErrorResult& aRv) const override;
84
85
  virtual nsresult
86
  SetMutable(bool aMutable) override;
87
88
  void SetName(const nsAString& aName)
89
0
  {
90
0
    mName = aName;
91
0
  }
92
93
  virtual bool MayBeClonedToOtherThreads() const override;
94
95
  size_t GetAllocationSize() const override;
96
  size_t GetAllocationSize(FallibleTArray<BlobImpl*>& aVisitedBlobImpls) const override;
97
98
protected:
99
  MultipartBlobImpl(nsTArray<RefPtr<BlobImpl>>&& aBlobImpls,
100
                    const nsAString& aName,
101
                    const nsAString& aContentType)
102
    : BaseBlobImpl(aName, aContentType, UINT64_MAX),
103
      mBlobImpls(std::move(aBlobImpls)),
104
      mIsFromNsIFile(false)
105
0
  {
106
0
  }
107
108
  MultipartBlobImpl(nsTArray<RefPtr<BlobImpl>>&& aBlobImpls,
109
                    const nsAString& aContentType)
110
    : BaseBlobImpl(aContentType, UINT64_MAX),
111
      mBlobImpls(std::move(aBlobImpls)),
112
      mIsFromNsIFile(false)
113
0
  {
114
0
  }
115
116
0
  virtual ~MultipartBlobImpl() {}
117
118
  void SetLengthAndModifiedDate(ErrorResult& aRv);
119
120
  nsTArray<RefPtr<BlobImpl>> mBlobImpls;
121
  bool mIsFromNsIFile;
122
};
123
124
} // dom namespace
125
} // mozilla namespace
126
127
#endif // mozilla_dom_MultipartBlobImpl_h