bookmark_model_factory.cc revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/command_line.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/deferred_sequenced_task_runner.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/singleton.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/prefs/pref_service.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/values.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/bookmarks/chrome_bookmark_client.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/omnibox/omnibox_field_trial.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/incognito_helpers.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/startup_task_runner_service.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/startup_task_runner_service_factory.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/undo/bookmark_undo_service.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/undo/bookmark_undo_service_factory.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/pref_names.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/bookmarks/core/browser/bookmark_model.h" 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/bookmarks/core/common/bookmark_pref_names.h" 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/keyed_service/content/browser_context_dependency_manager.h" 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/user_prefs/pref_registry_syncable.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)BookmarkModel* BookmarkModelFactory::GetForProfile(Profile* profile) { 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ChromeBookmarkClient* bookmark_client = static_cast<ChromeBookmarkClient*>( 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetInstance()->GetServiceForBrowserContext(profile, true)); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return bookmark_client ? bookmark_client->model() : NULL; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 34 35BookmarkModel* BookmarkModelFactory::GetForProfileIfExists(Profile* profile) { 36 ChromeBookmarkClient* bookmark_client = static_cast<ChromeBookmarkClient*>( 37 GetInstance()->GetServiceForBrowserContext(profile, false)); 38 return bookmark_client ? bookmark_client->model() : NULL; 39} 40 41// static 42BookmarkModelFactory* BookmarkModelFactory::GetInstance() { 43 return Singleton<BookmarkModelFactory>::get(); 44} 45 46BookmarkModelFactory::BookmarkModelFactory() 47 : BrowserContextKeyedServiceFactory( 48 "BookmarkModel", 49 BrowserContextDependencyManager::GetInstance()) { 50} 51 52BookmarkModelFactory::~BookmarkModelFactory() {} 53 54KeyedService* BookmarkModelFactory::BuildServiceInstanceFor( 55 content::BrowserContext* context) const { 56 Profile* profile = static_cast<Profile*>(context); 57 ChromeBookmarkClient* bookmark_client = new ChromeBookmarkClient( 58 profile, OmniboxFieldTrial::BookmarksIndexURLsValue()); 59 bookmark_client->model()->Load( 60 profile->GetPrefs(), 61 profile->GetPrefs()->GetString(prefs::kAcceptLanguages), 62 profile->GetPath(), 63 StartupTaskRunnerServiceFactory::GetForProfile(profile) 64 ->GetBookmarkTaskRunner(), 65 content::BrowserThread::GetMessageLoopProxyForThread( 66 content::BrowserThread::UI)); 67#if !defined(OS_ANDROID) 68 if (CommandLine::ForCurrentProcess()->HasSwitch( 69 switches::kEnableBookmarkUndo)) { 70 bookmark_client->model()->AddObserver( 71 BookmarkUndoServiceFactory::GetForProfile(profile)); 72 } 73#endif // !defined(OS_ANDROID) 74 return bookmark_client; 75} 76 77void BookmarkModelFactory::RegisterProfilePrefs( 78 user_prefs::PrefRegistrySyncable* registry) { 79 // Don't sync this, as otherwise, due to a limitation in sync, it 80 // will cause a deadlock (see http://crbug.com/97955). If we truly 81 // want to sync the expanded state of folders, it should be part of 82 // bookmark sync itself (i.e., a property of the sync folder nodes). 83 registry->RegisterListPref(prefs::kBookmarkEditorExpandedNodes, 84 new base::ListValue, 85 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 86} 87 88content::BrowserContext* BookmarkModelFactory::GetBrowserContextToUse( 89 content::BrowserContext* context) const { 90 return chrome::GetBrowserContextRedirectedInIncognito(context); 91} 92 93bool BookmarkModelFactory::ServiceIsNULLWhileTesting() const { 94 return true; 95} 96