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 |