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