1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_PREFS_INCOGNITO_MODE_PREFS_H_
6#define CHROME_BROWSER_PREFS_INCOGNITO_MODE_PREFS_H_
7
8#include "base/basictypes.h"
9
10class PrefService;
11class Profile;
12
13namespace base {
14class CommandLine;
15}
16
17namespace user_prefs {
18class PrefRegistrySyncable;
19}
20
21// Specifies Incognito mode availability preferences.
22class IncognitoModePrefs {
23 public:
24  // Possible values for Incognito mode availability. Please, do not change
25  // the order of entries since numeric values are exposed to users.
26  enum Availability {
27    // Incognito mode enabled. Users may open pages in both Incognito mode and
28    // normal mode (the default behaviour).
29    ENABLED = 0,
30    // Incognito mode disabled. Users may not open pages in Incognito mode.
31    // Only normal mode is available for browsing.
32    DISABLED,
33    // Incognito mode forced. Users may open pages *ONLY* in Incognito mode.
34    // Normal mode is not available for browsing.
35    FORCED,
36
37    AVAILABILITY_NUM_TYPES
38  };
39
40  // Register incognito related preferences.
41  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
42
43  // Returns kIncognitoModeAvailability preference value stored
44  // in the given pref service.
45  static Availability GetAvailability(const PrefService* prefs);
46
47  // Sets kIncognitoModeAvailability preference to the specified availability
48  // value.
49  static void SetAvailability(PrefService* prefs,
50                              const Availability availability);
51
52  // Converts in_value into the corresponding Availability value. Returns true
53  // if conversion is successful (in_value is valid). Otherwise, returns false
54  // and *out_value is set to ENABLED.
55  static bool IntToAvailability(int in_value, Availability* out_value);
56
57  // Returns true if the browser should start in incognito mode.
58  static bool ShouldLaunchIncognito(const base::CommandLine& command_line,
59                                    const PrefService* prefs);
60
61  // Returns true if |profile| can open a new Browser. This checks the incognito
62  // availability policies and verifies if the |profile| type is allowed to
63  // open new windows.
64  static bool CanOpenBrowser(Profile* profile);
65
66  // Returns whether parental controls have been enabled on the platform. This
67  // method simply returns a cached value and thus the result may be stale. May
68  // be called on any thread.
69  static bool ArePlatformParentalControlsEnabledCached();
70
71#if defined(OS_WIN)
72  // Initializes the parental control settings. Must be called on UI thread and
73  // before |ArePlatformParentalControlsEnabled|.
74  static void InitializePlatformParentalControls();
75#endif // OS_WIN
76
77 private:
78  // Returns whether parental controls have been enabled on the platform, which
79  // if enabled will overrule the Availability as configured in prefs.
80  static bool ArePlatformParentalControlsEnabled();
81
82  DISALLOW_IMPLICIT_CONSTRUCTORS(IncognitoModePrefs);
83};
84
85#endif  // CHROME_BROWSER_PREFS_INCOGNITO_MODE_PREFS_H_
86