| OLD | NEW |
| 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2015 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/content_settings/content_settings_supervised_provider.h
" | 5 #include "chrome/browser/content_settings/content_settings_supervised_provider.h
" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "chrome/browser/supervised_user/supervised_user_constants.h" | 11 #include "chrome/browser/supervised_user/supervised_user_constants.h" |
| 12 #include "chrome/browser/supervised_user/supervised_user_settings_service.h" | 12 #include "chrome/browser/supervised_user/supervised_user_settings_service.h" |
| 13 | 13 |
| 14 namespace { | 14 namespace { |
| 15 | 15 |
| 16 struct ContentSettingsFromSupervisedSettingsEntry { | 16 struct ContentSettingsFromSupervisedSettingsEntry { |
| 17 const char* setting_name; | 17 const char* setting_name; |
| 18 ContentSettingsType content_type; | 18 ContentSettingsType content_type; |
| 19 ContentSetting content_setting; |
| 19 }; | 20 }; |
| 20 | 21 |
| 21 const ContentSettingsFromSupervisedSettingsEntry | 22 const ContentSettingsFromSupervisedSettingsEntry |
| 22 kContentSettingsFromSupervisedSettingsMap[] = { | 23 kContentSettingsFromSupervisedSettingsMap[] = { |
| 23 { | 24 { |
| 24 supervised_users::kGeolocationDisabled, | 25 supervised_users::kGeolocationDisabled, |
| 25 CONTENT_SETTINGS_TYPE_GEOLOCATION, | 26 CONTENT_SETTINGS_TYPE_GEOLOCATION, |
| 27 CONTENT_SETTING_BLOCK, |
| 26 }, { | 28 }, { |
| 27 supervised_users::kCameraMicDisabled, | 29 supervised_users::kCameraMicDisabled, |
| 28 CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, | 30 CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, |
| 31 CONTENT_SETTING_BLOCK, |
| 29 }, { | 32 }, { |
| 30 supervised_users::kCameraMicDisabled, | 33 supervised_users::kCameraMicDisabled, |
| 31 CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, | 34 CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, |
| 35 CONTENT_SETTING_BLOCK, |
| 36 }, { |
| 37 supervised_users::kCookiesAlwaysAllowed, |
| 38 CONTENT_SETTINGS_TYPE_COOKIES, |
| 39 CONTENT_SETTING_ALLOW, |
| 32 } | 40 } |
| 33 }; | 41 }; |
| 34 | 42 |
| 35 } // namespace | 43 } // namespace |
| 36 | 44 |
| 37 namespace content_settings { | 45 namespace content_settings { |
| 38 | 46 |
| 39 SupervisedProvider::SupervisedProvider( | 47 SupervisedProvider::SupervisedProvider( |
| 40 SupervisedUserSettingsService* supervised_user_settings_service) { | 48 SupervisedUserSettingsService* supervised_user_settings_service) { |
| 41 | 49 |
| 42 // The SupervisedProvider is owned by the HostContentSettingsMap which | 50 // The SupervisedProvider is owned by the HostContentSettingsMap which |
| 43 // DependsOn the SupervisedUserSettingsService (through their factories). | 51 // DependsOn the SupervisedUserSettingsService (through their factories). |
| 44 // This means this will get destroyed before the SUSS and will be | 52 // This means this will get destroyed before the SUSS and will be |
| 45 // unsubscribed from it. | 53 // unsubscribed from it. |
| 46 user_settings_subscription_ = supervised_user_settings_service->Subscribe( | 54 user_settings_subscription_ = supervised_user_settings_service->Subscribe( |
| 47 base::Bind( | 55 base::Bind( |
| 48 &content_settings::SupervisedProvider::OnSupervisedSettingsAvailable, | 56 &content_settings::SupervisedProvider::OnSupervisedSettingsAvailable, |
| 49 base::Unretained(this))); | 57 base::Unretained(this))); |
| 50 } | 58 } |
| 51 | 59 |
| 52 SupervisedProvider::~SupervisedProvider() { | 60 SupervisedProvider::~SupervisedProvider() { |
| 53 } | 61 } |
| 54 | 62 |
| 55 std::unique_ptr<RuleIterator> SupervisedProvider::GetRuleIterator( | 63 std::unique_ptr<RuleIterator> SupervisedProvider::GetRuleIterator( |
| 56 ContentSettingsType content_type, | 64 ContentSettingsType content_type, |
| 57 const ResourceIdentifier& resource_identifier, | 65 const ResourceIdentifier& resource_identifier, |
| 58 bool incognito) const { | 66 bool incognito) const { |
| 59 std::unique_ptr<base::AutoLock> auto_lock(new base::AutoLock(lock_)); | 67 base::AutoLock auto_lock(lock_); |
| 60 return value_map_.GetRuleIterator(content_type, resource_identifier, | 68 return value_map_.GetRuleIterator(content_type, resource_identifier); |
| 61 std::move(auto_lock)); | |
| 62 } | 69 } |
| 63 | 70 |
| 64 void SupervisedProvider::OnSupervisedSettingsAvailable( | 71 void SupervisedProvider::OnSupervisedSettingsAvailable( |
| 65 const base::DictionaryValue* settings) { | 72 const base::DictionaryValue* settings) { |
| 66 std::vector<ContentSettingsType> to_notify; | 73 std::vector<ContentSettingsType> to_notify; |
| 67 // Entering locked scope to update content settings. | 74 // Entering locked scope to update content settings. |
| 68 { | 75 { |
| 69 base::AutoLock auto_lock(lock_); | 76 base::AutoLock auto_lock(lock_); |
| 70 for (const auto& entry : kContentSettingsFromSupervisedSettingsMap) { | 77 for (const auto& entry : kContentSettingsFromSupervisedSettingsMap) { |
| 71 bool new_value = false; | 78 ContentSetting new_setting = CONTENT_SETTING_DEFAULT; |
| 72 if (settings && settings->HasKey(entry.setting_name)) { | 79 if (settings && settings->HasKey(entry.setting_name)) { |
| 73 bool is_bool = settings->GetBoolean(entry.setting_name, &new_value); | 80 bool new_is_set = false; |
| 81 bool is_bool = settings->GetBoolean(entry.setting_name, &new_is_set); |
| 74 DCHECK(is_bool); | 82 DCHECK(is_bool); |
| 83 if (new_is_set) |
| 84 new_setting = entry.content_setting; |
| 75 } | 85 } |
| 76 bool old_value = !value_map_.IsContentSettingEnabled(entry.content_type); | 86 if (new_setting != value_map_.GetContentSetting(entry.content_type)) { |
| 77 if (new_value != old_value) { | |
| 78 to_notify.push_back(entry.content_type); | 87 to_notify.push_back(entry.content_type); |
| 79 value_map_.SetContentSettingDisabled(entry.content_type, new_value); | 88 value_map_.SetContentSetting(entry.content_type, new_setting); |
| 80 } | 89 } |
| 81 } | 90 } |
| 82 } | 91 } |
| 83 for (const auto& notification : to_notify) { | 92 for (ContentSettingsType type : to_notify) { |
| 84 NotifyObservers(ContentSettingsPattern(), ContentSettingsPattern(), | 93 NotifyObservers(ContentSettingsPattern(), ContentSettingsPattern(), |
| 85 notification, std::string()); | 94 type, std::string()); |
| 86 } | 95 } |
| 87 } | 96 } |
| 88 | 97 |
| 89 // Since the SupervisedProvider is a read only content settings provider, all | 98 // Since the SupervisedProvider is a read only content settings provider, all |
| 90 // methods of the ProviderInterface that set or delete any settings do nothing. | 99 // methods of the ProviderInterface that set or delete any settings do nothing. |
| 91 bool SupervisedProvider::SetWebsiteSetting( | 100 bool SupervisedProvider::SetWebsiteSetting( |
| 92 const ContentSettingsPattern& primary_pattern, | 101 const ContentSettingsPattern& primary_pattern, |
| 93 const ContentSettingsPattern& secondary_pattern, | 102 const ContentSettingsPattern& secondary_pattern, |
| 94 ContentSettingsType content_type, | 103 ContentSettingsType content_type, |
| 95 const ResourceIdentifier& resource_identifier, | 104 const ResourceIdentifier& resource_identifier, |
| 96 base::Value* value) { | 105 base::Value* value) { |
| 97 return false; | 106 return false; |
| 98 } | 107 } |
| 99 | 108 |
| 100 void SupervisedProvider::ClearAllContentSettingsRules( | 109 void SupervisedProvider::ClearAllContentSettingsRules( |
| 101 ContentSettingsType content_type) { | 110 ContentSettingsType content_type) { |
| 102 } | 111 } |
| 103 | 112 |
| 104 void SupervisedProvider::ShutdownOnUIThread() { | 113 void SupervisedProvider::ShutdownOnUIThread() { |
| 105 DCHECK(CalledOnValidThread()); | 114 DCHECK(CalledOnValidThread()); |
| 106 RemoveAllObservers(); | 115 RemoveAllObservers(); |
| 107 user_settings_subscription_.reset(); | 116 user_settings_subscription_.reset(); |
| 108 } | 117 } |
| 109 | 118 |
| 110 } // namespace content_settings | 119 } // namespace content_settings |
| OLD | NEW |