15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file.
490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/command_line.h"
690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/prefs/pref_service.h"
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_dependency_manager.h"
8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "content/public/browser/browser_context.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_pref_value_map.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_pref_value_map_factory.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_prefs.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_prefs_factory.h"
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/extensions_browser_client.h"
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "extensions/common/constants.h"
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace extensions {
1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// static
19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)ExtensionPrefs* ExtensionPrefsFactory::GetForBrowserContext(
20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    content::BrowserContext* context) {
2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return static_cast<ExtensionPrefs*>(
22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      GetInstance()->GetServiceForBrowserContext(context, true));
2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// static
2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)ExtensionPrefsFactory* ExtensionPrefsFactory::GetInstance() {
2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return Singleton<ExtensionPrefsFactory>::get();
2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ExtensionPrefsFactory::SetInstanceForTesting(
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    content::BrowserContext* context, ExtensionPrefs* prefs) {
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  Associate(context, prefs);
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)ExtensionPrefsFactory::ExtensionPrefsFactory()
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    : BrowserContextKeyedServiceFactory(
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          "ExtensionPrefs",
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          BrowserContextDependencyManager::GetInstance()) {
3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)ExtensionPrefsFactory::~ExtensionPrefsFactory() {
4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)KeyedService* ExtensionPrefsFactory::BuildServiceInstanceFor(
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    content::BrowserContext* context) const {
46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ExtensionsBrowserClient* client = ExtensionsBrowserClient::Get();
47e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  std::vector<ExtensionPrefsObserver*> prefs_observers;
48e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  client->GetEarlyExtensionPrefsObservers(context, &prefs_observers);
4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return ExtensionPrefs::Create(
50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      client->GetPrefServiceForContext(context),
51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      context->GetPath().AppendASCII(extensions::kInstallDirectoryName),
52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      ExtensionPrefValueMapFactory::GetForBrowserContext(context),
53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      client->CreateAppSorting().Pass(),
54e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      client->AreExtensionsDisabled(*CommandLine::ForCurrentProcess(), context),
55e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      prefs_observers);
5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)content::BrowserContext* ExtensionPrefsFactory::GetBrowserContextToUse(
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    content::BrowserContext* context) const {
60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return ExtensionsBrowserClient::Get()->GetOriginalContext(context);
6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}  // namespace extensions
64