• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
GetInstance()22   static ExtensionCacheNullImpl* GetInstance() {
23     return Singleton<ExtensionCacheNullImpl>::get();
24   }
25 
26   // Implementation of ExtensionCache.
Start(const base::Closure & callback)27   virtual void Start(const base::Closure& callback) OVERRIDE {
28     callback.Run();
29   }
30 
Shutdown(const base::Closure & callback)31   virtual void Shutdown(const base::Closure& callback) OVERRIDE {
32     callback.Run();
33   }
34 
AllowCaching(const std::string & id)35   virtual void AllowCaching(const std::string& id) OVERRIDE {
36   }
37 
GetExtension(const std::string & id,base::FilePath * file_path,std::string * version)38   virtual bool GetExtension(const std::string& id,
39                             base::FilePath* file_path,
40                             std::string* version) OVERRIDE {
41     return false;
42   }
43 
PutExtension(const std::string & id,const base::FilePath & file_path,const std::string & version,const PutExtensionCallback & callback)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 
ExtensionCacheNullImpl()54   ExtensionCacheNullImpl() {}
~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
GetInstance()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
SetForTesting(ExtensionCache * cache)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