Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3226)

Unified Diff: chrome/browser/ui/webui/options/advanced_options_handler.cc

Issue 8528011: Page zoom improvements (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/webui/options/advanced_options_handler.cc
===================================================================
--- chrome/browser/ui/webui/options/advanced_options_handler.cc (revision 109526)
+++ chrome/browser/ui/webui/options/advanced_options_handler.cc (working copy)
@@ -4,6 +4,7 @@
#include "chrome/browser/ui/webui/options/advanced_options_handler.h"
+#include <cmath>
#include <string>
#include "base/basictypes.h"
@@ -33,9 +34,11 @@
#include "content/browser/user_metrics.h"
#include "content/public/browser/notification_details.h"
#include "content/public/browser/notification_types.h"
+#include "content/public/common/page_zoom.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
#include "ui/base/l10n/l10n_util.h"
#if !defined(OS_CHROMEOS)
@@ -114,7 +117,7 @@
IDS_OPTIONS_TABS_TO_LINKS_PREF },
{ "fontSettingsInfo",
IDS_OPTIONS_FONTSETTINGS_INFO },
- { "defaultZoomLevelLabel",
+ { "defaultZoomFactorLabel",
IDS_OPTIONS_DEFAULT_ZOOM_LEVEL_LABEL },
{ "defaultFontSizeLabel",
IDS_OPTIONS_DEFAULT_FONT_SIZE_LABEL },
@@ -198,10 +201,11 @@
}
void AdvancedOptionsHandler::Initialize() {
- DCHECK(web_ui_);
+ DCHECK(web_ui());
SetupMetricsReportingCheckbox();
SetupMetricsReportingSettingVisibility();
- SetupFontSizeLabel();
+ SetupFontSizeSelector();
+ SetupPageZoomSelector();
SetupAutoOpenFileTypesDisabledAttribute();
SetupProxySettingsSection();
SetupSSLConfigSettings();
@@ -225,8 +229,7 @@
// Register for preferences that we need to observe manually. These have
// special behaviors that aren't handled by the standard prefs UI.
- DCHECK(web_ui_);
- PrefService* prefs = Profile::FromWebUI(web_ui_)->GetPrefs();
+ PrefService* prefs = Profile::FromWebUI(web_ui)->GetPrefs();
#if !defined(OS_CHROMEOS)
enable_metrics_recording_.Init(prefs::kMetricsReportingEnabled,
g_browser_process->local_state(), this);
@@ -245,6 +248,7 @@
auto_open_files_.Init(prefs::kDownloadExtensionsToOpen, prefs, this);
default_font_size_.Init(prefs::kWebKitDefaultFontSize, prefs, this);
+ default_zoom_level_.Init(prefs::kDefaultZoomLevel, prefs, this);
#if !defined(OS_CHROMEOS)
proxy_prefs_.reset(
PrefSetObserver::CreateProxyPrefSetObserver(prefs, this));
@@ -256,47 +260,50 @@
void AdvancedOptionsHandler::RegisterMessages() {
// Setup handlers specific to this panel.
- DCHECK(web_ui_);
- web_ui_->RegisterMessageCallback("selectDownloadLocation",
+ DCHECK(web_ui());
+ web_ui()->RegisterMessageCallback("selectDownloadLocation",
James Hawkins 2011/11/14 18:09:05 Ehhh I'm not really a fan of continuously calling
csilv 2011/11/15 02:26:49 I reverted this change here and below. On 2011/11
base::Bind(&AdvancedOptionsHandler::HandleSelectDownloadLocation,
base::Unretained(this)));
- web_ui_->RegisterMessageCallback("autoOpenFileTypesAction",
+ web_ui()->RegisterMessageCallback("autoOpenFileTypesAction",
base::Bind(&AdvancedOptionsHandler::HandleAutoOpenButton,
base::Unretained(this)));
- web_ui_->RegisterMessageCallback("defaultFontSizeAction",
+ web_ui()->RegisterMessageCallback("defaultFontSizeAction",
base::Bind(&AdvancedOptionsHandler::HandleDefaultFontSize,
base::Unretained(this)));
+ web_ui()->RegisterMessageCallback("defaultZoomFactorAction",
+ base::Bind(&AdvancedOptionsHandler::HandleDefaultZoomFactor,
+ base::Unretained(this)));
#if !defined(OS_CHROMEOS)
- web_ui_->RegisterMessageCallback("metricsReportingCheckboxAction",
+ web_ui()->RegisterMessageCallback("metricsReportingCheckboxAction",
base::Bind(&AdvancedOptionsHandler::HandleMetricsReportingCheckbox,
base::Unretained(this)));
#endif
#if !defined(USE_NSS) && !defined(USE_OPENSSL)
- web_ui_->RegisterMessageCallback("showManageSSLCertificates",
+ web_ui()->RegisterMessageCallback("showManageSSLCertificates",
base::Bind(&AdvancedOptionsHandler::ShowManageSSLCertificates,
base::Unretained(this)));
#endif
- web_ui_->RegisterMessageCallback("showCloudPrintManagePage",
+ web_ui()->RegisterMessageCallback("showCloudPrintManagePage",
base::Bind(&AdvancedOptionsHandler::ShowCloudPrintManagePage,
base::Unretained(this)));
#if !defined(OS_CHROMEOS)
if (cloud_print_proxy_ui_enabled_) {
- web_ui_->RegisterMessageCallback("showCloudPrintSetupDialog",
+ web_ui()->RegisterMessageCallback("showCloudPrintSetupDialog",
base::Bind(&AdvancedOptionsHandler::ShowCloudPrintSetupDialog,
base::Unretained(this)));
- web_ui_->RegisterMessageCallback("disableCloudPrintProxy",
+ web_ui()->RegisterMessageCallback("disableCloudPrintProxy",
base::Bind(&AdvancedOptionsHandler::HandleDisableCloudPrintProxy,
base::Unretained(this)));
}
- web_ui_->RegisterMessageCallback("showNetworkProxySettings",
+ web_ui()->RegisterMessageCallback("showNetworkProxySettings",
base::Bind(&AdvancedOptionsHandler::ShowNetworkProxySettings,
base::Unretained(this)));
#endif
- web_ui_->RegisterMessageCallback("checkRevocationCheckboxAction",
+ web_ui()->RegisterMessageCallback("checkRevocationCheckboxAction",
base::Bind(&AdvancedOptionsHandler::HandleCheckRevocationCheckbox,
base::Unretained(this)));
#if !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
- web_ui_->RegisterMessageCallback("backgroundModeAction",
+ web_ui()->RegisterMessageCallback("backgroundModeAction",
base::Bind(&AdvancedOptionsHandler::HandleBackgroundModeCheckbox,
base::Unretained(this)));
#endif
@@ -321,7 +328,9 @@
SetupCloudPrintProxySection();
#endif
} else if (*pref_name == prefs::kWebKitDefaultFontSize) {
- SetupFontSizeLabel();
+ SetupFontSizeSelector();
+ } else if (*pref_name == prefs::kDefaultZoomLevel) {
+ SetupPageZoomSelector();
#if !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
} else if (*pref_name == prefs::kBackgroundModeEnabled) {
SetupBackgroundModeSettings();
@@ -332,20 +341,20 @@
void AdvancedOptionsHandler::HandleSelectDownloadLocation(
const ListValue* args) {
- PrefService* pref_service = Profile::FromWebUI(web_ui_)->GetPrefs();
+ PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
select_folder_dialog_ = SelectFileDialog::Create(this);
select_folder_dialog_->SelectFile(
SelectFileDialog::SELECT_FOLDER,
l10n_util::GetStringUTF16(IDS_OPTIONS_DOWNLOADLOCATION_BROWSE_TITLE),
pref_service->GetFilePath(prefs::kDownloadDefaultDirectory),
- NULL, 0, FILE_PATH_LITERAL(""), web_ui_->tab_contents(),
- web_ui_->tab_contents()->view()->GetTopLevelNativeWindow(), NULL);
+ NULL, 0, FILE_PATH_LITERAL(""), web_ui()->tab_contents(),
+ web_ui()->tab_contents()->view()->GetTopLevelNativeWindow(), NULL);
}
void AdvancedOptionsHandler::FileSelected(const FilePath& path, int index,
void* params) {
UserMetrics::RecordAction(UserMetricsAction("Options_SetDownloadDirectory"));
- PrefService* pref_service = Profile::FromWebUI(web_ui_)->GetPrefs();
+ PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
pref_service->SetFilePath(prefs::kDownloadDefaultDirectory, path);
}
@@ -359,7 +368,7 @@
void AdvancedOptionsHandler::HandleAutoOpenButton(const ListValue* args) {
UserMetrics::RecordAction(UserMetricsAction("Options_ResetAutoOpenFiles"));
DownloadManager* manager =
- web_ui_->tab_contents()->browser_context()->GetDownloadManager();
+ web_ui()->tab_contents()->browser_context()->GetDownloadManager();
if (manager)
DownloadPrefs::FromDownloadManager(manager)->ResetAutoOpen();
}
@@ -384,11 +393,19 @@
if (ExtractIntegerValue(args, &font_size)) {
if (font_size > 0) {
default_font_size_.SetValue(font_size);
- SetupFontSizeLabel();
+ SetupFontSizeSelector();
}
}
}
+void AdvancedOptionsHandler::HandleDefaultZoomFactor(const ListValue* args) {
+ double zoom_factor;
+ if (ExtractDoubleValue(args, &zoom_factor)) {
+ default_zoom_level_.SetValue(
+ WebKit::WebView::zoomFactorToZoomLevel(zoom_factor));
+ }
+}
+
void AdvancedOptionsHandler::HandleCheckRevocationCheckbox(
const ListValue* args) {
std::string checked_str = UTF16ToUTF8(ExtractStringValue(args));
@@ -413,7 +430,7 @@
void AdvancedOptionsHandler::SetupBackgroundModeSettings() {
base::FundamentalValue checked(background_mode_enabled_.GetValue());
- web_ui_->CallJavascriptFunction(
+ web_ui()->CallJavascriptFunction(
"options.AdvancedOptions.SetBackgroundModeCheckboxState", checked);
}
#endif
@@ -421,22 +438,22 @@
#if !defined(OS_CHROMEOS)
void AdvancedOptionsHandler::ShowNetworkProxySettings(const ListValue* args) {
UserMetrics::RecordAction(UserMetricsAction("Options_ShowProxySettings"));
- AdvancedOptionsUtilities::ShowNetworkProxySettings(web_ui_->tab_contents());
+ AdvancedOptionsUtilities::ShowNetworkProxySettings(web_ui()->tab_contents());
}
#endif
#if !defined(USE_NSS) && !defined(USE_OPENSSL)
void AdvancedOptionsHandler::ShowManageSSLCertificates(const ListValue* args) {
UserMetrics::RecordAction(UserMetricsAction("Options_ManageSSLCertificates"));
- AdvancedOptionsUtilities::ShowManageSSLCertificates(web_ui_->tab_contents());
+ AdvancedOptionsUtilities::ShowManageSSLCertificates(web_ui()->tab_contents());
}
#endif
void AdvancedOptionsHandler::ShowCloudPrintManagePage(const ListValue* args) {
UserMetrics::RecordAction(UserMetricsAction("Options_ManageCloudPrinters"));
// Open a new tab in the current window for the management page.
- Profile* profile = Profile::FromWebUI(web_ui_);
- web_ui_->tab_contents()->OpenURL(
+ Profile* profile = Profile::FromWebUI(web_ui());
+ web_ui()->tab_contents()->OpenURL(
CloudPrintURL(profile).GetCloudPrintServiceManageURL(),
GURL(), NEW_FOREGROUND_TAB, content::PAGE_TRANSITION_LINK);
}
@@ -445,8 +462,8 @@
void AdvancedOptionsHandler::ShowCloudPrintSetupDialog(const ListValue* args) {
UserMetrics::RecordAction(UserMetricsAction("Options_EnableCloudPrintProxy"));
// Open the connector enable page in the current tab.
- Profile* profile = Profile::FromWebUI(web_ui_);
- web_ui_->tab_contents()->OpenURL(
+ Profile* profile = Profile::FromWebUI(web_ui());
+ web_ui()->tab_contents()->OpenURL(
CloudPrintURL(profile).GetCloudPrintServiceEnableURL(
CloudPrintProxyServiceFactory::GetForProfile(profile)->proxy_id()),
GURL(), CURRENT_TAB, content::PAGE_TRANSITION_LINK);
@@ -456,19 +473,19 @@
const ListValue* args) {
UserMetrics::RecordAction(
UserMetricsAction("Options_DisableCloudPrintProxy"));
- CloudPrintProxyServiceFactory::GetForProfile(Profile::FromWebUI(web_ui_))->
+ CloudPrintProxyServiceFactory::GetForProfile(Profile::FromWebUI(web_ui()))->
DisableForUser();
}
void AdvancedOptionsHandler::RefreshCloudPrintStatusFromService() {
- DCHECK(web_ui_);
+ DCHECK(web_ui());
if (cloud_print_proxy_ui_enabled_)
- CloudPrintProxyServiceFactory::GetForProfile(Profile::FromWebUI(web_ui_))->
+ CloudPrintProxyServiceFactory::GetForProfile(Profile::FromWebUI(web_ui()))->
RefreshStatusFromService();
}
void AdvancedOptionsHandler::SetupCloudPrintProxySection() {
- Profile* profile = Profile::FromWebUI(web_ui_);
+ Profile* profile = Profile::FromWebUI(web_ui());
if (!CloudPrintProxyServiceFactory::GetForProfile(profile)) {
cloud_print_proxy_ui_enabled_ = false;
RemoveCloudPrintProxySection();
@@ -497,13 +514,13 @@
}
StringValue label(label_str);
- web_ui_->CallJavascriptFunction(
+ web_ui()->CallJavascriptFunction(
"options.AdvancedOptions.SetupCloudPrintProxySection",
disabled, label, allowed);
}
void AdvancedOptionsHandler::RemoveCloudPrintProxySection() {
- web_ui_->CallJavascriptFunction(
+ web_ui()->CallJavascriptFunction(
"options.AdvancedOptions.RemoveCloudPrintProxySection");
}
@@ -513,7 +530,7 @@
#if defined(GOOGLE_CHROME_BUILD) && !defined(OS_CHROMEOS)
base::FundamentalValue checked(enable_metrics_recording_.GetValue());
base::FundamentalValue disabled(enable_metrics_recording_.IsManaged());
- web_ui_->CallJavascriptFunction(
+ web_ui()->CallJavascriptFunction(
"options.AdvancedOptions.SetMetricsReportingCheckboxState", checked,
disabled);
#endif
@@ -524,29 +541,78 @@
// Don't show the reporting setting if we are in the guest mode.
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kGuestSession)) {
base::FundamentalValue visible(false);
- web_ui_->CallJavascriptFunction(
+ web_ui()->CallJavascriptFunction(
"options.AdvancedOptions.SetMetricsReportingSettingVisibility",
visible);
}
#endif
}
-void AdvancedOptionsHandler::SetupFontSizeLabel() {
+void AdvancedOptionsHandler::SetupFontSizeSelector() {
// We're only interested in integer values, so convert to int.
base::FundamentalValue font_size(default_font_size_.GetValue());
- web_ui_->CallJavascriptFunction(
+ web_ui()->CallJavascriptFunction(
"options.AdvancedOptions.SetFontSize", font_size);
}
+void AdvancedOptionsHandler::SetupPageZoomSelector() {
+ PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
+ double default_zoom_level = pref_service->GetDouble(prefs::kDefaultZoomLevel);
+ double default_zoom_factor =
+ WebKit::WebView::zoomLevelToZoomFactor(default_zoom_level);
+
+ // Generate a vector of zoom factors from an array of known preset values.
James Hawkins 2011/11/14 18:09:05 :-/ This is very similar if not exactly like the c
csilv 2011/11/15 02:26:49 Done.
+ // The values in content::kPresetZoomFactors will already be in sorted order.
+ std::vector<double> zoom_factors;
+ bool found_default = false;
+ for (int i = 0; i < content::kPresetZoomFactorsCount; i++) {
+ double zoom_factor = content::kPresetZoomFactors[i];
+ if (std::fabs(zoom_factor - default_zoom_factor) <=
+ content::kPageZoomEpsilon)
+ found_default = true;
+ zoom_factors.push_back(zoom_factor);
+ }
+ // If the preset array did not contain the user's default zoom value,
+ // append it to the vector and then sort.
+ if (!found_default) {
+ zoom_factors.push_back(default_zoom_factor);
+ std::sort(zoom_factors.begin(), zoom_factors.end());
+ }
+
+ // Iterate through the zoom factors and and build the contents of the
+ // selector that will be sent to the javascript handler.
+ // Each item in the list has the following parameters:
+ // 1. Title (string).
+ // 2. Value (double).
+ // 3. Is selected? (bool).
+ ListValue zoom_factors_value;
+ for (std::vector<double>::const_iterator i = zoom_factors.begin();
+ i != zoom_factors.end(); ++i) {
+ ListValue* option = new ListValue();
+ double factor = *i;
+ int percent = static_cast<int>(factor * 100 + 0.5);
+ option->Append(Value::CreateStringValue(
+ l10n_util::GetStringFUTF16Int(IDS_ZOOM_PERCENT, percent)));
+ option->Append(Value::CreateDoubleValue(factor));
+ bool selected =
+ (std::fabs(factor - default_zoom_factor) < content::kPageZoomEpsilon);
+ option->Append(Value::CreateBooleanValue(selected));
+ zoom_factors_value.Append(option);
+ }
+
+ web_ui()->CallJavascriptFunction(
+ "options.AdvancedOptions.SetupPageZoomSelector", zoom_factors_value);
+}
+
void AdvancedOptionsHandler::SetupAutoOpenFileTypesDisabledAttribute() {
// Set the enabled state for the AutoOpenFileTypesResetToDefault button.
// We enable the button if the user has any auto-open file types registered.
DownloadManager* manager =
- web_ui_->tab_contents()->browser_context()->GetDownloadManager();
+ web_ui()->tab_contents()->browser_context()->GetDownloadManager();
bool disabled = !(manager &&
DownloadPrefs::FromDownloadManager(manager)->IsAutoOpenUsed());
base::FundamentalValue value(disabled);
- web_ui_->CallJavascriptFunction(
+ web_ui()->CallJavascriptFunction(
"options.AdvancedOptions.SetAutoOpenFileTypesDisabledAttribute", value);
}
@@ -554,7 +620,7 @@
#if !defined(OS_CHROMEOS)
// Disable the button if proxy settings are managed by a sysadmin or
// overridden by an extension.
- PrefService* pref_service = Profile::FromWebUI(web_ui_)->GetPrefs();
+ PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
const PrefService::Preference* proxy_config =
pref_service->FindPreference(prefs::kProxy);
bool is_extension_controlled = (proxy_config &&
@@ -573,7 +639,7 @@
}
StringValue label(label_str);
- web_ui_->CallJavascriptFunction(
+ web_ui()->CallJavascriptFunction(
"options.AdvancedOptions.SetupProxySettingsSection", disabled, label);
#endif // !defined(OS_CHROMEOS)
}
@@ -582,7 +648,7 @@
{
base::FundamentalValue checked(rev_checking_enabled_.GetValue());
base::FundamentalValue disabled(rev_checking_enabled_.IsManaged());
- web_ui_->CallJavascriptFunction(
+ web_ui()->CallJavascriptFunction(
"options.AdvancedOptions.SetCheckRevocationCheckboxState", checked,
disabled);
}

Powered by Google App Engine
This is Rietveld 408576698