blob: b0fc8aea16094744beea02a0600b2a6a590381a7 [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_PREFS_INCOGNITO_MODE_PREFS_H_
#define CHROME_BROWSER_PREFS_INCOGNITO_MODE_PREFS_H_
class PrefService;
class Profile;
namespace base {
class CommandLine;
}
namespace policy {
enum class IncognitoModeAvailability;
}
namespace user_prefs {
class PrefRegistrySyncable;
}
// Specifies Incognito mode availability preferences.
class IncognitoModePrefs {
public:
static const policy::IncognitoModeAvailability kDefaultAvailability;
IncognitoModePrefs() = delete;
IncognitoModePrefs(const IncognitoModePrefs&) = delete;
IncognitoModePrefs& operator=(const IncognitoModePrefs&) = delete;
// Register incognito related preferences.
static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
// Returns kIncognitoModeAvailability preference value stored
// in the given pref service.
static policy::IncognitoModeAvailability GetAvailability(
const PrefService* prefs);
// Sets kIncognitoModeAvailability preference to the specified availability
// value.
static void SetAvailability(
PrefService* prefs,
const policy::IncognitoModeAvailability availability);
// Converts in_value into the corresponding Availability value. Returns true
// if conversion is successful (in_value is valid). Otherwise, returns false
// and *out_value is set to ENABLED.
static bool IntToAvailability(int in_value,
policy::IncognitoModeAvailability* out_value);
// Returns true if the initial browser should start in incognito mode.
static bool ShouldLaunchIncognito(const base::CommandLine& command_line,
const PrefService* prefs);
// Returns true if subsequent browsers should be opened in incognito mode.
static bool ShouldOpenSubsequentBrowsersInIncognito(
const base::CommandLine& command_line,
const PrefService* prefs);
// Returns true if |profile| can open a new Browser. This checks the incognito
// availability policies and verifies if the |profile| type is allowed to
// open new windows.
static bool CanOpenBrowser(Profile* profile);
// Returns true if incognito mode is allowed in |profile|.
[[nodiscard]] static bool IsIncognitoAllowed(Profile* profile);
// Returns whether parental controls have been enabled on the platform. This
// method evaluates and caches if the platform controls have been enabled on
// the first call, which must be on the UI thread when IO and blocking are
// allowed. Subsequent calls may be from any thread.
[[nodiscard]] static bool ArePlatformParentalControlsEnabled();
private:
// Specifies whether parental controls should be checked. See comment below.
enum GetAvailabilityMode {
CHECK_PARENTAL_CONTROLS,
DONT_CHECK_PARENTAL_CONTROLS,
};
// Internal version of GetAvailability() that specifies whether parental
// controls should be checked (which is expensive and not always necessary
// to do - such as when checking for FORCED state).
static policy::IncognitoModeAvailability GetAvailabilityInternal(
const PrefService* pref_service,
GetAvailabilityMode mode);
// Internal version of ShouldLaunchIncognito() and
// ShouldOpenSubsequentBrowsersInIncognito() that specifies whether it is for
// subsequent browsers or not.
static bool ShouldLaunchIncognitoInternal(
const base::CommandLine& command_line,
const PrefService* prefs,
const bool for_subsequent_browsers);
};
#endif // CHROME_BROWSER_PREFS_INCOGNITO_MODE_PREFS_H_