chromium/ios/chrome/browser/ui/settings/utils/content_setting_backed_boolean.h

// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_CHROME_BROWSER_UI_SETTINGS_UTILS_CONTENT_SETTING_BACKED_BOOLEAN_H_
#define IOS_CHROME_BROWSER_UI_SETTINGS_UTILS_CONTENT_SETTING_BACKED_BOOLEAN_H_

#import <Foundation/Foundation.h>

#include "components/content_settings/core/common/content_settings_types.h"
#import "ios/chrome/browser/shared/model/utils/observable_boolean.h"

class HostContentSettingsMap;

// An observable boolean backed by a setting from a HostContentSettingsMap.
@interface ContentSettingBackedBoolean : NSObject<ObservableBoolean>

// Returns a ContentSettingBackedBoolean backed by `settingID` from
// `settingsMap`. `inverted` specifies that the ON state of the boolean value
// corresponds to the OFF state of the content setting. For example, a boolean
// value for "disable popups" that corresponds to a model object that allows
// popups.
- (instancetype)initWithHostContentSettingsMap:
                    (HostContentSettingsMap*)settingsMap
                                     settingID:(ContentSettingsType)settingID
                                      inverted:(BOOL)inverted
    NS_DESIGNATED_INITIALIZER;

- (instancetype)init NS_UNAVAILABLE;

// Stop observing the setting. Can be called before -dealloc to ensure
// that the setting is no longer observed, even if the object survives
// the HostContentSettingsMap (e.g. if the reference is captured by a
// block).
- (void)stop;

@end

#endif  // IOS_CHROME_BROWSER_UI_SETTINGS_UTILS_CONTENT_SETTING_BACKED_BOOLEAN_H_