bookmark_model_factory.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright (c) 2012 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) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h" 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/command_line.h" 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/deferred_sequenced_task_runner.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/memory/singleton.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/values.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/profiles/incognito_helpers.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/profiles/startup_task_runner_service.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/profiles/startup_task_runner_service_factory.h" 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/undo/bookmark_undo_service.h" 176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "chrome/browser/undo/bookmark_undo_service_factory.h" 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/common/chrome_switches.h" 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/common/pref_names.h" 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_dependency_manager.h" 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/user_prefs/pref_registry_syncable.h" 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// static 24116680a4aac90f2aa7413d9095a592090648e557Ben MurdochBookmarkModel* BookmarkModelFactory::GetForProfile(Profile* profile) { 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return static_cast<BookmarkModel*>( 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetInstance()->GetServiceForBrowserContext(profile, true)); 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)BookmarkModel* BookmarkModelFactory::GetForProfileIfExists(Profile* profile) { 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return static_cast<BookmarkModel*>( 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetInstance()->GetServiceForBrowserContext(profile, false)); 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// static 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)BookmarkModelFactory* BookmarkModelFactory::GetInstance() { 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return Singleton<BookmarkModelFactory>::get(); 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 39116680a4aac90f2aa7413d9095a592090648e557Ben MurdochBookmarkModelFactory::BookmarkModelFactory() 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : BrowserContextKeyedServiceFactory( 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "BookmarkModel", 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BrowserContextDependencyManager::GetInstance()) { 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)BookmarkModelFactory::~BookmarkModelFactory() {} 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)BrowserContextKeyedService* BookmarkModelFactory::BuildServiceInstanceFor( 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::BrowserContext* context) const { 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Profile* profile = static_cast<Profile*>(context); 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) BookmarkModel* bookmark_model = new BookmarkModel(profile); 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bookmark_model->Load(StartupTaskRunnerServiceFactory::GetForProfile(profile)-> 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetBookmarkTaskRunner()); 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if !defined(OS_ANDROID) 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch( 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) switches::kEnableBookmarkUndo)) { 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bookmark_model->AddObserver( 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BookmarkUndoServiceFactory::GetForProfile(profile)); 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif // !defined(OS_ANDROID) 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return bookmark_model; 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void BookmarkModelFactory::RegisterProfilePrefs( 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) user_prefs::PrefRegistrySyncable* registry) { 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Don't sync this, as otherwise, due to a limitation in sync, it 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // will cause a deadlock (see http://crbug.com/97955). If we truly 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // want to sync the expanded state of folders, it should be part of 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // bookmark sync itself (i.e., a property of the sync folder nodes). 696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) registry->RegisterListPref(prefs::kBookmarkEditorExpandedNodes, 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new base::ListValue, 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)content::BrowserContext* BookmarkModelFactory::GetBrowserContextToUse( 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::BrowserContext* context) const { 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return chrome::GetBrowserContextRedirectedInIncognito(context); 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool BookmarkModelFactory::ServiceIsNULLWhileTesting() const { 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)