Upstream version 11.39.266.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / updater / extension_cache.cc
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