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#ifndef CHROME_BROWSER_EXTENSIONS_UPDATER_EXTENSION_CACHE_IMPL_H_ 6#define CHROME_BROWSER_EXTENSIONS_UPDATER_EXTENSION_CACHE_IMPL_H_ 7 8#include <set> 9#include <string> 10#include <vector> 11 12#include "base/callback_forward.h" 13#include "base/files/file_path.h" 14#include "base/memory/scoped_ptr.h" 15#include "base/memory/weak_ptr.h" 16#include "chrome/browser/extensions/updater/extension_cache.h" 17#include "content/public/browser/notification_observer.h" 18#include "content/public/browser/notification_registrar.h" 19 20template <typename T> struct DefaultSingletonTraits; 21 22namespace extensions { 23 24class LocalExtensionCache; 25 26// Singleton call that caches extensions .crx files to share them between 27// multiple users and profiles on the machine. 28class ExtensionCacheImpl : public ExtensionCache, 29 public content::NotificationObserver { 30 public: 31 static ExtensionCacheImpl* GetInstance(); 32 33 // Implementation of ExtensionCache. 34 virtual void Start(const base::Closure& callback) OVERRIDE; 35 virtual void Shutdown(const base::Closure& callback) OVERRIDE; 36 virtual void AllowCaching(const std::string& id) OVERRIDE; 37 virtual bool GetExtension(const std::string& id, 38 base::FilePath* file_path, 39 std::string* version) OVERRIDE; 40 virtual void PutExtension(const std::string& id, 41 const base::FilePath& file_path, 42 const std::string& version, 43 const PutExtensionCallback& callback) OVERRIDE; 44 45 // Implementation of content::NotificationObserver: 46 virtual void Observe(int type, 47 const content::NotificationSource& source, 48 const content::NotificationDetails& details) OVERRIDE; 49 50 private: 51 friend struct DefaultSingletonTraits<ExtensionCacheImpl>; 52 53 ExtensionCacheImpl(); 54 virtual ~ExtensionCacheImpl(); 55 56 // Callback that is called when local cache is ready. 57 void OnCacheInitialized(); 58 59 // Weak factory for callbacks. 60 base::WeakPtrFactory<ExtensionCacheImpl> weak_ptr_factory_; 61 62 // Cache implementation that uses local cache dir. 63 scoped_ptr<LocalExtensionCache> cache_; 64 65 // Set of extensions that can be cached. 66 std::set<std::string> allowed_extensions_; 67 68 // List of callbacks that should be called when the cache is ready. 69 std::vector<base::Closure> init_callbacks_; 70 71 // Observes failures to install CRX files. 72 content::NotificationRegistrar notification_registrar_; 73 74 DISALLOW_COPY_AND_ASSIGN(ExtensionCacheImpl); 75}; 76 77} // namespace extensions 78 79#endif // CHROME_BROWSER_EXTENSIONS_UPDATER_EXTENSION_CACHE_IMPL_H_ 80