forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			123 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* This Source Code Form is subject to the terms of the Mozilla Public
 | 
						|
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
						|
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | 
						|
 | 
						|
#ifndef CacheObserver__h__
 | 
						|
#define CacheObserver__h__
 | 
						|
 | 
						|
#include "nsIObserver.h"
 | 
						|
#include "nsIFile.h"
 | 
						|
#include "nsCOMPtr.h"
 | 
						|
#include "nsWeakReference.h"
 | 
						|
#include "mozilla/StaticPrefs_browser.h"
 | 
						|
#include "mozilla/StaticPrefs_privacy.h"
 | 
						|
#include <algorithm>
 | 
						|
 | 
						|
namespace mozilla {
 | 
						|
namespace net {
 | 
						|
 | 
						|
class CacheObserver : public nsIObserver, public nsSupportsWeakReference {
 | 
						|
  virtual ~CacheObserver() = default;
 | 
						|
 | 
						|
  NS_DECL_THREADSAFE_ISUPPORTS
 | 
						|
  NS_DECL_NSIOBSERVER
 | 
						|
 | 
						|
  static nsresult Init();
 | 
						|
  static nsresult Shutdown();
 | 
						|
  static CacheObserver* Self() { return sSelf; }
 | 
						|
 | 
						|
  // Access to preferences
 | 
						|
  static bool UseDiskCache() {
 | 
						|
    return StaticPrefs::browser_cache_disk_enable();
 | 
						|
  }
 | 
						|
  static bool UseMemoryCache() {
 | 
						|
    return StaticPrefs::browser_cache_memory_enable();
 | 
						|
  }
 | 
						|
  static uint32_t MetadataMemoryLimit()  // result in kilobytes.
 | 
						|
  {
 | 
						|
    return StaticPrefs::browser_cache_disk_metadata_memory_limit();
 | 
						|
  }
 | 
						|
  static uint32_t MemoryCacheCapacity();            // result in kilobytes.
 | 
						|
  static uint32_t DiskCacheCapacity();              // result in kilobytes.
 | 
						|
  static void SetSmartDiskCacheCapacity(uint32_t);  // parameter in kilobytes.
 | 
						|
  static uint32_t DiskFreeSpaceSoftLimit()          // result in kilobytes.
 | 
						|
  {
 | 
						|
    return StaticPrefs::browser_cache_disk_free_space_soft_limit();
 | 
						|
  }
 | 
						|
  static uint32_t DiskFreeSpaceHardLimit()  // result in kilobytes.
 | 
						|
  {
 | 
						|
    return StaticPrefs::browser_cache_disk_free_space_hard_limit();
 | 
						|
  }
 | 
						|
  static bool SmartCacheSizeEnabled() {
 | 
						|
    return StaticPrefs::browser_cache_disk_smart_size_enabled();
 | 
						|
  }
 | 
						|
  static uint32_t PreloadChunkCount() {
 | 
						|
    return StaticPrefs::browser_cache_disk_preload_chunk_count();
 | 
						|
  }
 | 
						|
  static uint32_t MaxMemoryEntrySize()  // result in kilobytes.
 | 
						|
  {
 | 
						|
    return StaticPrefs::browser_cache_memory_max_entry_size();
 | 
						|
  }
 | 
						|
  static uint32_t MaxDiskEntrySize()  // result in kilobytes.
 | 
						|
  {
 | 
						|
    return StaticPrefs::browser_cache_disk_max_entry_size();
 | 
						|
  }
 | 
						|
  static uint32_t MaxDiskChunksMemoryUsage(
 | 
						|
      bool aPriority)  // result in kilobytes.
 | 
						|
  {
 | 
						|
    return aPriority
 | 
						|
               ? StaticPrefs::
 | 
						|
                     browser_cache_disk_max_priority_chunks_memory_usage()
 | 
						|
               : StaticPrefs::browser_cache_disk_max_chunks_memory_usage();
 | 
						|
  }
 | 
						|
  static uint32_t HalfLifeSeconds() { return sHalfLifeHours * 60.0F * 60.0F; }
 | 
						|
  static bool ClearCacheOnShutdown() {
 | 
						|
    return StaticPrefs::privacy_sanitize_sanitizeOnShutdown() &&
 | 
						|
           StaticPrefs::privacy_clearOnShutdown_cache();
 | 
						|
  }
 | 
						|
  static bool CacheFSReported() { return sCacheFSReported; }
 | 
						|
  static void SetCacheFSReported();
 | 
						|
  static bool HashStatsReported() { return sHashStatsReported; }
 | 
						|
  static void SetHashStatsReported();
 | 
						|
  static uint32_t CacheAmountWritten()  // result in kilobytes
 | 
						|
  {
 | 
						|
    return sCacheAmountWritten;
 | 
						|
  }
 | 
						|
  static void SetCacheAmountWritten(uint32_t);  // parameter in kilobytes.
 | 
						|
  static void ParentDirOverride(nsIFile** aDir);
 | 
						|
 | 
						|
  static bool EntryIsTooBig(int64_t aSize, bool aUsingDisk);
 | 
						|
 | 
						|
  static uint32_t MaxShutdownIOLag() {
 | 
						|
    return StaticPrefs::browser_cache_max_shutdown_io_lag();
 | 
						|
  }
 | 
						|
  static bool IsPastShutdownIOLag();
 | 
						|
 | 
						|
  static bool ShuttingDown() {
 | 
						|
    return sShutdownDemandedTime != PR_INTERVAL_NO_TIMEOUT;
 | 
						|
  }
 | 
						|
 | 
						|
 private:
 | 
						|
  static StaticRefPtr<CacheObserver> sSelf;
 | 
						|
 | 
						|
  void StoreCacheFSReported();
 | 
						|
  void StoreHashStatsReported();
 | 
						|
  void StoreCacheAmountWritten();
 | 
						|
  void AttachToPreferences();
 | 
						|
 | 
						|
  static int32_t sAutoMemoryCacheCapacity;
 | 
						|
  static Atomic<uint32_t, Relaxed> sSmartDiskCacheCapacity;
 | 
						|
  static float sHalfLifeHours;
 | 
						|
  static bool sCacheFSReported;
 | 
						|
  static bool sHashStatsReported;
 | 
						|
  static Atomic<PRIntervalTime> sShutdownDemandedTime;
 | 
						|
  static Atomic<uint32_t, Relaxed> sCacheAmountWritten;
 | 
						|
 | 
						|
  // Non static properties, accessible via sSelf
 | 
						|
  nsCOMPtr<nsIFile> mCacheParentDirectoryOverride;
 | 
						|
};
 | 
						|
 | 
						|
}  // namespace net
 | 
						|
}  // namespace mozilla
 | 
						|
 | 
						|
#endif
 |