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