summaryrefslogtreecommitdiffstats
path: root/chrome/browser/profiles/profile_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/profiles/profile_impl.cc')
-rw-r--r--chrome/browser/profiles/profile_impl.cc42
1 files changed, 22 insertions, 20 deletions
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
index ddb9b5a..06716b8 100644
--- a/chrome/browser/profiles/profile_impl.cc
+++ b/chrome/browser/profiles/profile_impl.cc
@@ -322,7 +322,9 @@ ProfileImpl::ProfileImpl(
Delegate* delegate,
CreateMode create_mode,
base::SequencedTaskRunner* sequenced_task_runner)
- : path_(path),
+ : zoom_callback_(base::Bind(&ProfileImpl::OnZoomLevelChanged,
+ base::Unretained(this))),
+ path_(path),
ALLOW_THIS_IN_INITIALIZER_LIST(io_data_(this)),
host_content_settings_map_(NULL),
last_session_exit_type_(EXIT_NORMAL),
@@ -567,8 +569,7 @@ void ProfileImpl::InitHostZoomMap() {
}
}
- registrar_.Add(this, content::NOTIFICATION_ZOOM_LEVEL_CHANGED,
- content::Source<HostZoomMap>(host_zoom_map));
+ host_zoom_map->AddZoomLevelChangedCallback(zoom_callback_);
}
FilePath ProfileImpl::last_selected_directory() {
@@ -582,6 +583,9 @@ void ProfileImpl::set_last_selected_directory(const FilePath& path) {
ProfileImpl::~ProfileImpl() {
MaybeSendDestroyedNotification();
+ HostZoomMap::GetForBrowserContext(this)->RemoveZoomLevelChangedCallback(
+ zoom_callback_);
+
bool prefs_loaded = prefs_->GetInitializationStatus() !=
PrefService::INITIALIZATION_STATUS_WAITING;
@@ -930,23 +934,6 @@ void ProfileImpl::Observe(int type,
registrar_.Remove(this, chrome::NOTIFICATION_BOOKMARK_MODEL_LOADED,
content::Source<Profile>(this));
break;
- case content::NOTIFICATION_ZOOM_LEVEL_CHANGED: {
- const std::string& host =
- *(content::Details<const std::string>(details).ptr());
- if (!host.empty()) {
- HostZoomMap* host_zoom_map = HostZoomMap::GetForBrowserContext(this);
- double level = host_zoom_map->GetZoomLevel(host);
- DictionaryPrefUpdate update(prefs_.get(), prefs::kPerHostZoomLevels);
- DictionaryValue* host_zoom_dictionary = update.Get();
- if (level == host_zoom_map->GetDefaultZoomLevel()) {
- host_zoom_dictionary->RemoveWithoutPathExpansion(host, NULL);
- } else {
- host_zoom_dictionary->SetWithoutPathExpansion(
- host, Value::CreateDoubleValue(level));
- }
- }
- break;
- }
default:
NOTREACHED();
}
@@ -957,6 +944,21 @@ void ProfileImpl::OnDefaultZoomLevelChanged() {
pref_change_registrar_.prefs()->GetDouble(prefs::kDefaultZoomLevel));
}
+void ProfileImpl::OnZoomLevelChanged(const std::string& host) {
+ if (host.empty())
+ return;
+ HostZoomMap* host_zoom_map = HostZoomMap::GetForBrowserContext(this);
+ double level = host_zoom_map->GetZoomLevel(host);
+ DictionaryPrefUpdate update(prefs_.get(), prefs::kPerHostZoomLevels);
+ DictionaryValue* host_zoom_dictionary = update.Get();
+ if (level == host_zoom_map->GetDefaultZoomLevel()) {
+ host_zoom_dictionary->RemoveWithoutPathExpansion(host, NULL);
+ } else {
+ host_zoom_dictionary->SetWithoutPathExpansion(
+ host, Value::CreateDoubleValue(level));
+ }
+}
+
#if defined(ENABLE_SESSION_SERVICE)
void ProfileImpl::StopCreateSessionServiceTimer() {
create_session_service_timer_.Stop();