Home | History | Annotate | Download | only in options
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/ui/webui/options/advanced_options_handler.h"
      6 
      7 #include <string>
      8 
      9 #include "base/basictypes.h"
     10 #include "base/callback.h"
     11 #include "base/command_line.h"
     12 #include "base/utf_string_conversions.h"
     13 #include "base/values.h"
     14 #include "chrome/browser/browser_process.h"
     15 #include "chrome/browser/download/download_manager.h"
     16 #include "chrome/browser/download/download_prefs.h"
     17 #include "chrome/browser/google/google_util.h"
     18 #include "chrome/browser/metrics/user_metrics.h"
     19 #include "chrome/browser/prefs/pref_service.h"
     20 #include "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h"
     21 #include "chrome/browser/printing/cloud_print/cloud_print_setup_flow.h"
     22 #include "chrome/browser/printing/cloud_print/cloud_print_url.h"
     23 #include "chrome/browser/profiles/profile.h"
     24 #include "chrome/browser/remoting/setup_flow.h"
     25 #include "chrome/browser/service/service_process_control.h"
     26 #include "chrome/browser/service/service_process_control_manager.h"
     27 #include "chrome/browser/ui/options/options_util.h"
     28 #include "chrome/browser/ui/options/options_window.h"
     29 #include "chrome/browser/ui/webui/options/options_managed_banner_handler.h"
     30 #include "chrome/common/chrome_switches.h"
     31 #include "chrome/common/pref_names.h"
     32 #include "chrome/common/url_constants.h"
     33 #include "content/browser/tab_contents/tab_contents.h"
     34 #include "content/browser/tab_contents/tab_contents_view.h"
     35 #include "content/common/notification_details.h"
     36 #include "content/common/notification_type.h"
     37 #include "grit/chromium_strings.h"
     38 #include "grit/generated_resources.h"
     39 #include "grit/locale_settings.h"
     40 #include "ui/base/l10n/l10n_util.h"
     41 
     42 #if !defined(OS_CHROMEOS)
     43 #include "chrome/browser/printing/cloud_print/cloud_print_setup_handler.h"
     44 #include "chrome/browser/ui/webui/options/advanced_options_utils.h"
     45 #endif
     46 
     47 AdvancedOptionsHandler::AdvancedOptionsHandler() {
     48 #if (defined(GOOGLE_CHROME_BUILD) && defined(OS_WIN)) || defined(OS_MACOSX)
     49   cloud_print_proxy_ui_enabled_ = true;
     50 #elif !defined(OS_CHROMEOS)
     51   cloud_print_proxy_ui_enabled_ =
     52       CommandLine::ForCurrentProcess()->HasSwitch(
     53           switches::kEnableCloudPrintProxy);
     54 #endif
     55 }
     56 
     57 AdvancedOptionsHandler::~AdvancedOptionsHandler() {
     58   // There may be pending file dialogs, we need to tell them that we've gone
     59   // away so they don't try and call back to us.
     60   if (select_folder_dialog_.get())
     61     select_folder_dialog_->ListenerDestroyed();
     62 }
     63 
     64 void AdvancedOptionsHandler::GetLocalizedValues(
     65     DictionaryValue* localized_strings) {
     66   DCHECK(localized_strings);
     67 
     68   static OptionsStringResource resources[] = {
     69     { "downloadLocationGroupName",
     70       IDS_OPTIONS_DOWNLOADLOCATION_GROUP_NAME },
     71     { "downloadLocationChangeButton",
     72       IDS_OPTIONS_DOWNLOADLOCATION_CHANGE_BUTTON },
     73     { "downloadLocationBrowseTitle",
     74       IDS_OPTIONS_DOWNLOADLOCATION_BROWSE_TITLE },
     75     { "downloadLocationBrowseWindowTitle",
     76       IDS_OPTIONS_DOWNLOADLOCATION_BROWSE_WINDOW_TITLE },
     77     { "downloadLocationAskForSaveLocation",
     78       IDS_OPTIONS_DOWNLOADLOCATION_ASKFORSAVELOCATION },
     79     { "autoOpenFileTypesInfo",
     80       IDS_OPTIONS_OPEN_FILE_TYPES_AUTOMATICALLY },
     81     { "autoOpenFileTypesResetToDefault",
     82       IDS_OPTIONS_AUTOOPENFILETYPES_RESETTODEFAULT },
     83     { "translateEnableTranslate",
     84       IDS_OPTIONS_TRANSLATE_ENABLE_TRANSLATE },
     85     { "certificatesManageButton",
     86       IDS_OPTIONS_CERTIFICATES_MANAGE_BUTTON },
     87     { "proxiesLabel",
     88       IDS_OPTIONS_PROXIES_LABEL },
     89     { "proxiesConfigureButton",
     90       IDS_OPTIONS_PROXIES_CONFIGURE_BUTTON },
     91     { "safeBrowsingEnableProtection",
     92       IDS_OPTIONS_SAFEBROWSING_ENABLEPROTECTION },
     93     { "sslGroupDescription",
     94       IDS_OPTIONS_SSL_GROUP_DESCRIPTION },
     95     { "sslCheckRevocation",
     96       IDS_OPTIONS_SSL_CHECKREVOCATION },
     97     { "sslUseSSL3",
     98       IDS_OPTIONS_SSL_USESSL3 },
     99     { "sslUseTLS1",
    100       IDS_OPTIONS_SSL_USETLS1 },
    101     { "networkPredictionEnabledDescription",
    102       IDS_NETWORK_PREDICTION_ENABLED_DESCRIPTION },
    103     { "privacyContentSettingsButton",
    104       IDS_OPTIONS_PRIVACY_CONTENT_SETTINGS_BUTTON },
    105     { "privacyClearDataButton",
    106       IDS_OPTIONS_PRIVACY_CLEAR_DATA_BUTTON },
    107     { "linkDoctorPref",
    108       IDS_OPTIONS_LINKDOCTOR_PREF },
    109     { "suggestPref",
    110       IDS_OPTIONS_SUGGEST_PREF },
    111     { "tabsToLinksPref",
    112       IDS_OPTIONS_TABS_TO_LINKS_PREF },
    113     { "fontSettingsInfo",
    114       IDS_OPTIONS_FONTSETTINGS_INFO },
    115     { "defaultZoomLevelLabel",
    116       IDS_OPTIONS_DEFAULT_ZOOM_LEVEL_LABEL },
    117     { "defaultFontSizeLabel",
    118       IDS_OPTIONS_DEFAULT_FONT_SIZE_LABEL },
    119     { "fontSizeLabelVerySmall",
    120       IDS_OPTIONS_FONT_SIZE_LABEL_VERY_SMALL },
    121     { "fontSizeLabelSmall",
    122       IDS_OPTIONS_FONT_SIZE_LABEL_SMALL },
    123     { "fontSizeLabelMedium",
    124       IDS_OPTIONS_FONT_SIZE_LABEL_MEDIUM },
    125     { "fontSizeLabelLarge",
    126       IDS_OPTIONS_FONT_SIZE_LABEL_LARGE },
    127     { "fontSizeLabelVeryLarge",
    128       IDS_OPTIONS_FONT_SIZE_LABEL_VERY_LARGE },
    129     { "fontSizeLabelCustom",
    130       IDS_OPTIONS_FONT_SIZE_LABEL_CUSTOM },
    131     { "fontSettingsCustomizeFontsButton",
    132       IDS_OPTIONS_FONTSETTINGS_CUSTOMIZE_FONTS_BUTTON },
    133     { "languageAndSpellCheckSettingsButton",
    134       IDS_OPTIONS_LANGUAGE_AND_SPELLCHECK_BUTTON },
    135     { "advancedSectionTitlePrivacy",
    136       IDS_OPTIONS_ADVANCED_SECTION_TITLE_PRIVACY },
    137     { "advancedSectionTitleContent",
    138       IDS_OPTIONS_ADVANCED_SECTION_TITLE_CONTENT },
    139     { "advancedSectionTitleSecurity",
    140       IDS_OPTIONS_ADVANCED_SECTION_TITLE_SECURITY },
    141     { "advancedSectionTitleNetwork",
    142       IDS_OPTIONS_ADVANCED_SECTION_TITLE_NETWORK },
    143     { "advancedSectionTitleTranslate",
    144       IDS_OPTIONS_ADVANCED_SECTION_TITLE_TRANSLATE },
    145     { "translateEnableTranslate",
    146       IDS_OPTIONS_TRANSLATE_ENABLE_TRANSLATE },
    147     { "enableLogging",
    148       IDS_OPTIONS_ENABLE_LOGGING },
    149     { "improveBrowsingExperience",
    150       IDS_OPTIONS_IMPROVE_BROWSING_EXPERIENCE },
    151     { "disableWebServices",
    152       IDS_OPTIONS_DISABLE_WEB_SERVICES },
    153 #if !defined(OS_CHROMEOS)
    154     { "advancedSectionTitleCloudPrint",
    155       IDS_OPTIONS_ADVANCED_SECTION_TITLE_CLOUD_PRINT },
    156     { "cloudPrintProxyDisabledLabel",
    157       IDS_OPTIONS_CLOUD_PRINT_PROXY_DISABLED_LABEL },
    158     { "cloudPrintProxyDisabledButton",
    159       IDS_OPTIONS_CLOUD_PRINT_PROXY_DISABLED_BUTTON },
    160     { "cloudPrintProxyEnabledButton",
    161       IDS_OPTIONS_CLOUD_PRINT_PROXY_ENABLED_BUTTON },
    162     { "cloudPrintProxyEnabledManageButton",
    163       IDS_OPTIONS_CLOUD_PRINT_PROXY_ENABLED_MANAGE_BUTTON },
    164     { "cloudPrintProxyEnablingButton",
    165       IDS_OPTIONS_CLOUD_PRINT_PROXY_ENABLING_BUTTON },
    166 #endif
    167 #if defined(ENABLE_REMOTING)
    168     { "advancedSectionTitleRemoting",
    169       IDS_OPTIONS_ADVANCED_SECTION_TITLE_REMOTING },
    170     { "remotingSetupButton",
    171       IDS_OPTIONS_REMOTING_SETUP_BUTTON },
    172     { "remotingStopButton",
    173       IDS_OPTIONS_REMOTING_STOP_BUTTON },
    174 #endif
    175   };
    176 
    177   RegisterStrings(localized_strings, resources, arraysize(resources));
    178   RegisterTitle(localized_strings, "advancedPage",
    179                 IDS_OPTIONS_ADVANCED_TAB_LABEL);
    180 
    181   localized_strings->SetString("privacyLearnMoreURL",
    182       google_util::AppendGoogleLocaleParam(
    183           GURL(chrome::kPrivacyLearnMoreURL)).spec());
    184 }
    185 
    186 void AdvancedOptionsHandler::Initialize() {
    187   DCHECK(web_ui_);
    188   SetupMetricsReportingCheckbox();
    189   SetupMetricsReportingSettingVisibility();
    190   SetupFontSizeLabel();
    191   SetupDownloadLocationPath();
    192   SetupPromptForDownload();
    193   SetupAutoOpenFileTypesDisabledAttribute();
    194   SetupProxySettingsSection();
    195   SetupSSLConfigSettings();
    196 #if !defined(OS_CHROMEOS)
    197   if (cloud_print_proxy_ui_enabled_) {
    198     SetupCloudPrintProxySection();
    199     RefreshCloudPrintStatusFromService();
    200   } else {
    201     RemoveCloudPrintProxySection();
    202   }
    203 #endif
    204 #if defined(ENABLE_REMOTING) && !defined(OS_CHROMEOS)
    205   if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableRemoting)) {
    206     RemoveRemotingSection();
    207   } else {
    208     remoting_options_handler_.Init(web_ui_);
    209   }
    210 #endif
    211 
    212   banner_handler_.reset(
    213       new OptionsManagedBannerHandler(web_ui_,
    214                                       ASCIIToUTF16("AdvancedOptions"),
    215                                       OPTIONS_PAGE_ADVANCED));
    216 }
    217 
    218 WebUIMessageHandler* AdvancedOptionsHandler::Attach(WebUI* web_ui) {
    219   // Call through to superclass.
    220   WebUIMessageHandler* handler = OptionsPageUIHandler::Attach(web_ui);
    221 
    222   // Register for preferences that we need to observe manually.  These have
    223   // special behaviors that aren't handled by the standard prefs UI.
    224   DCHECK(web_ui_);
    225   PrefService* prefs = web_ui_->GetProfile()->GetPrefs();
    226 #if !defined(OS_CHROMEOS)
    227   enable_metrics_recording_.Init(prefs::kMetricsReportingEnabled,
    228                                  g_browser_process->local_state(), this);
    229   cloud_print_proxy_email_.Init(prefs::kCloudPrintEmail, prefs, this);
    230   cloud_print_proxy_enabled_.Init(prefs::kCloudPrintProxyEnabled, prefs, this);
    231 #endif
    232 
    233   rev_checking_enabled_.Init(prefs::kCertRevocationCheckingEnabled,
    234                              g_browser_process->local_state(), this);
    235   ssl3_enabled_.Init(prefs::kSSL3Enabled, g_browser_process->local_state(),
    236                      this);
    237   tls1_enabled_.Init(prefs::kTLS1Enabled, g_browser_process->local_state(),
    238                      this);
    239 
    240   default_download_location_.Init(prefs::kDownloadDefaultDirectory,
    241                                   prefs, this);
    242   ask_for_save_location_.Init(prefs::kPromptForDownload, prefs, this);
    243   auto_open_files_.Init(prefs::kDownloadExtensionsToOpen, prefs, this);
    244   default_font_size_.Init(prefs::kWebKitDefaultFontSize, prefs, this);
    245   proxy_prefs_.reset(
    246       PrefSetObserver::CreateProxyPrefSetObserver(prefs, this));
    247 
    248   // Return result from the superclass.
    249   return handler;
    250 }
    251 
    252 void AdvancedOptionsHandler::RegisterMessages() {
    253   // Setup handlers specific to this panel.
    254   DCHECK(web_ui_);
    255   web_ui_->RegisterMessageCallback("selectDownloadLocation",
    256       NewCallback(this,
    257                   &AdvancedOptionsHandler::HandleSelectDownloadLocation));
    258   web_ui_->RegisterMessageCallback("promptForDownloadAction",
    259       NewCallback(this,
    260                   &AdvancedOptionsHandler::HandlePromptForDownload));
    261   web_ui_->RegisterMessageCallback("autoOpenFileTypesAction",
    262       NewCallback(this,
    263                   &AdvancedOptionsHandler::HandleAutoOpenButton));
    264   web_ui_->RegisterMessageCallback("defaultFontSizeAction",
    265       NewCallback(this, &AdvancedOptionsHandler::HandleDefaultFontSize));
    266 #if !defined(OS_CHROMEOS)
    267   web_ui_->RegisterMessageCallback("metricsReportingCheckboxAction",
    268       NewCallback(this,
    269                   &AdvancedOptionsHandler::HandleMetricsReportingCheckbox));
    270 #endif
    271 #if !defined(USE_NSS) && !defined(USE_OPENSSL)
    272   web_ui_->RegisterMessageCallback("showManageSSLCertificates",
    273       NewCallback(this,
    274                   &AdvancedOptionsHandler::ShowManageSSLCertificates));
    275 #endif
    276 #if !defined(OS_CHROMEOS)
    277   if (cloud_print_proxy_ui_enabled_) {
    278     web_ui_->RegisterMessageCallback("showCloudPrintSetupDialog",
    279         NewCallback(this,
    280                     &AdvancedOptionsHandler::ShowCloudPrintSetupDialog));
    281     web_ui_->RegisterMessageCallback("disableCloudPrintProxy",
    282         NewCallback(this,
    283                     &AdvancedOptionsHandler::HandleDisableCloudPrintProxy));
    284     web_ui_->RegisterMessageCallback("showCloudPrintManagePage",
    285         NewCallback(this,
    286                     &AdvancedOptionsHandler::ShowCloudPrintManagePage));
    287   }
    288   web_ui_->RegisterMessageCallback("showNetworkProxySettings",
    289       NewCallback(this,
    290                   &AdvancedOptionsHandler::ShowNetworkProxySettings));
    291 #endif
    292 #if defined(ENABLE_REMOTING) && !defined(OS_CHROMEOS)
    293   web_ui_->RegisterMessageCallback("showRemotingSetupDialog",
    294       NewCallback(this,
    295                   &AdvancedOptionsHandler::ShowRemotingSetupDialog));
    296   web_ui_->RegisterMessageCallback("disableRemoting",
    297       NewCallback(this,
    298                   &AdvancedOptionsHandler::DisableRemoting));
    299 #endif
    300   web_ui_->RegisterMessageCallback("checkRevocationCheckboxAction",
    301       NewCallback(this,
    302                   &AdvancedOptionsHandler::HandleCheckRevocationCheckbox));
    303   web_ui_->RegisterMessageCallback("useSSL3CheckboxAction",
    304       NewCallback(this,
    305                   &AdvancedOptionsHandler::HandleUseSSL3Checkbox));
    306   web_ui_->RegisterMessageCallback("useTLS1CheckboxAction",
    307       NewCallback(this,
    308                   &AdvancedOptionsHandler::HandleUseTLS1Checkbox));
    309 }
    310 
    311 void AdvancedOptionsHandler::Observe(NotificationType type,
    312                                      const NotificationSource& source,
    313                                      const NotificationDetails& details) {
    314   if (type == NotificationType::PREF_CHANGED) {
    315     std::string* pref_name = Details<std::string>(details).ptr();
    316     if ((*pref_name == prefs::kDownloadDefaultDirectory) ||
    317         (*pref_name == prefs::kPromptForDownload)) {
    318       SetupDownloadLocationPath();
    319       SetupPromptForDownload();
    320     } else if (*pref_name == prefs::kDownloadExtensionsToOpen) {
    321       SetupAutoOpenFileTypesDisabledAttribute();
    322     } else if (proxy_prefs_->IsObserved(*pref_name)) {
    323       SetupProxySettingsSection();
    324     } else if ((*pref_name == prefs::kCloudPrintEmail) ||
    325                (*pref_name == prefs::kCloudPrintProxyEnabled)) {
    326 #if !defined(OS_CHROMEOS)
    327       if (cloud_print_proxy_ui_enabled_)
    328         SetupCloudPrintProxySection();
    329 #endif
    330     } else if (*pref_name == prefs::kWebKitDefaultFontSize) {
    331       SetupFontSizeLabel();
    332     }
    333   }
    334 }
    335 
    336 void AdvancedOptionsHandler::HandleSelectDownloadLocation(
    337     const ListValue* args) {
    338   PrefService* pref_service = web_ui_->GetProfile()->GetPrefs();
    339   select_folder_dialog_ = SelectFileDialog::Create(this);
    340   select_folder_dialog_->SelectFile(
    341       SelectFileDialog::SELECT_FOLDER,
    342       l10n_util::GetStringUTF16(IDS_OPTIONS_DOWNLOADLOCATION_BROWSE_TITLE),
    343       pref_service->GetFilePath(prefs::kDownloadDefaultDirectory),
    344       NULL, 0, FILE_PATH_LITERAL(""), web_ui_->tab_contents(),
    345       web_ui_->tab_contents()->view()->GetTopLevelNativeWindow(), NULL);
    346 }
    347 
    348 void AdvancedOptionsHandler::HandlePromptForDownload(
    349     const ListValue* args) {
    350   std::string checked_str = UTF16ToUTF8(ExtractStringValue(args));
    351   ask_for_save_location_.SetValue(checked_str == "true");
    352 }
    353 
    354 void AdvancedOptionsHandler::FileSelected(const FilePath& path, int index,
    355                                           void* params) {
    356   UserMetricsRecordAction(UserMetricsAction("Options_SetDownloadDirectory"));
    357   default_download_location_.SetValue(path);
    358   SetupDownloadLocationPath();
    359 }
    360 
    361 void AdvancedOptionsHandler::OnCloudPrintSetupClosed() {
    362 #if !defined(OS_CHROMEOS)
    363   if (cloud_print_proxy_ui_enabled_)
    364     SetupCloudPrintProxySection();
    365 #endif
    366 }
    367 
    368 void AdvancedOptionsHandler::HandleAutoOpenButton(const ListValue* args) {
    369   UserMetricsRecordAction(UserMetricsAction("Options_ResetAutoOpenFiles"));
    370   DownloadManager* manager = web_ui_->GetProfile()->GetDownloadManager();
    371   if (manager)
    372     manager->download_prefs()->ResetAutoOpen();
    373 }
    374 
    375 void AdvancedOptionsHandler::HandleMetricsReportingCheckbox(
    376     const ListValue* args) {
    377 #if defined(GOOGLE_CHROME_BUILD) && !defined(OS_CHROMEOS)
    378   std::string checked_str = UTF16ToUTF8(ExtractStringValue(args));
    379   bool enabled = checked_str == "true";
    380   UserMetricsRecordAction(
    381       enabled ?
    382           UserMetricsAction("Options_MetricsReportingCheckbox_Enable") :
    383           UserMetricsAction("Options_MetricsReportingCheckbox_Disable"));
    384   bool is_enabled = OptionsUtil::ResolveMetricsReportingEnabled(enabled);
    385   enable_metrics_recording_.SetValue(is_enabled);
    386   SetupMetricsReportingCheckbox();
    387 #endif
    388 }
    389 
    390 void AdvancedOptionsHandler::HandleDefaultFontSize(const ListValue* args) {
    391   int font_size;
    392   if (ExtractIntegerValue(args, &font_size)) {
    393     if (font_size > 0) {
    394       default_font_size_.SetValue(font_size);
    395       SetupFontSizeLabel();
    396     }
    397   }
    398 }
    399 
    400 void AdvancedOptionsHandler::HandleCheckRevocationCheckbox(
    401     const ListValue* args) {
    402   std::string checked_str = UTF16ToUTF8(ExtractStringValue(args));
    403   bool enabled = checked_str == "true";
    404   std::string metric =
    405       (enabled ? "Options_CheckCertRevocation_Enable"
    406                : "Options_CheckCertRevocation_Disable");
    407   UserMetricsRecordAction(UserMetricsAction(metric.c_str()));
    408   rev_checking_enabled_.SetValue(enabled);
    409 }
    410 
    411 void AdvancedOptionsHandler::HandleUseSSL3Checkbox(const ListValue* args) {
    412   std::string checked_str = UTF16ToUTF8(ExtractStringValue(args));
    413   bool enabled = checked_str == "true";
    414   std::string metric =
    415       (enabled ? "Options_SSL3_Enable" : "Options_SSL3_Disable");
    416   UserMetricsRecordAction(UserMetricsAction(metric.c_str()));
    417   ssl3_enabled_.SetValue(enabled);
    418 }
    419 
    420 void AdvancedOptionsHandler::HandleUseTLS1Checkbox(const ListValue* args) {
    421   std::string checked_str = UTF16ToUTF8(ExtractStringValue(args));
    422   bool enabled = checked_str == "true";
    423   std::string metric =
    424       (enabled ? "Options_TLS1_Enable" : "Options_TLS1_Disable");
    425   UserMetricsRecordAction(UserMetricsAction(metric.c_str()));
    426   tls1_enabled_.SetValue(enabled);
    427 }
    428 
    429 #if !defined(OS_CHROMEOS)
    430 void AdvancedOptionsHandler::ShowNetworkProxySettings(const ListValue* args) {
    431   UserMetricsRecordAction(UserMetricsAction("Options_ShowProxySettings"));
    432   AdvancedOptionsUtilities::ShowNetworkProxySettings(web_ui_->tab_contents());
    433 }
    434 #endif
    435 
    436 #if !defined(USE_NSS) && !defined(USE_OPENSSL)
    437 void AdvancedOptionsHandler::ShowManageSSLCertificates(const ListValue* args) {
    438   UserMetricsRecordAction(UserMetricsAction("Options_ManageSSLCertificates"));
    439   AdvancedOptionsUtilities::ShowManageSSLCertificates(web_ui_->tab_contents());
    440 }
    441 #endif
    442 
    443 #if !defined(OS_CHROMEOS)
    444 void AdvancedOptionsHandler::ShowCloudPrintSetupDialog(const ListValue* args) {
    445   UserMetricsRecordAction(UserMetricsAction("Options_EnableCloudPrintProxy"));
    446   cloud_print_setup_handler_.reset(new CloudPrintSetupHandler(this));
    447   CloudPrintSetupFlow::OpenDialog(
    448       web_ui_->GetProfile(), cloud_print_setup_handler_->AsWeakPtr(),
    449       web_ui_->tab_contents()->GetMessageBoxRootWindow());
    450 }
    451 
    452 void AdvancedOptionsHandler::HandleDisableCloudPrintProxy(
    453     const ListValue* args) {
    454   UserMetricsRecordAction(UserMetricsAction("Options_DisableCloudPrintProxy"));
    455   web_ui_->GetProfile()->GetCloudPrintProxyService()->DisableForUser();
    456 }
    457 
    458 void AdvancedOptionsHandler::ShowCloudPrintManagePage(const ListValue* args) {
    459   UserMetricsRecordAction(UserMetricsAction("Options_ManageCloudPrinters"));
    460   // Open a new tab in the current window for the management page.
    461   web_ui_->tab_contents()->OpenURL(
    462       CloudPrintURL(web_ui_->GetProfile()).GetCloudPrintServiceManageURL(),
    463       GURL(), NEW_FOREGROUND_TAB, PageTransition::LINK);
    464 }
    465 
    466 void AdvancedOptionsHandler::RefreshCloudPrintStatusFromService() {
    467   DCHECK(web_ui_);
    468   if (cloud_print_proxy_ui_enabled_)
    469     web_ui_->GetProfile()->GetCloudPrintProxyService()->
    470         RefreshStatusFromService();
    471 }
    472 
    473 void AdvancedOptionsHandler::SetupCloudPrintProxySection() {
    474   if (NULL == web_ui_->GetProfile()->GetCloudPrintProxyService()) {
    475     cloud_print_proxy_ui_enabled_ = false;
    476     RemoveCloudPrintProxySection();
    477     return;
    478   }
    479 
    480   bool cloud_print_proxy_allowed =
    481       !cloud_print_proxy_enabled_.IsManaged() ||
    482       cloud_print_proxy_enabled_.GetValue();
    483   FundamentalValue allowed(cloud_print_proxy_allowed);
    484 
    485   std::string email;
    486   if (web_ui_->GetProfile()->GetPrefs()->HasPrefPath(prefs::kCloudPrintEmail) &&
    487       cloud_print_proxy_allowed) {
    488     email = web_ui_->GetProfile()->GetPrefs()->GetString(
    489         prefs::kCloudPrintEmail);
    490   }
    491   FundamentalValue disabled(email.empty());
    492 
    493   string16 label_str;
    494   if (email.empty()) {
    495     label_str = l10n_util::GetStringUTF16(
    496         IDS_OPTIONS_CLOUD_PRINT_PROXY_DISABLED_LABEL);
    497   } else {
    498     label_str = l10n_util::GetStringFUTF16(
    499         IDS_OPTIONS_CLOUD_PRINT_PROXY_ENABLED_LABEL, UTF8ToUTF16(email));
    500   }
    501   StringValue label(label_str);
    502 
    503   web_ui_->CallJavascriptFunction(
    504       "options.AdvancedOptions.SetupCloudPrintProxySection",
    505       disabled, label, allowed);
    506 }
    507 
    508 void AdvancedOptionsHandler::RemoveCloudPrintProxySection() {
    509   web_ui_->CallJavascriptFunction(
    510       "options.AdvancedOptions.RemoveCloudPrintProxySection");
    511 }
    512 
    513 #endif
    514 
    515 #if defined(ENABLE_REMOTING) && !defined(OS_CHROMEOS)
    516 void AdvancedOptionsHandler::RemoveRemotingSection() {
    517   web_ui_->CallJavascriptFunction(
    518       "options.AdvancedOptions.RemoveRemotingSection");
    519 }
    520 
    521 void AdvancedOptionsHandler::ShowRemotingSetupDialog(const ListValue* args) {
    522   remoting::SetupFlow::OpenSetupDialog(web_ui_->GetProfile());
    523 }
    524 
    525 void AdvancedOptionsHandler::DisableRemoting(const ListValue* args) {
    526   ServiceProcessControl* process_control =
    527       ServiceProcessControlManager::GetInstance()->GetProcessControl(
    528           web_ui_->GetProfile());
    529   if (!process_control || !process_control->is_connected())
    530     return;
    531   process_control->DisableRemotingHost();
    532 }
    533 #endif
    534 
    535 void AdvancedOptionsHandler::SetupMetricsReportingCheckbox() {
    536 #if defined(GOOGLE_CHROME_BUILD) && !defined(OS_CHROMEOS)
    537   FundamentalValue checked(enable_metrics_recording_.GetValue());
    538   FundamentalValue disabled(enable_metrics_recording_.IsManaged());
    539   web_ui_->CallJavascriptFunction(
    540       "options.AdvancedOptions.SetMetricsReportingCheckboxState", checked,
    541       disabled);
    542 #endif
    543 }
    544 
    545 void AdvancedOptionsHandler::SetupMetricsReportingSettingVisibility() {
    546 #if defined(GOOGLE_CHROME_BUILD) && defined(OS_CHROMEOS)
    547   // Don't show the reporting setting if we are in the guest mode.
    548   if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kGuestSession)) {
    549     FundamentalValue visible(false);
    550     web_ui_->CallJavascriptFunction(
    551         "options.AdvancedOptions.SetMetricsReportingSettingVisibility",
    552         visible);
    553   }
    554 #endif
    555 }
    556 
    557 void AdvancedOptionsHandler::SetupFontSizeLabel() {
    558   // We're only interested in integer values, so convert to int.
    559   FundamentalValue font_size(default_font_size_.GetValue());
    560   web_ui_->CallJavascriptFunction(
    561       "options.AdvancedOptions.SetFontSize", font_size);
    562 }
    563 
    564 void AdvancedOptionsHandler::SetupDownloadLocationPath() {
    565   StringValue value(default_download_location_.GetValue().value());
    566   FundamentalValue disabled(default_download_location_.IsManaged());
    567   web_ui_->CallJavascriptFunction(
    568       "options.AdvancedOptions.SetDownloadLocationPath", value, disabled);
    569 }
    570 
    571 void AdvancedOptionsHandler::SetupPromptForDownload() {
    572   FundamentalValue checked(ask_for_save_location_.GetValue());
    573   FundamentalValue disabled(default_download_location_.IsManaged());
    574   web_ui_->CallJavascriptFunction(
    575       "options.AdvancedOptions.SetPromptForDownload", checked, disabled);
    576 }
    577 
    578 void AdvancedOptionsHandler::SetupAutoOpenFileTypesDisabledAttribute() {
    579   // Set the enabled state for the AutoOpenFileTypesResetToDefault button.
    580   // We enable the button if the user has any auto-open file types registered.
    581   DownloadManager* manager = web_ui_->GetProfile()->GetDownloadManager();
    582   bool disabled = !(manager && manager->download_prefs()->IsAutoOpenUsed());
    583   FundamentalValue value(disabled);
    584   web_ui_->CallJavascriptFunction(
    585       "options.AdvancedOptions.SetAutoOpenFileTypesDisabledAttribute", value);
    586 }
    587 
    588 void AdvancedOptionsHandler::SetupProxySettingsSection() {
    589   // Disable the button if proxy settings are managed by a sysadmin or
    590   // overridden by an extension.
    591   PrefService* pref_service = web_ui_->GetProfile()->GetPrefs();
    592   const PrefService::Preference* proxy_config =
    593       pref_service->FindPreference(prefs::kProxy);
    594   bool is_extension_controlled = (proxy_config &&
    595                                   proxy_config->IsExtensionControlled());
    596 
    597   FundamentalValue disabled(proxy_prefs_->IsManaged() ||
    598                             is_extension_controlled);
    599 
    600   // Get the appropriate info string to describe the button.
    601   string16 label_str;
    602   if (is_extension_controlled) {
    603     label_str = l10n_util::GetStringUTF16(IDS_OPTIONS_EXTENSION_PROXIES_LABEL);
    604   } else {
    605     label_str = l10n_util::GetStringFUTF16(IDS_OPTIONS_SYSTEM_PROXIES_LABEL,
    606         l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
    607   }
    608   StringValue label(label_str);
    609 
    610   web_ui_->CallJavascriptFunction(
    611       "options.AdvancedOptions.SetupProxySettingsSection", disabled, label);
    612 }
    613 
    614 void AdvancedOptionsHandler::SetupSSLConfigSettings() {
    615   {
    616     FundamentalValue checked(rev_checking_enabled_.GetValue());
    617     FundamentalValue disabled(rev_checking_enabled_.IsManaged());
    618     web_ui_->CallJavascriptFunction(
    619         "options.AdvancedOptions.SetCheckRevocationCheckboxState", checked,
    620         disabled);
    621   }
    622   {
    623     FundamentalValue checked(ssl3_enabled_.GetValue());
    624     FundamentalValue disabled(ssl3_enabled_.IsManaged());
    625     web_ui_->CallJavascriptFunction(
    626         "options.AdvancedOptions.SetUseSSL3CheckboxState", checked, disabled);
    627   }
    628   {
    629     FundamentalValue checked(tls1_enabled_.GetValue());
    630     FundamentalValue disabled(tls1_enabled_.IsManaged());
    631     web_ui_->CallJavascriptFunction(
    632         "options.AdvancedOptions.SetUseTLS1CheckboxState", checked, disabled);
    633   }
    634 }
    635