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()); |