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.
5 #include "chrome/browser/prefs/incognito_mode_prefs.h"
7 #include "base/command_line.h"
8 #include "base/logging.h"
9 #include "base/prefs/pref_service.h"
10 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/common/chrome_switches.h"
12 #include "chrome/common/pref_names.h"
13 #include "components/pref_registry/pref_registry_syncable.h"
16 #include "base/win/metro.h"
19 #if defined(OS_ANDROID)
20 #include "chrome/browser/android/chromium_application.h"
26 bool g_parental_control_on
= false;
32 bool IncognitoModePrefs::IntToAvailability(int in_value
,
33 Availability
* out_value
) {
34 if (in_value
< 0 || in_value
>= AVAILABILITY_NUM_TYPES
) {
38 *out_value
= static_cast<Availability
>(in_value
);
43 IncognitoModePrefs::Availability
IncognitoModePrefs::GetAvailability(
44 const PrefService
* pref_service
) {
46 int pref_value
= pref_service
->GetInteger(prefs::kIncognitoModeAvailability
);
47 Availability result
= IncognitoModePrefs::ENABLED
;
48 bool valid
= IntToAvailability(pref_value
, &result
);
50 if (ArePlatformParentalControlsEnabled()) {
51 if (result
== IncognitoModePrefs::FORCED
)
52 LOG(ERROR
) << "Ignoring FORCED incognito. Parental control logging on";
53 return IncognitoModePrefs::DISABLED
;
59 void IncognitoModePrefs::SetAvailability(PrefService
* prefs
,
60 const Availability availability
) {
61 prefs
->SetInteger(prefs::kIncognitoModeAvailability
, availability
);
65 void IncognitoModePrefs::RegisterProfilePrefs(
66 user_prefs::PrefRegistrySyncable
* registry
) {
67 registry
->RegisterIntegerPref(
68 prefs::kIncognitoModeAvailability
,
69 IncognitoModePrefs::ENABLED
,
70 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF
);
74 bool IncognitoModePrefs::ShouldLaunchIncognito(
75 const CommandLine
& command_line
,
76 const PrefService
* prefs
) {
77 Availability incognito_avail
= GetAvailability(prefs
);
78 return incognito_avail
!= IncognitoModePrefs::DISABLED
&&
79 (command_line
.HasSwitch(switches::kIncognito
) ||
80 incognito_avail
== IncognitoModePrefs::FORCED
);
84 bool IncognitoModePrefs::CanOpenBrowser(Profile
* profile
) {
85 if (profile
->IsGuestSession())
88 switch (GetAvailability(profile
->GetPrefs())) {
89 case IncognitoModePrefs::ENABLED
:
92 case IncognitoModePrefs::DISABLED
:
93 return !profile
->IsOffTheRecord();
95 case IncognitoModePrefs::FORCED
:
96 return profile
->IsOffTheRecord();
105 bool IncognitoModePrefs::ArePlatformParentalControlsEnabled() {
107 // Disable incognito mode windows if parental controls are on. This is only
108 // for Windows Vista and above.
109 return base::win::IsParentalControlActivityLoggingOn();
110 #elif defined(OS_ANDROID)
111 return chrome::android::ChromiumApplication::AreParentalControlsEnabled();
118 void IncognitoModePrefs::InitializePlatformParentalControls() {
119 g_parental_control_on
= base::win::IsParentalControlActivityLoggingOn();
123 bool IncognitoModePrefs::ArePlatformParentalControlsEnabledCached() {
125 return g_parental_control_on
;
126 #elif defined(OS_ANDROID)
127 return chrome::android::ChromiumApplication::AreParentalControlsEnabled();