Chromium Code Reviews| Index: chrome/browser/ui/browser.cc |
| =================================================================== |
| --- chrome/browser/ui/browser.cc (revision 109526) |
| +++ chrome/browser/ui/browser.cc (working copy) |
| @@ -10,6 +10,7 @@ |
| #endif // OS_WIN |
| #include <algorithm> |
| +#include <cmath> |
| #include <string> |
| #include "base/base_paths.h" |
| @@ -153,6 +154,7 @@ |
| #include "content/public/browser/notification_details.h" |
| #include "content/public/common/content_restriction.h" |
| #include "content/public/common/content_switches.h" |
| +#include "content/public/common/page_zoom.h" |
| #include "grit/chromium_strings.h" |
| #include "grit/generated_resources.h" |
| #include "grit/locale_settings.h" |
| @@ -161,6 +163,7 @@ |
| #include "net/base/net_util.h" |
| #include "net/base/registry_controlled_domain.h" |
| #include "net/url_request/url_request_context.h" |
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" |
| #include "ui/base/animation/animation.h" |
| #include "ui/base/l10n/l10n_util.h" |
| #include "ui/gfx/point.h" |
| @@ -1967,16 +1970,71 @@ |
| if (is_devtools()) |
| return; |
| - static const UserMetricsAction kActions[] = { |
| - UserMetricsAction("ZoomMinus"), |
| - UserMetricsAction("ZoomNormal"), |
| - UserMetricsAction("ZoomPlus") |
| - }; |
| + RenderViewHost* host = GetSelectedTabContentsWrapper()->render_view_host(); |
|
James Hawkins
2011/11/14 18:09:05
When is |host| NULL?
csilv
2011/11/15 02:26:49
Shouldn't happen, removed.
|
| + if (!host) |
| + return; |
| - UserMetrics::RecordAction(kActions[zoom - content::PAGE_ZOOM_OUT]); |
| - TabContentsWrapper* tab_contents = GetSelectedTabContentsWrapper(); |
| - RenderViewHost* host = tab_contents->render_view_host(); |
| - host->Zoom(zoom); |
| + if (zoom == content::PAGE_ZOOM_RESET) { |
| + host->SetZoomLevel(0); |
| + UserMetrics::RecordAction(UserMetricsAction("ZoomNormal")); |
| + return; |
| + } |
| + |
| + double current_zoom_level = GetSelectedTabContents()->GetZoomLevel(); |
| + double default_zoom_level = |
| + profile_->GetPrefs()->GetDouble(prefs::kDefaultZoomLevel); |
| + |
| + // Generate a vector of zoom level values from an array of known preset |
| + // values. The values in content::kPresetZoomFactors will already be in |
| + // sorted order. |
| + std::vector<double> zoom_levels; |
| + bool found_default = false; |
| + for (int i = 0; i < content::kPresetZoomFactorsCount; i++) { |
| + double zoom_level = |
| + WebKit::WebView::zoomFactorToZoomLevel(content::kPresetZoomFactors[i]); |
| + if (std::fabs(zoom_level - default_zoom_level) <= |
| + content::kPageZoomEpsilon) |
| + found_default = true; |
| + zoom_levels.push_back(zoom_level); |
| + } |
| + // 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_levels.push_back(default_zoom_level); |
| + std::sort(zoom_levels.begin(), zoom_levels.end()); |
| + } |
| + |
| + if (zoom == content::PAGE_ZOOM_OUT) { |
| + // Iterate through the zoom levels in reverse order to find the next |
| + // lower level based on the current zoom level for this page. |
| + for (std::vector<double>::reverse_iterator i = zoom_levels.rbegin(); |
| + i != zoom_levels.rend(); ++i) { |
| + double zoom_level = *i; |
| + if (std::fabs(zoom_level - current_zoom_level) <= |
| + content::kPageZoomEpsilon) |
| + continue; |
| + if (zoom_level < current_zoom_level) { |
| + host->SetZoomLevel(zoom_level); |
| + break; |
| + } |
| + } |
| + UserMetrics::RecordAction(UserMetricsAction("ZoomMinus")); |
|
James Hawkins
2011/11/14 18:09:05
For the sake of posterity, it would be interesting
csilv
2011/11/15 02:26:49
Done.
|
| + } else { |
| + // Iterate through the zoom levels in normal order to find the next |
| + // higher level based on the current zoom level for this page. |
| + for (std::vector<double>::const_iterator i = zoom_levels.begin(); |
| + i != zoom_levels.end(); ++i) { |
| + double zoom_level = *i; |
| + if (std::fabs(zoom_level - current_zoom_level) <= |
| + content::kPageZoomEpsilon) |
| + continue; |
| + if (zoom_level > current_zoom_level) { |
| + host->SetZoomLevel(zoom_level); |
| + break; |
| + } |
| + } |
| + UserMetrics::RecordAction(UserMetricsAction("ZoomPlus")); |
| + } |
| } |
| void Browser::FocusToolbar() { |