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)