158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chromeos/file_manager/volume_manager_factory.h"
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/basictypes.h"
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/memory/singleton.h"
9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/chromeos/drive/drive_integration_service.h"
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chromeos/file_manager/volume_manager.h"
11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/chromeos/file_system_provider/service_factory.h"
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/profiles/incognito_helpers.h"
1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/profiles/profile.h"
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h"
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chromeos/disks/disk_mount_manager.h"
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_dependency_manager.h"
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace file_manager {
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)VolumeManager* VolumeManagerFactory::Get(content::BrowserContext* context) {
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return static_cast<VolumeManager*>(
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      GetInstance()->GetServiceForBrowserContext(context, true));
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)VolumeManagerFactory* VolumeManagerFactory::GetInstance() {
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return Singleton<VolumeManagerFactory>::get();
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)content::BrowserContext* VolumeManagerFactory::GetBrowserContextToUse(
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    content::BrowserContext* context) const {
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Explicitly allow this manager in guest login mode.
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return chrome::GetBrowserContextOwnInstanceInIncognito(context);
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool VolumeManagerFactory::ServiceIsCreatedWithBrowserContext() const {
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return true;
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool VolumeManagerFactory::ServiceIsNULLWhileTesting() const {
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return true;
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)KeyedService* VolumeManagerFactory::BuildServiceInstanceFor(
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    content::BrowserContext* context) const {
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  Profile* const profile = Profile::FromBrowserContext(context);
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  VolumeManager* instance = new VolumeManager(
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      profile,
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      drive::DriveIntegrationServiceFactory::GetForProfile(profile),
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      chromeos::DBusThreadManager::Get()->GetPowerManagerClient(),
50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      chromeos::disks::DiskMountManager::GetInstance(),
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      chromeos::file_system_provider::ServiceFactory::Get(context));
5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  instance->Initialize();
5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return instance;
5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)VolumeManagerFactory::VolumeManagerFactory()
5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    : BrowserContextKeyedServiceFactory(
5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)          "VolumeManagerFactory",
5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)          BrowserContextDependencyManager::GetInstance()) {
60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  DependsOn(drive::DriveIntegrationServiceFactory::GetInstance());
61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DependsOn(chromeos::file_system_provider::ServiceFactory::GetInstance());
6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)VolumeManagerFactory::~VolumeManagerFactory() {
6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace file_manager
68