| Index: chrome/browser/ui/webui/settings/site_settings_handler.cc
|
| diff --git a/chrome/browser/ui/webui/settings/site_settings_handler.cc b/chrome/browser/ui/webui/settings/site_settings_handler.cc
|
| index 9c17f2e19ba33fdf14ef09a3a2c1e1b1592c686f..504d2b4533169d3f67da74dece43b40fe6bf9a21 100644
|
| --- a/chrome/browser/ui/webui/settings/site_settings_handler.cc
|
| +++ b/chrome/browser/ui/webui/settings/site_settings_handler.cc
|
| @@ -19,6 +19,7 @@
|
| #include "chrome/browser/permissions/chooser_context_base.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/ui/webui/site_settings_helper.h"
|
| +#include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h"
|
| #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
|
| #include "chrome/grit/generated_resources.h"
|
| #include "components/content_settings/core/browser/host_content_settings_map.h"
|
| @@ -156,10 +157,17 @@ void SiteSettingsHandler::RegisterMessages() {
|
| base::Bind(&SiteSettingsHandler::HandleUpdateIncognitoStatus,
|
| base::Unretained(this)));
|
| web_ui()->RegisterMessageCallback(
|
| + "fetchZoomScope", base::Bind(&SiteSettingsHandler::HandleFetchZoomScope,
|
| + base::Unretained(this)));
|
| + web_ui()->RegisterMessageCallback(
|
| "fetchZoomLevels",
|
| base::Bind(&SiteSettingsHandler::HandleFetchZoomLevels,
|
| base::Unretained(this)));
|
| web_ui()->RegisterMessageCallback(
|
| + "setZoomScopeIsPerOrigin",
|
| + base::Bind(&SiteSettingsHandler::HandleSetZoomScopeIsPerOrigin,
|
| + base::Unretained(this)));
|
| + web_ui()->RegisterMessageCallback(
|
| "removeZoomLevel",
|
| base::Bind(&SiteSettingsHandler::HandleRemoveZoomLevel,
|
| base::Unretained(this)));
|
| @@ -190,12 +198,25 @@ void SiteSettingsHandler::OnJavascriptAllowed() {
|
| ->AddZoomLevelChangedCallback(
|
| base::Bind(&SiteSettingsHandler::OnZoomLevelChanged,
|
| base::Unretained(this)));
|
| + // We subscribe to the ChromeZoomLevelPrefs to get updates to the default
|
| + // zoom scope. As with the HostZoomMap, we only allow the user to modify
|
| + // the default zoom scope for the default storage partition.
|
| + ChromeZoomLevelPrefs* zoom_level_prefs = profile_->GetZoomLevelPrefs();
|
| + // Only regular profiles can change the default zoom scope, so only require
|
| + // a |zoom_level_prefs| in this case.
|
| + DCHECK(zoom_level_prefs ||
|
| + profile_->GetProfileType() != Profile::REGULAR_PROFILE);
|
| + if (zoom_level_prefs)
|
| + default_zoom_scope_subscription_ =
|
| + zoom_level_prefs->RegisterDefaultZoomScopeCallback(base::Bind(
|
| + &SiteSettingsHandler::OnZoomScopeChanged, base::Unretained(this)));
|
| }
|
|
|
| void SiteSettingsHandler::OnJavascriptDisallowed() {
|
| observer_.RemoveAll();
|
| notification_registrar_.RemoveAll();
|
| host_zoom_map_subscription_.reset();
|
| + default_zoom_scope_subscription_.reset();
|
| }
|
|
|
| void SiteSettingsHandler::OnGetUsageInfo(
|
| @@ -281,6 +302,10 @@ void SiteSettingsHandler::Observe(
|
| }
|
| }
|
|
|
| +void SiteSettingsHandler::OnZoomScopeChanged() {
|
| + SendZoomScope();
|
| +}
|
| +
|
| void SiteSettingsHandler::OnZoomLevelChanged(
|
| const content::HostZoomMap::ZoomLevelChange& change) {
|
| SendZoomLevels();
|
| @@ -622,11 +647,29 @@ void SiteSettingsHandler::SendIncognitoStatus(
|
| base::FundamentalValue(incognito_enabled));
|
| }
|
|
|
| +void SiteSettingsHandler::HandleFetchZoomScope(const base::ListValue* args) {
|
| + AllowJavascript();
|
| + SendZoomScope();
|
| +}
|
| +
|
| void SiteSettingsHandler::HandleFetchZoomLevels(const base::ListValue* args) {
|
| AllowJavascript();
|
| SendZoomLevels();
|
| }
|
|
|
| +void SiteSettingsHandler::SendZoomScope() {
|
| + if (!IsJavascriptAllowed())
|
| + return;
|
| +
|
| + ChromeZoomLevelPrefs* zoom_level_prefs = profile_->GetZoomLevelPrefs();
|
| + bool is_per_origin = zoom_level_prefs
|
| + ? zoom_level_prefs->GetZoomScopeIsPerOriginPref()
|
| + : ChromeZoomLevelPrefs::kZoomScopeSettingDefault;
|
| + CallJavascriptFunction("cr.webUIListenerCallback",
|
| + base::StringValue("onZoomScopeChanged"),
|
| + base::FundamentalValue(is_per_origin));
|
| +}
|
| +
|
| void SiteSettingsHandler::SendZoomLevels() {
|
| if (!IsJavascriptAllowed())
|
| return;
|
| @@ -708,6 +751,18 @@ void SiteSettingsHandler::SendZoomLevels() {
|
| zoom_levels_exceptions);
|
| }
|
|
|
| +void SiteSettingsHandler::HandleSetZoomScopeIsPerOrigin(
|
| + const base::ListValue* args) {
|
| + CHECK_EQ(1U, args->GetSize());
|
| +
|
| + bool is_per_origin;
|
| + CHECK(args->GetBoolean(0, &is_per_origin));
|
| +
|
| + ChromeZoomLevelPrefs* zoom_level_prefs = profile_->GetZoomLevelPrefs();
|
| + DCHECK(zoom_level_prefs);
|
| + zoom_level_prefs->SetZoomScopeIsPerOriginPref(is_per_origin);
|
| +}
|
| +
|
| void SiteSettingsHandler::HandleRemoveZoomLevel(const base::ListValue* args) {
|
| CHECK_EQ(1U, args->GetSize());
|
|
|
|
|