| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/zoom/chrome_zoom_level_otr_delegate.h" | 5 #include "chrome/browser/ui/zoom/chrome_zoom_level_otr_delegate.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "chrome/common/pref_names.h" |
| 8 #include "components/zoom/zoom_event_manager.h" | 9 #include "components/zoom/zoom_event_manager.h" |
| 9 | 10 |
| 10 ChromeZoomLevelOTRDelegate::ChromeZoomLevelOTRDelegate( | 11 ChromeZoomLevelOTRDelegate::ChromeZoomLevelOTRDelegate( |
| 12 PrefService* pref_service, |
| 13 const base::FilePath& profile_path, |
| 14 const base::FilePath& partition_path, |
| 11 base::WeakPtr<zoom::ZoomEventManager> zoom_event_manager) | 15 base::WeakPtr<zoom::ZoomEventManager> zoom_event_manager) |
| 12 : zoom_event_manager_(zoom_event_manager), host_zoom_map_(nullptr) {} | 16 : partitioned_prefs_(pref_service, profile_path, partition_path), |
| 17 zoom_event_manager_(zoom_event_manager), |
| 18 host_zoom_map_(nullptr) { |
| 19 // Observe changes to the zoom scope preference in case it is changed in the |
| 20 // parent profile. |
| 21 last_scope_was_per_origin_ = GetZoomScopeIsPerOriginPref(); |
| 22 pref_registrar_.Init(pref_service); |
| 23 pref_registrar_.Add( |
| 24 prefs::kPartitionZoomScopeIsPerOrigin, |
| 25 base::Bind(&ChromeZoomLevelOTRDelegate::OnParentScopeChanged, |
| 26 base::Unretained(this))); |
| 27 } |
| 13 | 28 |
| 14 ChromeZoomLevelOTRDelegate::~ChromeZoomLevelOTRDelegate() { | 29 ChromeZoomLevelOTRDelegate::~ChromeZoomLevelOTRDelegate() { |
| 15 } | 30 } |
| 16 | 31 |
| 32 bool ChromeZoomLevelOTRDelegate::GetZoomScopeIsPerOriginPref() const { |
| 33 bool is_per_origin = kZoomScopeSettingDefault; |
| 34 |
| 35 // If no value has been previously set, |is_per_origin| will be untouched |
| 36 // from the default value we've set above. |
| 37 partitioned_prefs_.GetBoolean(prefs::kPartitionZoomScopeIsPerOrigin, |
| 38 &is_per_origin); |
| 39 return is_per_origin; |
| 40 } |
| 41 |
| 42 std::unique_ptr<ChromeZoomLevelOTRDelegate::DefaultZoomScopeSubscription> |
| 43 ChromeZoomLevelOTRDelegate::RegisterDefaultZoomScopeCallback( |
| 44 const base::Closure& callback) { |
| 45 return default_scope_changed_callbacks_.Add(callback); |
| 46 } |
| 47 |
| 48 void ChromeZoomLevelOTRDelegate::OnParentScopeChanged() { |
| 49 bool new_scope_is_per_origin = GetZoomScopeIsPerOriginPref(); |
| 50 // Make sure that we're not being notified for a scope change in another |
| 51 // partition. |
| 52 if (new_scope_is_per_origin == last_scope_was_per_origin_) |
| 53 return; |
| 54 |
| 55 last_scope_was_per_origin_ = new_scope_is_per_origin; |
| 56 default_scope_changed_callbacks_.Notify(); |
| 57 } |
| 58 |
| 17 void ChromeZoomLevelOTRDelegate::InitHostZoomMap( | 59 void ChromeZoomLevelOTRDelegate::InitHostZoomMap( |
| 18 content::HostZoomMap* host_zoom_map) { | 60 content::HostZoomMap* host_zoom_map) { |
| 19 // This init function must be called only once. | 61 // This init function must be called only once. |
| 20 DCHECK(!host_zoom_map_); | 62 DCHECK(!host_zoom_map_); |
| 21 DCHECK(host_zoom_map); | 63 DCHECK(host_zoom_map); |
| 22 host_zoom_map_ = host_zoom_map; | 64 host_zoom_map_ = host_zoom_map; |
| 23 | 65 |
| 24 zoom_subscription_ = host_zoom_map_->AddZoomLevelChangedCallback(base::Bind( | 66 zoom_subscription_ = host_zoom_map_->AddZoomLevelChangedCallback(base::Bind( |
| 25 &ChromeZoomLevelOTRDelegate::OnZoomLevelChanged, base::Unretained(this))); | 67 &ChromeZoomLevelOTRDelegate::OnZoomLevelChanged, base::Unretained(this))); |
| 26 } | 68 } |
| 27 | 69 |
| 28 void ChromeZoomLevelOTRDelegate::OnZoomLevelChanged( | 70 void ChromeZoomLevelOTRDelegate::OnZoomLevelChanged( |
| 29 const content::HostZoomMap::ZoomLevelChange& change) { | 71 const content::HostZoomMap::ZoomLevelChange& change) { |
| 30 // If there's a manager to aggregate ZoomLevelChanged events, pass this event | 72 // If there's a manager to aggregate ZoomLevelChanged events, pass this event |
| 31 // along. Since we already hold a subscription to our associated HostZoomMap, | 73 // along. Since we already hold a subscription to our associated HostZoomMap, |
| 32 // we don't need to create a separate subscription for this. | 74 // we don't need to create a separate subscription for this. |
| 33 if (zoom_event_manager_) | 75 if (zoom_event_manager_) |
| 34 zoom_event_manager_->OnZoomLevelChanged(change); | 76 zoom_event_manager_->OnZoomLevelChanged(change); |
| 35 } | 77 } |
| OLD | NEW |