1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file.
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/extensions/extension_garbage_collector_factory.h"
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/memory/singleton.h"
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/extensions/extension_garbage_collector.h"
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/extensions/extension_system_factory.h"
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/extensions/install_tracker_factory.h"
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/keyed_service/content/browser_context_dependency_manager.h"
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "extensions/browser/extensions_browser_client.h"
13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_CHROMEOS)
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/extensions/extension_garbage_collector_chromeos.h"
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace extensions {
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// static
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochExtensionGarbageCollector*
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochExtensionGarbageCollectorFactory::GetForBrowserContext(
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    content::BrowserContext* context) {
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return static_cast<ExtensionGarbageCollector*>(
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetInstance()->GetServiceForBrowserContext(context, true));
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// static
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochExtensionGarbageCollectorFactory*
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochExtensionGarbageCollectorFactory::GetInstance() {
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return Singleton<ExtensionGarbageCollectorFactory>::get();
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochExtensionGarbageCollectorFactory::ExtensionGarbageCollectorFactory()
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    : BrowserContextKeyedServiceFactory(
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          "ExtensionGarbageCollector",
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          BrowserContextDependencyManager::GetInstance()) {
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory());
39  DependsOn(InstallTrackerFactory::GetInstance());
40}
41
42ExtensionGarbageCollectorFactory::~ExtensionGarbageCollectorFactory() {}
43
44// static
45KeyedService* ExtensionGarbageCollectorFactory::BuildInstanceFor(
46    content::BrowserContext* context) {
47#if defined(OS_CHROMEOS)
48  return new ExtensionGarbageCollectorChromeOS(context);
49#else
50  return new ExtensionGarbageCollector(context);
51#endif
52}
53
54KeyedService* ExtensionGarbageCollectorFactory::BuildServiceInstanceFor(
55    content::BrowserContext* context) const {
56  return BuildInstanceFor(context);
57}
58
59bool ExtensionGarbageCollectorFactory::ServiceIsCreatedWithBrowserContext()
60    const {
61  return true;
62}
63
64bool ExtensionGarbageCollectorFactory::ServiceIsNULLWhileTesting() const {
65  return true;
66}
67
68}  // namespace extensions
69