Chromium Code Reviews| 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( |