1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright (c) 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/extensions/extension_assets_manager.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/memory/singleton.h" 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "extensions/common/extension.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "extensions/common/file_util.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(OS_CHROMEOS) 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/extensions/extension_assets_manager_chromeos.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace extensions { 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace { 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class ExtensionAssetsManagerImpl : public ExtensionAssetsManager { 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static ExtensionAssetsManagerImpl* GetInstance() { 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return Singleton<ExtensionAssetsManagerImpl>::get(); 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Override from ExtensionAssetsManager. 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void InstallExtension(const Extension* extension, 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::FilePath& unpacked_extension_root, 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::FilePath& local_install_dir, 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Profile* profile, 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) InstallExtensionCallback callback) OVERRIDE { 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) callback.Run(file_util::InstallExtension( 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) unpacked_extension_root, 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) extension->id(), 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) extension->VersionString(), 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local_install_dir)); 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void UninstallExtension( 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& id, 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Profile* profile, 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::FilePath& local_install_dir, 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::FilePath& extension_root) OVERRIDE { 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) file_util::UninstallExtension(local_install_dir, id); 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) friend struct DefaultSingletonTraits<ExtensionAssetsManagerImpl>; 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ExtensionAssetsManagerImpl() {} 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~ExtensionAssetsManagerImpl() {} 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ExtensionAssetsManagerImpl); 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// static 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)ExtensionAssetsManager* ExtensionAssetsManager::GetInstance() { 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(OS_CHROMEOS) 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return ExtensionAssetsManagerChromeOS::GetInstance(); 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#else 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // If not Chrome OS, use trivial implementation that doesn't share anything. 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return ExtensionAssetsManagerImpl::GetInstance(); 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // OS_CHROMEOS 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace extensions 67