text: // Copyright 2015 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  #include "chrome/browser/extensions/updater/chromeos_extension_cache_delegate.h"
  
  #include <stddef.h>
  
  #include "ash/constants/ash_paths.h"
  #include "base/path_service.h"
  #include "chrome/browser/ash/settings/cros_settings.h"
  #include "chromeos/settings/cros_settings_names.h"
  
  namespace extensions {
  
  ChromeOSExtensionCacheDelegate::ChromeOSExtensionCacheDelegate()
      : cache_dir_(base::PathService::CheckedGet(
            chromeos::DIR_DEVICE_EXTENSION_LOCAL_CACHE)) {}
  
  ChromeOSExtensionCacheDelegate::ChromeOSExtensionCacheDelegate(
      const base::FilePath& cache_dir)
      : cache_dir_(cache_dir) {}
  
  const base::FilePath& ChromeOSExtensionCacheDelegate::GetCacheDir() const {
    return cache_dir_;
  }
  
  size_t ChromeOSExtensionCacheDelegate::GetMinimumCacheSize() const {
    // Default minimum size of local cache on disk, in bytes.
    static constexpr int kDefaultMinimumCacheSize = 1024 * 1024;
    return kDefaultMinimumCacheSize;
  }
  
  size_t ChromeOSExtensionCacheDelegate::GetMaximumCacheSize() const {
    // Default maximum size of local cache on disk, in bytes.
    static constexpr size_t kDefaultCacheSizeLimit = 256 * 1024 * 1024;
  
    size_t max_size = kDefaultCacheSizeLimit;
    int policy_size = 0;
    if (chromeos::CrosSettings::Get()->GetInteger(chromeos::kExtensionCacheSize,
                                                  &policy_size) &&
        policy_size >= static_cast<int>(GetMinimumCacheSize())) {
      max_size = policy_size;
    }
    return max_size;
  }
  
  base::TimeDelta ChromeOSExtensionCacheDelegate::GetMaximumCacheAge() const {
    // Maximum age of unused extensions in the cache.
    static constexpr base::TimeDelta kMaxCacheAge = base::TimeDelta::FromDays(30);
    return kMaxCacheAge;
  }
  
  }  // namespace extensions
  