Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(540)

Side by Side Diff: chrome/browser/chromeos/arc/arc_util.cc

Issue 2806443002: arc: Add IsArcAllowedInAppListForProfile. (Closed)
Patch Set: Test Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/arc/arc_util.h" 5 #include "chrome/browser/chromeos/arc/arc_util.h"
6 6
7 #include <linux/magic.h> 7 #include <linux/magic.h>
8 #include <sys/statfs.h> 8 #include <sys/statfs.h>
9 9
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 17 matching lines...) Expand all
28 28
29 constexpr char kLsbReleaseArcVersionKey[] = "CHROMEOS_ARC_ANDROID_SDK_VERSION"; 29 constexpr char kLsbReleaseArcVersionKey[] = "CHROMEOS_ARC_ANDROID_SDK_VERSION";
30 constexpr char kAndroidMSdkVersion[] = "23"; 30 constexpr char kAndroidMSdkVersion[] = "23";
31 31
32 // Let IsAllowedForProfile() return "false" for any profile. 32 // Let IsAllowedForProfile() return "false" for any profile.
33 bool g_disallow_for_testing = false; 33 bool g_disallow_for_testing = false;
34 34
35 } // namespace 35 } // namespace
36 36
37 bool IsArcAllowedForProfile(const Profile* profile) { 37 bool IsArcAllowedForProfile(const Profile* profile) {
38 if (!IsArcAllowedInAppListForProfile(profile))
39 return false;
40
41 if (base::SysInfo::IsRunningOnChromeOS()) {
42 // Do not allow newer version of ARC on old filesystem.
43 // Check this condition only on real Chrome OS devices. Test runs on Linux
44 // workstation does not have expected /etc/lsb-release field nor profile
45 // creation step.
46 if (!IsProfileVerifiedToBeOnArcCompatibleFilesystem(profile))
47 return false;
48 }
49
50 return true;
51 }
52
53 bool IsArcAllowedInAppListForProfile(const Profile* profile) {
38 if (g_disallow_for_testing) { 54 if (g_disallow_for_testing) {
39 VLOG(1) << "ARC is disallowed for testing."; 55 VLOG(1) << "ARC is disallowed for testing.";
40 return false; 56 return false;
41 } 57 }
42 58
43 // ARC Kiosk can be enabled even if ARC is not yet supported on the device. 59 // ARC Kiosk can be enabled even if ARC is not yet supported on the device.
44 // In that case IsArcKioskMode() should return true as profile is already 60 // In that case IsArcKioskMode() should return true as profile is already
45 // created. 61 // created.
46 if (!IsArcAvailable() && !(IsArcKioskMode() && IsArcKioskAvailable())) { 62 if (!IsArcAvailable() && !(IsArcKioskMode() && IsArcKioskAvailable())) {
47 VLOG(1) << "ARC is not available."; 63 VLOG(1) << "ARC is not available.";
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 return false; 110 return false;
95 } 111 }
96 112
97 // Do not allow for Ephemeral data user. cf) b/26402681 113 // Do not allow for Ephemeral data user. cf) b/26402681
98 if (user_manager::UserManager::Get() 114 if (user_manager::UserManager::Get()
99 ->IsCurrentUserCryptohomeDataEphemeral()) { 115 ->IsCurrentUserCryptohomeDataEphemeral()) {
100 VLOG(1) << "Users with ephemeral data are not supported in ARC."; 116 VLOG(1) << "Users with ephemeral data are not supported in ARC.";
101 return false; 117 return false;
102 } 118 }
103 119
104 // Do not allow newer version of ARC on old filesystem. 120 return true;
105 // Check this condition only on real Chrome OS devices. Test runs on Linux 121 }
106 // workstation does not have expected /etc/lsb-release field nor profile 122
107 // creation step. 123 bool IsProfileVerifiedToBeOnArcCompatibleFilesystem(const Profile* profile) {
108 if (base::SysInfo::IsRunningOnChromeOS()) { 124 // chromeos::UserSessionManager::PrepareProfile does the actual file system
109 // chromeos::UserSessionManager::PrepareProfile does the actual file system 125 // check and stores the result to prefs, so that it survives crash-restart.
110 // check and stores the result to prefs, so that it survives crash-restart. 126 const bool is_filesystem_compatible =
111 const bool is_filesystem_compatible = 127 profile->GetPrefs()->GetBoolean(prefs::kArcCompatibleFilesystemChosen);
112 profile->GetPrefs()->GetBoolean(prefs::kArcCompatibleFilesystemChosen); 128 std::string arc_sdk_version;
113 std::string arc_sdk_version; 129 const bool is_M = base::SysInfo::GetLsbReleaseValue(kLsbReleaseArcVersionKey,
114 const bool is_M = base::SysInfo::GetLsbReleaseValue( 130 &arc_sdk_version) &&
115 kLsbReleaseArcVersionKey, &arc_sdk_version) && 131 arc_sdk_version == kAndroidMSdkVersion;
116 arc_sdk_version == kAndroidMSdkVersion; 132
117 // To run ARC we want to make sure either 133 // To run ARC we want to make sure either
118 // - Underlying file system is compatible with ARC, or 134 // - Underlying file system is compatible with ARC, or
119 // - SDK version is M. 135 // - SDK version is M.
120 if (!is_filesystem_compatible && !is_M) { 136 if (!is_filesystem_compatible && !is_M) {
121 VLOG(1) 137 VLOG(1)
122 << "Users with SDK version (" << arc_sdk_version 138 << "Users with SDK version (" << arc_sdk_version
123 << ") are not supported when they postponed to migrate to dircrypto."; 139 << ") are not supported when they postponed to migrate to dircrypto.";
124 return false; 140 return false;
125 }
126 } 141 }
127 142
128 return true; 143 return true;
129 } 144 }
130 145
131 void DisallowArcForTesting() { 146 void DisallowArcForTesting() {
132 g_disallow_for_testing = true; 147 g_disallow_for_testing = true;
133 } 148 }
134 149
135 bool IsArcPlayStoreEnabledForProfile(const Profile* profile) { 150 bool IsArcPlayStoreEnabledForProfile(const Profile* profile) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 base::ThreadRestrictions::AssertIOAllowed(); 193 base::ThreadRestrictions::AssertIOAllowed();
179 194
180 // If it can be verified it is not on ecryptfs, then it is ok. 195 // If it can be verified it is not on ecryptfs, then it is ok.
181 struct statfs statfs_buf; 196 struct statfs statfs_buf;
182 if (statfs(path.value().c_str(), &statfs_buf) < 0) 197 if (statfs(path.value().c_str(), &statfs_buf) < 0)
183 return false; 198 return false;
184 return statfs_buf.f_type != ECRYPTFS_SUPER_MAGIC; 199 return statfs_buf.f_type != ECRYPTFS_SUPER_MAGIC;
185 } 200 }
186 201
187 } // namespace arc 202 } // namespace arc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698