bookmark_model_factory.cc revision 010d83a9304c5a91596085d917d248abff47903a
183109aa23599e63402ee03cd93f67d3ff874e241Hui Shu// Copyright (c) 2012 The Chromium Authors. All rights reserved. 283109aa23599e63402ee03cd93f67d3ff874e241Hui Shu// Use of this source code is governed by a BSD-style license that can be 383109aa23599e63402ee03cd93f67d3ff874e241Hui Shu// found in the LICENSE file. 483109aa23599e63402ee03cd93f67d3ff874e241Hui Shu 583109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "chrome/browser/bookmarks/bookmark_model_factory.h" 683109aa23599e63402ee03cd93f67d3ff874e241Hui Shu 783109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "base/command_line.h" 883109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "base/deferred_sequenced_task_runner.h" 983109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "base/memory/singleton.h" 1083109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "base/prefs/pref_service.h" 1183109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "base/values.h" 1283109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "chrome/browser/bookmarks/chrome_bookmark_client.h" 1383109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "chrome/browser/omnibox/omnibox_field_trial.h" 1483109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "chrome/browser/profiles/incognito_helpers.h" 1583109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "chrome/browser/profiles/profile.h" 1683109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "chrome/browser/profiles/startup_task_runner_service.h" 1783109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "chrome/browser/profiles/startup_task_runner_service_factory.h" 1883109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "chrome/browser/undo/bookmark_undo_service.h" 1983109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "chrome/browser/undo/bookmark_undo_service_factory.h" 2083109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "chrome/common/chrome_switches.h" 2183109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "chrome/common/pref_names.h" 2283109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "components/bookmarks/core/browser/bookmark_model.h" 2383109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "components/bookmarks/core/common/bookmark_pref_names.h" 2483109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "components/keyed_service/content/browser_context_dependency_manager.h" 2583109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "components/user_prefs/pref_registry_syncable.h" 2683109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#include "content/public/browser/browser_thread.h" 2783109aa23599e63402ee03cd93f67d3ff874e241Hui Shu 2883109aa23599e63402ee03cd93f67d3ff874e241Hui Shu// static 2983109aa23599e63402ee03cd93f67d3ff874e241Hui ShuBookmarkModel* BookmarkModelFactory::GetForProfile(Profile* profile) { 3083109aa23599e63402ee03cd93f67d3ff874e241Hui Shu ChromeBookmarkClient* bookmark_client = static_cast<ChromeBookmarkClient*>( 3183109aa23599e63402ee03cd93f67d3ff874e241Hui Shu GetInstance()->GetServiceForBrowserContext(profile, true)); 3283109aa23599e63402ee03cd93f67d3ff874e241Hui Shu return bookmark_client ? bookmark_client->model() : NULL; 3383109aa23599e63402ee03cd93f67d3ff874e241Hui Shu} 3483109aa23599e63402ee03cd93f67d3ff874e241Hui Shu 3583109aa23599e63402ee03cd93f67d3ff874e241Hui ShuBookmarkModel* BookmarkModelFactory::GetForProfileIfExists(Profile* profile) { 3683109aa23599e63402ee03cd93f67d3ff874e241Hui Shu ChromeBookmarkClient* bookmark_client = static_cast<ChromeBookmarkClient*>( 3783109aa23599e63402ee03cd93f67d3ff874e241Hui Shu GetInstance()->GetServiceForBrowserContext(profile, false)); 3883109aa23599e63402ee03cd93f67d3ff874e241Hui Shu return bookmark_client ? bookmark_client->model() : NULL; 3983109aa23599e63402ee03cd93f67d3ff874e241Hui Shu} 4083109aa23599e63402ee03cd93f67d3ff874e241Hui Shu 4183109aa23599e63402ee03cd93f67d3ff874e241Hui Shu// static 4283109aa23599e63402ee03cd93f67d3ff874e241Hui ShuBookmarkModelFactory* BookmarkModelFactory::GetInstance() { 4383109aa23599e63402ee03cd93f67d3ff874e241Hui Shu return Singleton<BookmarkModelFactory>::get(); 4483109aa23599e63402ee03cd93f67d3ff874e241Hui Shu} 4583109aa23599e63402ee03cd93f67d3ff874e241Hui Shu 4683109aa23599e63402ee03cd93f67d3ff874e241Hui ShuBookmarkModelFactory::BookmarkModelFactory() 4783109aa23599e63402ee03cd93f67d3ff874e241Hui Shu : BrowserContextKeyedServiceFactory( 4883109aa23599e63402ee03cd93f67d3ff874e241Hui Shu "BookmarkModel", 4983109aa23599e63402ee03cd93f67d3ff874e241Hui Shu BrowserContextDependencyManager::GetInstance()) { 5083109aa23599e63402ee03cd93f67d3ff874e241Hui Shu} 5183109aa23599e63402ee03cd93f67d3ff874e241Hui Shu 5283109aa23599e63402ee03cd93f67d3ff874e241Hui ShuBookmarkModelFactory::~BookmarkModelFactory() {} 5383109aa23599e63402ee03cd93f67d3ff874e241Hui Shu 5483109aa23599e63402ee03cd93f67d3ff874e241Hui ShuKeyedService* BookmarkModelFactory::BuildServiceInstanceFor( 5583109aa23599e63402ee03cd93f67d3ff874e241Hui Shu content::BrowserContext* context) const { 5683109aa23599e63402ee03cd93f67d3ff874e241Hui Shu Profile* profile = static_cast<Profile*>(context); 5783109aa23599e63402ee03cd93f67d3ff874e241Hui Shu ChromeBookmarkClient* bookmark_client = new ChromeBookmarkClient( 5883109aa23599e63402ee03cd93f67d3ff874e241Hui Shu profile, OmniboxFieldTrial::BookmarksIndexURLsValue()); 5983109aa23599e63402ee03cd93f67d3ff874e241Hui Shu bookmark_client->model()->Load( 6083109aa23599e63402ee03cd93f67d3ff874e241Hui Shu profile->GetPrefs(), 6183109aa23599e63402ee03cd93f67d3ff874e241Hui Shu profile->GetPrefs()->GetString(prefs::kAcceptLanguages), 6283109aa23599e63402ee03cd93f67d3ff874e241Hui Shu profile->GetPath(), 6383109aa23599e63402ee03cd93f67d3ff874e241Hui Shu StartupTaskRunnerServiceFactory::GetForProfile(profile) 6483109aa23599e63402ee03cd93f67d3ff874e241Hui Shu ->GetBookmarkTaskRunner(), 6583109aa23599e63402ee03cd93f67d3ff874e241Hui Shu content::BrowserThread::GetMessageLoopProxyForThread( 6683109aa23599e63402ee03cd93f67d3ff874e241Hui Shu content::BrowserThread::UI)); 6783109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#if !defined(OS_ANDROID) 6883109aa23599e63402ee03cd93f67d3ff874e241Hui Shu bool register_bookmark_undo_service_as_observer = true; 6983109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#if !defined(OS_IOS) 7083109aa23599e63402ee03cd93f67d3ff874e241Hui Shu register_bookmark_undo_service_as_observer = 7183109aa23599e63402ee03cd93f67d3ff874e241Hui Shu CommandLine::ForCurrentProcess()->HasSwitch( 7283109aa23599e63402ee03cd93f67d3ff874e241Hui Shu switches::kEnableBookmarkUndo); 7383109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#endif // !defined(OS_IOS) 7483109aa23599e63402ee03cd93f67d3ff874e241Hui Shu if (register_bookmark_undo_service_as_observer) { 7583109aa23599e63402ee03cd93f67d3ff874e241Hui Shu bookmark_client->model()->AddObserver( 7683109aa23599e63402ee03cd93f67d3ff874e241Hui Shu BookmarkUndoServiceFactory::GetForProfile(profile)); 7783109aa23599e63402ee03cd93f67d3ff874e241Hui Shu } 7883109aa23599e63402ee03cd93f67d3ff874e241Hui Shu#endif // !defined(OS_ANDROID) 7983109aa23599e63402ee03cd93f67d3ff874e241Hui Shu return bookmark_client; 8083109aa23599e63402ee03cd93f67d3ff874e241Hui Shu} 8183109aa23599e63402ee03cd93f67d3ff874e241Hui Shu 8283109aa23599e63402ee03cd93f67d3ff874e241Hui Shuvoid BookmarkModelFactory::RegisterProfilePrefs( 8383109aa23599e63402ee03cd93f67d3ff874e241Hui Shu user_prefs::PrefRegistrySyncable* registry) { 8483109aa23599e63402ee03cd93f67d3ff874e241Hui Shu // Don't sync this, as otherwise, due to a limitation in sync, it 8583109aa23599e63402ee03cd93f67d3ff874e241Hui Shu // will cause a deadlock (see http://crbug.com/97955). If we truly 8683109aa23599e63402ee03cd93f67d3ff874e241Hui Shu // want to sync the expanded state of folders, it should be part of 8783109aa23599e63402ee03cd93f67d3ff874e241Hui Shu // bookmark sync itself (i.e., a property of the sync folder nodes). 8883109aa23599e63402ee03cd93f67d3ff874e241Hui Shu registry->RegisterListPref(prefs::kBookmarkEditorExpandedNodes, 8983109aa23599e63402ee03cd93f67d3ff874e241Hui Shu new base::ListValue, 90 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 91} 92 93content::BrowserContext* BookmarkModelFactory::GetBrowserContextToUse( 94 content::BrowserContext* context) const { 95 return chrome::GetBrowserContextRedirectedInIncognito(context); 96} 97 98bool BookmarkModelFactory::ServiceIsNULLWhileTesting() const { 99 return true; 100} 101