Index: chrome/browser/ui/views/options/advanced_contents_view.cc |
diff --git a/chrome/browser/ui/views/options/advanced_contents_view.cc b/chrome/browser/ui/views/options/advanced_contents_view.cc |
deleted file mode 100644 |
index 96ced9864f7ede625a105cf3042f0465b09b3150..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/views/options/advanced_contents_view.cc |
+++ /dev/null |
@@ -1,1651 +0,0 @@ |
-// 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/views/options/advanced_contents_view.h" |
- |
-#include <windows.h> |
- |
-#include <cryptuiapi.h> |
-#pragma comment(lib, "cryptui.lib") |
-#include <shellapi.h> |
-#include <vsstyle.h> |
-#include <vssym32.h> |
- |
-#include <string> |
- |
-#include "base/command_line.h" |
-#include "base/file_util.h" |
-#include "base/i18n/rtl.h" |
-#include "base/message_loop.h" |
-#include "base/path_service.h" |
-#include "base/scoped_callback_factory.h" |
-#include "base/threading/thread.h" |
-#include "base/utf_string_conversions.h" |
-#include "chrome/browser/browser_list.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/gears_integration.h" |
-#include "chrome/browser/prefs/pref_member.h" |
-#include "chrome/browser/prefs/pref_service.h" |
-#include "chrome/browser/prefs/pref_set_observer.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/safe_browsing/safe_browsing_service.h" |
-#include "chrome/browser/ui/options/options_util.h" |
-#include "chrome/browser/ui/options/show_options_url.h" |
-#include "chrome/browser/ui/shell_dialogs.h" |
-#include "chrome/browser/ui/views/browser_dialogs.h" |
-#include "chrome/browser/ui/views/clear_browsing_data_view.h" |
-#include "chrome/browser/ui/views/list_background.h" |
-#include "chrome/browser/ui/views/options/content_settings_window_view.h" |
-#include "chrome/browser/ui/views/options/fonts_languages_window_view.h" |
-#include "chrome/common/chrome_switches.h" |
-#include "chrome/common/pref_names.h" |
-#include "chrome/common/url_constants.h" |
-#include "content/browser/renderer_host/resource_dispatcher_host.h" |
-#include "grit/app_resources.h" |
-#include "grit/chromium_strings.h" |
-#include "grit/generated_resources.h" |
-#include "grit/locale_settings.h" |
-#include "net/base/ssl_config_service_win.h" |
-#include "skia/ext/skia_utils_win.h" |
-#include "third_party/skia/include/core/SkBitmap.h" |
-#include "ui/base/l10n/l10n_util.h" |
-#include "ui/base/resource/resource_bundle.h" |
-#include "ui/gfx/canvas_skia.h" |
-#include "ui/gfx/native_theme_win.h" |
-#include "views/background.h" |
-#include "views/controls/button/checkbox.h" |
-#include "views/controls/combobox/combobox.h" |
-#include "views/controls/scroll_view.h" |
-#include "views/controls/textfield/textfield.h" |
-#include "views/layout/grid_layout.h" |
-#include "views/layout/layout_constants.h" |
-#include "views/widget/widget.h" |
-#include "views/window/window.h" |
- |
-using views::GridLayout; |
-using views::ColumnSet; |
- |
-namespace { |
- |
-const int kFileIconSize = 16; |
-const int kFileIconVerticalSpacing = 3; |
-const int kFileIconHorizontalSpacing = 3; |
-const int kFileIconTextFieldSpacing = 3; |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// FileDisplayArea |
- |
-class FileDisplayArea : public views::View { |
- public: |
- FileDisplayArea(); |
- virtual ~FileDisplayArea(); |
- |
- void SetFile(const FilePath& file_path); |
- |
- // views::View overrides: |
- virtual void OnPaint(gfx::Canvas* canvas); |
- virtual void Layout(); |
- virtual gfx::Size GetPreferredSize(); |
- |
- protected: |
- // views::View overrides: |
- virtual void ViewHierarchyChanged(bool is_add, |
- views::View* parent, |
- views::View* child); |
- |
- private: |
- void Init(); |
- |
- views::Textfield* text_field_; |
- SkColor text_field_background_color_; |
- |
- gfx::Rect icon_bounds_; |
- |
- bool initialized_; |
- |
- static void InitClass(); |
- static SkBitmap default_folder_icon_; |
- |
- DISALLOW_COPY_AND_ASSIGN(FileDisplayArea); |
-}; |
- |
-// static |
-SkBitmap FileDisplayArea::default_folder_icon_; |
- |
-FileDisplayArea::FileDisplayArea() |
- : text_field_(new views::Textfield), |
- text_field_background_color_(0), |
- initialized_(false) { |
- InitClass(); |
-} |
- |
-FileDisplayArea::~FileDisplayArea() { |
-} |
- |
-void FileDisplayArea::SetFile(const FilePath& file_path) { |
- // Force file path to have LTR directionality. |
- if (base::i18n::IsRTL()) { |
- string16 localized_file_path; |
- base::i18n::WrapPathWithLTRFormatting(file_path, &localized_file_path); |
- text_field_->SetText(UTF16ToWide(localized_file_path)); |
- } else { |
- text_field_->SetText(file_path.LossyDisplayName()); |
- } |
-} |
- |
-void FileDisplayArea::OnPaint(gfx::Canvas* canvas) { |
- HDC dc = canvas->BeginPlatformPaint(); |
- RECT rect = { 0, 0, width(), height() }; |
- gfx::NativeTheme::instance()->PaintTextField( |
- dc, EP_EDITTEXT, ETS_READONLY, 0, &rect, |
- skia::SkColorToCOLORREF(text_field_background_color_), true, true); |
- canvas->EndPlatformPaint(); |
- // Mirror left point for icon_bounds_ to draw icon in RTL locales correctly. |
- canvas->DrawBitmapInt(default_folder_icon_, GetMirroredXForRect(icon_bounds_), |
- icon_bounds_.y()); |
-} |
- |
-void FileDisplayArea::Layout() { |
- icon_bounds_.SetRect(kFileIconHorizontalSpacing, kFileIconVerticalSpacing, |
- kFileIconSize, kFileIconSize); |
- gfx::Size ps = text_field_->GetPreferredSize(); |
- text_field_->SetBounds(icon_bounds_.right() + kFileIconTextFieldSpacing, |
- (height() - ps.height()) / 2, |
- width() - icon_bounds_.right() - |
- kFileIconHorizontalSpacing - |
- kFileIconTextFieldSpacing, ps.height()); |
-} |
- |
-gfx::Size FileDisplayArea::GetPreferredSize() { |
- return gfx::Size(kFileIconSize + 2 * kFileIconVerticalSpacing, |
- kFileIconSize + 2 * kFileIconHorizontalSpacing); |
-} |
- |
-void FileDisplayArea::ViewHierarchyChanged(bool is_add, |
- views::View* parent, |
- views::View* child) { |
- if (!initialized_ && is_add && GetWidget()) |
- Init(); |
-} |
- |
-void FileDisplayArea::Init() { |
- initialized_ = true; |
- AddChildView(text_field_); |
- text_field_background_color_ = |
- gfx::NativeTheme::instance()->GetThemeColorWithDefault( |
- gfx::NativeTheme::TEXTFIELD, EP_EDITTEXT, ETS_READONLY, |
- TMT_FILLCOLOR, COLOR_3DFACE); |
- text_field_->SetReadOnly(true); |
- text_field_->RemoveBorder(); |
- text_field_->SetBackgroundColor(text_field_background_color_); |
-} |
- |
-// static |
-void FileDisplayArea::InitClass() { |
- static bool initialized = false; |
- if (!initialized) { |
- // We'd prefer to use base::i18n::IsRTL() to perform the RTL |
- // environment check, but it's nonstatic, so, instead, we check whether the |
- // locale is RTL. |
- bool ui_is_rtl = base::i18n::IsRTL(); |
- ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
- default_folder_icon_ = *rb.GetBitmapNamed(ui_is_rtl ? |
- IDR_FOLDER_CLOSED_RTL : |
- IDR_FOLDER_CLOSED); |
- initialized = true; |
- } |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// AdvancedSection |
-// A convenience view for grouping advanced options together into related |
-// sections. |
-// |
-class AdvancedSection : public OptionsPageView { |
- public: |
- AdvancedSection(Profile* profile, const std::wstring& title); |
- virtual ~AdvancedSection() {} |
- |
- protected: |
- // Convenience helpers to add different kinds of ColumnSets for specific |
- // types of layout. |
- void AddWrappingColumnSet(views::GridLayout* layout, int id); |
- void AddDependentTwoColumnSet(views::GridLayout* layout, int id); |
- void AddTwoColumnSet(views::GridLayout* layout, int id); |
- void AddIndentedColumnSet(views::GridLayout* layout, int id); |
- |
- // Convenience helpers for adding controls to specific layouts in an |
- // aesthetically pleasing way. |
- void AddWrappingCheckboxRow(views::GridLayout* layout, |
- views::Checkbox* checkbox, |
- int id, |
- bool related_follows); |
- void AddWrappingLabelRow(views::GridLayout* layout, |
- views::Label* label, |
- int id, |
- bool related_follows); |
- void AddLabeledTwoColumnRow(views::GridLayout* layout, |
- views::Label* label, |
- views::View* control, |
- bool control_stretches, |
- int id, |
- bool related_follows); |
- void AddTwoColumnRow(views::GridLayout* layout, |
- views::View* first, |
- views::View* second, |
- bool control_stretches, // Whether or not the control |
- // expands to fill the width. |
- int id, |
- int trailing_space); |
- void AddLeadingControl(views::GridLayout* layout, |
- views::View* control, |
- int id, |
- bool related_follows); |
- void AddIndentedControl(views::GridLayout* layout, |
- views::View* control, |
- int id, |
- bool related_follows); |
- void AddSpacing(views::GridLayout* layout, bool related_follows); |
- |
- // OptionsPageView overrides: |
- virtual void InitControlLayout(); |
- |
- // The View that contains the contents of the section. |
- views::View* contents_; |
- |
- private: |
- // The section title. |
- views::Label* title_label_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AdvancedSection); |
-}; |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// AdvancedSection, public: |
- |
-AdvancedSection::AdvancedSection(Profile* profile, |
- const std::wstring& title) |
- : contents_(NULL), |
- title_label_(new views::Label(title)), |
- OptionsPageView(profile) { |
- ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
- gfx::Font title_font = |
- rb.GetFont(ResourceBundle::BaseFont).DeriveFont(0, gfx::Font::BOLD); |
- title_label_->SetFont(title_font); |
- |
- SkColor title_color = gfx::NativeTheme::instance()->GetThemeColorWithDefault( |
- gfx::NativeTheme::BUTTON, BP_GROUPBOX, GBS_NORMAL, TMT_TEXTCOLOR, |
- COLOR_WINDOWTEXT); |
- title_label_->SetColor(title_color); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// AdvancedSection, protected: |
- |
-void AdvancedSection::AddWrappingColumnSet(views::GridLayout* layout, int id) { |
- ColumnSet* column_set = layout->AddColumnSet(id); |
- column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 1, |
- GridLayout::USE_PREF, 0, 0); |
-} |
- |
-void AdvancedSection::AddDependentTwoColumnSet(views::GridLayout* layout, |
- int id) { |
- ColumnSet* column_set = layout->AddColumnSet(id); |
- column_set->AddPaddingColumn(0, views::Checkbox::GetTextIndent()); |
- column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 0, |
- GridLayout::USE_PREF, 0, 0); |
- column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); |
- column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 1, |
- GridLayout::USE_PREF, 0, 0); |
- column_set->AddPaddingColumn(0, views::kUnrelatedControlHorizontalSpacing); |
-} |
- |
-void AdvancedSection::AddTwoColumnSet(views::GridLayout* layout, int id) { |
- ColumnSet* column_set = layout->AddColumnSet(id); |
- column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 0, |
- GridLayout::USE_PREF, 0, 0); |
- column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); |
- column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 1, |
- GridLayout::USE_PREF, 0, 0); |
-} |
- |
-void AdvancedSection::AddIndentedColumnSet(views::GridLayout* layout, int id) { |
- ColumnSet* column_set = layout->AddColumnSet(id); |
- column_set->AddPaddingColumn(0, views::Checkbox::GetTextIndent()); |
- column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 1, |
- GridLayout::USE_PREF, 0, 0); |
-} |
- |
-void AdvancedSection::AddWrappingCheckboxRow(views::GridLayout* layout, |
- views::Checkbox* checkbox, |
- int id, |
- bool related_follows) { |
- checkbox->SetMultiLine(true); |
- layout->StartRow(0, id); |
- layout->AddView(checkbox); |
- AddSpacing(layout, related_follows); |
-} |
- |
-void AdvancedSection::AddWrappingLabelRow(views::GridLayout* layout, |
- views::Label* label, |
- int id, |
- bool related_follows) { |
- label->SetMultiLine(true); |
- label->SetHorizontalAlignment(views::Label::ALIGN_LEFT); |
- layout->StartRow(0, id); |
- layout->AddView(label); |
- AddSpacing(layout, related_follows); |
-} |
- |
-void AdvancedSection::AddLabeledTwoColumnRow(views::GridLayout* layout, |
- views::Label* label, |
- views::View* control, |
- bool control_stretches, |
- int id, |
- bool related_follows) { |
- label->SetHorizontalAlignment(views::Label::ALIGN_LEFT); |
- AddTwoColumnRow(layout, label, control, control_stretches, id, |
- related_follows ? views::kRelatedControlVerticalSpacing |
- : views::kUnrelatedControlVerticalSpacing); |
-} |
- |
-void AdvancedSection::AddTwoColumnRow(views::GridLayout* layout, |
- views::View* first, |
- views::View* second, |
- bool control_stretches, |
- int id, |
- int trailing_space) { |
- layout->StartRow(0, id); |
- layout->AddView(first); |
- if (control_stretches) { |
- layout->AddView(second); |
- } else { |
- layout->AddView(second, 1, 1, views::GridLayout::LEADING, |
- views::GridLayout::CENTER); |
- } |
- layout->AddPaddingRow(0, trailing_space); |
-} |
- |
-void AdvancedSection::AddLeadingControl(views::GridLayout* layout, |
- views::View* control, |
- int id, |
- bool related_follows) { |
- layout->StartRow(0, id); |
- layout->AddView(control, 1, 1, GridLayout::LEADING, GridLayout::CENTER); |
- AddSpacing(layout, related_follows); |
-} |
- |
-void AdvancedSection::AddSpacing(views::GridLayout* layout, |
- bool related_follows) { |
- layout->AddPaddingRow( |
- 0, related_follows ? views::kRelatedControlVerticalSpacing |
- : views::kUnrelatedControlVerticalSpacing); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// AdvancedSection, OptionsPageView overrides: |
- |
-void AdvancedSection::InitControlLayout() { |
- contents_ = new views::View; |
- |
- GridLayout* layout = new GridLayout(this); |
- SetLayoutManager(layout); |
- |
- const int single_column_layout_id = 0; |
- ColumnSet* column_set = layout->AddColumnSet(single_column_layout_id); |
- column_set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0, |
- GridLayout::USE_PREF, 0, 0); |
- const int inset_column_layout_id = 1; |
- column_set = layout->AddColumnSet(inset_column_layout_id); |
- column_set->AddPaddingColumn(0, views::kUnrelatedControlHorizontalSpacing); |
- column_set->AddColumn(GridLayout::FILL, GridLayout::LEADING, 1, |
- GridLayout::USE_PREF, 0, 0); |
- |
- layout->StartRow(0, single_column_layout_id); |
- layout->AddView(title_label_); |
- layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
- layout->StartRow(0, inset_column_layout_id); |
- layout->AddView(contents_); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// PrivacySection |
- |
-class PrivacySection : public AdvancedSection, |
- public views::ButtonListener, |
- public views::LinkController { |
- public: |
- explicit PrivacySection(Profile* profile); |
- virtual ~PrivacySection() {} |
- |
- // Overridden from views::ButtonListener: |
- virtual void ButtonPressed(views::Button* sender, const views::Event& event); |
- |
- // Overridden from views::LinkController: |
- virtual void LinkActivated(views::Link* source, int event_flags); |
- |
- protected: |
- // OptionsPageView overrides: |
- virtual void InitControlLayout(); |
- virtual void NotifyPrefChanged(const std::string* pref_name); |
- |
- private: |
- // Controls for this section: |
- views::NativeButton* content_settings_button_; |
- views::NativeButton* clear_data_button_; |
- views::Label* section_description_label_; |
- views::Checkbox* enable_link_doctor_checkbox_; |
- views::Checkbox* enable_suggest_checkbox_; |
- views::Checkbox* enable_dns_prefetching_checkbox_; |
- views::Checkbox* enable_safe_browsing_checkbox_; |
- views::Checkbox* reporting_enabled_checkbox_; |
- views::Link* learn_more_link_; |
- |
- // Preferences for this section: |
- BooleanPrefMember alternate_error_pages_; |
- BooleanPrefMember use_suggest_; |
- BooleanPrefMember dns_prefetch_enabled_; |
- BooleanPrefMember safe_browsing_; |
- BooleanPrefMember enable_metrics_recording_; |
- |
- void ResolveMetricsReportingEnabled(); |
- |
- DISALLOW_COPY_AND_ASSIGN(PrivacySection); |
-}; |
- |
-PrivacySection::PrivacySection(Profile* profile) |
- : content_settings_button_(NULL), |
- clear_data_button_(NULL), |
- section_description_label_(NULL), |
- enable_link_doctor_checkbox_(NULL), |
- enable_suggest_checkbox_(NULL), |
- enable_dns_prefetching_checkbox_(NULL), |
- enable_safe_browsing_checkbox_(NULL), |
- reporting_enabled_checkbox_(NULL), |
- learn_more_link_(NULL), |
- AdvancedSection(profile, UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_ADVANCED_SECTION_TITLE_PRIVACY))) { |
-} |
- |
-void PrivacySection::ButtonPressed( |
- views::Button* sender, const views::Event& event) { |
- if (sender == enable_link_doctor_checkbox_) { |
- bool enabled = enable_link_doctor_checkbox_->checked(); |
- UserMetricsRecordAction(UserMetricsAction(enabled ? |
- "Options_LinkDoctorCheckbox_Enable" : |
- "Options_LinkDoctorCheckbox_Disable"), |
- profile()->GetPrefs()); |
- alternate_error_pages_.SetValue(enabled); |
- } else if (sender == enable_suggest_checkbox_) { |
- bool enabled = enable_suggest_checkbox_->checked(); |
- UserMetricsRecordAction(UserMetricsAction(enabled ? |
- "Options_UseSuggestCheckbox_Enable" : |
- "Options_UseSuggestCheckbox_Disable"), |
- profile()->GetPrefs()); |
- use_suggest_.SetValue(enabled); |
- } else if (sender == enable_dns_prefetching_checkbox_) { |
- bool enabled = enable_dns_prefetching_checkbox_->checked(); |
- UserMetricsRecordAction(UserMetricsAction(enabled ? |
- "Options_DnsPrefetchCheckbox_Enable" : |
- "Options_DnsPrefetchCheckbox_Disable"), |
- profile()->GetPrefs()); |
- dns_prefetch_enabled_.SetValue(enabled); |
- } else if (sender == enable_safe_browsing_checkbox_) { |
- bool enabled = enable_safe_browsing_checkbox_->checked(); |
- UserMetricsRecordAction(UserMetricsAction(enabled ? |
- "Options_SafeBrowsingCheckbox_Enable" : |
- "Options_SafeBrowsingCheckbox_Disable"), |
- profile()->GetPrefs()); |
- safe_browsing_.SetValue(enabled); |
- SafeBrowsingService* safe_browsing_service = |
- g_browser_process->resource_dispatcher_host()->safe_browsing_service(); |
- MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod( |
- safe_browsing_service, &SafeBrowsingService::OnEnable, enabled)); |
- } else if (reporting_enabled_checkbox_ && |
- (sender == reporting_enabled_checkbox_)) { |
- bool enabled = reporting_enabled_checkbox_->checked(); |
- UserMetricsRecordAction(UserMetricsAction(enabled ? |
- "Options_MetricsReportingCheckbox_Enable" : |
- "Options_MetricsReportingCheckbox_Disable"), |
- profile()->GetPrefs()); |
- ResolveMetricsReportingEnabled(); |
- enable_metrics_recording_.SetValue(enabled); |
- } else if (sender == content_settings_button_) { |
- UserMetricsRecordAction(UserMetricsAction("Options_ContentSettings"), NULL); |
- browser::ShowContentSettingsWindow(GetWindow()->GetNativeWindow(), |
- CONTENT_SETTINGS_TYPE_DEFAULT, profile()); |
- } else if (sender == clear_data_button_) { |
- UserMetricsRecordAction(UserMetricsAction("Options_ClearData"), NULL); |
- views::Window::CreateChromeWindow( |
- GetWindow()->GetNativeWindow(), |
- gfx::Rect(), |
- new ClearBrowsingDataView(profile()))->Show(); |
- } |
-} |
- |
-void PrivacySection::LinkActivated(views::Link* source, int event_flags) { |
- DCHECK(source == learn_more_link_); |
- GURL url = google_util::AppendGoogleLocaleParam( |
- GURL(chrome::kPrivacyLearnMoreURL)); |
- browser::ShowOptionsURL(profile(), url); |
-} |
- |
-void PrivacySection::InitControlLayout() { |
- AdvancedSection::InitControlLayout(); |
- |
- content_settings_button_ = new views::NativeButton( |
- this, |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_PRIVACY_CONTENT_SETTINGS_BUTTON))); |
- clear_data_button_ = new views::NativeButton( |
- this, |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_PRIVACY_CLEAR_DATA_BUTTON))); |
- section_description_label_ = new views::Label( |
- UTF16ToWide(l10n_util::GetStringUTF16(IDS_OPTIONS_DISABLE_SERVICES))); |
- enable_link_doctor_checkbox_ = new views::Checkbox( |
- UTF16ToWide(l10n_util::GetStringUTF16(IDS_OPTIONS_LINKDOCTOR_PREF))); |
- enable_link_doctor_checkbox_->set_listener(this); |
- enable_suggest_checkbox_ = new views::Checkbox( |
- UTF16ToWide(l10n_util::GetStringUTF16(IDS_OPTIONS_SUGGEST_PREF))); |
- enable_suggest_checkbox_->set_listener(this); |
- enable_dns_prefetching_checkbox_ = new views::Checkbox( |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_NETWORK_DNS_PREFETCH_ENABLED_DESCRIPTION))); |
- enable_dns_prefetching_checkbox_->set_listener(this); |
- enable_safe_browsing_checkbox_ = new views::Checkbox( |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_SAFEBROWSING_ENABLEPROTECTION))); |
- enable_safe_browsing_checkbox_->set_listener(this); |
-#if defined(GOOGLE_CHROME_BUILD) |
- reporting_enabled_checkbox_ = new views::Checkbox( |
- UTF16ToWide(l10n_util::GetStringUTF16(IDS_OPTIONS_ENABLE_LOGGING))); |
- reporting_enabled_checkbox_->SetMultiLine(true); |
- reporting_enabled_checkbox_->set_listener(this); |
- reporting_enabled_checkbox_->SetVisible(true); |
-#endif |
- learn_more_link_ = new views::Link( |
- UTF16ToWide(l10n_util::GetStringUTF16(IDS_LEARN_MORE))); |
- learn_more_link_->SetController(this); |
- |
- GridLayout* layout = new GridLayout(contents_); |
- contents_->SetLayoutManager(layout); |
- |
- const int leading_column_set_id = 0; |
- AddTwoColumnSet(layout, leading_column_set_id); |
- const int single_column_view_set_id = 1; |
- AddWrappingColumnSet(layout, single_column_view_set_id); |
- const int dependent_labeled_field_set_id = 2; |
- AddDependentTwoColumnSet(layout, dependent_labeled_field_set_id); |
- const int indented_view_set_id = 3; |
- AddIndentedColumnSet(layout, indented_view_set_id); |
- const int indented_column_set_id = 4; |
- AddIndentedColumnSet(layout, indented_column_set_id); |
- |
- AddTwoColumnRow(layout, content_settings_button_, clear_data_button_, false, |
- leading_column_set_id, |
- views::kUnrelatedControlLargeVerticalSpacing); |
- |
- // The description label at the top and label. |
- section_description_label_->SetMultiLine(true); |
- AddWrappingLabelRow(layout, section_description_label_, |
- single_column_view_set_id, true); |
- // Learn more link. |
- AddLeadingControl(layout, learn_more_link_, |
- single_column_view_set_id, true); |
- |
- // Link doctor. |
- AddWrappingCheckboxRow(layout, enable_link_doctor_checkbox_, |
- indented_view_set_id, true); |
- // Use Suggest service. |
- AddWrappingCheckboxRow(layout, enable_suggest_checkbox_, |
- indented_view_set_id, true); |
- // DNS pre-fetching. |
- AddWrappingCheckboxRow(layout, enable_dns_prefetching_checkbox_, |
- indented_view_set_id, true); |
- // Safe browsing controls. |
- AddWrappingCheckboxRow(layout, enable_safe_browsing_checkbox_, |
- indented_view_set_id, |
- reporting_enabled_checkbox_ != NULL); |
- // The "Help make Google Chrome better" checkbox. |
- if (reporting_enabled_checkbox_) { |
- AddWrappingCheckboxRow(layout, reporting_enabled_checkbox_, |
- indented_view_set_id, false); |
- } |
- |
- // Init member prefs so we can update the controls if prefs change. |
- alternate_error_pages_.Init(prefs::kAlternateErrorPagesEnabled, |
- profile()->GetPrefs(), this); |
- use_suggest_.Init(prefs::kSearchSuggestEnabled, |
- profile()->GetPrefs(), this); |
- dns_prefetch_enabled_.Init(prefs::kDnsPrefetchingEnabled, |
- profile()->GetPrefs(), this); |
- safe_browsing_.Init(prefs::kSafeBrowsingEnabled, profile()->GetPrefs(), this); |
- enable_metrics_recording_.Init(prefs::kMetricsReportingEnabled, |
- g_browser_process->local_state(), this); |
-} |
- |
-void PrivacySection::NotifyPrefChanged(const std::string* pref_name) { |
- if (!pref_name || *pref_name == prefs::kAlternateErrorPagesEnabled) { |
- enable_link_doctor_checkbox_->SetEnabled( |
- !alternate_error_pages_.IsManaged()); |
- enable_link_doctor_checkbox_->SetChecked( |
- alternate_error_pages_.GetValue()); |
- } |
- if (!pref_name || *pref_name == prefs::kSearchSuggestEnabled) { |
- enable_suggest_checkbox_->SetEnabled(!use_suggest_.IsManaged()); |
- enable_suggest_checkbox_->SetChecked(use_suggest_.GetValue()); |
- } |
- if (!pref_name || *pref_name == prefs::kDnsPrefetchingEnabled) { |
- enable_dns_prefetching_checkbox_->SetEnabled( |
- !dns_prefetch_enabled_.IsManaged()); |
- bool enabled = dns_prefetch_enabled_.GetValue(); |
- enable_dns_prefetching_checkbox_->SetChecked(enabled); |
- } |
- if (!pref_name || *pref_name == prefs::kSafeBrowsingEnabled) { |
- enable_safe_browsing_checkbox_->SetEnabled(!safe_browsing_.IsManaged()); |
- enable_safe_browsing_checkbox_->SetChecked(safe_browsing_.GetValue()); |
- } |
- if (reporting_enabled_checkbox_ && |
- (!pref_name || *pref_name == prefs::kMetricsReportingEnabled)) { |
- reporting_enabled_checkbox_->SetEnabled( |
- !enable_metrics_recording_.IsManaged()); |
- reporting_enabled_checkbox_->SetChecked( |
- enable_metrics_recording_.GetValue()); |
- ResolveMetricsReportingEnabled(); |
- } |
-} |
- |
-void PrivacySection::ResolveMetricsReportingEnabled() { |
- DCHECK(reporting_enabled_checkbox_); |
- bool enabled = reporting_enabled_checkbox_->checked(); |
- |
- enabled = OptionsUtil::ResolveMetricsReportingEnabled(enabled); |
- |
- reporting_enabled_checkbox_->SetChecked(enabled); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// WebContentSection |
- |
-class WebContentSection : public AdvancedSection, |
- public views::ButtonListener { |
- public: |
- explicit WebContentSection(Profile* profile); |
- virtual ~WebContentSection() {} |
- |
- // Overridden from views::ButtonListener: |
- virtual void ButtonPressed(views::Button* sender, const views::Event& event); |
- |
- protected: |
- // OptionsPageView overrides: |
- virtual void InitControlLayout(); |
- |
- private: |
- // Controls for this section: |
- views::Label* fonts_and_languages_label_; |
- views::NativeButton* change_content_fonts_button_; |
- views::Label* gears_label_; |
- views::NativeButton* gears_settings_button_; |
- |
- DISALLOW_COPY_AND_ASSIGN(WebContentSection); |
-}; |
- |
-WebContentSection::WebContentSection(Profile* profile) |
- : fonts_and_languages_label_(NULL), |
- change_content_fonts_button_(NULL), |
- gears_label_(NULL), |
- gears_settings_button_(NULL), |
- AdvancedSection(profile, UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_ADVANCED_SECTION_TITLE_CONTENT))) { |
-} |
- |
-void WebContentSection::ButtonPressed( |
- views::Button* sender, const views::Event& event) { |
- if (sender == gears_settings_button_) { |
- UserMetricsRecordAction(UserMetricsAction("Options_GearsSettings"), NULL); |
- GearsSettingsPressed(GetAncestor(GetWidget()->GetNativeView(), GA_ROOT)); |
- } else if (sender == change_content_fonts_button_) { |
- views::Window::CreateChromeWindow( |
- GetWindow()->GetNativeWindow(), |
- gfx::Rect(), |
- new FontsLanguagesWindowView(profile()))->Show(); |
- } |
-} |
- |
-void WebContentSection::InitControlLayout() { |
- AdvancedSection::InitControlLayout(); |
- |
- if (!base::i18n::IsRTL()) { |
- gears_label_ = new views::Label(UTF16ToWide( |
- l10n_util::GetStringUTF16(IDS_OPTIONS_GEARSSETTINGS_GROUP_NAME))); |
- } else { |
- // Add an RTL mark so that |
- // ":" in "Google Gears:" in Hebrew Chrome is displayed left-most. |
- std::wstring gearssetting_group_name = UTF16ToWide( |
- l10n_util::GetStringUTF16(IDS_OPTIONS_GEARSSETTINGS_GROUP_NAME)); |
- gearssetting_group_name.push_back( |
- static_cast<wchar_t>(base::i18n::kRightToLeftMark)); |
- gears_label_ = new views::Label(gearssetting_group_name); |
- } |
- gears_settings_button_ = new views::NativeButton( |
- this, |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_GEARSSETTINGS_CONFIGUREGEARS_BUTTON))); |
- fonts_and_languages_label_ = new views::Label( |
- UTF16ToWide(l10n_util::GetStringUTF16(IDS_OPTIONS_FONTSETTINGS_INFO))); |
- |
- change_content_fonts_button_ = new views::NativeButton( |
- this, |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_FONTSETTINGS_CONFIGUREFONTS_BUTTON))); |
- |
- GridLayout* layout = new GridLayout(contents_); |
- contents_->SetLayoutManager(layout); |
- |
- const int single_column_view_set_id = 0; |
- AddWrappingColumnSet(layout, single_column_view_set_id); |
- const int indented_column_set_id = 1; |
- AddIndentedColumnSet(layout, indented_column_set_id); |
- const int single_double_column_set = 2; |
- AddTwoColumnSet(layout, single_double_column_set); |
- |
- // Fonts and Languages. |
- AddWrappingLabelRow(layout, fonts_and_languages_label_, |
- single_column_view_set_id, |
- true); |
- AddLeadingControl(layout, change_content_fonts_button_, |
- indented_column_set_id, |
- false); |
- |
- // Gears. |
- AddLabeledTwoColumnRow(layout, gears_label_, gears_settings_button_, false, |
- single_double_column_set, false); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// SecuritySection |
- |
-class SecuritySection : public AdvancedSection, |
- public views::ButtonListener { |
- public: |
- explicit SecuritySection(Profile* profile); |
- virtual ~SecuritySection() {} |
- |
- // Overridden from views::ButtonListener: |
- virtual void ButtonPressed(views::Button* sender, const views::Event& event); |
- |
- protected: |
- // OptionsPageView overrides: |
- virtual void InitControlLayout(); |
- virtual void NotifyPrefChanged(const std::string* pref_name); |
- |
- private: |
- // Controls for this section: |
- views::Label* ssl_info_label_; |
- views::Checkbox* enable_ssl3_checkbox_; |
- views::Checkbox* enable_tls1_checkbox_; |
- views::Checkbox* check_for_cert_revocation_checkbox_; |
- views::Label* manage_certificates_label_; |
- views::NativeButton* manage_certificates_button_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SecuritySection); |
-}; |
- |
-SecuritySection::SecuritySection(Profile* profile) |
- : ssl_info_label_(NULL), |
- enable_ssl3_checkbox_(NULL), |
- enable_tls1_checkbox_(NULL), |
- check_for_cert_revocation_checkbox_(NULL), |
- manage_certificates_label_(NULL), |
- manage_certificates_button_(NULL), |
- AdvancedSection(profile, UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_ADVANCED_SECTION_TITLE_SECURITY))) { |
-} |
- |
-void SecuritySection::ButtonPressed( |
- views::Button* sender, const views::Event& event) { |
- if (sender == enable_ssl3_checkbox_) { |
- bool enabled = enable_ssl3_checkbox_->checked(); |
- if (enabled) { |
- UserMetricsRecordAction(UserMetricsAction("Options_SSL3_Enable"), NULL); |
- } else { |
- UserMetricsRecordAction(UserMetricsAction("Options_SSL3_Disable"), NULL); |
- } |
- net::SSLConfigServiceWin::SetSSL3Enabled(enabled); |
- } else if (sender == enable_tls1_checkbox_) { |
- bool enabled = enable_tls1_checkbox_->checked(); |
- if (enabled) { |
- UserMetricsRecordAction(UserMetricsAction("Options_TLS1_Enable"), NULL); |
- } else { |
- UserMetricsRecordAction(UserMetricsAction("Options_TLS1_Disable"), NULL); |
- } |
- net::SSLConfigServiceWin::SetTLS1Enabled(enabled); |
- } else if (sender == check_for_cert_revocation_checkbox_) { |
- bool enabled = check_for_cert_revocation_checkbox_->checked(); |
- if (enabled) { |
- UserMetricsRecordAction( |
- UserMetricsAction("Options_CheckCertRevocation_Enable"), NULL); |
- } else { |
- UserMetricsRecordAction( |
- UserMetricsAction("Options_CheckCertRevocation_Disable"), NULL); |
- } |
- net::SSLConfigServiceWin::SetRevCheckingEnabled(enabled); |
- } else if (sender == manage_certificates_button_) { |
- UserMetricsRecordAction(UserMetricsAction("Options_ManagerCerts"), NULL); |
- CRYPTUI_CERT_MGR_STRUCT cert_mgr = { 0 }; |
- cert_mgr.dwSize = sizeof(CRYPTUI_CERT_MGR_STRUCT); |
- cert_mgr.hwndParent = GetWindow()->GetNativeWindow(); |
- ::CryptUIDlgCertMgr(&cert_mgr); |
- } |
-} |
- |
-void SecuritySection::InitControlLayout() { |
- AdvancedSection::InitControlLayout(); |
- |
- ssl_info_label_ = new views::Label(UTF16ToWide( |
- l10n_util::GetStringUTF16(IDS_OPTIONS_SSL_GROUP_DESCRIPTION))); |
- enable_ssl3_checkbox_ = new views::Checkbox( |
- UTF16ToWide(l10n_util::GetStringUTF16(IDS_OPTIONS_SSL_USESSL3))); |
- enable_ssl3_checkbox_->set_listener(this); |
- enable_tls1_checkbox_ = new views::Checkbox( |
- UTF16ToWide(l10n_util::GetStringUTF16(IDS_OPTIONS_SSL_USETLS1))); |
- enable_tls1_checkbox_->set_listener(this); |
- check_for_cert_revocation_checkbox_ = new views::Checkbox( |
- UTF16ToWide(l10n_util::GetStringUTF16(IDS_OPTIONS_SSL_CHECKREVOCATION))); |
- check_for_cert_revocation_checkbox_->set_listener(this); |
- manage_certificates_label_ = new views::Label( |
- UTF16ToWide(l10n_util::GetStringUTF16(IDS_OPTIONS_CERTIFICATES_LABEL))); |
- manage_certificates_button_ = new views::NativeButton( |
- this, |
- UTF16ToWide( |
- l10n_util::GetStringUTF16(IDS_OPTIONS_CERTIFICATES_MANAGE_BUTTON))); |
- |
- GridLayout* layout = new GridLayout(contents_); |
- contents_->SetLayoutManager(layout); |
- |
- const int single_column_view_set_id = 0; |
- AddWrappingColumnSet(layout, single_column_view_set_id); |
- const int dependent_labeled_field_set_id = 1; |
- AddDependentTwoColumnSet(layout, dependent_labeled_field_set_id); |
- const int double_column_view_set_id = 2; |
- AddTwoColumnSet(layout, double_column_view_set_id); |
- const int indented_column_set_id = 3; |
- AddIndentedColumnSet(layout, indented_column_set_id); |
- const int indented_view_set_id = 4; |
- AddIndentedColumnSet(layout, indented_view_set_id); |
- |
- // SSL connection controls and Certificates. |
- AddWrappingLabelRow(layout, manage_certificates_label_, |
- single_column_view_set_id, true); |
- AddLeadingControl(layout, manage_certificates_button_, |
- indented_column_set_id, false); |
- AddWrappingLabelRow(layout, ssl_info_label_, single_column_view_set_id, |
- true); |
- AddWrappingCheckboxRow(layout, enable_ssl3_checkbox_, |
- indented_column_set_id, true); |
- AddWrappingCheckboxRow(layout, enable_tls1_checkbox_, |
- indented_column_set_id, true); |
- AddWrappingCheckboxRow(layout, check_for_cert_revocation_checkbox_, |
- indented_column_set_id, false); |
-} |
- |
-// This method is called with a null pref_name when the dialog is initialized. |
-void SecuritySection::NotifyPrefChanged(const std::string* pref_name) { |
- // These SSL options are system settings and stored in the OS. |
- if (!pref_name) { |
- net::SSLConfig config; |
- if (net::SSLConfigServiceWin::GetSSLConfigNow(&config)) { |
- enable_ssl3_checkbox_->SetChecked(config.ssl3_enabled); |
- enable_tls1_checkbox_->SetChecked(config.tls1_enabled); |
- check_for_cert_revocation_checkbox_->SetChecked( |
- config.rev_checking_enabled); |
- } else { |
- enable_ssl3_checkbox_->SetEnabled(false); |
- enable_tls1_checkbox_->SetEnabled(false); |
- check_for_cert_revocation_checkbox_->SetEnabled(false); |
- } |
- } |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// NetworkSection |
- |
-// A helper method that opens the Internet Options control panel dialog with |
-// the Connections tab selected. |
-class OpenConnectionDialogTask : public Task { |
- public: |
- OpenConnectionDialogTask() {} |
- |
- virtual void Run() { |
- // Using rundll32 seems better than LaunchConnectionDialog which causes a |
- // new dialog to be made for each call. rundll32 uses the same global |
- // dialog and it seems to share with the shortcut in control panel. |
- FilePath rundll32; |
- PathService::Get(base::DIR_SYSTEM, &rundll32); |
- rundll32 = rundll32.AppendASCII("rundll32.exe"); |
- |
- FilePath shell32dll; |
- PathService::Get(base::DIR_SYSTEM, &shell32dll); |
- shell32dll = shell32dll.AppendASCII("shell32.dll"); |
- |
- FilePath inetcpl; |
- PathService::Get(base::DIR_SYSTEM, &inetcpl); |
- inetcpl = inetcpl.AppendASCII("inetcpl.cpl,,4"); |
- |
- std::wstring args(shell32dll.value()); |
- args.append(L",Control_RunDLL "); |
- args.append(inetcpl.value()); |
- |
- ShellExecute(NULL, L"open", rundll32.value().c_str(), args.c_str(), NULL, |
- SW_SHOWNORMAL); |
- } |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(OpenConnectionDialogTask); |
-}; |
- |
-class NetworkSection : public AdvancedSection, |
- public views::ButtonListener { |
- public: |
- explicit NetworkSection(Profile* profile); |
- virtual ~NetworkSection() {} |
- |
- // Overridden from views::ButtonListener: |
- virtual void ButtonPressed(views::Button* sender, const views::Event& event); |
- |
- protected: |
- // OptionsPageView overrides: |
- virtual void InitControlLayout(); |
- virtual void NotifyPrefChanged(const std::string* pref_name); |
- |
- private: |
- // Controls for this section: |
- views::Label* change_proxies_label_; |
- views::NativeButton* change_proxies_button_; |
- |
- // Tracks the proxy preferences. |
- scoped_ptr<PrefSetObserver> proxy_prefs_; |
- |
- DISALLOW_COPY_AND_ASSIGN(NetworkSection); |
-}; |
- |
-NetworkSection::NetworkSection(Profile* profile) |
- : change_proxies_label_(NULL), |
- change_proxies_button_(NULL), |
- AdvancedSection(profile, UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_ADVANCED_SECTION_TITLE_NETWORK))) { |
-} |
- |
-void NetworkSection::ButtonPressed( |
- views::Button* sender, const views::Event& event) { |
- if (sender == change_proxies_button_) { |
- UserMetricsRecordAction(UserMetricsAction("Options_ChangeProxies"), NULL); |
- base::Thread* thread = g_browser_process->file_thread(); |
- DCHECK(thread); |
- thread->message_loop()->PostTask(FROM_HERE, new OpenConnectionDialogTask); |
- } |
-} |
- |
-void NetworkSection::InitControlLayout() { |
- AdvancedSection::InitControlLayout(); |
- |
- change_proxies_label_ = new views::Label( |
- UTF16ToWide(l10n_util::GetStringUTF16(IDS_OPTIONS_PROXIES_LABEL))); |
- change_proxies_button_ = new views::NativeButton( |
- this, UTF16ToWide( |
- l10n_util::GetStringUTF16(IDS_OPTIONS_PROXIES_CONFIGURE_BUTTON))); |
- |
- GridLayout* layout = new GridLayout(contents_); |
- contents_->SetLayoutManager(layout); |
- |
- const int single_column_view_set_id = 0; |
- AddWrappingColumnSet(layout, single_column_view_set_id); |
- const int indented_view_set_id = 1; |
- AddIndentedColumnSet(layout, indented_view_set_id); |
- const int dependent_labeled_field_set_id = 2; |
- AddDependentTwoColumnSet(layout, dependent_labeled_field_set_id); |
- const int dns_set_id = 3; |
- AddDependentTwoColumnSet(layout, dns_set_id); |
- |
- // Proxy settings. |
- AddWrappingLabelRow(layout, change_proxies_label_, single_column_view_set_id, |
- true); |
- AddLeadingControl(layout, change_proxies_button_, indented_view_set_id, |
- false); |
- |
- proxy_prefs_.reset(PrefSetObserver::CreateProxyPrefSetObserver( |
- profile()->GetPrefs(), this)); |
- NotifyPrefChanged(NULL); |
-} |
- |
-void NetworkSection::NotifyPrefChanged(const std::string* pref_name) { |
- if (!pref_name || proxy_prefs_->IsObserved(*pref_name)) { |
- change_proxies_button_->SetEnabled(!proxy_prefs_->IsManaged()); |
- } |
-} |
- |
-} // namespace |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// DownloadSection |
- |
-class DownloadSection : public AdvancedSection, |
- public views::ButtonListener, |
- public SelectFileDialog::Listener { |
- public: |
- explicit DownloadSection(Profile* profile); |
- virtual ~DownloadSection() { |
- select_file_dialog_->ListenerDestroyed(); |
- } |
- |
- // Overridden from views::ButtonListener. |
- virtual void ButtonPressed(views::Button* sender, const views::Event& event); |
- |
- // SelectFileDialog::Listener implementation. |
- virtual void FileSelected(const FilePath& path, int index, void* params); |
- |
- // OptionsPageView implementation. |
- virtual bool CanClose() const; |
- |
- protected: |
- // OptionsPageView overrides. |
- virtual void InitControlLayout(); |
- virtual void NotifyPrefChanged(const std::string* pref_name); |
- |
- private: |
- // Controls for this section. |
- views::Label* download_file_location_label_; |
- FileDisplayArea* download_default_download_location_display_; |
- views::NativeButton* download_browse_button_; |
- views::Checkbox* download_ask_for_save_location_checkbox_; |
- scoped_refptr<SelectFileDialog> select_file_dialog_; |
- views::Label* reset_file_handlers_label_; |
- views::NativeButton* reset_file_handlers_button_; |
- |
- // Pref members. |
- FilePathPrefMember default_download_location_; |
- BooleanPrefMember ask_for_save_location_; |
- |
- // Updates the directory displayed in the default download location view with |
- // the current value of the pref. |
- void UpdateDownloadDirectoryDisplay(); |
- |
- // Helper function for reacting to managed prefs. |
- void DownloadSection::UpdateWidgetsForManagedPrefs(); |
- |
- StringPrefMember auto_open_files_; |
- |
- DISALLOW_COPY_AND_ASSIGN(DownloadSection); |
-}; |
- |
-DownloadSection::DownloadSection(Profile* profile) |
- : download_file_location_label_(NULL), |
- download_default_download_location_display_(NULL), |
- download_browse_button_(NULL), |
- download_ask_for_save_location_checkbox_(NULL), |
- ALLOW_THIS_IN_INITIALIZER_LIST( |
- select_file_dialog_(SelectFileDialog::Create(this))), |
- reset_file_handlers_label_(NULL), |
- reset_file_handlers_button_(NULL), |
- AdvancedSection(profile, UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_DOWNLOADLOCATION_GROUP_NAME))) { |
-} |
- |
-void DownloadSection::ButtonPressed( |
- views::Button* sender, const views::Event& event) { |
- if (sender == download_browse_button_) { |
- const std::wstring dialog_title = UTF16ToWide( |
- l10n_util::GetStringUTF16(IDS_OPTIONS_DOWNLOADLOCATION_BROWSE_TITLE)); |
- select_file_dialog_->SelectFile(SelectFileDialog::SELECT_FOLDER, |
- dialog_title, |
- profile()->GetPrefs()->GetFilePath( |
- prefs::kDownloadDefaultDirectory), |
- NULL, 0, std::wstring(), |
- GetWindow()->GetNativeWindow(), |
- NULL); |
- } else if (sender == download_ask_for_save_location_checkbox_) { |
- bool enabled = download_ask_for_save_location_checkbox_->checked(); |
- if (enabled) { |
- UserMetricsRecordAction( |
- UserMetricsAction("Options_AskForSaveLocation_Enable"), |
- profile()->GetPrefs()); |
- } else { |
- UserMetricsRecordAction( |
- UserMetricsAction("Options_AskForSaveLocation_Disable"), |
- profile()->GetPrefs()); |
- } |
- ask_for_save_location_.SetValue(enabled); |
- } else if (sender == reset_file_handlers_button_) { |
- profile()->GetDownloadManager()->download_prefs()->ResetAutoOpen(); |
- UserMetricsRecordAction(UserMetricsAction("Options_ResetAutoOpenFiles"), |
- profile()->GetPrefs()); |
- } |
-} |
- |
-void DownloadSection::FileSelected(const FilePath& path, |
- int index, void* params) { |
- UserMetricsRecordAction(UserMetricsAction("Options_SetDownloadDirectory"), |
- profile()->GetPrefs()); |
- default_download_location_.SetValue(path); |
- // We need to call this manually here since because we're setting the value |
- // through the pref member which avoids notifying the listener that set the |
- // value. |
- UpdateDownloadDirectoryDisplay(); |
-} |
- |
-bool DownloadSection::CanClose() const { |
- return !select_file_dialog_->IsRunning(GetWindow()->GetNativeWindow()); |
-} |
- |
-void DownloadSection::InitControlLayout() { |
- AdvancedSection::InitControlLayout(); |
- |
- // Layout the download components. |
- download_file_location_label_ = new views::Label(UTF16ToWide( |
- l10n_util::GetStringUTF16(IDS_OPTIONS_DOWNLOADLOCATION_BROWSE_TITLE))); |
- download_default_download_location_display_ = new FileDisplayArea; |
- download_browse_button_ = new views::NativeButton( |
- this, |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_DOWNLOADLOCATION_BROWSE_BUTTON))); |
- |
- download_ask_for_save_location_checkbox_ = new views::Checkbox( |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_DOWNLOADLOCATION_ASKFORSAVELOCATION))); |
- download_ask_for_save_location_checkbox_->set_listener(this); |
- download_ask_for_save_location_checkbox_->SetMultiLine(true); |
- reset_file_handlers_label_ = new views::Label( |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_AUTOOPENFILETYPES_INFO))); |
- reset_file_handlers_button_ = new views::NativeButton( |
- this, UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_AUTOOPENFILETYPES_RESETTODEFAULT))); |
- |
- GridLayout* layout = new GridLayout(contents_); |
- contents_->SetLayoutManager(layout); |
- |
- // Download location label. |
- const int single_column_view_set_id = 0; |
- AddWrappingColumnSet(layout, single_column_view_set_id); |
- AddWrappingLabelRow(layout, download_file_location_label_, |
- single_column_view_set_id, true); |
- |
- // Download location control. |
- const int double_column_view_set_id = 1; |
- ColumnSet* column_set = layout->AddColumnSet(double_column_view_set_id); |
- column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 1, |
- GridLayout::USE_PREF, 0, 0); |
- column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); |
- column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
- GridLayout::USE_PREF, 0, 0); |
- column_set->AddPaddingColumn(0, views::kUnrelatedControlHorizontalSpacing); |
- layout->StartRow(0, double_column_view_set_id); |
- layout->AddView(download_default_download_location_display_, 1, 1, |
- GridLayout::FILL, GridLayout::CENTER); |
- layout->AddView(download_browse_button_); |
- AddSpacing(layout, true); |
- |
- // Save location checkbox layout. |
- const int indented_view_set_id = 2; |
- AddIndentedColumnSet(layout, indented_view_set_id); |
- AddWrappingCheckboxRow(layout, download_ask_for_save_location_checkbox_, |
- indented_view_set_id, false); |
- |
- // Reset file handlers layout. |
- AddWrappingLabelRow(layout, reset_file_handlers_label_, |
- single_column_view_set_id, true); |
- AddLeadingControl(layout, reset_file_handlers_button_, |
- indented_view_set_id, |
- false); |
- |
- // Init member prefs so we can update the controls if prefs change. |
- default_download_location_.Init(prefs::kDownloadDefaultDirectory, |
- profile()->GetPrefs(), this); |
- ask_for_save_location_.Init(prefs::kPromptForDownload, |
- profile()->GetPrefs(), this); |
- auto_open_files_.Init(prefs::kDownloadExtensionsToOpen, profile()->GetPrefs(), |
- this); |
-} |
- |
-void DownloadSection::NotifyPrefChanged(const std::string* pref_name) { |
- if (!pref_name || *pref_name == prefs::kDownloadDefaultDirectory) |
- UpdateDownloadDirectoryDisplay(); |
- |
- if (!pref_name || *pref_name == prefs::kPromptForDownload) { |
- download_ask_for_save_location_checkbox_->SetChecked( |
- ask_for_save_location_.GetValue()); |
- } |
- |
- if (!pref_name || *pref_name == prefs::kDownloadExtensionsToOpen) { |
- bool enabled = |
- profile()->GetDownloadManager()->download_prefs()->IsAutoOpenUsed(); |
- reset_file_handlers_label_->SetEnabled(enabled); |
- reset_file_handlers_button_->SetEnabled(enabled); |
- } |
- UpdateWidgetsForManagedPrefs(); |
-} |
- |
-void DownloadSection::UpdateDownloadDirectoryDisplay() { |
- download_default_download_location_display_->SetFile( |
- default_download_location_.GetValue()); |
-} |
- |
-void DownloadSection::UpdateWidgetsForManagedPrefs() { |
- const bool enabled = !default_download_location_.IsManaged(); |
- download_default_download_location_display_->SetEnabled(enabled); |
- download_browse_button_->SetEnabled(enabled); |
- download_ask_for_save_location_checkbox_->SetEnabled(enabled); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// TranslateSection |
- |
-class TranslateSection : public AdvancedSection, |
- public views::ButtonListener { |
- public: |
- explicit TranslateSection(Profile* profile); |
- virtual ~TranslateSection() {} |
- |
- // Overridden from views::ButtonListener: |
- virtual void ButtonPressed(views::Button* sender, const views::Event& event); |
- |
- protected: |
- // OptionsPageView overrides: |
- virtual void InitControlLayout(); |
- virtual void NotifyPrefChanged(const std::string* pref_name); |
- |
- private: |
- // Control for this section: |
- views::Checkbox* enable_translate_checkbox_; |
- |
- // Preferences for this section: |
- BooleanPrefMember enable_translate_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TranslateSection); |
-}; |
- |
-TranslateSection::TranslateSection(Profile* profile) |
- : enable_translate_checkbox_(NULL), |
- AdvancedSection(profile, UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_ADVANCED_SECTION_TITLE_TRANSLATE))) { |
-} |
- |
-void TranslateSection::ButtonPressed( |
- views::Button* sender, const views::Event& event) { |
- DCHECK(sender == enable_translate_checkbox_); |
- bool enabled = enable_translate_checkbox_->checked(); |
- UserMetricsRecordAction(enabled ? |
- UserMetricsAction("Options_Translate_Enable") : |
- UserMetricsAction("Options_Translate_Disable"), |
- profile()->GetPrefs()); |
- enable_translate_.SetValue(enabled); |
-} |
- |
-void TranslateSection::InitControlLayout() { |
- AdvancedSection::InitControlLayout(); |
- |
- GridLayout* layout = new GridLayout(contents_); |
- contents_->SetLayoutManager(layout); |
- |
- AddIndentedColumnSet(layout, 0); |
- |
- enable_translate_checkbox_ = new views::Checkbox(UTF16ToWide( |
- l10n_util::GetStringUTF16(IDS_OPTIONS_TRANSLATE_ENABLE_TRANSLATE))); |
- enable_translate_checkbox_->set_listener(this); |
- AddWrappingCheckboxRow(layout, enable_translate_checkbox_, 0, false); |
- |
- // Init member pref so we can update the controls if prefs change. |
- enable_translate_.Init(prefs::kEnableTranslate, profile()->GetPrefs(), this); |
-} |
- |
-void TranslateSection::NotifyPrefChanged(const std::string* pref_name) { |
- if (!pref_name || *pref_name == prefs::kEnableTranslate) |
- enable_translate_checkbox_->SetChecked(enable_translate_.GetValue()); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// CloudPrintProxySection |
- |
-class CloudPrintProxySection : public AdvancedSection, |
- public views::ButtonListener, |
- public CloudPrintSetupFlow::Delegate { |
- public: |
- explicit CloudPrintProxySection(Profile* profile); |
- virtual ~CloudPrintProxySection() {} |
- |
- // Overridden from views::ButtonListener: |
- virtual void ButtonPressed(views::Button* sender, const views::Event& event); |
- |
- // CloudPrintSetupFlow::Delegate implementation. |
- virtual void OnDialogClosed(); |
- |
- protected: |
- // OptionsPageView overrides: |
- virtual void InitControlLayout(); |
- virtual void NotifyPrefChanged(const std::string* pref_name); |
- |
- private: |
- bool Enabled() const; |
- |
- // Controls for this section: |
- views::Label* section_description_label_; |
- views::NativeButton* enable_disable_button_; |
- views::NativeButton* manage_printer_button_; |
- |
- // Preferences we tie things to. |
- StringPrefMember cloud_print_proxy_email_; |
- BooleanPrefMember cloud_print_proxy_enabled_; |
- |
- base::ScopedCallbackFactory<CloudPrintProxySection> factory_; |
- |
- DISALLOW_COPY_AND_ASSIGN(CloudPrintProxySection); |
-}; |
- |
-CloudPrintProxySection::CloudPrintProxySection(Profile* profile) |
- : section_description_label_(NULL), |
- enable_disable_button_(NULL), |
- manage_printer_button_(NULL), |
- factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
- AdvancedSection(profile, |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_ADVANCED_SECTION_TITLE_CLOUD_PRINT))) { |
-} |
- |
-void CloudPrintProxySection::ButtonPressed(views::Button* sender, |
- const views::Event& event) { |
- if (sender == enable_disable_button_) { |
- if (Enabled()) { |
- // Enabled, we must be the disable button. |
- UserMetricsRecordAction( |
- UserMetricsAction("Options_DisableCloudPrintProxy"), NULL); |
- profile()->GetCloudPrintProxyService()->DisableForUser(); |
- } else { |
- UserMetricsRecordAction( |
- UserMetricsAction("Options_EnableCloudPrintProxy"), NULL); |
- // We open a new browser window so the Options dialog doesn't |
- // get lost behind other windows. |
- enable_disable_button_->SetEnabled(false); |
- enable_disable_button_->SetLabel(UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_CLOUD_PRINT_PROXY_ENABLING_BUTTON))); |
- enable_disable_button_->InvalidateLayout(); |
- Layout(); |
- CloudPrintSetupFlow::OpenDialog(profile(), this, |
- GetWindow()->GetNativeWindow()); |
- } |
- } else if (sender == manage_printer_button_) { |
- UserMetricsRecordAction( |
- UserMetricsAction("Options_ManageCloudPrinters"), NULL); |
- browser::ShowOptionsURL( |
- profile(), |
- CloudPrintURL(profile()).GetCloudPrintServiceManageURL()); |
- } |
-} |
- |
-void CloudPrintProxySection::OnDialogClosed() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- enable_disable_button_->SetEnabled(true); |
- // If the dialog is canceled, the preference won't change, and so we |
- // have to revert the button text back to the disabled state. |
- if (!Enabled()) { |
- enable_disable_button_->SetLabel(UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_CLOUD_PRINT_PROXY_DISABLED_BUTTON))); |
- enable_disable_button_->InvalidateLayout(); |
- Layout(); |
- } |
-} |
- |
-void CloudPrintProxySection::InitControlLayout() { |
- AdvancedSection::InitControlLayout(); |
- |
- section_description_label_ = new views::Label( |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_CLOUD_PRINT_PROXY_DISABLED_LABEL))); |
- enable_disable_button_ = new views::NativeButton(this, |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_CLOUD_PRINT_PROXY_DISABLED_BUTTON))); |
- manage_printer_button_ = new views::NativeButton(this, |
- UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_CLOUD_PRINT_PROXY_ENABLED_MANAGE_BUTTON))); |
- |
- GridLayout* layout = new GridLayout(contents_); |
- contents_->SetLayoutManager(layout); |
- |
- const int single_column_view_set_id = 0; |
- AddWrappingColumnSet(layout, single_column_view_set_id); |
- const int control_view_set_id = 1; |
- AddDependentTwoColumnSet(layout, control_view_set_id); |
- |
- // The description label at the top and label. |
- section_description_label_->SetMultiLine(true); |
- AddWrappingLabelRow(layout, section_description_label_, |
- single_column_view_set_id, true); |
- |
- // The enable / disable button and manage button. |
- AddTwoColumnRow(layout, enable_disable_button_, manage_printer_button_, false, |
- control_view_set_id, views::kRelatedControlVerticalSpacing); |
- |
- // Attach the preferences so we can flip things appropriately. |
- cloud_print_proxy_email_.Init(prefs::kCloudPrintEmail, |
- profile()->GetPrefs(), this); |
- cloud_print_proxy_enabled_.Init(prefs::kCloudPrintProxyEnabled, |
- profile()->GetPrefs(), this); |
- |
- // Start the UI off in the state we think it should be in. |
- std::string pref_string(prefs::kCloudPrintEmail); |
- NotifyPrefChanged(&pref_string); |
- |
- // Kick off a task to ask the background service what the real |
- // answer is. |
- profile()->GetCloudPrintProxyService()->RefreshStatusFromService(); |
-} |
- |
-void CloudPrintProxySection::NotifyPrefChanged(const std::string* pref_name) { |
- if (pref_name == NULL) |
- return; |
- |
- if (*pref_name == prefs::kCloudPrintEmail || |
- *pref_name == prefs::kCloudPrintProxyEnabled) { |
- bool cloud_print_proxy_allowed = |
- !cloud_print_proxy_enabled_.IsManaged() || |
- cloud_print_proxy_enabled_.GetValue(); |
- |
- if (Enabled() && cloud_print_proxy_allowed) { |
- std::string email; |
- if (profile()->GetPrefs()->HasPrefPath(prefs::kCloudPrintEmail)) |
- email = profile()->GetPrefs()->GetString(prefs::kCloudPrintEmail); |
- |
- section_description_label_->SetText(UTF16ToWide( |
- l10n_util::GetStringFUTF16( |
- IDS_OPTIONS_CLOUD_PRINT_PROXY_ENABLED_LABEL, |
- UTF8ToUTF16(email)))); |
- enable_disable_button_->SetLabel(UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_CLOUD_PRINT_PROXY_ENABLED_BUTTON))); |
- enable_disable_button_->InvalidateLayout(); |
- enable_disable_button_->SetEnabled(true); |
- manage_printer_button_->SetVisible(true); |
- manage_printer_button_->InvalidateLayout(); |
- } else { |
- section_description_label_->SetText(UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_CLOUD_PRINT_PROXY_DISABLED_LABEL))); |
- enable_disable_button_->SetLabel(UTF16ToWide(l10n_util::GetStringUTF16( |
- IDS_OPTIONS_CLOUD_PRINT_PROXY_DISABLED_BUTTON))); |
- enable_disable_button_->InvalidateLayout(); |
- enable_disable_button_->SetEnabled(cloud_print_proxy_allowed); |
- manage_printer_button_->SetVisible(false); |
- } |
- |
- // Find the parent ScrollView, and ask it to re-layout since it's |
- // possible that the section_description_label_ has changed |
- // heights. And scroll us back to being visible in that case, to |
- // be nice to the user. |
- views::View* view = section_description_label_->parent(); |
- while (view && view->GetClassName() != views::ScrollView::kViewClassName) |
- view = view->parent(); |
- if (view) { |
- gfx::Rect visible_bounds = GetVisibleBounds(); |
- bool was_all_visible = (visible_bounds.size() == size()); |
- // Our bounds can change across this call, so we have to use the |
- // new bounds if we want to stay completely visible. |
- view->Layout(); |
- ScrollRectToVisible(was_all_visible ? bounds() : visible_bounds); |
- } else { |
- Layout(); |
- } |
- } |
-} |
- |
-bool CloudPrintProxySection::Enabled() const { |
- return profile()->GetPrefs()->HasPrefPath(prefs::kCloudPrintEmail) && |
- !profile()->GetPrefs()->GetString(prefs::kCloudPrintEmail).empty(); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// AdvancedContentsView |
- |
-class AdvancedContentsView : public OptionsPageView { |
- public: |
- explicit AdvancedContentsView(Profile* profile); |
- virtual ~AdvancedContentsView(); |
- |
- // views::View overrides: |
- virtual int GetLineScrollIncrement(views::ScrollView* scroll_view, |
- bool is_horizontal, bool is_positive); |
- virtual void Layout(); |
- |
- protected: |
- // OptionsPageView implementation: |
- virtual void InitControlLayout(); |
- |
- private: |
- static void InitClass(); |
- |
- static int line_height_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AdvancedContentsView); |
-}; |
- |
-// static |
-int AdvancedContentsView::line_height_ = 0; |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// AdvancedContentsView, public: |
- |
-AdvancedContentsView::AdvancedContentsView(Profile* profile) |
- : OptionsPageView(profile) { |
- InitClass(); |
-} |
- |
-AdvancedContentsView::~AdvancedContentsView() { |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// AdvancedContentsView, views::View overrides: |
- |
-int AdvancedContentsView::GetLineScrollIncrement( |
- views::ScrollView* scroll_view, |
- bool is_horizontal, |
- bool is_positive) { |
- |
- if (!is_horizontal) |
- return line_height_; |
- return View::GetPageScrollIncrement(scroll_view, is_horizontal, is_positive); |
-} |
- |
-void AdvancedContentsView::Layout() { |
- if (parent() && parent()->width()) { |
- const int width = parent()->width(); |
- const int height = GetHeightForWidth(width); |
- SetBounds(0, 0, width, height); |
- } else { |
- gfx::Size prefsize = GetPreferredSize(); |
- SetBounds(0, 0, prefsize.width(), prefsize.height()); |
- } |
- View::Layout(); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// AdvancedContentsView, OptionsPageView implementation: |
- |
-void AdvancedContentsView::InitControlLayout() { |
- GridLayout* layout = GridLayout::CreatePanel(this); |
- SetLayoutManager(layout); |
- |
- const int single_column_view_set_id = 0; |
- ColumnSet* column_set = layout->AddColumnSet(single_column_view_set_id); |
- column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, |
- GridLayout::USE_PREF, 0, 0); |
- |
- layout->StartRow(0, single_column_view_set_id); |
- layout->AddView(new PrivacySection(profile())); |
- layout->StartRow(0, single_column_view_set_id); |
- layout->AddView(new NetworkSection(profile())); |
- layout->StartRow(0, single_column_view_set_id); |
- layout->AddView(new TranslateSection(profile())); |
- layout->StartRow(0, single_column_view_set_id); |
- layout->AddView(new DownloadSection(profile())); |
- layout->StartRow(0, single_column_view_set_id); |
- layout->AddView(new WebContentSection(profile())); |
- layout->StartRow(0, single_column_view_set_id); |
- layout->AddView(new SecuritySection(profile())); |
-#if defined(GOOGLE_CHROME_BUILD) && defined(OS_WIN) |
- // We want to enable the cloud print UI on Windows. Since the cloud |
- // print proxy on Windows needs the PDF plugin, we only enable it by |
- // default on Google Chrome Windows builds (which contain the PDF |
- // plugin). |
- bool cloud_print_available = true; |
-#else |
- bool cloud_print_available = CommandLine::ForCurrentProcess()->HasSwitch( |
- switches::kEnableCloudPrintProxy); |
-#endif |
- if (cloud_print_available && |
- profile()->GetCloudPrintProxyService()) { |
- layout->StartRow(0, single_column_view_set_id); |
- layout->AddView(new CloudPrintProxySection(profile())); |
- } |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// AdvancedContentsView, private: |
- |
-void AdvancedContentsView::InitClass() { |
- static bool initialized = false; |
- if (!initialized) { |
- ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
- line_height_ = rb.GetFont(ResourceBundle::BaseFont).GetHeight(); |
- initialized = true; |
- } |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// AdvancedScrollViewContainer, public: |
- |
-AdvancedScrollViewContainer::AdvancedScrollViewContainer(Profile* profile) |
- : contents_view_(new AdvancedContentsView(profile)), |
- scroll_view_(new views::ScrollView) { |
- AddChildView(scroll_view_); |
- scroll_view_->SetContents(contents_view_); |
- set_background(new ListBackground()); |
-} |
- |
-AdvancedScrollViewContainer::~AdvancedScrollViewContainer() { |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// AdvancedScrollViewContainer, views::View overrides: |
- |
-void AdvancedScrollViewContainer::Layout() { |
- gfx::Rect lb = GetLocalBounds(); |
- |
- gfx::Size border = gfx::NativeTheme::instance()->GetThemeBorderSize( |
- gfx::NativeTheme::LIST); |
- lb.Inset(border.width(), border.height()); |
- scroll_view_->SetBoundsRect(lb); |
-} |