Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(190)

Side by Side Diff: chrome/browser/ui/webui/settings/languages_handler.cc

Issue 2573643005: Language settings: Fix Restart and Remove buttons shown at wrong times (Closed)
Patch Set: feedback Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/settings/languages_handler.h" 5 #include "chrome/browser/ui/webui/settings/languages_handler.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/values.h" 8 #include "base/values.h"
9 #include "build/build_config.h" 9 #include "build/build_config.h"
10 #include "chrome/browser/profiles/profile.h" 10 #include "chrome/browser/profiles/profile.h"
11 #include "content/public/browser/web_ui.h" 11 #include "content/public/browser/web_ui.h"
12 12
13 #if defined(OS_WIN) 13 #if defined(OS_WIN) || defined(OS_CHROMEOS)
14 #include "chrome/browser/browser_process.h" 14 #include "chrome/browser/browser_process.h"
15 #include "chrome/common/pref_names.h" 15 #include "chrome/common/pref_names.h"
16 #include "components/prefs/pref_service.h" 16 #include "components/prefs/pref_service.h"
17 #endif 17 #endif
18 18
19 #if defined(OS_CHROMEOS) 19 #if defined(OS_CHROMEOS)
20 #include "chrome/browser/chromeos/profiles/profile_helper.h" 20 #include "chrome/browser/chromeos/profiles/profile_helper.h"
21 #include "components/user_manager/user_manager.h" 21 #include "components/user_manager/user_manager.h"
22 #include "components/user_manager/user_type.h" 22 #include "components/user_manager/user_type.h"
23 #endif 23 #endif
24 24
25 namespace settings { 25 namespace settings {
26 26
27 LanguagesHandler::LanguagesHandler(content::WebUI* webui) 27 LanguagesHandler::LanguagesHandler(content::WebUI* webui)
28 : profile_(Profile::FromWebUI(webui)) { 28 : profile_(Profile::FromWebUI(webui)) {
29 } 29 }
30 30
31 LanguagesHandler::~LanguagesHandler() { 31 LanguagesHandler::~LanguagesHandler() {
32 } 32 }
33 33
34 void LanguagesHandler::RegisterMessages() { 34 void LanguagesHandler::RegisterMessages() {
35 web_ui()->RegisterMessageCallback( 35 web_ui()->RegisterMessageCallback(
36 "setUILanguage", 36 "getProspectiveUILanguage",
37 base::Bind(&LanguagesHandler::HandleSetUILanguage, 37 base::Bind(&LanguagesHandler::HandleGetProspectiveUILanguage,
38 base::Unretained(this)));
39 web_ui()->RegisterMessageCallback(
40 "setProspectiveUILanguage",
41 base::Bind(&LanguagesHandler::HandleSetProspectiveUILanguage,
38 base::Unretained(this))); 42 base::Unretained(this)));
39 } 43 }
40 44
41 void LanguagesHandler::HandleSetUILanguage(const base::ListValue* args) { 45 void LanguagesHandler::HandleGetProspectiveUILanguage(
46 const base::ListValue* args) {
47 #if defined(OS_WIN) || defined(OS_CHROMEOS)
48 const base::Value* callback_id;
49 CHECK(args->Get(0, &callback_id));
50
51 AllowJavascript();
52
53 std::string locale;
54 #if defined(OS_CHROMEOS)
55 // On Chrome OS, an individual profile may have a preferred locale.
56 locale = profile_->GetPrefs()->GetString(prefs::kApplicationLocale);
57 #endif // defined(OS_CHROMEOS)
58
59 if (locale.empty()) {
60 locale =
61 g_browser_process->local_state()->GetString(prefs::kApplicationLocale);
62 }
63
64 ResolveJavascriptCallback(*callback_id, base::StringValue(locale));
65 #else
66 NOTREACHED() << "Attempting to get locale on unsupported platform";
67 #endif // defined(OS_WIN) || defined(OS_CHROMEOS)
68 }
69
70 void LanguagesHandler::HandleSetProspectiveUILanguage(
71 const base::ListValue* args) {
72 AllowJavascript();
42 CHECK_EQ(1U, args->GetSize()); 73 CHECK_EQ(1U, args->GetSize());
43 74
44 std::string language_code; 75 std::string language_code;
45 CHECK(args->GetString(0, &language_code)); 76 CHECK(args->GetString(0, &language_code));
46 77
47 #if defined(OS_WIN) 78 #if defined(OS_WIN)
48 PrefService* prefs = g_browser_process->local_state(); 79 PrefService* prefs = g_browser_process->local_state();
49 prefs->SetString(prefs::kApplicationLocale, language_code); 80 prefs->SetString(prefs::kApplicationLocale, language_code);
50 #elif defined(OS_CHROMEOS) 81 #elif defined(OS_CHROMEOS)
51 // Secondary users and public session users cannot change the locale. 82 // Secondary users and public session users cannot change the locale.
52 user_manager::UserManager* user_manager = user_manager::UserManager::Get(); 83 user_manager::UserManager* user_manager = user_manager::UserManager::Get();
53 const user_manager::User* user = 84 const user_manager::User* user =
54 chromeos::ProfileHelper::Get()->GetUserByProfile(profile_); 85 chromeos::ProfileHelper::Get()->GetUserByProfile(profile_);
55 if (user && 86 if (user &&
56 user->GetAccountId() == user_manager->GetPrimaryUser()->GetAccountId() && 87 user->GetAccountId() == user_manager->GetPrimaryUser()->GetAccountId() &&
57 user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT) { 88 user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT) {
58 profile_->ChangeAppLocale(language_code, 89 profile_->ChangeAppLocale(language_code,
59 Profile::APP_LOCALE_CHANGED_VIA_SETTINGS); 90 Profile::APP_LOCALE_CHANGED_VIA_SETTINGS);
60 } 91 }
61 #else 92 #else
62 NOTREACHED() << "Attempting to set locale on unsupported platform"; 93 NOTREACHED() << "Attempting to set locale on unsupported platform";
63 #endif 94 #endif
64 } 95 }
65 96
66 } // namespace settings 97 } // namespace settings
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/settings/languages_handler.h ('k') | chrome/test/data/webui/settings/languages_tests.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698