Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/netwerk/cache/nsDiskCacheDevice.h
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2
 *
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 _nsDiskCacheDevice_h_
8
#define _nsDiskCacheDevice_h_
9
10
#include "mozilla/MemoryReporting.h"
11
#include "nsCacheDevice.h"
12
#include "nsDiskCacheBinding.h"
13
#include "nsDiskCacheBlockFile.h"
14
#include "nsDiskCacheEntry.h"
15
16
#include "nsIFile.h"
17
#include "nsIObserver.h"
18
#include "nsCOMArray.h"
19
20
class nsDiskCacheMap;
21
22
23
class nsDiskCacheDevice final : public nsCacheDevice {
24
public:
25
    nsDiskCacheDevice();
26
    virtual ~nsDiskCacheDevice();
27
28
    virtual nsresult        Init() override;
29
    virtual nsresult        Shutdown() override;
30
31
    virtual const char *    GetDeviceID(void) override;
32
    virtual nsCacheEntry *  FindEntry(nsCString * key, bool *collision) override;
33
    virtual nsresult        DeactivateEntry(nsCacheEntry * entry) override;
34
    virtual nsresult        BindEntry(nsCacheEntry * entry) override;
35
    virtual void            DoomEntry( nsCacheEntry * entry ) override;
36
37
    virtual nsresult OpenInputStreamForEntry(nsCacheEntry *    entry,
38
                                             nsCacheAccessMode mode,
39
                                             uint32_t          offset,
40
                                             nsIInputStream ** result) override;
41
42
    virtual nsresult OpenOutputStreamForEntry(nsCacheEntry *     entry,
43
                                              nsCacheAccessMode  mode,
44
                                              uint32_t           offset,
45
                                              nsIOutputStream ** result) override;
46
47
    virtual nsresult        GetFileForEntry(nsCacheEntry *    entry,
48
                                            nsIFile **        result) override;
49
50
    virtual nsresult        OnDataSizeChange(nsCacheEntry * entry, int32_t deltaSize) override;
51
52
    virtual nsresult        Visit(nsICacheVisitor * visitor) override;
53
54
    virtual nsresult        EvictEntries(const char * clientID) override;
55
56
    bool                    EntryIsTooBig(int64_t entrySize);
57
58
    size_t                 SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf);
59
60
    /**
61
     * Preference accessors
62
     */
63
    void                    SetCacheParentDirectory(nsIFile * parentDir);
64
    void                    SetCapacity(uint32_t  capacity);
65
    void                    SetMaxEntrySize(int32_t  maxSizeInKilobytes);
66
67
/* private: */
68
69
    void                    getCacheDirectory(nsIFile ** result);
70
    uint32_t                getCacheCapacity();
71
    uint32_t                getCacheSize();
72
    uint32_t                getEntryCount();
73
74
0
    nsDiskCacheMap *        CacheMap()    { return &mCacheMap; }
75
76
private:
77
    friend class nsDiskCacheDeviceDeactivateEntryEvent;
78
    friend class nsEvictDiskCacheEntriesEvent;
79
    friend class nsDiskCacheMap;
80
    /**
81
     *  Private methods
82
     */
83
84
    inline bool IsValidBinding(nsDiskCacheBinding *binding)
85
0
    {
86
0
        NS_ASSERTION(binding, "  binding == nullptr");
87
0
        NS_ASSERTION(binding->mDeactivateEvent == nullptr,
88
0
                     "  entry in process of deactivation");
89
0
        return (binding && !binding->mDeactivateEvent);
90
0
    }
91
92
0
    bool                    Initialized() { return mInitialized; }
93
94
    nsresult                Shutdown_Private(bool flush);
95
    nsresult                DeactivateEntry_Private(nsCacheEntry * entry,
96
                                                    nsDiskCacheBinding * binding);
97
98
    nsresult                OpenDiskCache();
99
    nsresult                ClearDiskCache();
100
101
    nsresult                EvictDiskCacheEntries(uint32_t  targetCapacity);
102
103
    /**
104
     *  Member variables
105
     */
106
    nsCOMPtr<nsIFile>       mCacheDirectory;
107
    nsDiskCacheBindery      mBindery;
108
    uint32_t                mCacheCapacity;     // Unit is KiB's
109
    int32_t                 mMaxEntrySize;      // Unit is bytes internally
110
    // XXX need soft/hard limits, currentTotal
111
    nsDiskCacheMap          mCacheMap;
112
    bool                    mInitialized;
113
    bool                    mClearingDiskCache;
114
};
115
116
#endif // _nsDiskCacheDevice_h_