bookmark_model_factory.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/bookmarks/bookmark_model_factory.h" 6 7#include "base/command_line.h" 8#include "base/deferred_sequenced_task_runner.h" 9#include "base/memory/singleton.h" 10#include "base/values.h" 11#include "chrome/browser/bookmarks/bookmark_model.h" 12#include "chrome/browser/profiles/incognito_helpers.h" 13#include "chrome/browser/profiles/profile.h" 14#include "chrome/browser/profiles/startup_task_runner_service.h" 15#include "chrome/browser/profiles/startup_task_runner_service_factory.h" 16#include "chrome/browser/undo/bookmark_undo_service.h" 17#include "chrome/browser/undo/bookmark_undo_service_factory.h" 18#include "chrome/common/chrome_switches.h" 19#include "chrome/common/pref_names.h" 20#include "components/keyed_service/content/browser_context_dependency_manager.h" 21#include "components/user_prefs/pref_registry_syncable.h" 22 23// static 24BookmarkModel* BookmarkModelFactory::GetForProfile(Profile* profile) { 25 return static_cast<BookmarkModel*>( 26 GetInstance()->GetServiceForBrowserContext(profile, true)); 27} 28 29BookmarkModel* BookmarkModelFactory::GetForProfileIfExists(Profile* profile) { 30 return static_cast<BookmarkModel*>( 31 GetInstance()->GetServiceForBrowserContext(profile, false)); 32} 33 34// static 35BookmarkModelFactory* BookmarkModelFactory::GetInstance() { 36 return Singleton<BookmarkModelFactory>::get(); 37} 38 39BookmarkModelFactory::BookmarkModelFactory() 40 : BrowserContextKeyedServiceFactory( 41 "BookmarkModel", 42 BrowserContextDependencyManager::GetInstance()) { 43} 44 45BookmarkModelFactory::~BookmarkModelFactory() {} 46 47KeyedService* BookmarkModelFactory::BuildServiceInstanceFor( 48 content::BrowserContext* context) const { 49 Profile* profile = static_cast<Profile*>(context); 50 BookmarkModel* bookmark_model = new BookmarkModel(profile); 51 bookmark_model->Load(StartupTaskRunnerServiceFactory::GetForProfile(profile)-> 52 GetBookmarkTaskRunner()); 53#if !defined(OS_ANDROID) 54 if (CommandLine::ForCurrentProcess()->HasSwitch( 55 switches::kEnableBookmarkUndo)) { 56 bookmark_model->AddObserver( 57 BookmarkUndoServiceFactory::GetForProfile(profile)); 58 } 59#endif // !defined(OS_ANDROID) 60 return bookmark_model; 61} 62 63void BookmarkModelFactory::RegisterProfilePrefs( 64 user_prefs::PrefRegistrySyncable* registry) { 65 // Don't sync this, as otherwise, due to a limitation in sync, it 66 // will cause a deadlock (see http://crbug.com/97955). If we truly 67 // want to sync the expanded state of folders, it should be part of 68 // bookmark sync itself (i.e., a property of the sync folder nodes). 69 registry->RegisterListPref(prefs::kBookmarkEditorExpandedNodes, 70 new base::ListValue, 71 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 72} 73 74content::BrowserContext* BookmarkModelFactory::GetBrowserContextToUse( 75 content::BrowserContext* context) const { 76 return chrome::GetBrowserContextRedirectedInIncognito(context); 77} 78 79bool BookmarkModelFactory::ServiceIsNULLWhileTesting() const { 80 return true; 81} 82