blob: 244829cf8ec725b3e5f9d149ed826a81c078b064 [file] [log] [blame]
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/extensions/api/settings_private/generated_pref.h"
#include "base/observer_list.h"
#include "chrome/common/extensions/api/settings_private.h"
namespace settings_api = extensions::api::settings_private;
namespace extensions {
namespace settings_private {
GeneratedPref::Observer::Observer() = default;
GeneratedPref::Observer::~Observer() = default;
GeneratedPref::GeneratedPref() = default;
GeneratedPref::~GeneratedPref() = default;
void GeneratedPref::AddObserver(Observer* observer) {
observers_.AddObserver(observer);
}
void GeneratedPref::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
void GeneratedPref::NotifyObservers(const std::string& pref_name) {
for (Observer& observer : observers_)
observer.OnGeneratedPrefChanged(pref_name);
}
/* static */
void GeneratedPref::ApplyControlledByFromPref(
api::settings_private::PrefObject* pref_object,
const PrefService::Preference* pref) {
if (pref->IsManaged()) {
pref_object->controlled_by = settings_api::ControlledBy::kDevicePolicy;
return;
}
if (pref->IsExtensionControlled()) {
pref_object->controlled_by = settings_api::ControlledBy::kExtension;
return;
}
if (pref->IsManagedByCustodian()) {
pref_object->controlled_by = settings_api::ControlledBy::kChildRestriction;
return;
}
NOTREACHED();
}
/* static */
void GeneratedPref::ApplyControlledByFromContentSettingSource(
api::settings_private::PrefObject* pref_object,
content_settings::SettingSource setting_source) {
switch (setting_source) {
case content_settings::SETTING_SOURCE_POLICY:
pref_object->controlled_by = settings_api::ControlledBy::kDevicePolicy;
break;
case content_settings::SETTING_SOURCE_EXTENSION:
pref_object->controlled_by = settings_api::ControlledBy::kExtension;
break;
case content_settings::SETTING_SOURCE_SUPERVISED:
pref_object->controlled_by =
settings_api::ControlledBy::kChildRestriction;
break;
default:
NOTREACHED();
}
}
/* static */
void GeneratedPref::AddUserSelectableValue(
settings_api::PrefObject* pref_object,
int value) {
if (!pref_object->user_selectable_values) {
pref_object->user_selectable_values.emplace();
}
pref_object->user_selectable_values->Append(value);
}
} // namespace settings_private
} // namespace extensions