Index: chrome/browser/chromeos/base/locale_util.cc |
diff --git a/chrome/browser/chromeos/base/locale_util.cc b/chrome/browser/chromeos/base/locale_util.cc |
index 288b335e5accbbfa3d95a002385bbd695761ec61..57d23a84cfe376b2c8e4fb5a4c755dc212477576 100644 |
--- a/chrome/browser/chromeos/base/locale_util.cc |
+++ b/chrome/browser/chromeos/base/locale_util.cc |
@@ -21,17 +21,20 @@ |
SwitchLanguageData(const std::string& locale, |
const bool enable_locale_keyboard_layouts, |
const bool login_layouts_only, |
- const locale_util::SwitchLanguageCallback& callback) |
- : callback(callback), |
- result(locale, std::string(), false), |
+ scoped_ptr<locale_util::SwitchLanguageCallback> callback) |
+ : callback(callback.Pass()), |
+ locale(locale), |
enable_locale_keyboard_layouts(enable_locale_keyboard_layouts), |
- login_layouts_only(login_layouts_only) {} |
+ login_layouts_only(login_layouts_only), |
+ success(false) {} |
- const locale_util::SwitchLanguageCallback callback; |
+ scoped_ptr<locale_util::SwitchLanguageCallback> callback; |
- locale_util::LanguageSwitchResult result; |
+ const std::string locale; |
const bool enable_locale_keyboard_layouts; |
const bool login_layouts_only; |
+ std::string loaded_locale; |
+ bool success; |
}; |
// Runs on SequencedWorkerPool thread under PostTaskAndReply(). |
@@ -39,11 +42,10 @@ |
void SwitchLanguageDoReloadLocale(SwitchLanguageData* data) { |
DCHECK(!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
- data->result.loaded_locale = |
- ResourceBundle::GetSharedInstance().ReloadLocaleResources( |
- data->result.requested_locale); |
+ data->loaded_locale = |
+ ResourceBundle::GetSharedInstance().ReloadLocaleResources(data->locale); |
- data->result.success = !data->result.loaded_locale.empty(); |
+ data->success = !data->loaded_locale.empty(); |
ResourceBundle::GetSharedInstance().ReloadFonts(); |
} |
@@ -51,8 +53,8 @@ |
// Callback after SwitchLanguageDoReloadLocale() back in UI thread. |
void FinishSwitchLanguage(scoped_ptr<SwitchLanguageData> data) { |
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
- if (data->result.success) { |
- g_browser_process->SetApplicationLocale(data->result.loaded_locale); |
+ if (data->success) { |
+ g_browser_process->SetApplicationLocale(data->loaded_locale); |
if (data->enable_locale_keyboard_layouts) { |
input_method::InputMethodManager* manager = |
@@ -65,7 +67,7 @@ |
// first hardware keyboard layout since the input method currently in |
// use may not be supported by the new locale. |
ime_state->EnableLoginLayouts( |
- data->result.loaded_locale, |
+ data->loaded_locale, |
manager->GetInputMethodUtil()->GetHardwareLoginInputMethodIds()); |
} else { |
// Enable all hardware keyboard layouts. This will also switch to the |
@@ -76,7 +78,7 @@ |
// Enable all locale-specific layouts. |
std::vector<std::string> input_methods; |
manager->GetInputMethodUtil()->GetInputMethodIdsFromLanguageCode( |
- data->result.loaded_locale, |
+ data->loaded_locale, |
input_method::kKeyboardLayoutsOnly, |
&input_methods); |
for (std::vector<std::string>::const_iterator it = |
@@ -87,29 +89,24 @@ |
} |
} |
gfx::PlatformFontPango::ReloadDefaultFont(); |
- if (!data->callback.is_null()) |
- data->callback.Run(data->result); |
+ if (data->callback) |
+ data->callback->Run(data->locale, data->loaded_locale, data->success); |
} |
} // namespace |
namespace locale_util { |
-LanguageSwitchResult::LanguageSwitchResult(const std::string& requested_locale, |
- const std::string& loaded_locale, |
- bool success) |
- : requested_locale(requested_locale), |
- loaded_locale(loaded_locale), |
- success(success) { |
-} |
- |
void SwitchLanguage(const std::string& locale, |
const bool enable_locale_keyboard_layouts, |
const bool login_layouts_only, |
- const SwitchLanguageCallback& callback) { |
+ scoped_ptr<SwitchLanguageCallback> callback) { |
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
- scoped_ptr<SwitchLanguageData> data(new SwitchLanguageData( |
- locale, enable_locale_keyboard_layouts, login_layouts_only, callback)); |
+ scoped_ptr<SwitchLanguageData> data( |
+ new SwitchLanguageData(locale, |
+ enable_locale_keyboard_layouts, |
+ login_layouts_only, |
+ callback.Pass())); |
base::Closure reloader( |
base::Bind(&SwitchLanguageDoReloadLocale, base::Unretained(data.get()))); |
content::BrowserThread::PostBlockingPoolTaskAndReply( |