Home | History | Annotate | Download | only in updater
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/extensions/updater/extension_cache.h"
      6 
      7 #include "base/memory/singleton.h"
      8 
      9 #if defined(OS_CHROMEOS)
     10 #include "chrome/browser/extensions/updater/extension_cache_impl.h"
     11 #endif  // OS_CHROMEOS
     12 
     13 namespace extensions {
     14 namespace {
     15 
     16 #if !defined(OS_CHROMEOS)
     17 
     18 // Implementation of ExtensionCache that doesn't cache anything.
     19 // Real cache is used only on Chrome OS other OSes use this null implementation.
     20 class ExtensionCacheNullImpl : public ExtensionCache {
     21  public:
     22   static ExtensionCacheNullImpl* GetInstance() {
     23     return Singleton<ExtensionCacheNullImpl>::get();
     24   }
     25 
     26   // Implementation of ExtensionCache.
     27   virtual void Start(const base::Closure& callback) OVERRIDE {
     28     callback.Run();
     29   }
     30 
     31   virtual void Shutdown(const base::Closure& callback) OVERRIDE {
     32     callback.Run();
     33   }
     34 
     35   virtual void AllowCaching(const std::string& id) OVERRIDE {
     36   }
     37 
     38   virtual bool GetExtension(const std::string& id,
     39                             base::FilePath* file_path,
     40                             std::string* version) OVERRIDE {
     41     return false;
     42   }
     43 
     44   virtual void PutExtension(const std::string& id,
     45                             const base::FilePath& file_path,
     46                             const std::string& version,
     47                             const PutExtensionCallback& callback) OVERRIDE {
     48     callback.Run(file_path, true);
     49   }
     50 
     51  private:
     52   friend struct DefaultSingletonTraits<ExtensionCacheNullImpl>;
     53 
     54   ExtensionCacheNullImpl() {}
     55   virtual ~ExtensionCacheNullImpl() {}
     56 };
     57 
     58 #endif  // !OS_CHROMEOS
     59 
     60 static ExtensionCache* g_extension_cache_override = NULL;
     61 
     62 }  // namespace
     63 
     64 // static
     65 ExtensionCache* ExtensionCache::GetInstance() {
     66   if (g_extension_cache_override) {
     67     return g_extension_cache_override;
     68   } else {
     69 #if defined(OS_CHROMEOS)
     70     return ExtensionCacheImpl::GetInstance();
     71 #else
     72     return ExtensionCacheNullImpl::GetInstance();
     73 #endif
     74   }
     75 }
     76 
     77 // static
     78 ExtensionCache* ExtensionCache::SetForTesting(ExtensionCache* cache) {
     79   ExtensionCache* temp = g_extension_cache_override;
     80   g_extension_cache_override = cache;
     81   return temp;
     82 }
     83 
     84 }  // namespace extensions
     85