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 CacheStorage__h__
6 #define CacheStorage__h__
7 
8 #include "nsICacheStorage.h"
9 #include "CacheEntry.h"
10 #include "LoadContextInfo.h"
11 
12 #include "nsRefPtrHashtable.h"
13 #include "nsThreadUtils.h"
14 #include "nsCOMPtr.h"
15 #include "nsILoadContextInfo.h"
16 #include "nsIApplicationCache.h"
17 #include "nsICacheEntryDoomCallback.h"
18 
19 class nsIURI;
20 class nsIApplicationCache;
21 
22 namespace mozilla {
23 namespace net {
24 
25 // This dance is needed to make CacheEntryTable declarable-only in headers
26 // w/o exporting CacheEntry.h file to make nsNetModule.cpp compilable.
27 typedef nsRefPtrHashtable<nsCStringHashKey, CacheEntry> TCacheEntryTable;
28 class CacheEntryTable : public TCacheEntryTable
29 {
30 public:
31   enum EType
32   {
33     MEMORY_ONLY,
34     ALL_ENTRIES
35   };
36 
CacheEntryTable(EType aType)37   explicit CacheEntryTable(EType aType) : mType(aType) { }
Type()38   EType Type() const
39   {
40     return mType;
41   }
42 private:
43   EType const mType;
44   CacheEntryTable() = delete;
45 };
46 
47 class CacheStorage : public nsICacheStorage
48 {
49   NS_DECL_THREADSAFE_ISUPPORTS
50   NS_DECL_NSICACHESTORAGE
51 
52 public:
53   CacheStorage(nsILoadContextInfo* aInfo,
54                bool aAllowDisk,
55                bool aLookupAppCache,
56                bool aSkipSizeCheck,
57                bool aPinning);
58 
59 protected:
60   virtual ~CacheStorage();
61 
62   nsresult ChooseApplicationCache(nsIURI* aURI, nsIApplicationCache** aCache);
63 
64   RefPtr<LoadContextInfo> mLoadContextInfo;
65   bool mWriteToDisk : 1;
66   bool mLookupAppCache : 1;
67   bool mSkipSizeCheck: 1;
68   bool mPinning : 1;
69 
70 public:
LoadInfo()71   nsILoadContextInfo* LoadInfo() const { return mLoadContextInfo; }
WriteToDisk()72   bool WriteToDisk() const { return mWriteToDisk && !mLoadContextInfo->IsPrivate(); }
LookupAppCache()73   bool LookupAppCache() const { return mLookupAppCache; }
SkipSizeCheck()74   bool SkipSizeCheck() const { return mSkipSizeCheck; }
Pinning()75   bool Pinning() const { return mPinning; }
76 };
77 
78 } // namespace net
79 } // namespace mozilla
80 
81 #endif
82