Commit a819220a authored by Nicolas Ouellet-payeur's avatar Nicolas Ouellet-payeur Committed by Commit Bot

Add LanguageModelManager

This will be a KeyedService that could be used manage multiple LanguageModel objects (which are
not KeyedServices anymore).

This also gives us a place to put per-profile initialization logic for Translate.

Bug: 855192
Cq-Include-Trybots: luci.chromium.try:ios-simulator-full-configs;master.tryserver.chromium.mac:ios-simulator-cronet
Change-Id: If048ddcaacc91ae5b58a14d66020d5fe4db7d50f
Reviewed-on: https://chromium-review.googlesource.com/1121036Reviewed-by: default avatarMichael Martis <martis@chromium.org>
Reviewed-by: default avatarAvi Drissman <avi@chromium.org>
Reviewed-by: default avatarDavid Roger <droger@chromium.org>
Reviewed-by: default avatarToni Barzic <tbarzic@chromium.org>
Reviewed-by: default avatarMike Dougherty <michaeldo@chromium.org>
Reviewed-by: default avatarTheresa <twellington@chromium.org>
Commit-Queue: Nicolas Ouellet-Payeur <nicolaso@chromium.org>
Cr-Commit-Position: refs/heads/master@{#573377}
parent c5c6cbc1
...@@ -627,8 +627,8 @@ jumbo_split_static_library("browser") { ...@@ -627,8 +627,8 @@ jumbo_split_static_library("browser") {
"io_thread.h", "io_thread.h",
"language/chrome_language_detection_tab_helper.cc", "language/chrome_language_detection_tab_helper.cc",
"language/chrome_language_detection_tab_helper.h", "language/chrome_language_detection_tab_helper.h",
"language/language_model_factory.cc", "language/language_model_manager_factory.cc",
"language/language_model_factory.h", "language/language_model_manager_factory.h",
"language/url_language_histogram_factory.cc", "language/url_language_histogram_factory.cc",
"language/url_language_histogram_factory.h", "language/url_language_histogram_factory.h",
"lifetime/application_lifetime.cc", "lifetime/application_lifetime.cc",
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
#include "chrome/browser/android/contextualsearch/contextual_search_field_trial.h" #include "chrome/browser/android/contextualsearch/contextual_search_field_trial.h"
#include "chrome/browser/android/contextualsearch/resolved_search_term.h" #include "chrome/browser/android/contextualsearch/resolved_search_term.h"
#include "chrome/browser/android/proto/client_discourse_context.pb.h" #include "chrome/browser/android/proto/client_discourse_context.pb.h"
#include "chrome/browser/language/language_model_factory.h" #include "chrome/browser/language/language_model_manager_factory.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/sync/profile_sync_service_factory.h" #include "chrome/browser/sync/profile_sync_service_factory.h"
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include "chrome/common/pref_names.h" #include "chrome/common/pref_names.h"
#include "components/browser_sync/profile_sync_service.h" #include "components/browser_sync/profile_sync_service.h"
#include "components/language/core/browser/language_model.h" #include "components/language/core/browser/language_model.h"
#include "components/language/core/browser/language_model_manager.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
#include "components/search_engines/template_url_service.h" #include "components/search_engines/template_url_service.h"
#include "components/variations/net/variations_http_headers.h" #include "components/variations/net/variations_http_headers.h"
...@@ -394,7 +395,8 @@ std::string ContextualSearchDelegate::GetTargetLanguage() { ...@@ -394,7 +395,8 @@ std::string ContextualSearchDelegate::GetTargetLanguage() {
Profile* profile = ProfileManager::GetActiveUserProfile(); Profile* profile = ProfileManager::GetActiveUserProfile();
PrefService* pref_service = profile->GetPrefs(); PrefService* pref_service = profile->GetPrefs();
language::LanguageModel* language_model = language::LanguageModel* language_model =
LanguageModelFactory::GetForBrowserContext(profile); LanguageModelManagerFactory::GetForBrowserContext(profile)
->GetDefaultModel();
std::string result = std::string result =
TranslateService::GetTargetLanguage(pref_service, language_model); TranslateService::GetTargetLanguage(pref_service, language_model);
DCHECK(!result.empty()); DCHECK(!result.empty());
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/extensions/api/language_settings_private/language_settings_private_delegate.h" #include "chrome/browser/extensions/api/language_settings_private/language_settings_private_delegate.h"
#include "chrome/browser/extensions/api/language_settings_private/language_settings_private_delegate_factory.h" #include "chrome/browser/extensions/api/language_settings_private/language_settings_private_delegate_factory.h"
#include "chrome/browser/language/language_model_factory.h" #include "chrome/browser/language/language_model_manager_factory.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/spellchecker/spellcheck_factory.h" #include "chrome/browser/spellchecker/spellcheck_factory.h"
#include "chrome/browser/spellchecker/spellcheck_service.h" #include "chrome/browser/spellchecker/spellcheck_service.h"
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
#include "chrome/browser/translate/translate_service.h" #include "chrome/browser/translate/translate_service.h"
#include "chrome/common/extensions/api/language_settings_private.h" #include "chrome/common/extensions/api/language_settings_private.h"
#include "chrome/common/pref_names.h" #include "chrome/common/pref_names.h"
#include "components/language/core/browser/language_model.h" #include "components/language/core/browser/language_model_manager.h"
#include "components/language/core/common/locale_util.h" #include "components/language/core/common/locale_util.h"
#include "components/spellcheck/common/spellcheck_common.h" #include "components/spellcheck/common/spellcheck_common.h"
#include "components/translate/core/browser/translate_download_manager.h" #include "components/translate/core/browser/translate_download_manager.h"
...@@ -531,7 +531,8 @@ ExtensionFunction::ResponseAction ...@@ -531,7 +531,8 @@ ExtensionFunction::ResponseAction
LanguageSettingsPrivateGetTranslateTargetLanguageFunction::Run() { LanguageSettingsPrivateGetTranslateTargetLanguageFunction::Run() {
Profile* profile = chrome_details_.GetProfile(); Profile* profile = chrome_details_.GetProfile();
language::LanguageModel* language_model = language::LanguageModel* language_model =
LanguageModelFactory::GetForBrowserContext(profile); LanguageModelManagerFactory::GetForBrowserContext(profile)
->GetDefaultModel();
return RespondNow(OneArgument( return RespondNow(OneArgument(
std::make_unique<base::Value>(TranslateService::GetTargetLanguage( std::make_unique<base::Value>(TranslateService::GetTargetLanguage(
profile->GetPrefs(), language_model)))); profile->GetPrefs(), language_model))));
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "chrome/browser/language/language_model_factory.h" #include "chrome/browser/language/language_model_manager_factory.h"
#include "base/feature_list.h" #include "base/feature_list.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
...@@ -15,59 +15,73 @@ ...@@ -15,59 +15,73 @@
#include "components/language/content/browser/geo_language_provider.h" #include "components/language/content/browser/geo_language_provider.h"
#include "components/language/core/browser/baseline_language_model.h" #include "components/language/core/browser/baseline_language_model.h"
#include "components/language/core/browser/heuristic_language_model.h" #include "components/language/core/browser/heuristic_language_model.h"
#include "components/language/core/browser/language_model_manager.h"
#include "components/language/core/browser/pref_names.h" #include "components/language/core/browser/pref_names.h"
#include "components/language/core/common/language_experiments.h" #include "components/language/core/common/language_experiments.h"
#include "components/pref_registry/pref_registry_syncable.h" #include "components/pref_registry/pref_registry_syncable.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
// static namespace {
LanguageModelFactory* LanguageModelFactory::GetInstance() {
return base::Singleton<LanguageModelFactory>::get();
}
// static
language::LanguageModel* LanguageModelFactory::GetForBrowserContext(
content::BrowserContext* const browser_context) {
return static_cast<language::LanguageModel*>(
GetInstance()->GetServiceForBrowserContext(browser_context, true));
}
LanguageModelFactory::LanguageModelFactory() std::unique_ptr<language::LanguageModel> BuildDefaultLanguageModelFor(
: BrowserContextKeyedServiceFactory( Profile* const profile) {
"LanguageModel",
BrowserContextDependencyManager::GetInstance()) {}
LanguageModelFactory::~LanguageModelFactory() {}
KeyedService* LanguageModelFactory::BuildServiceInstanceFor(
content::BrowserContext* const browser_context) const {
language::OverrideLanguageModel override_model_mode = language::OverrideLanguageModel override_model_mode =
language::GetOverrideLanguageModel(); language::GetOverrideLanguageModel();
Profile* const profile = Profile::FromBrowserContext(browser_context);
if (override_model_mode == language::OverrideLanguageModel::HEURISTIC) { if (override_model_mode == language::OverrideLanguageModel::HEURISTIC) {
return new language::HeuristicLanguageModel( return std::make_unique<language::HeuristicLanguageModel>(
profile->GetPrefs(), g_browser_process->GetApplicationLocale(), profile->GetPrefs(), g_browser_process->GetApplicationLocale(),
prefs::kAcceptLanguages, language::prefs::kUserLanguageProfile); prefs::kAcceptLanguages, language::prefs::kUserLanguageProfile);
} }
if (override_model_mode == language::OverrideLanguageModel::GEO) { if (override_model_mode == language::OverrideLanguageModel::GEO) {
return new language::GeoLanguageModel( return std::make_unique<language::GeoLanguageModel>(
language::GeoLanguageProvider::GetInstance()); language::GeoLanguageProvider::GetInstance());
} }
return new language::BaselineLanguageModel( return std::make_unique<language::BaselineLanguageModel>(
profile->GetPrefs(), g_browser_process->GetApplicationLocale(), profile->GetPrefs(), g_browser_process->GetApplicationLocale(),
prefs::kAcceptLanguages); prefs::kAcceptLanguages);
} }
content::BrowserContext* LanguageModelFactory::GetBrowserContextToUse( } // namespace
// static
LanguageModelManagerFactory* LanguageModelManagerFactory::GetInstance() {
return base::Singleton<LanguageModelManagerFactory>::get();
}
// static
language::LanguageModelManager*
LanguageModelManagerFactory::GetForBrowserContext(
content::BrowserContext* const browser_context) {
return static_cast<language::LanguageModelManager*>(
GetInstance()->GetServiceForBrowserContext(browser_context, true));
}
LanguageModelManagerFactory::LanguageModelManagerFactory()
: BrowserContextKeyedServiceFactory(
"LanguageModelManager",
BrowserContextDependencyManager::GetInstance()) {}
LanguageModelManagerFactory::~LanguageModelManagerFactory() {}
KeyedService* LanguageModelManagerFactory::BuildServiceInstanceFor(
content::BrowserContext* const browser_context) const {
Profile* const profile = Profile::FromBrowserContext(browser_context);
language::LanguageModelManager* manager = new language::LanguageModelManager(
profile->GetPrefs(), g_browser_process->GetApplicationLocale());
manager->SetDefaultModel(BuildDefaultLanguageModelFor(profile));
return manager;
}
content::BrowserContext* LanguageModelManagerFactory::GetBrowserContextToUse(
content::BrowserContext* context) const { content::BrowserContext* context) const {
// Use the original profile's language model even in Incognito mode. // Use the original profile's language model even in Incognito mode.
return chrome::GetBrowserContextRedirectedInIncognito(context); return chrome::GetBrowserContextRedirectedInIncognito(context);
} }
void LanguageModelFactory::RegisterProfilePrefs( void LanguageModelManagerFactory::RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable* const registry) { user_prefs::PrefRegistrySyncable* const registry) {
if (base::FeatureList::IsEnabled(language::kUseHeuristicLanguageModel)) { if (base::FeatureList::IsEnabled(language::kUseHeuristicLanguageModel)) {
registry->RegisterDictionaryPref( registry->RegisterDictionaryPref(
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef CHROME_BROWSER_LANGUAGE_LANGUAGE_MODEL_FACTORY_H_ #ifndef CHROME_BROWSER_LANGUAGE_LANGUAGE_MODEL_MANAGER_FACTORY_H_
#define CHROME_BROWSER_LANGUAGE_LANGUAGE_MODEL_FACTORY_H_ #define CHROME_BROWSER_LANGUAGE_LANGUAGE_MODEL_MANAGER_FACTORY_H_
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/singleton.h" #include "base/memory/singleton.h"
...@@ -14,7 +14,7 @@ class BrowserContext; ...@@ -14,7 +14,7 @@ class BrowserContext;
} }
namespace language { namespace language {
class LanguageModel; class LanguageModelManager;
} }
namespace user_prefs { namespace user_prefs {
...@@ -23,17 +23,17 @@ class PrefRegistrySyncable; ...@@ -23,17 +23,17 @@ class PrefRegistrySyncable;
// Manages the language model for each profile. The particular language model // Manages the language model for each profile. The particular language model
// provided depends on feature flags. // provided depends on feature flags.
class LanguageModelFactory : public BrowserContextKeyedServiceFactory { class LanguageModelManagerFactory : public BrowserContextKeyedServiceFactory {
public: public:
static LanguageModelFactory* GetInstance(); static LanguageModelManagerFactory* GetInstance();
static language::LanguageModel* GetForBrowserContext( static language::LanguageModelManager* GetForBrowserContext(
content::BrowserContext* browser_context); content::BrowserContext* browser_context);
private: private:
friend struct base::DefaultSingletonTraits<LanguageModelFactory>; friend struct base::DefaultSingletonTraits<LanguageModelManagerFactory>;
LanguageModelFactory(); LanguageModelManagerFactory();
~LanguageModelFactory() override; ~LanguageModelManagerFactory() override;
// BrowserContextKeyedServiceFactory overrides. // BrowserContextKeyedServiceFactory overrides.
KeyedService* BuildServiceInstanceFor( KeyedService* BuildServiceInstanceFor(
...@@ -43,7 +43,7 @@ class LanguageModelFactory : public BrowserContextKeyedServiceFactory { ...@@ -43,7 +43,7 @@ class LanguageModelFactory : public BrowserContextKeyedServiceFactory {
void RegisterProfilePrefs( void RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable* registry) override; user_prefs::PrefRegistrySyncable* registry) override;
DISALLOW_COPY_AND_ASSIGN(LanguageModelFactory); DISALLOW_COPY_AND_ASSIGN(LanguageModelManagerFactory);
}; };
#endif // CHROME_BROWSER_LANGUAGE_LANGUAGE_MODEL_FACTORY_H_ #endif // CHROME_BROWSER_LANGUAGE_LANGUAGE_MODEL_MANAGER_FACTORY_H_
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "chrome/browser/language/language_model_factory.h" #include "chrome/browser/language/language_model_manager_factory.h"
#include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile.h"
#include "content/public/test/test_browser_thread_bundle.h" #include "content/public/test/test_browser_thread_bundle.h"
...@@ -13,15 +13,16 @@ using testing::IsNull; ...@@ -13,15 +13,16 @@ using testing::IsNull;
using testing::Not; using testing::Not;
// Check that Incognito language modeling is inherited from the user's profile. // Check that Incognito language modeling is inherited from the user's profile.
TEST(LanguageModelFactoryTest, SharedWithIncognito) { TEST(LanguageModelManagerFactoryTest, SharedWithIncognito) {
content::TestBrowserThreadBundle thread_bundle; content::TestBrowserThreadBundle thread_bundle;
TestingProfile profile; TestingProfile profile;
const language::LanguageModel* const model = const language::LanguageModelManager* const manager =
LanguageModelFactory::GetForBrowserContext(&profile); LanguageModelManagerFactory::GetForBrowserContext(&profile);
EXPECT_THAT(model, Not(IsNull())); EXPECT_THAT(manager, Not(IsNull()));
Profile* const incognito = profile.GetOffTheRecordProfile(); Profile* const incognito = profile.GetOffTheRecordProfile();
ASSERT_THAT(incognito, Not(IsNull())); ASSERT_THAT(incognito, Not(IsNull()));
EXPECT_THAT(LanguageModelFactory::GetForBrowserContext(incognito), Eq(model)); EXPECT_THAT(LanguageModelManagerFactory::GetForBrowserContext(incognito),
Eq(manager));
} }
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#include "chrome/browser/google/google_url_tracker_factory.h" #include "chrome/browser/google/google_url_tracker_factory.h"
#include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/history/history_service_factory.h"
#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" #include "chrome/browser/invalidation/profile_invalidation_provider_factory.h"
#include "chrome/browser/language/language_model_factory.h" #include "chrome/browser/language/language_model_manager_factory.h"
#include "chrome/browser/language/url_language_histogram_factory.h" #include "chrome/browser/language/url_language_histogram_factory.h"
#include "chrome/browser/media/media_engagement_service.h" #include "chrome/browser/media/media_engagement_service.h"
#include "chrome/browser/media/media_engagement_service_factory.h" #include "chrome/browser/media/media_engagement_service_factory.h"
...@@ -291,7 +291,7 @@ void ChromeBrowserMainExtraPartsProfiles:: ...@@ -291,7 +291,7 @@ void ChromeBrowserMainExtraPartsProfiles::
->SetUIDelegateFactory(std::move(networking_private_ui_delegate_factory)); ->SetUIDelegateFactory(std::move(networking_private_ui_delegate_factory));
#endif #endif
#endif #endif
LanguageModelFactory::GetInstance(); LanguageModelManagerFactory::GetInstance();
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
LoginUIServiceFactory::GetInstance(); LoginUIServiceFactory::GetInstance();
#endif #endif
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
#include "chrome/browser/devtools/devtools_window.h" #include "chrome/browser/devtools/devtools_window.h"
#include "chrome/browser/download/download_stats.h" #include "chrome/browser/download/download_stats.h"
#include "chrome/browser/extensions/extension_util.h" #include "chrome/browser/extensions/extension_util.h"
#include "chrome/browser/language/language_model_factory.h" #include "chrome/browser/language/language_model_manager_factory.h"
#include "chrome/browser/media/router/media_router_dialog_controller.h" #include "chrome/browser/media/router/media_router_dialog_controller.h"
#include "chrome/browser/media/router/media_router_feature.h" #include "chrome/browser/media/router/media_router_feature.h"
#include "chrome/browser/media/router/media_router_metrics.h" #include "chrome/browser/media/router/media_router_metrics.h"
...@@ -81,6 +81,7 @@ ...@@ -81,6 +81,7 @@
#include "components/download/public/common/download_url_parameters.h" #include "components/download/public/common/download_url_parameters.h"
#include "components/google/core/browser/google_util.h" #include "components/google/core/browser/google_util.h"
#include "components/guest_view/browser/guest_view_base.h" #include "components/guest_view/browser/guest_view_base.h"
#include "components/language/core/browser/language_model_manager.h"
#include "components/omnibox/browser/autocomplete_classifier.h" #include "components/omnibox/browser/autocomplete_classifier.h"
#include "components/omnibox/browser/autocomplete_match.h" #include "components/omnibox/browser/autocomplete_match.h"
#include "components/password_manager/core/browser/password_manager_util.h" #include "components/password_manager/core/browser/password_manager_util.h"
...@@ -946,7 +947,8 @@ std::string RenderViewContextMenu::GetTargetLanguage() const { ...@@ -946,7 +947,8 @@ std::string RenderViewContextMenu::GetTargetLanguage() const {
std::unique_ptr<translate::TranslatePrefs> prefs( std::unique_ptr<translate::TranslatePrefs> prefs(
ChromeTranslateClient::CreateTranslatePrefs(GetPrefs(browser_context_))); ChromeTranslateClient::CreateTranslatePrefs(GetPrefs(browser_context_)));
language::LanguageModel* language_model = language::LanguageModel* language_model =
LanguageModelFactory::GetForBrowserContext(browser_context_); LanguageModelManagerFactory::GetForBrowserContext(browser_context_)
->GetDefaultModel();
return translate::TranslateManager::GetTargetLanguage(prefs.get(), return translate::TranslateManager::GetTargetLanguage(prefs.get(),
language_model); language_model);
} }
...@@ -1291,7 +1293,8 @@ void RenderViewContextMenu::AppendPageItems() { ...@@ -1291,7 +1293,8 @@ void RenderViewContextMenu::AppendPageItems() {
GetPrefs(browser_context_))); GetPrefs(browser_context_)));
if (prefs->IsTranslateAllowedByPolicy()) { if (prefs->IsTranslateAllowedByPolicy()) {
language::LanguageModel* language_model = language::LanguageModel* language_model =
LanguageModelFactory::GetForBrowserContext(browser_context_); LanguageModelManagerFactory::GetForBrowserContext(browser_context_)
->GetDefaultModel();
std::string locale = translate::TranslateManager::GetTargetLanguage( std::string locale = translate::TranslateManager::GetTargetLanguage(
prefs.get(), language_model); prefs.get(), language_model);
base::string16 language = base::string16 language =
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/infobars/infobar_service.h" #include "chrome/browser/infobars/infobar_service.h"
#include "chrome/browser/language/language_model_factory.h" #include "chrome/browser/language/language_model_manager_factory.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sync/user_event_service_factory.h" #include "chrome/browser/sync/user_event_service_factory.h"
#include "chrome/browser/translate/translate_accept_languages_factory.h" #include "chrome/browser/translate/translate_accept_languages_factory.h"
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_paths.h"
#include "chrome/common/pref_names.h" #include "chrome/common/pref_names.h"
#include "chrome/grit/theme_resources.h" #include "chrome/grit/theme_resources.h"
#include "components/language/core/browser/language_model_manager.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
#include "components/sync/driver/sync_driver_switches.h" #include "components/sync/driver/sync_driver_switches.h"
#include "components/sync/protocol/user_event_specifics.pb.h" #include "components/sync/protocol/user_event_specifics.pb.h"
...@@ -118,8 +119,9 @@ ChromeTranslateClient::ChromeTranslateClient(content::WebContents* web_contents) ...@@ -118,8 +119,9 @@ ChromeTranslateClient::ChromeTranslateClient(content::WebContents* web_contents)
this, this,
translate::TranslateRankerFactory::GetForBrowserContext( translate::TranslateRankerFactory::GetForBrowserContext(
web_contents->GetBrowserContext()), web_contents->GetBrowserContext()),
LanguageModelFactory::GetForBrowserContext( LanguageModelManagerFactory::GetForBrowserContext(
web_contents->GetBrowserContext()))) { web_contents->GetBrowserContext())
->GetDefaultModel())) {
translate_driver_.AddObserver(this); translate_driver_.AddObserver(this);
translate_driver_.set_translate_manager(translate_manager_.get()); translate_driver_.set_translate_manager(translate_manager_.get());
} }
...@@ -207,8 +209,9 @@ void ChromeTranslateClient::GetTranslateLanguages( ...@@ -207,8 +209,9 @@ void ChromeTranslateClient::GetTranslateLanguages(
} }
*target = translate::TranslateManager::GetTargetLanguage( *target = translate::TranslateManager::GetTargetLanguage(
translate_prefs.get(), translate_prefs.get(), LanguageModelManagerFactory::GetInstance()
LanguageModelFactory::GetInstance()->GetForBrowserContext(profile)); ->GetForBrowserContext(profile)
->GetDefaultModel());
} }
void ChromeTranslateClient::RecordTranslateEvent( void ChromeTranslateClient::RecordTranslateEvent(
......
...@@ -2417,7 +2417,7 @@ test("unit_tests") { ...@@ -2417,7 +2417,7 @@ test("unit_tests") {
"../browser/installable/installable_manager_unittest.cc", "../browser/installable/installable_manager_unittest.cc",
"../browser/installable/installable_task_queue_unittest.cc", "../browser/installable/installable_task_queue_unittest.cc",
"../browser/internal_auth_unittest.cc", "../browser/internal_auth_unittest.cc",
"../browser/language/language_model_factory_unittest.cc", "../browser/language/language_model_manager_factory_unittest.cc",
"../browser/language/url_language_histogram_factory_unittest.cc", "../browser/language/url_language_histogram_factory_unittest.cc",
"../browser/loader/chrome_navigation_data_unittest.cc", "../browser/loader/chrome_navigation_data_unittest.cc",
"../browser/loader/chrome_resource_dispatcher_host_delegate_unittest.cc", "../browser/loader/chrome_resource_dispatcher_host_delegate_unittest.cc",
......
...@@ -10,6 +10,8 @@ static_library("browser") { ...@@ -10,6 +10,8 @@ static_library("browser") {
"heuristic_language_model.h", "heuristic_language_model.h",
"language_model.cc", "language_model.cc",
"language_model.h", "language_model.h",
"language_model_manager.cc",
"language_model_manager.h",
"pref_names.cc", "pref_names.cc",
"pref_names.h", "pref_names.h",
"url_language_histogram.cc", "url_language_histogram.cc",
......
...@@ -14,7 +14,7 @@ namespace language { ...@@ -14,7 +14,7 @@ namespace language {
// Defines a user language model represented by a ranked list of languages and // Defines a user language model represented by a ranked list of languages and
// associated scores. // associated scores.
class LanguageModel : public KeyedService { class LanguageModel {
public: public:
// Information about one language that a user understands. // Information about one language that a user understands.
struct LanguageDetails { struct LanguageDetails {
...@@ -29,6 +29,8 @@ class LanguageModel : public KeyedService { ...@@ -29,6 +29,8 @@ class LanguageModel : public KeyedService {
float score; float score;
}; };
virtual ~LanguageModel() {}
// The set of languages that the user understands. The languages are ranked // The set of languages that the user understands. The languages are ranked
// from most important to least. // from most important to least.
virtual std::vector<LanguageDetails> GetLanguages() = 0; virtual std::vector<LanguageDetails> GetLanguages() = 0;
......
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/language/core/browser/language_model_manager.h"
namespace language {
LanguageModelManager::LanguageModelManager(PrefService* prefs,
const std::string& ui_lang) {
// TODO(crbug.com/855192): put code to add UI language to the blacklist here.
}
LanguageModelManager::~LanguageModelManager() {}
void LanguageModelManager::SetDefaultModel(
std::unique_ptr<LanguageModel> model) {
default_model_ = std::move(model);
}
LanguageModel* LanguageModelManager::GetDefaultModel() {
return default_model_.get();
}
} // namespace language
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_LANGUAGE_CORE_BROWSER_LANGUAGE_MODEL_MANAGER_H_
#define COMPONENTS_LANGUAGE_CORE_BROWSER_LANGUAGE_MODEL_MANAGER_H_
#include <string>
#include <vector>
#include "components/keyed_service/core/keyed_service.h"
#include "components/language/core/browser/language_model.h"
#include "components/prefs/pref_service.h"
namespace language {
// Manages a set of LanguageModel objects.
class LanguageModelManager : public KeyedService {
public:
LanguageModelManager(PrefService* prefs, const std::string& ui_lang);
~LanguageModelManager() override;
void SetDefaultModel(std::unique_ptr<LanguageModel> model);
LanguageModel* GetDefaultModel();
private:
std::unique_ptr<LanguageModel> default_model_;
DISALLOW_IMPLICIT_CONSTRUCTORS(LanguageModelManager);
};
} // namespace language
#endif // COMPONENTS_LANGUAGE_CORE_BROWSER_LANGUAGE_MODEL_MANAGER_H_
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
#include "ios/chrome/browser/history/top_sites_factory.h" #include "ios/chrome/browser/history/top_sites_factory.h"
#include "ios/chrome/browser/history/web_history_service_factory.h" #include "ios/chrome/browser/history/web_history_service_factory.h"
#include "ios/chrome/browser/invalidation/ios_chrome_profile_invalidation_provider_factory.h" #include "ios/chrome/browser/invalidation/ios_chrome_profile_invalidation_provider_factory.h"
#include "ios/chrome/browser/language/language_model_factory.h" #include "ios/chrome/browser/language/language_model_manager_factory.h"
#include "ios/chrome/browser/language/url_language_histogram_factory.h" #include "ios/chrome/browser/language/url_language_histogram_factory.h"
#include "ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.h" #include "ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.h"
#include "ios/chrome/browser/passwords/ios_chrome_password_store_factory.h" #include "ios/chrome/browser/passwords/ios_chrome_password_store_factory.h"
...@@ -117,7 +117,7 @@ void EnsureBrowserStateKeyedServiceFactoriesBuilt() { ...@@ -117,7 +117,7 @@ void EnsureBrowserStateKeyedServiceFactoriesBuilt() {
ProfileSyncServiceFactory::GetInstance(); ProfileSyncServiceFactory::GetInstance();
IOSUserEventServiceFactory::GetInstance(); IOSUserEventServiceFactory::GetInstance();
GoogleLogoServiceFactory::GetInstance(); GoogleLogoServiceFactory::GetInstance();
LanguageModelFactory::GetInstance(); LanguageModelManagerFactory::GetInstance();
ProfileOAuth2TokenServiceFactory::GetInstance(); ProfileOAuth2TokenServiceFactory::GetInstance();
ReadingListModelFactory::GetInstance(); ReadingListModelFactory::GetInstance();
SigninClientFactory::GetInstance(); SigninClientFactory::GetInstance();
......
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
source_set("language") { source_set("language") {
configs += [ "//build/config/compiler:enable_arc" ] configs += [ "//build/config/compiler:enable_arc" ]
sources = [ sources = [
"language_model_factory.cc", "language_model_manager_factory.cc",
"language_model_factory.h", "language_model_manager_factory.h",
"url_language_histogram_factory.cc", "url_language_histogram_factory.cc",
"url_language_histogram_factory.h", "url_language_histogram_factory.h",
] ]
...@@ -27,7 +27,7 @@ source_set("unit_tests") { ...@@ -27,7 +27,7 @@ source_set("unit_tests") {
configs += [ "//build/config/compiler:enable_arc" ] configs += [ "//build/config/compiler:enable_arc" ]
testonly = true testonly = true
sources = [ sources = [
"language_model_factory_unittest.cc", "language_model_manager_factory_unittest.cc",
"url_language_histogram_factory_unittest.cc", "url_language_histogram_factory_unittest.cc",
] ]
deps = [ deps = [
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "ios/chrome/browser/language/language_model_factory.h" #include "ios/chrome/browser/language/language_model_manager_factory.h"
#include "base/feature_list.h" #include "base/feature_list.h"
#include "components/keyed_service/core/keyed_service.h" #include "components/keyed_service/core/keyed_service.h"
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "components/language/core/browser/baseline_language_model.h" #include "components/language/core/browser/baseline_language_model.h"
#include "components/language/core/browser/heuristic_language_model.h" #include "components/language/core/browser/heuristic_language_model.h"
#include "components/language/core/browser/language_model.h" #include "components/language/core/browser/language_model.h"
#include "components/language/core/browser/language_model_manager.h"
#include "components/language/core/browser/pref_names.h" #include "components/language/core/browser/pref_names.h"
#include "components/language/core/common/language_experiments.h" #include "components/language/core/common/language_experiments.h"
#include "components/pref_registry/pref_registry_syncable.h" #include "components/pref_registry/pref_registry_syncable.h"
...@@ -19,31 +20,12 @@ ...@@ -19,31 +20,12 @@
#include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#include "ios/chrome/browser/pref_names.h" #include "ios/chrome/browser/pref_names.h"
// static namespace {
LanguageModelFactory* LanguageModelFactory::GetInstance() {
return base::Singleton<LanguageModelFactory>::get();
}
// static
language::LanguageModel* LanguageModelFactory::GetForBrowserState(
ios::ChromeBrowserState* const state) {
return static_cast<language::LanguageModel*>(
GetInstance()->GetServiceForBrowserState(state, true));
}
LanguageModelFactory::LanguageModelFactory()
: BrowserStateKeyedServiceFactory(
"LanguageModel",
BrowserStateDependencyManager::GetInstance()) {}
LanguageModelFactory::~LanguageModelFactory() {} std::unique_ptr<language::LanguageModel> BuildDefaultLanguageModelFor(
ios::ChromeBrowserState* const chrome_state) {
std::unique_ptr<KeyedService> LanguageModelFactory::BuildServiceInstanceFor(
web::BrowserState* const state) const {
language::OverrideLanguageModel override_model_mode = language::OverrideLanguageModel override_model_mode =
language::GetOverrideLanguageModel(); language::GetOverrideLanguageModel();
ios::ChromeBrowserState* const chrome_state =
ios::ChromeBrowserState::FromBrowserState(state);
if (override_model_mode == language::OverrideLanguageModel::HEURISTIC) { if (override_model_mode == language::OverrideLanguageModel::HEURISTIC) {
return std::make_unique<language::HeuristicLanguageModel>( return std::make_unique<language::HeuristicLanguageModel>(
...@@ -59,13 +41,47 @@ std::unique_ptr<KeyedService> LanguageModelFactory::BuildServiceInstanceFor( ...@@ -59,13 +41,47 @@ std::unique_ptr<KeyedService> LanguageModelFactory::BuildServiceInstanceFor(
prefs::kAcceptLanguages); prefs::kAcceptLanguages);
} }
web::BrowserState* LanguageModelFactory::GetBrowserStateToUse( } // namespace
// static
LanguageModelManagerFactory* LanguageModelManagerFactory::GetInstance() {
return base::Singleton<LanguageModelManagerFactory>::get();
}
// static
language::LanguageModelManager* LanguageModelManagerFactory::GetForBrowserState(
ios::ChromeBrowserState* const state) {
return static_cast<language::LanguageModelManager*>(
GetInstance()->GetServiceForBrowserState(state, true));
}
LanguageModelManagerFactory::LanguageModelManagerFactory()
: BrowserStateKeyedServiceFactory(
"LanguageModelManager",
BrowserStateDependencyManager::GetInstance()) {}
LanguageModelManagerFactory::~LanguageModelManagerFactory() {}
std::unique_ptr<KeyedService>
LanguageModelManagerFactory::BuildServiceInstanceFor(
web::BrowserState* const state) const {
ios::ChromeBrowserState* const chrome_state =
ios::ChromeBrowserState::FromBrowserState(state);
std::unique_ptr<language::LanguageModelManager> manager =
std::make_unique<language::LanguageModelManager>(
chrome_state->GetPrefs(),
GetApplicationContext()->GetApplicationLocale());
manager->SetDefaultModel(BuildDefaultLanguageModelFor(chrome_state));
return manager;
}
web::BrowserState* LanguageModelManagerFactory::GetBrowserStateToUse(
web::BrowserState* const state) const { web::BrowserState* const state) const {
// Use the original profile's language model even in Incognito mode. // Use the original profile's language model even in Incognito mode.
return GetBrowserStateRedirectedInIncognito(state); return GetBrowserStateRedirectedInIncognito(state);
} }
void LanguageModelFactory::RegisterBrowserStatePrefs( void LanguageModelManagerFactory::RegisterBrowserStatePrefs(
user_prefs::PrefRegistrySyncable* const registry) { user_prefs::PrefRegistrySyncable* const registry) {
if (base::FeatureList::IsEnabled(language::kUseHeuristicLanguageModel)) { if (base::FeatureList::IsEnabled(language::kUseHeuristicLanguageModel)) {
registry->RegisterDictionaryPref( registry->RegisterDictionaryPref(
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_LANGUAGE_LANGUAGE_MODEL_FACTORY_H #ifndef IOS_CHROME_BROWSER_LANGUAGE_LANGUAGE_MODEL_MANAGER_FACTORY_H_
#define IOS_CHROME_BROWSER_LANGUAGE_LANGUAGE_MODEL_FACTORY_H #define IOS_CHROME_BROWSER_LANGUAGE_LANGUAGE_MODEL_MANAGER_FACTORY_H_
#include <memory> #include <memory>
...@@ -16,7 +16,7 @@ class ChromeBrowserState; ...@@ -16,7 +16,7 @@ class ChromeBrowserState;
} }
namespace language { namespace language {
class LanguageModel; class LanguageModelManager;
} }
namespace user_prefs { namespace user_prefs {
...@@ -25,17 +25,17 @@ class PrefRegistrySyncable; ...@@ -25,17 +25,17 @@ class PrefRegistrySyncable;
// Manages the language model for each profile. The particular language model // Manages the language model for each profile. The particular language model
// provided depends on feature flags. // provided depends on feature flags.
class LanguageModelFactory : public BrowserStateKeyedServiceFactory { class LanguageModelManagerFactory : public BrowserStateKeyedServiceFactory {
public: public:
static LanguageModelFactory* GetInstance(); static LanguageModelManagerFactory* GetInstance();
static language::LanguageModel* GetForBrowserState( static language::LanguageModelManager* GetForBrowserState(
ios::ChromeBrowserState* browser_state); ios::ChromeBrowserState* browser_state);
private: private:
friend struct base::DefaultSingletonTraits<LanguageModelFactory>; friend struct base::DefaultSingletonTraits<LanguageModelManagerFactory>;
LanguageModelFactory(); LanguageModelManagerFactory();
~LanguageModelFactory() override; ~LanguageModelManagerFactory() override;
// BrowserStateKeyedServiceFactory implementation. // BrowserStateKeyedServiceFactory implementation.
std::unique_ptr<KeyedService> BuildServiceInstanceFor( std::unique_ptr<KeyedService> BuildServiceInstanceFor(
...@@ -45,7 +45,7 @@ class LanguageModelFactory : public BrowserStateKeyedServiceFactory { ...@@ -45,7 +45,7 @@ class LanguageModelFactory : public BrowserStateKeyedServiceFactory {
void RegisterBrowserStatePrefs( void RegisterBrowserStatePrefs(
user_prefs::PrefRegistrySyncable* registry) override; user_prefs::PrefRegistrySyncable* registry) override;
DISALLOW_COPY_AND_ASSIGN(LanguageModelFactory); DISALLOW_COPY_AND_ASSIGN(LanguageModelManagerFactory);
}; };
#endif // IOS_CHROME_BROWSER_LANGUAGE_LANGUAGE_MODEL_FACTORY_H #endif // IOS_CHROME_BROWSER_LANGUAGE_LANGUAGE_MODEL_MANAGER_FACTORY_H_
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "ios/chrome/browser/language/language_model_factory.h" #include "ios/chrome/browser/language/language_model_manager_factory.h"
#include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
#include "ios/web/public/test/test_web_thread_bundle.h" #include "ios/web/public/test/test_web_thread_bundle.h"
...@@ -13,20 +13,21 @@ using testing::Eq; ...@@ -13,20 +13,21 @@ using testing::Eq;
using testing::IsNull; using testing::IsNull;
using testing::Not; using testing::Not;
using LanguageModelFactoryTest = PlatformTest; using LanguageModelManagerFactoryTest = PlatformTest;
// Check that Incognito language modeling is inherited from the user's profile. // Check that Incognito language modeling is inherited from the user's profile.
TEST_F(LanguageModelFactoryTest, SharedWithIncognito) { TEST_F(LanguageModelManagerFactoryTest, SharedWithIncognito) {
web::TestWebThreadBundle thread_bundle; web::TestWebThreadBundle thread_bundle;
std::unique_ptr<TestChromeBrowserState> state( std::unique_ptr<TestChromeBrowserState> state(
TestChromeBrowserState::Builder().Build()); TestChromeBrowserState::Builder().Build());
const language::LanguageModel* const model = const language::LanguageModelManager* const manager =
LanguageModelFactory::GetForBrowserState(state.get()); LanguageModelManagerFactory::GetForBrowserState(state.get());
EXPECT_THAT(model, Not(IsNull())); EXPECT_THAT(manager, Not(IsNull()));
ios::ChromeBrowserState* const incognito = ios::ChromeBrowserState* const incognito =
state->GetOffTheRecordChromeBrowserState(); state->GetOffTheRecordChromeBrowserState();
ASSERT_THAT(incognito, Not(IsNull())); ASSERT_THAT(incognito, Not(IsNull()));
EXPECT_THAT(LanguageModelFactory::GetForBrowserState(incognito), Eq(model)); EXPECT_THAT(LanguageModelManagerFactory::GetForBrowserState(incognito),
Eq(manager));
} }
...@@ -34,6 +34,7 @@ source_set("translate") { ...@@ -34,6 +34,7 @@ source_set("translate") {
"//components/infobars/core", "//components/infobars/core",
"//components/keyed_service/core", "//components/keyed_service/core",
"//components/keyed_service/ios", "//components/keyed_service/ios",
"//components/language/core/browser",
"//components/metrics", "//components/metrics",
"//components/prefs", "//components/prefs",
"//components/strings", "//components/strings",
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "base/logging.h" #include "base/logging.h"
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "components/infobars/core/infobar.h" #include "components/infobars/core/infobar.h"
#include "components/language/core/browser/language_model_manager.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
#include "components/sync/driver/sync_driver_switches.h" #include "components/sync/driver/sync_driver_switches.h"
#include "components/sync/protocol/user_event_specifics.pb.h" #include "components/sync/protocol/user_event_specifics.pb.h"
...@@ -28,7 +29,7 @@ ...@@ -28,7 +29,7 @@
#include "ios/chrome/browser/infobars/infobar.h" #include "ios/chrome/browser/infobars/infobar.h"
#include "ios/chrome/browser/infobars/infobar_controller.h" #include "ios/chrome/browser/infobars/infobar_controller.h"
#include "ios/chrome/browser/infobars/infobar_manager_impl.h" #include "ios/chrome/browser/infobars/infobar_manager_impl.h"
#include "ios/chrome/browser/language/language_model_factory.h" #include "ios/chrome/browser/language/language_model_manager_factory.h"
#include "ios/chrome/browser/pref_names.h" #include "ios/chrome/browser/pref_names.h"
#import "ios/chrome/browser/sync/ios_user_event_service_factory.h" #import "ios/chrome/browser/sync/ios_user_event_service_factory.h"
#import "ios/chrome/browser/translate/after_translate_infobar_controller.h" #import "ios/chrome/browser/translate/after_translate_infobar_controller.h"
...@@ -73,9 +74,10 @@ ChromeIOSTranslateClient::ChromeIOSTranslateClient( ...@@ -73,9 +74,10 @@ ChromeIOSTranslateClient::ChromeIOSTranslateClient(
translate::TranslateRankerFactory::GetForBrowserState( translate::TranslateRankerFactory::GetForBrowserState(
ios::ChromeBrowserState::FromBrowserState( ios::ChromeBrowserState::FromBrowserState(
web_state->GetBrowserState())), web_state->GetBrowserState())),
LanguageModelFactory::GetForBrowserState( LanguageModelManagerFactory::GetForBrowserState(
ios::ChromeBrowserState::FromBrowserState( ios::ChromeBrowserState::FromBrowserState(
web_state->GetBrowserState())))), web_state->GetBrowserState()))
->GetDefaultModel())),
translate_driver_(web_state, translate_driver_(web_state,
web_state->GetNavigationManager(), web_state->GetNavigationManager(),
translate_manager_.get()), translate_manager_.get()),
......
...@@ -121,8 +121,8 @@ ios_web_view_sources = [ ...@@ -121,8 +121,8 @@ ios_web_view_sources = [
"internal/cwv_web_view_configuration_internal.h", "internal/cwv_web_view_configuration_internal.h",
"internal/cwv_web_view_internal.h", "internal/cwv_web_view_internal.h",
"internal/ios_global_state_web_view_configuration.cc", "internal/ios_global_state_web_view_configuration.cc",
"internal/language/web_view_language_model_factory.cc", "internal/language/web_view_language_model_manager_factory.cc",
"internal/language/web_view_language_model_factory.h", "internal/language/web_view_language_model_manager_factory.h",
"internal/language/web_view_url_language_histogram_factory.cc", "internal/language/web_view_url_language_histogram_factory.cc",
"internal/language/web_view_url_language_histogram_factory.h", "internal/language/web_view_url_language_histogram_factory.h",
"internal/pref_names.cc", "internal/pref_names.cc",
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "ios/web_view/internal/language/web_view_language_model_factory.h" #include "ios/web_view/internal/language/web_view_language_model_manager_factory.h"
#include "base/feature_list.h" #include "base/feature_list.h"
#include "base/memory/singleton.h" #include "base/memory/singleton.h"
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "components/language/core/browser/baseline_language_model.h" #include "components/language/core/browser/baseline_language_model.h"
#include "components/language/core/browser/heuristic_language_model.h" #include "components/language/core/browser/heuristic_language_model.h"
#include "components/language/core/browser/language_model.h" #include "components/language/core/browser/language_model.h"
#include "components/language/core/browser/language_model_manager.h"
#include "components/language/core/browser/pref_names.h" #include "components/language/core/browser/pref_names.h"
#include "components/language/core/common/language_experiments.h" #include "components/language/core/common/language_experiments.h"
#include "components/pref_registry/pref_registry_syncable.h" #include "components/pref_registry/pref_registry_syncable.h"
...@@ -21,30 +22,12 @@ ...@@ -21,30 +22,12 @@
namespace ios_web_view { namespace ios_web_view {
// static namespace {
WebViewLanguageModelFactory* WebViewLanguageModelFactory::GetInstance() {
return base::Singleton<WebViewLanguageModelFactory>::get();
}
// static
language::LanguageModel* WebViewLanguageModelFactory::GetForBrowserState(
WebViewBrowserState* const state) {
return static_cast<language::LanguageModel*>(
GetInstance()->GetServiceForBrowserState(state, true));
}
WebViewLanguageModelFactory::WebViewLanguageModelFactory()
: BrowserStateKeyedServiceFactory(
"LanguageModel",
BrowserStateDependencyManager::GetInstance()) {}
std::unique_ptr<KeyedService> std::unique_ptr<language::LanguageModel> BuildDefaultLanguageModelFor(
WebViewLanguageModelFactory::BuildServiceInstanceFor( WebViewBrowserState* const web_view_browser_state) {
web::BrowserState* const context) const {
language::OverrideLanguageModel override_model_mode = language::OverrideLanguageModel override_model_mode =
language::GetOverrideLanguageModel(); language::GetOverrideLanguageModel();
WebViewBrowserState* const web_view_browser_state =
WebViewBrowserState::FromBrowserState(context);
if (override_model_mode == language::OverrideLanguageModel::HEURISTIC) { if (override_model_mode == language::OverrideLanguageModel::HEURISTIC) {
return std::make_unique<language::HeuristicLanguageModel>( return std::make_unique<language::HeuristicLanguageModel>(
...@@ -61,7 +44,42 @@ WebViewLanguageModelFactory::BuildServiceInstanceFor( ...@@ -61,7 +44,42 @@ WebViewLanguageModelFactory::BuildServiceInstanceFor(
prefs::kAcceptLanguages); prefs::kAcceptLanguages);
} }
void WebViewLanguageModelFactory::RegisterBrowserStatePrefs( } // namespace
// static
WebViewLanguageModelManagerFactory*
WebViewLanguageModelManagerFactory::GetInstance() {
return base::Singleton<WebViewLanguageModelManagerFactory>::get();
}
// static
language::LanguageModelManager*
WebViewLanguageModelManagerFactory::GetForBrowserState(
WebViewBrowserState* const state) {
return static_cast<language::LanguageModelManager*>(
GetInstance()->GetServiceForBrowserState(state, true));
}
WebViewLanguageModelManagerFactory::WebViewLanguageModelManagerFactory()
: BrowserStateKeyedServiceFactory(
"LanguageModelManager",
BrowserStateDependencyManager::GetInstance()) {}
std::unique_ptr<KeyedService>
WebViewLanguageModelManagerFactory::BuildServiceInstanceFor(
web::BrowserState* const context) const {
WebViewBrowserState* const web_view_browser_state =
WebViewBrowserState::FromBrowserState(context);
std::unique_ptr<language::LanguageModelManager> manager =
std::make_unique<language::LanguageModelManager>(
web_view_browser_state->GetPrefs(),
ApplicationContext::GetInstance()->GetApplicationLocale());
manager->SetDefaultModel(
BuildDefaultLanguageModelFor(web_view_browser_state));
return manager;
}
void WebViewLanguageModelManagerFactory::RegisterBrowserStatePrefs(
user_prefs::PrefRegistrySyncable* const registry) { user_prefs::PrefRegistrySyncable* const registry) {
if (base::FeatureList::IsEnabled(language::kUseHeuristicLanguageModel)) { if (base::FeatureList::IsEnabled(language::kUseHeuristicLanguageModel)) {
registry->RegisterDictionaryPref( registry->RegisterDictionaryPref(
...@@ -70,7 +88,7 @@ void WebViewLanguageModelFactory::RegisterBrowserStatePrefs( ...@@ -70,7 +88,7 @@ void WebViewLanguageModelFactory::RegisterBrowserStatePrefs(
} }
} }
web::BrowserState* WebViewLanguageModelFactory::GetBrowserStateToUse( web::BrowserState* WebViewLanguageModelManagerFactory::GetBrowserStateToUse(
web::BrowserState* state) const { web::BrowserState* state) const {
WebViewBrowserState* browser_state = WebViewBrowserState* browser_state =
WebViewBrowserState::FromBrowserState(state); WebViewBrowserState::FromBrowserState(state);
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef IOS_WEB_VIEW_INTERNAL_LANGUAGE_WEB_VIEW_LANGUAGE_MODEL_FACTORY_H_ #ifndef IOS_WEB_VIEW_INTERNAL_LANGUAGE_WEB_VIEW_LANGUAGE_MODEL_MANAGER_FACTORY_H_
#define IOS_WEB_VIEW_INTERNAL_LANGUAGE_WEB_VIEW_LANGUAGE_MODEL_FACTORY_H_ #define IOS_WEB_VIEW_INTERNAL_LANGUAGE_WEB_VIEW_LANGUAGE_MODEL_MANAGER_FACTORY_H_
#include <memory> #include <memory>
...@@ -16,7 +16,7 @@ struct DefaultSingletonTraits; ...@@ -16,7 +16,7 @@ struct DefaultSingletonTraits;
} // namespace base } // namespace base
namespace language { namespace language {
class LanguageModel; class LanguageModelManager;
} // namespace language } // namespace language
namespace user_prefs { namespace user_prefs {
...@@ -27,17 +27,19 @@ namespace ios_web_view { ...@@ -27,17 +27,19 @@ namespace ios_web_view {
class WebViewBrowserState; class WebViewBrowserState;
class WebViewLanguageModelFactory : public BrowserStateKeyedServiceFactory { class WebViewLanguageModelManagerFactory
: public BrowserStateKeyedServiceFactory {
public: public:
static language::LanguageModel* GetForBrowserState( static language::LanguageModelManager* GetForBrowserState(
WebViewBrowserState* browser_state); WebViewBrowserState* browser_state);
static WebViewLanguageModelFactory* GetInstance(); static WebViewLanguageModelManagerFactory* GetInstance();
private: private:
friend struct base::DefaultSingletonTraits<WebViewLanguageModelFactory>; friend struct base::DefaultSingletonTraits<
WebViewLanguageModelManagerFactory>;
WebViewLanguageModelFactory(); WebViewLanguageModelManagerFactory();
~WebViewLanguageModelFactory() override = default; ~WebViewLanguageModelManagerFactory() override = default;
// BrowserStateKeyedServiceFactory implementation. // BrowserStateKeyedServiceFactory implementation.
std::unique_ptr<KeyedService> BuildServiceInstanceFor( std::unique_ptr<KeyedService> BuildServiceInstanceFor(
...@@ -47,9 +49,9 @@ class WebViewLanguageModelFactory : public BrowserStateKeyedServiceFactory { ...@@ -47,9 +49,9 @@ class WebViewLanguageModelFactory : public BrowserStateKeyedServiceFactory {
web::BrowserState* GetBrowserStateToUse( web::BrowserState* GetBrowserStateToUse(
web::BrowserState* state) const override; web::BrowserState* state) const override;
DISALLOW_COPY_AND_ASSIGN(WebViewLanguageModelFactory); DISALLOW_COPY_AND_ASSIGN(WebViewLanguageModelManagerFactory);
}; };
} // namespace ios_web_view } // namespace ios_web_view
#endif // IOS_WEB_VIEW_INTERNAL_LANGUAGE_WEB_VIEW_LANGUAGE_MODEL_FACTORY_H_ #endif // IOS_WEB_VIEW_INTERNAL_LANGUAGE_WEB_VIEW_LANGUAGE_MODEL_MANAGER_FACTORY_H_
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "base/logging.h" #include "base/logging.h"
#include "components/infobars/core/infobar.h" #include "components/infobars/core/infobar.h"
#include "components/language/core/browser/language_model_manager.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
#include "components/translate/core/browser/page_translated_details.h" #include "components/translate/core/browser/page_translated_details.h"
#include "components/translate/core/browser/translate_accept_languages.h" #include "components/translate/core/browser/translate_accept_languages.h"
...@@ -18,7 +19,7 @@ ...@@ -18,7 +19,7 @@
#include "components/translate/core/common/language_detection_details.h" #include "components/translate/core/common/language_detection_details.h"
#include "ios/web/public/browser_state.h" #include "ios/web/public/browser_state.h"
#import "ios/web/public/web_state/web_state.h" #import "ios/web/public/web_state/web_state.h"
#include "ios/web_view/internal/language/web_view_language_model_factory.h" #include "ios/web_view/internal/language/web_view_language_model_manager_factory.h"
#import "ios/web_view/internal/language/web_view_url_language_histogram_factory.h" #import "ios/web_view/internal/language/web_view_url_language_histogram_factory.h"
#include "ios/web_view/internal/pref_names.h" #include "ios/web_view/internal/pref_names.h"
#import "ios/web_view/internal/translate/cwv_translation_controller_internal.h" #import "ios/web_view/internal/translate/cwv_translation_controller_internal.h"
...@@ -41,7 +42,8 @@ WebViewTranslateClient::WebViewTranslateClient(web::WebState* web_state) ...@@ -41,7 +42,8 @@ WebViewTranslateClient::WebViewTranslateClient(web::WebState* web_state)
translate_manager_(std::make_unique<translate::TranslateManager>( translate_manager_(std::make_unique<translate::TranslateManager>(
this, this,
WebViewTranslateRankerFactory::GetForBrowserState(browser_state_), WebViewTranslateRankerFactory::GetForBrowserState(browser_state_),
WebViewLanguageModelFactory::GetForBrowserState(browser_state_))), WebViewLanguageModelManagerFactory::GetForBrowserState(browser_state_)
->GetDefaultModel())),
translate_driver_(web_state, translate_driver_(web_state,
web_state->GetNavigationManager(), web_state->GetNavigationManager(),
translate_manager_.get()) { translate_manager_.get()) {
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
#include "ios/web_view/internal/autofill/web_view_personal_data_manager_factory.h" #include "ios/web_view/internal/autofill/web_view_personal_data_manager_factory.h"
#include "ios/web_view/internal/content_settings/web_view_cookie_settings_factory.h" #include "ios/web_view/internal/content_settings/web_view_cookie_settings_factory.h"
#include "ios/web_view/internal/content_settings/web_view_host_content_settings_map_factory.h" #include "ios/web_view/internal/content_settings/web_view_host_content_settings_map_factory.h"
#include "ios/web_view/internal/language/web_view_language_model_factory.h" #include "ios/web_view/internal/language/web_view_language_model_manager_factory.h"
#include "ios/web_view/internal/language/web_view_url_language_histogram_factory.h" #include "ios/web_view/internal/language/web_view_url_language_histogram_factory.h"
#include "ios/web_view/internal/pref_names.h" #include "ios/web_view/internal/pref_names.h"
#include "ios/web_view/internal/signin/web_view_account_fetcher_service_factory.h" #include "ios/web_view/internal/signin/web_view_account_fetcher_service_factory.h"
...@@ -161,7 +161,7 @@ void WebViewBrowserState::RegisterPrefs( ...@@ -161,7 +161,7 @@ void WebViewBrowserState::RegisterPrefs(
#endif // BUILDFLAG(IOS_WEB_VIEW_ENABLE_AUTOFILL) #endif // BUILDFLAG(IOS_WEB_VIEW_ENABLE_AUTOFILL)
// Instantiate all factories to setup dependency graph for pref registration. // Instantiate all factories to setup dependency graph for pref registration.
WebViewLanguageModelFactory::GetInstance(); WebViewLanguageModelManagerFactory::GetInstance();
WebViewTranslateRankerFactory::GetInstance(); WebViewTranslateRankerFactory::GetInstance();
WebViewUrlLanguageHistogramFactory::GetInstance(); WebViewUrlLanguageHistogramFactory::GetInstance();
WebViewTranslateAcceptLanguagesFactory::GetInstance(); WebViewTranslateAcceptLanguagesFactory::GetInstance();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment