15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/spellchecker/spellcheck_factory.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/incognito_helpers.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/spellchecker/spellcheck_service.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/locale_settings.h"
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_dependency_manager.h"
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h"
14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "components/user_prefs/user_prefs.h"
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/render_process_host.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)SpellcheckService* SpellcheckServiceFactory::GetForContext(
19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    content::BrowserContext* context) {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return static_cast<SpellcheckService*>(
21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      GetInstance()->GetServiceForBrowserContext(context, true));
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)SpellcheckService* SpellcheckServiceFactory::GetForRenderProcessId(
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    int render_process_id) {
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  content::RenderProcessHost* host =
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      content::RenderProcessHost::FromID(render_process_id);
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (!host)
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return NULL;
31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  content::BrowserContext* context = host->GetBrowserContext();
32d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (!context)
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return NULL;
34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return GetForContext(context);
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SpellcheckServiceFactory* SpellcheckServiceFactory::GetInstance() {
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return Singleton<SpellcheckServiceFactory>::get();
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SpellcheckServiceFactory::SpellcheckServiceFactory()
4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    : BrowserContextKeyedServiceFactory(
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        "SpellcheckService",
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        BrowserContextDependencyManager::GetInstance()) {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(erg): Uncomment these as they are initialized.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // DependsOn(RequestContextFactory::GetInstance());
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SpellcheckServiceFactory::~SpellcheckServiceFactory() {}
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)KeyedService* SpellcheckServiceFactory::BuildServiceInstanceFor(
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    content::BrowserContext* context) const {
54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Many variables are initialized from the |context| in the SpellcheckService.
55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  SpellcheckService* spellcheck = new SpellcheckService(context);
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  PrefService* prefs = user_prefs::UserPrefs::Get(context);
58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  DCHECK(prefs);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Instantiates Metrics object for spellchecking for use.
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  spellcheck->StartRecordingMetrics(
62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      prefs->GetBoolean(prefs::kEnableContinuousSpellcheck));
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return spellcheck;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SpellcheckServiceFactory::RegisterProfilePrefs(
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    user_prefs::PrefRegistrySyncable* user_prefs) {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(estade): IDS_SPELLCHECK_DICTIONARY should be an ASCII string.
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  user_prefs->RegisterLocalizedStringPref(
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kSpellCheckDictionary,
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_SPELLCHECK_DICTIONARY,
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  user_prefs->RegisterBooleanPref(
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      prefs::kSpellCheckUseSpellingService,
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      false,
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  user_prefs->RegisterBooleanPref(
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      prefs::kEnableContinuousSpellcheck,
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      true,
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  user_prefs->RegisterBooleanPref(
83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      prefs::kEnableAutoSpellCorrect,
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      false,
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)content::BrowserContext* SpellcheckServiceFactory::GetBrowserContextToUse(
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    content::BrowserContext* context) const {
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return chrome::GetBrowserContextRedirectedInIncognito(context);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool SpellcheckServiceFactory::ServiceIsNULLWhileTesting() const {
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
96