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