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

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: . 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
46 LanguagesHandler::HandleGetProspectiveUILanguage(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 locale = locale.size() ? locale :
stevenjb 2016/12/13 18:53:09 if (locale.empty()) locale = ...
michaelpg 2016/12/14 01:13:27 Done.
60 g_browser_process->local_state()->GetString(prefs::kApplicationLocale);
61
62 ResolveJavascriptCallback(*callback_id, base::StringValue(locale));
63 #else
64 NOTREACHED() << "Attempting to get locale on unsupported platform";
65 #endif // defined(OS_WIN) || defined(OS_CHROMEOS)
66 }
67
68 void
69 LanguagesHandler::HandleSetProspectiveUILanguage(const base::ListValue* args) {
70 AllowJavascript();
42 CHECK_EQ(1U, args->GetSize()); 71 CHECK_EQ(1U, args->GetSize());
43 72
44 std::string language_code; 73 std::string language_code;
45 CHECK(args->GetString(0, &language_code)); 74 CHECK(args->GetString(0, &language_code));
46 75
47 #if defined(OS_WIN) 76 #if defined(OS_WIN)
48 PrefService* prefs = g_browser_process->local_state(); 77 PrefService* prefs = g_browser_process->local_state();
49 prefs->SetString(prefs::kApplicationLocale, language_code); 78 prefs->SetString(prefs::kApplicationLocale, language_code);
50 #elif defined(OS_CHROMEOS) 79 #elif defined(OS_CHROMEOS)
51 // Secondary users and public session users cannot change the locale. 80 // Secondary users and public session users cannot change the locale.
52 user_manager::UserManager* user_manager = user_manager::UserManager::Get(); 81 user_manager::UserManager* user_manager = user_manager::UserManager::Get();
53 const user_manager::User* user = 82 const user_manager::User* user =
54 chromeos::ProfileHelper::Get()->GetUserByProfile(profile_); 83 chromeos::ProfileHelper::Get()->GetUserByProfile(profile_);
55 if (user && 84 if (user &&
56 user->GetAccountId() == user_manager->GetPrimaryUser()->GetAccountId() && 85 user->GetAccountId() == user_manager->GetPrimaryUser()->GetAccountId() &&
57 user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT) { 86 user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT) {
58 profile_->ChangeAppLocale(language_code, 87 profile_->ChangeAppLocale(language_code,
59 Profile::APP_LOCALE_CHANGED_VIA_SETTINGS); 88 Profile::APP_LOCALE_CHANGED_VIA_SETTINGS);
60 } 89 }
61 #else 90 #else
62 NOTREACHED() << "Attempting to set locale on unsupported platform"; 91 NOTREACHED() << "Attempting to set locale on unsupported platform";
63 #endif 92 #endif
64 } 93 }
65 94
66 } // namespace settings 95 } // namespace settings
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698