Index: chrome/browser/ui/webui/help/help_handler.cc |
diff --git a/chrome/browser/ui/webui/help/help_handler.cc b/chrome/browser/ui/webui/help/help_handler.cc |
index 3da02fd70438be8bbba1b7f35b1f38b98a8bca3e..c23c623165c6992e59eb49bfcb7d16222fa7d155 100644 |
--- a/chrome/browser/ui/webui/help/help_handler.cc |
+++ b/chrome/browser/ui/webui/help/help_handler.cc |
@@ -89,17 +89,21 @@ string16 GetAllowedConnectionTypesMessage() { |
} |
} |
-bool CanChangeReleaseChannel() { |
- // On non managed machines we have local owner who is the only one to change |
- // anything. |
- if (chromeos::UserManager::Get()->IsCurrentUserOwner()) |
- return true; |
+// Returns true if the device is enterprise managed, false otherwise. |
+bool IsEnterpriseManaged() { |
+ return g_browser_process->browser_policy_connector()->IsEnterpriseManaged(); |
+} |
+ |
+// Returns true if current user can change channel, false otherwise. |
+bool CanChangeChannel() { |
+ bool value = false; |
+ chromeos::CrosSettings::Get()->GetBoolean(chromeos::kReleaseChannelDelegated, |
+ &value); |
+ |
// On a managed machine we delegate this setting to the users of the same |
// domain only if the policy value is "domain". |
- if (g_browser_process->browser_policy_connector()->IsEnterpriseManaged()) { |
- bool value = false; |
- if (!chromeos::CrosSettings::Get()->GetBoolean( |
- chromeos::kReleaseChannelDelegated, &value) || !value) |
+ if (IsEnterpriseManaged()) { |
+ if (!value) |
return false; |
// Get the currently logged in user and strip the domain part only. |
std::string domain = ""; |
@@ -109,6 +113,10 @@ bool CanChangeReleaseChannel() { |
domain = user.substr(user.find('@') + 1); |
return domain == g_browser_process->browser_policy_connector()-> |
GetEnterpriseDomain(); |
+ } else if (chromeos::UserManager::Get()->IsCurrentUserOwner()) { |
+ // On non managed machines we have local owner who is the only one to change |
+ // anything. Ensure that ReleaseChannelDelegated is false. |
+ return !value; |
} |
return false; |
} |
@@ -146,6 +154,8 @@ void HelpHandler::GetLocalizedValues(content::WebUIDataSource* source) { |
#endif |
{ "aboutProductDescription", IDS_ABOUT_PRODUCT_DESCRIPTION }, |
{ "relaunch", IDS_RELAUNCH_BUTTON }, |
+ { "relaunch", IDS_RELAUNCH_BUTTON }, |
+ { "relaunchAndPowerwash", IDS_RELAUNCH_AND_POWERWASH_BUTTON }, |
{ "productName", IDS_PRODUCT_NAME }, |
{ "productCopyright", IDS_ABOUT_VERSION_COPYRIGHT }, |
{ "updateCheckStarted", IDS_UPGRADE_CHECK_STARTED }, |
@@ -164,6 +174,32 @@ void HelpHandler::GetLocalizedValues(content::WebUIDataSource* source) { |
{ "beta", IDS_ABOUT_PAGE_CHANNEL_BETA }, |
{ "dev", IDS_ABOUT_PAGE_CHANNEL_DEVELOPMENT }, |
{ "channel-changed", IDS_ABOUT_PAGE_CHANNEL_CHANGED }, |
+ { "currentChannelStable", IDS_ABOUT_PAGE_CURRENT_CHANNEL_STABLE }, |
+ { "currentChannelBeta", IDS_ABOUT_PAGE_CURRENT_CHANNEL_BETA }, |
+ { "currentChannelDev", IDS_ABOUT_PAGE_CURRENT_CHANNEL_DEV }, |
+ { "currentChannel", IDS_ABOUT_PAGE_CURRENT_CHANNEL }, |
+ { "channelChangeButton", IDS_ABOUT_PAGE_CHANNEL_CHANGE_BUTTON }, |
+ { "channelChangeDisallowedMessage", |
+ IDS_ABOUT_PAGE_CHANNEL_CHANGE_DISALLOWED_MESSAGE }, |
+ { "channelChangePageTitle", IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_TITLE }, |
+ { "channelChangePagePowerwashTitle", |
+ IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_POWERWASH_TITLE }, |
+ { "channelChangePagePowerwashMessage", |
+ IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_POWERWASH_MESSAGE }, |
+ { "channelChangePageDelayedChangeTitle", |
+ IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_DELAYED_CHANGE_TITLE }, |
+ { "channelChangePageDelayedChangeMessage", |
+ IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_DELAYED_CHANGE_MESSAGE }, |
+ { "channelChangePageUnstableTitle", |
+ IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_UNSTABLE_TITLE }, |
+ { "channelChangePageUnstableMessage", |
+ IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_UNSTABLE_MESSAGE }, |
+ { "channelChangePagePowerwashButton", |
+ IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_POWERWASH_BUTTON }, |
+ { "channelChangePageChangeButton", |
+ IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_CHANGE_BUTTON }, |
+ { "channelChangePageCancelButton", |
+ IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_CANCEL_BUTTON }, |
{ "webkit", IDS_WEBKIT }, |
{ "userAgent", IDS_ABOUT_VERSION_USER_AGENT }, |
{ "commandLine", IDS_ABOUT_VERSION_COMMAND_LINE }, |
@@ -237,8 +273,8 @@ void HelpHandler::RegisterMessages() { |
web_ui()->RegisterMessageCallback("openHelpPage", |
base::Bind(&HelpHandler::OpenHelpPage, base::Unretained(this))); |
#if defined(OS_CHROMEOS) |
- web_ui()->RegisterMessageCallback("setReleaseTrack", |
- base::Bind(&HelpHandler::SetReleaseTrack, base::Unretained(this))); |
+ web_ui()->RegisterMessageCallback("setChannel", |
+ base::Bind(&HelpHandler::SetChannel, base::Unretained(this))); |
#endif |
#if defined(OS_MACOSX) |
web_ui()->RegisterMessageCallback("promoteUpdater", |
@@ -278,7 +314,7 @@ void HelpHandler::OnPageLoaded(const ListValue* args) { |
web_ui()->CallJavascriptFunction( |
"help.HelpPage.updateEnableReleaseChannel", |
- base::FundamentalValue(CanChangeReleaseChannel())); |
+ base::FundamentalValue(CanChangeChannel())); |
if (g_build_date_string == NULL) { |
// If |g_build_date_string| is |NULL|, the date has not yet been assigned. |
@@ -302,8 +338,13 @@ void HelpHandler::OnPageLoaded(const ListValue* args) { |
); |
#if defined(OS_CHROMEOS) |
- version_updater_->GetReleaseChannel( |
- base::Bind(&HelpHandler::OnReleaseChannel, base::Unretained(this))); |
+ web_ui()->CallJavascriptFunction( |
+ "help.HelpPage.updateIsEnterpriseManaged", |
+ base::FundamentalValue(IsEnterpriseManaged())); |
+ version_updater_->GetChannel(true, |
Nikita (slow)
2013/06/21 12:58:04
nit: Please add comments for true/false value (1st
ygorshenin1
2013/06/21 17:24:58
Done.
|
+ base::Bind(&HelpHandler::OnCurrentChannel, weak_factory_.GetWeakPtr())); |
+ version_updater_->GetChannel(false, |
+ base::Bind(&HelpHandler::OnTargetChannel, weak_factory_.GetWeakPtr())); |
#endif |
} |
@@ -334,21 +375,24 @@ void HelpHandler::OpenHelpPage(const base::ListValue* args) { |
#if defined(OS_CHROMEOS) |
-void HelpHandler::SetReleaseTrack(const ListValue* args) { |
- if (!CanChangeReleaseChannel()) { |
+void HelpHandler::SetChannel(const ListValue* args) { |
+ DCHECK(args->GetSize() == 2); |
+ |
+ if (!CanChangeChannel()) { |
LOG(WARNING) << "Non-owner tried to change release track."; |
return; |
} |
- const std::string channel = UTF16ToUTF8(ExtractStringValue(args)); |
- version_updater_->SetReleaseChannel(channel); |
- // On enterprise machines we can only use SetReleaseChannel to store the |
- // user choice in the lsb-release file but we can not modify the policy blob. |
- // Therefore we only call SetString if the device is locally owned and the |
- // currently logged in user is the owner. |
+ base::string16 channel; |
+ bool is_powerwash_allowed; |
+ if (!args->GetString(0, &channel) || |
+ !args->GetBoolean(1, &is_powerwash_allowed)) { |
+ LOG(ERROR) << "Can't parse SetReleaseTrack() args"; |
+ return; |
+ } |
+ |
+ version_updater_->SetChannel(UTF16ToUTF8(channel), is_powerwash_allowed); |
if (chromeos::UserManager::Get()->IsCurrentUserOwner()) { |
- chromeos::CrosSettings::Get()->SetString(chromeos::kReleaseChannel, |
- channel); |
// Check for update after switching release channel. |
version_updater_->CheckForUpdate(base::Bind(&HelpHandler::SetUpdateStatus, |
base::Unretained(this))); |
@@ -447,9 +491,14 @@ void HelpHandler::OnOSFirmware(const std::string& firmware) { |
base::StringValue(firmware)); |
} |
-void HelpHandler::OnReleaseChannel(const std::string& channel) { |
+void HelpHandler::OnCurrentChannel(const std::string& channel) { |
+ web_ui()->CallJavascriptFunction( |
+ "help.HelpPage.updateCurrentChannel", base::StringValue(channel)); |
+} |
+ |
+void HelpHandler::OnTargetChannel(const std::string& channel) { |
web_ui()->CallJavascriptFunction( |
- "help.HelpPage.updateSelectedChannel", base::StringValue(channel)); |
+ "help.HelpPage.updateTargetChannel", base::StringValue(channel)); |
} |
void HelpHandler::ProcessLsbFileInfo( |