// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/webui/options/advanced_options_handler.h"
#include <string>
#include "base/basictypes.h"
#include "base/callback.h"
#include "base/command_line.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/download/download_manager.h"
#include "chrome/browser/download/download_prefs.h"
#include "chrome/browser/google/google_util.h"
#include "chrome/browser/metrics/user_metrics.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h"
#include "chrome/browser/printing/cloud_print/cloud_print_setup_flow.h"
#include "chrome/browser/printing/cloud_print/cloud_print_url.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/remoting/setup_flow.h"
#include "chrome/browser/service/service_process_control.h"
#include "chrome/browser/service/service_process_control_manager.h"
#include "chrome/browser/ui/options/options_util.h"
#include "chrome/browser/ui/options/options_window.h"
#include "chrome/browser/ui/webui/options/options_managed_banner_handler.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "content/browser/tab_contents/tab_contents_view.h"
#include "content/common/notification_details.h"
#include "content/common/notification_type.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
#include "ui/base/l10n/l10n_util.h"
#if !defined(OS_CHROMEOS)
#include "chrome/browser/printing/cloud_print/cloud_print_setup_handler.h"
#include "chrome/browser/ui/webui/options/advanced_options_utils.h"
#endif
AdvancedOptionsHandler::AdvancedOptionsHandler() {
#if (defined(GOOGLE_CHROME_BUILD) && defined(OS_WIN)) || defined(OS_MACOSX)
cloud_print_proxy_ui_enabled_ = true;
#elif !defined(OS_CHROMEOS)
cloud_print_proxy_ui_enabled_ =
CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableCloudPrintProxy);
#endif
}
AdvancedOptionsHandler::~AdvancedOptionsHandler() {
// There may be pending file dialogs, we need to tell them that we've gone
// away so they don't try and call back to us.
if (select_folder_dialog_.get())
select_folder_dialog_->ListenerDestroyed();
}
void AdvancedOptionsHandler::GetLocalizedValues(
DictionaryValue* localized_strings) {
DCHECK(localized_strings);
static OptionsStringResource resources[] = {
{ "downloadLocationGroupName",
IDS_OPTIONS_DOWNLOADLOCATION_GROUP_NAME },
{ "downloadLocationChangeButton",
IDS_OPTIONS_DOWNLOADLOCATION_CHANGE_BUTTON },
{ "downloadLocationBrowseTitle",
IDS_OPTIONS_DOWNLOADLOCATION_BROWSE_TITLE },
{ "downloadLocationBrowseWindowTitle",
IDS_OPTIONS_DOWNLOADLOCATION_BROWSE_WINDOW_TITLE },
{ "downloadLocationAskForSaveLocation",
IDS_OPTIONS_DOWNLOADLOCATION_ASKFORSAVELOCATION },
{ "autoOpenFileTypesInfo",
IDS_OPTIONS_OPEN_FILE_TYPES_AUTOMATICALLY },
{ "autoOpenFileTypesResetToDefault",
IDS_OPTIONS_AUTOOPENFILETYPES_RESETTODEFAULT },
{ "translateEnableTranslate",
IDS_OPTIONS_TRANSLATE_ENABLE_TRANSLATE },
{ "certificatesManageButton",
IDS_OPTIONS_CERTIFICATES_MANAGE_BUTTON },
{ "proxiesLabel",
IDS_OPTIONS_PROXIES_LABEL },
{ "proxiesConfigureButton",
IDS_OPTIONS_PROXIES_CONFIGURE_BUTTON },
{ "safeBrowsingEnableProtection",
IDS_OPTIONS_SAFEBROWSING_ENABLEPROTECTION },
{ "sslGroupDescription",
IDS_OPTIONS_SSL_GROUP_DESCRIPTION },
{ "sslCheckRevocation",
IDS_OPTIONS_SSL_CHECKREVOCATION },
{ "sslUseSSL3",
IDS_OPTIONS_SSL_USESSL3 },
{ "sslUseTLS1",
IDS_OPTIONS_SSL_USETLS1 },
{ "networkPredictionEnabledDescription",
IDS_NETWORK_PREDICTION_ENABLED_DESCRIPTION },
{ "privacyContentSettingsButton",
IDS_OPTIONS_PRIVACY_CONTENT_SETTINGS_BUTTON },
{ "privacyClearDataButton",
IDS_OPTIONS_PRIVACY_CLEAR_DATA_BUTTON },
{ "linkDoctorPref",
IDS_OPTIONS_LINKDOCTOR_PREF },
{ "suggestPref",
IDS_OPTIONS_SUGGEST_PREF },
{ "tabsToLinksPref",
IDS_OPTIONS_TABS_TO_LINKS_PREF },
{ "fontSettingsInfo",
IDS_OPTIONS_FONTSETTINGS_INFO },
{ "defaultZoomLevelLabel",
IDS_OPTIONS_DEFAULT_ZOOM_LEVEL_LABEL },
{ "defaultFontSizeLabel",
IDS_OPTIONS_DEFAULT_FONT_SIZE_LABEL },
{ "fontSizeLabelVerySmall",
IDS_OPTIONS_FONT_SIZE_LABEL_VERY_SMALL },
{ "fontSizeLabelSmall",
IDS_OPTIONS_FONT_SIZE_LABEL_SMALL },
{ "fontSizeLabelMedium",
IDS_OPTIONS_FONT_SIZE_LABEL_MEDIUM },
{ "fontSizeLabelLarge",
IDS_OPTIONS_FONT_SIZE_LABEL_LARGE },
{ "fontSizeLabelVeryLarge",
IDS_OPTIONS_FONT_SIZE_LABEL_VERY_LARGE },
{ "fontSizeLabelCustom",
IDS_OPTIONS_FONT_SIZE_LABEL_CUSTOM },
{ "fontSettingsCustomizeFontsButton",
IDS_OPTIONS_FONTSETTINGS_CUSTOMIZE_FONTS_BUTTON },
{ "languageAndSpellCheckSettingsButton",
IDS_OPTIONS_LANGUAGE_AND_SPELLCHECK_BUTTON },
{ "advancedSectionTitlePrivacy",
IDS_OPTIONS_ADVANCED_SECTION_TITLE_PRIVACY },
{ "advancedSectionTitleContent",
IDS_OPTIONS_ADVANCED_SECTION_TITLE_CONTENT },
{ "advancedSectionTitleSecurity",
IDS_OPTIONS_ADVANCED_SECTION_TITLE_SECURITY },
{ "advancedSectionTitleNetwork",
IDS_OPTIONS_ADVANCED_SECTION_TITLE_NETWORK },
{ "advancedSectionTitleTranslate",
IDS_OPTIONS_ADVANCED_SECTION_TITLE_TRANSLATE },
{ "translateEnableTranslate",
IDS_OPTIONS_TRANSLATE_ENABLE_TRANSLATE },
{ "enableLogging",
IDS_OPTIONS_ENABLE_LOGGING },
{ "improveBrowsingExperience",
IDS_OPTIONS_IMPROVE_BROWSING_EXPERIENCE },
{ "disableWebServices",
IDS_OPTIONS_DISABLE_WEB_SERVICES },
#if !defined(OS_CHROMEOS)
{ "advancedSectionTitleCloudPrint",
IDS_OPTIONS_ADVANCED_SECTION_TITLE_CLOUD_PRINT },
{ "cloudPrintProxyDisabledLabel",
IDS_OPTIONS_CLOUD_PRINT_PROXY_DISABLED_LABEL },
{ "cloudPrintProxyDisabledButton",
IDS_OPTIONS_CLOUD_PRINT_PROXY_DISABLED_BUTTON },
{ "cloudPrintProxyEnabledButton",
IDS_OPTIONS_CLOUD_PRINT_PROXY_ENABLED_BUTTON },
{ "cloudPrintProxyEnabledManageButton",
IDS_OPTIONS_CLOUD_PRINT_PROXY_ENABLED_MANAGE_BUTTON },
{ "cloudPrintProxyEnablingButton",
IDS_OPTIONS_CLOUD_PRINT_PROXY_ENABLING_BUTTON },
#endif
#if defined(ENABLE_REMOTING)
{ "advancedSectionTitleRemoting",
IDS_OPTIONS_ADVANCED_SECTION_TITLE_REMOTING },
{ "remotingSetupButton",
IDS_OPTIONS_REMOTING_SETUP_BUTTON },
{ "remotingStopButton",
IDS_OPTIONS_REMOTING_STOP_BUTTON },
#endif
};
RegisterStrings(localized_strings, resources, arraysize(resources));
RegisterTitle(localized_strings, "advancedPage",
IDS_OPTIONS_ADVANCED_TAB_LABEL);
localized_strings->SetString("privacyLearnMoreURL",
google_util::AppendGoogleLocaleParam(
GURL(chrome::kPrivacyLearnMoreURL)).spec());
}
void AdvancedOptionsHandler::Initialize() {
DCHECK(web_ui_);
SetupMetricsReportingCheckbox();
SetupMetricsReportingSettingVisibility();
SetupFontSizeLabel();
SetupDownloadLocationPath();
SetupPromptForDownload();
SetupAutoOpenFileTypesDisabledAttribute();
SetupProxySettingsSection();
SetupSSLConfigSettings();
#if !defined(OS_CHROMEOS)
if (cloud_print_proxy_ui_enabled_) {
SetupCloudPrintProxySection();
RefreshCloudPrintStatusFromService();
} else {
RemoveCloudPrintProxySection();
}
#endif
#if defined(ENABLE_REMOTING) && !defined(OS_CHROMEOS)
if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableRemoting)) {
RemoveRemotingSection();
} else {
remoting_options_handler_.Init(web_ui_);
}
#endif
banner_handler_.reset(
new OptionsManagedBannerHandler(web_ui_,
ASCIIToUTF16("AdvancedOptions"),
OPTIONS_PAGE_ADVANCED));
}
WebUIMessageHandler* AdvancedOptionsHandler::Attach(WebUI* web_ui) {
// Call through to superclass.
WebUIMessageHandler* handler = OptionsPageUIHandler::Attach(web_ui);
// Register for preferences that we need to observe manually. These have
// special behaviors that aren't handled by the standard prefs UI.
DCHECK(web_ui_);
PrefService* prefs = web_ui_->GetProfile()->GetPrefs();
#if !defined(OS_CHROMEOS)
enable_metrics_recording_.Init(prefs::kMetricsReportingEnabled,
g_browser_process->local_state(), this);
cloud_print_proxy_email_.Init(prefs::kCloudPrintEmail, prefs, this);
cloud_print_proxy_enabled_.Init(prefs::kCloudPrintProxyEnabled, prefs, this);
#endif
rev_checking_enabled_.Init(prefs::kCertRevocationCheckingEnabled,
g_browser_process->local_state(), this);
ssl3_enabled_.Init(prefs::kSSL3Enabled, g_browser_process->local_state(),
this);
tls1_enabled_.Init(prefs::kTLS1Enabled, g_browser_process->local_state(),
this);
default_download_location_.Init(prefs::kDownloadDefaultDirectory,
prefs, this);
ask_for_save_location_.Init(prefs::kPromptForDownload, prefs, this);
auto_open_files_.Init(prefs::kDownloadExtensionsToOpen, prefs, this);
default_font_size_.Init(prefs::kWebKitDefaultFontSize, prefs, this);
proxy_prefs_.reset(
PrefSetObserver::CreateProxyPrefSetObserver(prefs, this));
// Return result from the superclass.
return handler;
}
void AdvancedOptionsHandler::RegisterMessages() {
// Setup handlers specific to this panel.
DCHECK(web_ui_);
web_ui_->RegisterMessageCallback("selectDownloadLocation",
NewCallback(this,
&AdvancedOptionsHandler::HandleSelectDownloadLocation));
web_ui_->RegisterMessageCallback("promptForDownloadAction",
NewCallback(this,
&AdvancedOptionsHandler::HandlePromptForDownload));
web_ui_->RegisterMessageCallback("autoOpenFileTypesAction",
NewCallback(this,
&AdvancedOptionsHandler::HandleAutoOpenButton));
web_ui_->RegisterMessageCallback("defaultFontSizeAction",
NewCallback(this, &AdvancedOptionsHandler::HandleDefaultFontSize));
#if !defined(OS_CHROMEOS)
web_ui_->RegisterMessageCallback("metricsReportingCheckboxAction",
NewCallback(this,
&AdvancedOptionsHandler::HandleMetricsReportingCheckbox));
#endif
#if !defined(USE_NSS) && !defined(USE_OPENSSL)
web_ui_->RegisterMessageCallback("showManageSSLCertificates",
NewCallback(this,
&AdvancedOptionsHandler::ShowManageSSLCertificates));
#endif
#if !defined(OS_CHROMEOS)
if (cloud_print_proxy_ui_enabled_) {
web_ui_->RegisterMessageCallback("showCloudPrintSetupDialog",
NewCallback(this,
&AdvancedOptionsHandler::ShowCloudPrintSetupDialog));
web_ui_->RegisterMessageCallback("disableCloudPrintProxy",
NewCallback(this,
&AdvancedOptionsHandler::HandleDisableCloudPrintProxy));
web_ui_->RegisterMessageCallback("showCloudPrintManagePage",
NewCallback(this,
&AdvancedOptionsHandler::ShowCloudPrintManagePage));
}
web_ui_->RegisterMessageCallback("showNetworkProxySettings",
NewCallback(this,
&AdvancedOptionsHandler::ShowNetworkProxySettings));
#endif
#if defined(ENABLE_REMOTING) && !defined(OS_CHROMEOS)
web_ui_->RegisterMessageCallback("showRemotingSetupDialog",
NewCallback(this,
&AdvancedOptionsHandler::ShowRemotingSetupDialog));
web_ui_->RegisterMessageCallback("disableRemoting",
NewCallback(this,
&AdvancedOptionsHandler::DisableRemoting));
#endif
web_ui_->RegisterMessageCallback("checkRevocationCheckboxAction",
NewCallback(this,
&AdvancedOptionsHandler::HandleCheckRevocationCheckbox));
web_ui_->RegisterMessageCallback("useSSL3CheckboxAction",
NewCallback(this,
&AdvancedOptionsHandler::HandleUseSSL3Checkbox));
web_ui_->RegisterMessageCallback("useTLS1CheckboxAction",
NewCallback(this,
&AdvancedOptionsHandler::HandleUseTLS1Checkbox));
}
void AdvancedOptionsHandler::Observe(NotificationType type,
const NotificationSource& source,
const NotificationDetails& details) {
if (type == NotificationType::PREF_CHANGED) {
std::string* pref_name = Details<std::string>(details).ptr();
if ((*pref_name == prefs::kDownloadDefaultDirectory) ||
(*pref_name == prefs::kPromptForDownload)) {
SetupDownloadLocationPath();
SetupPromptForDownload();
} else if (*pref_name == prefs::kDownloadExtensionsToOpen) {
SetupAutoOpenFileTypesDisabledAttribute();
} else if (proxy_prefs_->IsObserved(*pref_name)) {
SetupProxySettingsSection();
} else if ((*pref_name == prefs::kCloudPrintEmail) ||
(*pref_name == prefs::kCloudPrintProxyEnabled)) {
#if !defined(OS_CHROMEOS)
if (cloud_print_proxy_ui_enabled_)
SetupCloudPrintProxySection();
#endif
} else if (*pref_name == prefs::kWebKitDefaultFontSize) {
SetupFontSizeLabel();
}
}
}
void AdvancedOptionsHandler::HandleSelectDownloadLocation(
const ListValue* args) {
PrefService* pref_service = web_ui_->GetProfile()->GetPrefs();
select_folder_dialog_ = SelectFileDialog::Create(this);
select_folder_dialog_->SelectFile(
SelectFileDialog::SELECT_FOLDER,
l10n_util::GetStringUTF16(IDS_OPTIONS_DOWNLOADLOCATION_BROWSE_TITLE),
pref_service->GetFilePath(prefs::kDownloadDefaultDirectory),
NULL, 0, FILE_PATH_LITERAL(""), web_ui_->tab_contents(),
web_ui_->tab_contents()->view()->GetTopLevelNativeWindow(), NULL);
}
void AdvancedOptionsHandler::HandlePromptForDownload(
const ListValue* args) {
std::string checked_str = UTF16ToUTF8(ExtractStringValue(args));
ask_for_save_location_.SetValue(checked_str == "true");
}
void AdvancedOptionsHandler::FileSelected(const FilePath& path, int index,
void* params) {
UserMetricsRecordAction(UserMetricsAction("Options_SetDownloadDirectory"));
default_download_location_.SetValue(path);
SetupDownloadLocationPath();
}
void AdvancedOptionsHandler::OnCloudPrintSetupClosed() {
#if !defined(OS_CHROMEOS)
if (cloud_print_proxy_ui_enabled_)
SetupCloudPrintProxySection();
#endif
}
void AdvancedOptionsHandler::HandleAutoOpenButton(const ListValue* args) {
UserMetricsRecordAction(UserMetricsAction("Options_ResetAutoOpenFiles"));
DownloadManager* manager = web_ui_->GetProfile()->GetDownloadManager();
if (manager)
manager->download_prefs()->ResetAutoOpen();
}
void AdvancedOptionsHandler::HandleMetricsReportingCheckbox(
const ListValue* args) {
#if defined(GOOGLE_CHROME_BUILD) && !defined(OS_CHROMEOS)
std::string checked_str = UTF16ToUTF8(ExtractStringValue(args));
bool enabled = checked_str == "true";
UserMetricsRecordAction(
enabled ?
UserMetricsAction("Options_MetricsReportingCheckbox_Enable") :
UserMetricsAction("Options_MetricsReportingCheckbox_Disable"));
bool is_enabled = OptionsUtil::ResolveMetricsReportingEnabled(enabled);
enable_metrics_recording_.SetValue(is_enabled);
SetupMetricsReportingCheckbox();
#endif
}
void AdvancedOptionsHandler::HandleDefaultFontSize(const ListValue* args) {
int font_size;
if (ExtractIntegerValue(args, &font_size)) {
if (font_size > 0) {
default_font_size_.SetValue(font_size);
SetupFontSizeLabel();
}
}
}
void AdvancedOptionsHandler::HandleCheckRevocationCheckbox(
const ListValue* args) {
std::string checked_str = UTF16ToUTF8(ExtractStringValue(args));
bool enabled = checked_str == "true";
std::string metric =
(enabled ? "Options_CheckCertRevocation_Enable"
: "Options_CheckCertRevocation_Disable");
UserMetricsRecordAction(UserMetricsAction(metric.c_str()));
rev_checking_enabled_.SetValue(enabled);
}
void AdvancedOptionsHandler::HandleUseSSL3Checkbox(const ListValue* args) {
std::string checked_str = UTF16ToUTF8(ExtractStringValue(args));
bool enabled = checked_str == "true";
std::string metric =
(enabled ? "Options_SSL3_Enable" : "Options_SSL3_Disable");
UserMetricsRecordAction(UserMetricsAction(metric.c_str()));
ssl3_enabled_.SetValue(enabled);
}
void AdvancedOptionsHandler::HandleUseTLS1Checkbox(const ListValue* args) {
std::string checked_str = UTF16ToUTF8(ExtractStringValue(args));
bool enabled = checked_str == "true";
std::string metric =
(enabled ? "Options_TLS1_Enable" : "Options_TLS1_Disable");
UserMetricsRecordAction(UserMetricsAction(metric.c_str()));
tls1_enabled_.SetValue(enabled);
}
#if !defined(OS_CHROMEOS)
void AdvancedOptionsHandler::ShowNetworkProxySettings(const ListValue* args) {
UserMetricsRecordAction(UserMetricsAction("Options_ShowProxySettings"));
AdvancedOptionsUtilities::ShowNetworkProxySettings(web_ui_->tab_contents());
}
#endif
#if !defined(USE_NSS) && !defined(USE_OPENSSL)
void AdvancedOptionsHandler::ShowManageSSLCertificates(const ListValue* args) {
UserMetricsRecordAction(UserMetricsAction("Options_ManageSSLCertificates"));
AdvancedOptionsUtilities::ShowManageSSLCertificates(web_ui_->tab_contents());
}
#endif
#if !defined(OS_CHROMEOS)
void AdvancedOptionsHandler::ShowCloudPrintSetupDialog(const ListValue* args) {
UserMetricsRecordAction(UserMetricsAction("Options_EnableCloudPrintProxy"));
cloud_print_setup_handler_.reset(new CloudPrintSetupHandler(this));
CloudPrintSetupFlow::OpenDialog(
web_ui_->GetProfile(), cloud_print_setup_handler_->AsWeakPtr(),
web_ui_->tab_contents()->GetMessageBoxRootWindow());
}
void AdvancedOptionsHandler::HandleDisableCloudPrintProxy(
const ListValue* args) {
UserMetricsRecordAction(UserMetricsAction("Options_DisableCloudPrintProxy"));
web_ui_->GetProfile()->GetCloudPrintProxyService()->DisableForUser();
}
void AdvancedOptionsHandler::ShowCloudPrintManagePage(const ListValue* args) {
UserMetricsRecordAction(UserMetricsAction("Options_ManageCloudPrinters"));
// Open a new tab in the current window for the management page.
web_ui_->tab_contents()->OpenURL(
CloudPrintURL(web_ui_->GetProfile()).GetCloudPrintServiceManageURL(),
GURL(), NEW_FOREGROUND_TAB, PageTransition::LINK);
}
void AdvancedOptionsHandler::RefreshCloudPrintStatusFromService() {
DCHECK(web_ui_);
if (cloud_print_proxy_ui_enabled_)
web_ui_->GetProfile()->GetCloudPrintProxyService()->
RefreshStatusFromService();
}
void AdvancedOptionsHandler::SetupCloudPrintProxySection() {
if (NULL == web_ui_->GetProfile()->GetCloudPrintProxyService()) {
cloud_print_proxy_ui_enabled_ = false;
RemoveCloudPrintProxySection();
return;
}
bool cloud_print_proxy_allowed =
!cloud_print_proxy_enabled_.IsManaged() ||
cloud_print_proxy_enabled_.GetValue();
FundamentalValue allowed(cloud_print_proxy_allowed);
std::string email;
if (web_ui_->GetProfile()->GetPrefs()->HasPrefPath(prefs::kCloudPrintEmail) &&
cloud_print_proxy_allowed) {
email = web_ui_->GetProfile()->GetPrefs()->GetString(
prefs::kCloudPrintEmail);
}
FundamentalValue disabled(email.empty());
string16 label_str;
if (email.empty()) {
label_str = l10n_util::GetStringUTF16(
IDS_OPTIONS_CLOUD_PRINT_PROXY_DISABLED_LABEL);
} else {
label_str = l10n_util::GetStringFUTF16(
IDS_OPTIONS_CLOUD_PRINT_PROXY_ENABLED_LABEL, UTF8ToUTF16(email));
}
StringValue label(label_str);
web_ui_->CallJavascriptFunction(
"options.AdvancedOptions.SetupCloudPrintProxySection",
disabled, label, allowed);
}
void AdvancedOptionsHandler::RemoveCloudPrintProxySection() {
web_ui_->CallJavascriptFunction(
"options.AdvancedOptions.RemoveCloudPrintProxySection");
}
#endif
#if defined(ENABLE_REMOTING) && !defined(OS_CHROMEOS)
void AdvancedOptionsHandler::RemoveRemotingSection() {
web_ui_->CallJavascriptFunction(
"options.AdvancedOptions.RemoveRemotingSection");
}
void AdvancedOptionsHandler::ShowRemotingSetupDialog(const ListValue* args) {
remoting::SetupFlow::OpenSetupDialog(web_ui_->GetProfile());
}
void AdvancedOptionsHandler::DisableRemoting(const ListValue* args) {
ServiceProcessControl* process_control =
ServiceProcessControlManager::GetInstance()->GetProcessControl(
web_ui_->GetProfile());
if (!process_control || !process_control->is_connected())
return;
process_control->DisableRemotingHost();
}
#endif
void AdvancedOptionsHandler::SetupMetricsReportingCheckbox() {
#if defined(GOOGLE_CHROME_BUILD) && !defined(OS_CHROMEOS)
FundamentalValue checked(enable_metrics_recording_.GetValue());
FundamentalValue disabled(enable_metrics_recording_.IsManaged());
web_ui_->CallJavascriptFunction(
"options.AdvancedOptions.SetMetricsReportingCheckboxState", checked,
disabled);
#endif
}
void AdvancedOptionsHandler::SetupMetricsReportingSettingVisibility() {
#if defined(GOOGLE_CHROME_BUILD) && defined(OS_CHROMEOS)
// Don't show the reporting setting if we are in the guest mode.
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kGuestSession)) {
FundamentalValue visible(false);
web_ui_->CallJavascriptFunction(
"options.AdvancedOptions.SetMetricsReportingSettingVisibility",
visible);
}
#endif
}
void AdvancedOptionsHandler::SetupFontSizeLabel() {
// We're only interested in integer values, so convert to int.
FundamentalValue font_size(default_font_size_.GetValue());
web_ui_->CallJavascriptFunction(
"options.AdvancedOptions.SetFontSize", font_size);
}
void AdvancedOptionsHandler::SetupDownloadLocationPath() {
StringValue value(default_download_location_.GetValue().value());
FundamentalValue disabled(default_download_location_.IsManaged());
web_ui_->CallJavascriptFunction(
"options.AdvancedOptions.SetDownloadLocationPath", value, disabled);
}
void AdvancedOptionsHandler::SetupPromptForDownload() {
FundamentalValue checked(ask_for_save_location_.GetValue());
FundamentalValue disabled(default_download_location_.IsManaged());
web_ui_->CallJavascriptFunction(
"options.AdvancedOptions.SetPromptForDownload", checked, disabled);
}
void AdvancedOptionsHandler::SetupAutoOpenFileTypesDisabledAttribute() {
// Set the enabled state for the AutoOpenFileTypesResetToDefault button.
// We enable the button if the user has any auto-open file types registered.
DownloadManager* manager = web_ui_->GetProfile()->GetDownloadManager();
bool disabled = !(manager && manager->download_prefs()->IsAutoOpenUsed());
FundamentalValue value(disabled);
web_ui_->CallJavascriptFunction(
"options.AdvancedOptions.SetAutoOpenFileTypesDisabledAttribute", value);
}
void AdvancedOptionsHandler::SetupProxySettingsSection() {
// Disable the button if proxy settings are managed by a sysadmin or
// overridden by an extension.
PrefService* pref_service = web_ui_->GetProfile()->GetPrefs();
const PrefService::Preference* proxy_config =
pref_service->FindPreference(prefs::kProxy);
bool is_extension_controlled = (proxy_config &&
proxy_config->IsExtensionControlled());
FundamentalValue disabled(proxy_prefs_->IsManaged() ||
is_extension_controlled);
// Get the appropriate info string to describe the button.
string16 label_str;
if (is_extension_controlled) {
label_str = l10n_util::GetStringUTF16(IDS_OPTIONS_EXTENSION_PROXIES_LABEL);
} else {
label_str = l10n_util::GetStringFUTF16(IDS_OPTIONS_SYSTEM_PROXIES_LABEL,
l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
}
StringValue label(label_str);
web_ui_->CallJavascriptFunction(
"options.AdvancedOptions.SetupProxySettingsSection", disabled, label);
}
void AdvancedOptionsHandler::SetupSSLConfigSettings() {
{
FundamentalValue checked(rev_checking_enabled_.GetValue());
FundamentalValue disabled(rev_checking_enabled_.IsManaged());
web_ui_->CallJavascriptFunction(
"options.AdvancedOptions.SetCheckRevocationCheckboxState", checked,
disabled);
}
{
FundamentalValue checked(ssl3_enabled_.GetValue());
FundamentalValue disabled(ssl3_enabled_.IsManaged());
web_ui_->CallJavascriptFunction(
"options.AdvancedOptions.SetUseSSL3CheckboxState", checked, disabled);
}
{
FundamentalValue checked(tls1_enabled_.GetValue());
FundamentalValue disabled(tls1_enabled_.IsManaged());
web_ui_->CallJavascriptFunction(
"options.AdvancedOptions.SetUseTLS1CheckboxState", checked, disabled);
}
}