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

Side by Side Diff: chrome/browser/policy/browser_policy_connector.cc

Issue 11946017: Remove old cloud policy code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Actually upload the code I intended to upload. Created 7 years, 11 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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/policy/browser_policy_connector.h" 5 #include "chrome/browser/policy/browser_policy_connector.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/file_path.h" 10 #include "base/file_path.h"
11 #include "base/message_loop.h" 11 #include "base/message_loop.h"
12 #include "base/path_service.h" 12 #include "base/path_service.h"
13 #include "base/string_util.h" 13 #include "base/string_util.h"
14 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
15 #include "chrome/browser/browser_process.h" 15 #include "chrome/browser/browser_process.h"
16 #include "chrome/browser/policy/async_policy_provider.h" 16 #include "chrome/browser/policy/async_policy_provider.h"
17 #include "chrome/browser/policy/cloud_policy_client.h" 17 #include "chrome/browser/policy/cloud_policy_client.h"
18 #include "chrome/browser/policy/cloud_policy_provider.h"
19 #include "chrome/browser/policy/cloud_policy_service.h" 18 #include "chrome/browser/policy/cloud_policy_service.h"
20 #include "chrome/browser/policy/cloud_policy_subsystem.h"
21 #include "chrome/browser/policy/configuration_policy_provider.h" 19 #include "chrome/browser/policy/configuration_policy_provider.h"
22 #include "chrome/browser/policy/device_management_service.h" 20 #include "chrome/browser/policy/device_management_service.h"
23 #include "chrome/browser/policy/managed_mode_policy_provider.h" 21 #include "chrome/browser/policy/managed_mode_policy_provider.h"
24 #include "chrome/browser/policy/policy_service_impl.h" 22 #include "chrome/browser/policy/policy_service_impl.h"
25 #include "chrome/browser/policy/policy_statistics_collector.h" 23 #include "chrome/browser/policy/policy_statistics_collector.h"
26 #include "chrome/browser/policy/user_policy_cache.h"
27 #include "chrome/browser/policy/user_policy_token_cache.h"
28 #include "chrome/browser/prefs/pref_service.h" 24 #include "chrome/browser/prefs/pref_service.h"
29 #include "chrome/browser/profiles/profile.h" 25 #include "chrome/browser/profiles/profile.h"
30 #include "chrome/browser/signin/token_service.h"
31 #include "chrome/common/chrome_notification_types.h"
32 #include "chrome/common/chrome_paths.h" 26 #include "chrome/common/chrome_paths.h"
33 #include "chrome/common/chrome_switches.h" 27 #include "chrome/common/chrome_switches.h"
34 #include "chrome/common/pref_names.h" 28 #include "chrome/common/pref_names.h"
Joao da Silva 2013/01/17 09:38:05 Not used
Mattias Nissler (ping if slow) 2013/01/22 10:31:39 Done.
35 #include "content/public/browser/notification_details.h" 29 #include "content/public/browser/notification_details.h"
36 #include "content/public/browser/notification_source.h" 30 #include "content/public/browser/notification_source.h"
Joao da Silva 2013/01/17 09:38:05 These 2 not used
Mattias Nissler (ping if slow) 2013/01/22 10:31:39 Done.
37 #include "google_apis/gaia/gaia_auth_util.h" 31 #include "google_apis/gaia/gaia_auth_util.h"
38 #include "google_apis/gaia/gaia_constants.h" 32 #include "google_apis/gaia/gaia_constants.h"
39 #include "grit/generated_resources.h" 33 #include "grit/generated_resources.h"
40 #include "policy/policy_constants.h" 34 #include "policy/policy_constants.h"
41 #include "third_party/icu/public/i18n/unicode/regex.h" 35 #include "third_party/icu/public/i18n/unicode/regex.h"
42 36
43 #if defined(OS_WIN) 37 #if defined(OS_WIN)
44 #include "chrome/browser/policy/policy_loader_win.h" 38 #include "chrome/browser/policy/policy_loader_win.h"
45 #elif defined(OS_MACOSX) 39 #elif defined(OS_MACOSX)
46 #include "chrome/browser/policy/policy_loader_mac.h" 40 #include "chrome/browser/policy/policy_loader_mac.h"
47 #include "chrome/browser/preferences_mac.h" 41 #include "chrome/browser/preferences_mac.h"
48 #elif defined(OS_POSIX) 42 #elif defined(OS_POSIX)
49 #include "chrome/browser/policy/config_dir_policy_loader.h" 43 #include "chrome/browser/policy/config_dir_policy_loader.h"
50 #endif 44 #endif
51 45
52 #if defined(OS_CHROMEOS) 46 #if defined(OS_CHROMEOS)
53 #include "base/utf_string_conversions.h" 47 #include "base/utf_string_conversions.h"
54 #include "chrome/browser/chromeos/cros/cros_library.h" 48 #include "chrome/browser/chromeos/cros/cros_library.h"
55 #include "chrome/browser/chromeos/login/user_manager.h" 49 #include "chrome/browser/chromeos/login/user_manager.h"
56 #include "chrome/browser/chromeos/settings/cros_settings.h" 50 #include "chrome/browser/chromeos/settings/cros_settings.h"
57 #include "chrome/browser/chromeos/settings/cros_settings_provider.h" 51 #include "chrome/browser/chromeos/settings/cros_settings_provider.h"
58 #include "chrome/browser/chromeos/settings/device_settings_service.h" 52 #include "chrome/browser/chromeos/settings/device_settings_service.h"
59 #include "chrome/browser/chromeos/system/statistics_provider.h" 53 #include "chrome/browser/chromeos/system/statistics_provider.h"
60 #include "chrome/browser/chromeos/system/timezone_settings.h" 54 #include "chrome/browser/chromeos/system/timezone_settings.h"
61 #include "chrome/browser/policy/app_pack_updater.h" 55 #include "chrome/browser/policy/app_pack_updater.h"
62 #include "chrome/browser/policy/cros_user_policy_cache.h"
63 #include "chrome/browser/policy/device_cloud_policy_manager_chromeos.h" 56 #include "chrome/browser/policy/device_cloud_policy_manager_chromeos.h"
64 #include "chrome/browser/policy/device_cloud_policy_store_chromeos.h" 57 #include "chrome/browser/policy/device_cloud_policy_store_chromeos.h"
65 #include "chrome/browser/policy/device_local_account_policy_provider.h" 58 #include "chrome/browser/policy/device_local_account_policy_provider.h"
66 #include "chrome/browser/policy/device_local_account_policy_service.h" 59 #include "chrome/browser/policy/device_local_account_policy_service.h"
67 #include "chrome/browser/policy/device_policy_cache.h" 60 #include "chrome/browser/policy/device_status_collector.h"
68 #include "chrome/browser/policy/network_configuration_updater.h" 61 #include "chrome/browser/policy/network_configuration_updater.h"
69 #include "chrome/browser/policy/user_cloud_policy_manager_chromeos.h" 62 #include "chrome/browser/policy/user_cloud_policy_manager_chromeos.h"
70 #include "chrome/browser/policy/user_cloud_policy_store_chromeos.h" 63 #include "chrome/browser/policy/user_cloud_policy_store_chromeos.h"
71 #include "chromeos/dbus/dbus_thread_manager.h" 64 #include "chromeos/dbus/dbus_thread_manager.h"
72 #else 65 #else
73 #include "chrome/browser/policy/user_cloud_policy_manager.h" 66 #include "chrome/browser/policy/user_cloud_policy_manager.h"
74 #include "chrome/browser/policy/user_cloud_policy_manager_factory.h" 67 #include "chrome/browser/policy/user_cloud_policy_manager_factory.h"
75 #endif 68 #endif
76 69
77 using content::BrowserThread;
78
79 namespace policy { 70 namespace policy {
80 71
81 namespace { 72 namespace {
82 73
83 // Subdirectory in the user's profile for storing user policies. 74 // Subdirectory in the user's profile for storing user policies.
84 const FilePath::CharType kPolicyDir[] = FILE_PATH_LITERAL("Device Management"); 75 const FilePath::CharType kPolicyDir[] = FILE_PATH_LITERAL("Device Management");
85 // File in the above directory for stroing user policy dmtokens. 76 // File in the above directory for stroing user policy dmtokens.
86 const FilePath::CharType kTokenCacheFile[] = FILE_PATH_LITERAL("Token"); 77 const FilePath::CharType kTokenCacheFile[] = FILE_PATH_LITERAL("Token");
87 // File in the above directory for storing user policy data. 78 // File in the above directory for storing user policy data.
88 const FilePath::CharType kPolicyCacheFile[] = FILE_PATH_LITERAL("Policy"); 79 const FilePath::CharType kPolicyCacheFile[] = FILE_PATH_LITERAL("Policy");
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 if (!device_management_service_.get()) { 113 if (!device_management_service_.get()) {
123 device_management_service_.reset( 114 device_management_service_.reset(
124 new DeviceManagementService(GetDeviceManagementUrl())); 115 new DeviceManagementService(GetDeviceManagementUrl()));
125 } 116 }
126 117
127 #if defined(OS_CHROMEOS) 118 #if defined(OS_CHROMEOS)
128 chromeos::CryptohomeLibrary* cryptohome = 119 chromeos::CryptohomeLibrary* cryptohome =
129 chromeos::CrosLibrary::Get()->GetCryptohomeLibrary(); 120 chromeos::CrosLibrary::Get()->GetCryptohomeLibrary();
130 install_attributes_.reset(new EnterpriseInstallAttributes(cryptohome)); 121 install_attributes_.reset(new EnterpriseInstallAttributes(cryptohome));
131 122
123 scoped_ptr<DeviceCloudPolicyStoreChromeOS> device_cloud_policy_store(
124 new DeviceCloudPolicyStoreChromeOS(
125 chromeos::DeviceSettingsService::Get(),
126 install_attributes_.get()));
127 device_cloud_policy_manager_.reset(
128 new DeviceCloudPolicyManagerChromeOS(
129 device_cloud_policy_store.Pass(),
130 install_attributes_.get()));
131
132 CommandLine* command_line = CommandLine::ForCurrentProcess(); 132 CommandLine* command_line = CommandLine::ForCurrentProcess();
133 if (!command_line->HasSwitch(switches::kDisableCloudPolicyService)) { 133 if (!command_line->HasSwitch(switches::kDisableLocalAccounts)) {
134 scoped_ptr<DeviceCloudPolicyStoreChromeOS> device_cloud_policy_store( 134 device_local_account_policy_service_.reset(
135 new DeviceCloudPolicyStoreChromeOS( 135 new DeviceLocalAccountPolicyService(
136 chromeos::DeviceSettingsService::Get(), 136 chromeos::DBusThreadManager::Get()->GetSessionManagerClient(),
137 install_attributes_.get())); 137 chromeos::DeviceSettingsService::Get()));
138 device_cloud_policy_manager_.reset(
139 new DeviceCloudPolicyManagerChromeOS(
140 device_cloud_policy_store.Pass(),
141 install_attributes_.get()));
142 if (!command_line->HasSwitch(switches::kDisableLocalAccounts)) {
143 device_local_account_policy_service_.reset(
144 new DeviceLocalAccountPolicyService(
145 chromeos::DBusThreadManager::Get()->GetSessionManagerClient(),
146 chromeos::DeviceSettingsService::Get()));
147 }
148 } else {
149 cloud_provider_.reset(new CloudPolicyProvider(this));
150 } 138 }
151
152 InitializeDevicePolicy();
153 #endif 139 #endif
154 140
155 // Complete the initialization once the message loops are spinning. 141 // Complete the initialization once the message loops are spinning.
156 MessageLoop::current()->PostTask( 142 MessageLoop::current()->PostTask(
157 FROM_HERE, 143 FROM_HERE,
158 base::Bind(&BrowserPolicyConnector::CompleteInitialization, 144 base::Bind(&BrowserPolicyConnector::CompleteInitialization,
159 weak_ptr_factory_.GetWeakPtr())); 145 weak_ptr_factory_.GetWeakPtr()));
160 146
161 is_initialized_ = true; 147 is_initialized_ = true;
162 } 148 }
163 149
164 void BrowserPolicyConnector::Shutdown() { 150 void BrowserPolicyConnector::Shutdown() {
165 is_initialized_ = false; 151 is_initialized_ = false;
166 152
167 if (g_testing_provider) 153 if (g_testing_provider)
168 g_testing_provider->Shutdown(); 154 g_testing_provider->Shutdown();
169 // Drop g_testing_provider so that tests executed with --single_process can 155 // Drop g_testing_provider so that tests executed with --single_process can
170 // call SetPolicyProviderForTesting() again. It is still owned by the test. 156 // call SetPolicyProviderForTesting() again. It is still owned by the test.
171 g_testing_provider = NULL; 157 g_testing_provider = NULL;
172 if (platform_provider_) 158 if (platform_provider_)
173 platform_provider_->Shutdown(); 159 platform_provider_->Shutdown();
174 // The |cloud_provider_| must be shut down before destroying the cloud
175 // policy subsystems, which own the caches that |cloud_provider_| uses.
176 if (cloud_provider_)
177 cloud_provider_->Shutdown();
178 160
179 #if defined(OS_CHROMEOS) 161 #if defined(OS_CHROMEOS)
180 // Shutdown device cloud policy.
181 if (device_cloud_policy_subsystem_)
182 device_cloud_policy_subsystem_->Shutdown();
183 // The AppPackUpdater may be observing the |device_cloud_policy_subsystem_|. 162 // The AppPackUpdater may be observing the |device_cloud_policy_subsystem_|.
184 // Delete it first. 163 // Delete it first.
185 app_pack_updater_.reset(); 164 app_pack_updater_.reset();
186 device_cloud_policy_subsystem_.reset();
187 device_data_store_.reset();
188 165
189 if (device_cloud_policy_manager_) 166 if (device_cloud_policy_manager_)
190 device_cloud_policy_manager_->Shutdown(); 167 device_cloud_policy_manager_->Shutdown();
191 if (device_local_account_policy_provider_) 168 if (device_local_account_policy_provider_)
192 device_local_account_policy_provider_->Shutdown(); 169 device_local_account_policy_provider_->Shutdown();
193 if (device_local_account_policy_service_) 170 if (device_local_account_policy_service_)
194 device_local_account_policy_service_->Disconnect(); 171 device_local_account_policy_service_->Disconnect();
195 if (user_cloud_policy_manager_) 172 if (user_cloud_policy_manager_)
196 user_cloud_policy_manager_->Shutdown(); 173 user_cloud_policy_manager_->Shutdown();
197 global_user_cloud_policy_provider_.Shutdown(); 174 global_user_cloud_policy_provider_.Shutdown();
198 #endif 175 #endif
199 176
200 // Shutdown user cloud policy.
201 if (user_cloud_policy_subsystem_)
202 user_cloud_policy_subsystem_->Shutdown();
203 user_cloud_policy_subsystem_.reset();
204 user_policy_token_cache_.reset();
205 user_data_store_.reset();
206
207 device_management_service_.reset(); 177 device_management_service_.reset();
208 } 178 }
209 179
210 scoped_ptr<PolicyService> BrowserPolicyConnector::CreatePolicyService( 180 scoped_ptr<PolicyService> BrowserPolicyConnector::CreatePolicyService(
211 Profile* profile) { 181 Profile* profile) {
212 DCHECK(profile); 182 DCHECK(profile);
213 ConfigurationPolicyProvider* user_cloud_policy_provider = NULL; 183 ConfigurationPolicyProvider* user_cloud_policy_provider = NULL;
214 #if defined(OS_CHROMEOS) 184 #if defined(OS_CHROMEOS)
215 user_cloud_policy_provider = user_cloud_policy_manager_.get(); 185 user_cloud_policy_provider = user_cloud_policy_manager_.get();
216 #else 186 #else
217 user_cloud_policy_provider = 187 user_cloud_policy_provider =
218 UserCloudPolicyManagerFactory::GetForProfile(profile); 188 UserCloudPolicyManagerFactory::GetForProfile(profile);
219 #endif 189 #endif
220 return CreatePolicyServiceWithProviders( 190 return CreatePolicyServiceWithProviders(
221 user_cloud_policy_provider, 191 user_cloud_policy_provider,
222 profile->GetManagedModePolicyProvider()); 192 profile->GetManagedModePolicyProvider());
223 } 193 }
224 194
225 PolicyService* BrowserPolicyConnector::GetPolicyService() { 195 PolicyService* BrowserPolicyConnector::GetPolicyService() {
226 if (!policy_service_) 196 if (!policy_service_)
227 policy_service_ = CreatePolicyServiceWithProviders(NULL, NULL); 197 policy_service_ = CreatePolicyServiceWithProviders(NULL, NULL);
228 return policy_service_.get(); 198 return policy_service_.get();
229 } 199 }
230 200
231 void BrowserPolicyConnector::RegisterForDevicePolicy(
232 const std::string& owner_email,
233 const std::string& token,
234 bool known_machine_id,
235 bool reregister) {
236 #if defined(OS_CHROMEOS) 201 #if defined(OS_CHROMEOS)
237 if (device_data_store_.get()) {
238 if (!device_data_store_->device_token().empty()) {
239 LOG(ERROR) << "Device policy data store already has a DMToken; "
240 << "RegisterForDevicePolicy won't trigger a new registration.";
241 }
242
243 device_data_store_->set_user_name(owner_email);
244 device_data_store_->set_known_machine_id(known_machine_id);
245 if (reregister) {
246 device_data_store_->set_device_id(install_attributes_->GetDeviceId());
247 device_data_store_->set_reregister(true);
248 }
249 device_data_store_->set_policy_fetching_enabled(false);
250 device_data_store_->SetOAuthToken(token);
251 }
252 #endif
253 }
254
255 bool BrowserPolicyConnector::IsEnterpriseManaged() { 202 bool BrowserPolicyConnector::IsEnterpriseManaged() {
256 #if defined(OS_CHROMEOS) 203 return install_attributes_->IsEnterpriseDevice();
257 return install_attributes_.get() && install_attributes_->IsEnterpriseDevice();
258 #else
259 return false;
260 #endif
261 }
262
263 EnterpriseInstallAttributes::LockResult
264 BrowserPolicyConnector::LockDevice(const std::string& user) {
265 #if defined(OS_CHROMEOS)
266 if (install_attributes_.get()) {
267 return install_attributes_->LockDevice(user,
268 device_data_store_->device_mode(),
269 device_data_store_->device_id());
270 }
271 #endif
272
273 return EnterpriseInstallAttributes::LOCK_BACKEND_ERROR;
274 } 204 }
275 205
276 std::string BrowserPolicyConnector::GetEnterpriseDomain() { 206 std::string BrowserPolicyConnector::GetEnterpriseDomain() {
277 #if defined(OS_CHROMEOS) 207 return install_attributes_->GetDomain();
278 if (install_attributes_.get())
279 return install_attributes_->GetDomain();
280 #endif
281
282 return std::string();
283 } 208 }
284 209
285 DeviceMode BrowserPolicyConnector::GetDeviceMode() { 210 DeviceMode BrowserPolicyConnector::GetDeviceMode() {
286 #if defined(OS_CHROMEOS) 211 return install_attributes_->GetMode();
287 if (install_attributes_.get()) 212 }
288 return install_attributes_->GetMode();
289 else
290 return DEVICE_MODE_NOT_SET;
291 #endif 213 #endif
292 214
293 // We only have the notion of "enterprise" device on ChromeOS for now.
294 return DEVICE_MODE_CONSUMER;
295 }
296
297 void BrowserPolicyConnector::ResetDevicePolicy() {
298 #if defined(OS_CHROMEOS)
299 if (device_cloud_policy_subsystem_.get())
300 device_cloud_policy_subsystem_->Reset();
301 #endif
302 }
303
304 void BrowserPolicyConnector::FetchCloudPolicy() {
305 #if defined(OS_CHROMEOS)
306 if (device_cloud_policy_subsystem_.get())
307 device_cloud_policy_subsystem_->RefreshPolicies(false);
308 if (user_cloud_policy_subsystem_.get())
309 user_cloud_policy_subsystem_->RefreshPolicies(true); // wait_for_auth_token
310 #endif
311 }
312
313 void BrowserPolicyConnector::ScheduleServiceInitialization( 215 void BrowserPolicyConnector::ScheduleServiceInitialization(
314 int64 delay_milliseconds) { 216 int64 delay_milliseconds) {
315 if (device_management_service_.get()) 217 device_management_service_->ScheduleInitialization(delay_milliseconds);
316 device_management_service_->ScheduleInitialization(delay_milliseconds);
317 if (user_cloud_policy_subsystem_.get()) {
318 user_cloud_policy_subsystem_->
319 ScheduleServiceInitialization(delay_milliseconds);
320 }
321 #if defined(OS_CHROMEOS)
322 if (device_cloud_policy_subsystem_.get()) {
323 device_cloud_policy_subsystem_->
324 ScheduleServiceInitialization(delay_milliseconds);
325 }
326 #endif
327 } 218 }
328 219
220 #if defined(OS_CHROMEOS)
329 void BrowserPolicyConnector::InitializeUserPolicy( 221 void BrowserPolicyConnector::InitializeUserPolicy(
330 const std::string& user_name, 222 const std::string& user_name,
331 bool is_public_account, 223 bool is_public_account,
332 bool wait_for_policy_fetch) { 224 bool wait_for_policy_fetch) {
333 #if defined(OS_CHROMEOS)
334 // If the user is managed then importing certificates from ONC policy is 225 // If the user is managed then importing certificates from ONC policy is
335 // allowed, otherwise it's not. Update this flag once the user has signed in, 226 // allowed, otherwise it's not. Update this flag once the user has signed in,
336 // and before user policy is loaded. 227 // and before user policy is loaded.
337 GetNetworkConfigurationUpdater()->set_allow_web_trust( 228 GetNetworkConfigurationUpdater()->set_allow_web_trust(
338 GetUserAffiliation(user_name) == USER_AFFILIATION_MANAGED); 229 GetUserAffiliation(user_name) == USER_AFFILIATION_MANAGED);
339 230
340 // Re-initializing user policy is disallowed for two reasons: 231 // Re-initializing user policy is disallowed for two reasons:
341 // (a) Existing profiles may hold pointers to |user_cloud_policy_manager_|. 232 // (a) Existing profiles may hold pointers to |user_cloud_policy_manager_|.
342 // (b) Implementing UserCloudPolicyManager::IsInitializationComplete() 233 // (b) Implementing UserCloudPolicyManager::IsInitializationComplete()
343 // correctly is impossible for re-initialization. 234 // correctly is impossible for re-initialization.
344 CHECK(!user_cloud_policy_manager_.get()); 235 CHECK(!user_cloud_policy_manager_.get());
345 #endif
346
347 // Throw away the old backend.
348 user_cloud_policy_subsystem_.reset();
349 user_policy_token_cache_.reset();
350 user_data_store_.reset();
351 token_service_ = NULL;
352 registrar_.RemoveAll();
353 236
354 CommandLine* command_line = CommandLine::ForCurrentProcess(); 237 CommandLine* command_line = CommandLine::ForCurrentProcess();
355 238
356 int64 startup_delay = 239 int64 startup_delay =
357 wait_for_policy_fetch ? 0 : kServiceInitializationStartupDelay; 240 wait_for_policy_fetch ? 0 : kServiceInitializationStartupDelay;
358 241
359 FilePath profile_dir; 242 FilePath profile_dir;
360 PathService::Get(chrome::DIR_USER_DATA, &profile_dir); 243 PathService::Get(chrome::DIR_USER_DATA, &profile_dir);
361 #if defined(OS_CHROMEOS)
362 profile_dir = profile_dir.Append( 244 profile_dir = profile_dir.Append(
363 command_line->GetSwitchValuePath(switches::kLoginProfile)); 245 command_line->GetSwitchValuePath(switches::kLoginProfile));
364 #endif
365 const FilePath policy_dir = profile_dir.Append(kPolicyDir); 246 const FilePath policy_dir = profile_dir.Append(kPolicyDir);
366 const FilePath policy_cache_file = policy_dir.Append(kPolicyCacheFile); 247 const FilePath policy_cache_file = policy_dir.Append(kPolicyCacheFile);
367 const FilePath token_cache_file = policy_dir.Append(kTokenCacheFile); 248 const FilePath token_cache_file = policy_dir.Append(kTokenCacheFile);
368 249
369 if (!command_line->HasSwitch(switches::kDisableCloudPolicyService)) { 250 device_management_service_->ScheduleInitialization(startup_delay);
370 #if defined(OS_CHROMEOS) 251 if (is_public_account && device_local_account_policy_service_.get()) {
371 device_management_service_->ScheduleInitialization(startup_delay); 252 device_local_account_policy_provider_.reset(
372 if (is_public_account && device_local_account_policy_service_.get()) { 253 new DeviceLocalAccountPolicyProvider(
373 device_local_account_policy_provider_.reset( 254 user_name, device_local_account_policy_service_.get()));
374 new DeviceLocalAccountPolicyProvider(
375 user_name, device_local_account_policy_service_.get()));
376 255
377 device_local_account_policy_provider_->Init(); 256 device_local_account_policy_provider_->Init();
378 global_user_cloud_policy_provider_.SetDelegate( 257 global_user_cloud_policy_provider_.SetDelegate(
379 device_local_account_policy_provider_.get()); 258 device_local_account_policy_provider_.get());
380 } else if (!IsNonEnterpriseUser(user_name)) { 259 } else if (!IsNonEnterpriseUser(user_name)) {
381 scoped_ptr<CloudPolicyStore> store( 260 scoped_ptr<CloudPolicyStore> store(
382 new UserCloudPolicyStoreChromeOS( 261 new UserCloudPolicyStoreChromeOS(
383 chromeos::DBusThreadManager::Get()->GetSessionManagerClient(), 262 chromeos::DBusThreadManager::Get()->GetSessionManagerClient(),
384 user_name, policy_cache_file, token_cache_file)); 263 user_name, policy_cache_file, token_cache_file));
385 user_cloud_policy_manager_.reset( 264 user_cloud_policy_manager_.reset(
386 new UserCloudPolicyManagerChromeOS(store.Pass(), 265 new UserCloudPolicyManagerChromeOS(store.Pass(),
387 wait_for_policy_fetch)); 266 wait_for_policy_fetch));
388 267
389 user_cloud_policy_manager_->Init(); 268 user_cloud_policy_manager_->Init();
390 user_cloud_policy_manager_->Connect(g_browser_process->local_state(), 269 user_cloud_policy_manager_->Connect(g_browser_process->local_state(),
391 device_management_service_.get(), 270 device_management_service_.get(),
392 GetUserAffiliation(user_name)); 271 GetUserAffiliation(user_name));
393 global_user_cloud_policy_provider_.SetDelegate( 272 global_user_cloud_policy_provider_.SetDelegate(
394 user_cloud_policy_manager_.get()); 273 user_cloud_policy_manager_.get());
395 }
396 #endif
397 } else {
398 CloudPolicyCacheBase* user_policy_cache = NULL;
399
400 user_data_store_.reset(CloudPolicyDataStore::CreateForUserPolicies());
401 #if defined(OS_CHROMEOS)
402 user_policy_cache =
403 new CrosUserPolicyCache(
404 chromeos::DBusThreadManager::Get()->GetSessionManagerClient(),
405 user_data_store_.get(),
406 wait_for_policy_fetch,
407 token_cache_file,
408 policy_cache_file);
409 #else
410 user_policy_cache = new UserPolicyCache(policy_cache_file,
411 wait_for_policy_fetch);
412 user_policy_token_cache_.reset(
413 new UserPolicyTokenCache(user_data_store_.get(), token_cache_file));
414
415 // Initiate the DM-Token load.
416 user_policy_token_cache_->Load();
417 #endif
418
419 user_cloud_policy_subsystem_.reset(new CloudPolicySubsystem(
420 user_data_store_.get(),
421 user_policy_cache,
422 GetDeviceManagementUrl()));
423
424 user_data_store_->set_user_name(user_name);
425 user_data_store_->set_user_affiliation(GetUserAffiliation(user_name));
426
427 user_cloud_policy_subsystem_->CompleteInitialization(
428 prefs::kUserPolicyRefreshRate,
429 startup_delay);
430
431 cloud_provider_->SetUserPolicyCache(user_policy_cache);
432 } 274 }
433 } 275 }
434
435 void BrowserPolicyConnector::SetUserPolicyTokenService(
436 TokenService* token_service) {
437 token_service_ = token_service;
438 registrar_.Add(this,
439 chrome::NOTIFICATION_TOKEN_AVAILABLE,
440 content::Source<TokenService>(token_service_));
441
442 if (token_service_->HasTokenForService(
443 GaiaConstants::kDeviceManagementService)) {
444 user_data_store_->SetGaiaToken(token_service_->GetTokenForService(
445 GaiaConstants::kDeviceManagementService));
446 }
447 }
448
449 void BrowserPolicyConnector::RegisterForUserPolicy(
450 const std::string& oauth_token) {
451 if (oauth_token.empty()) {
452 // An attempt to fetch the dm service oauth token has failed. Notify
453 // the user policy cache of this, so that a potential blocked login
454 // proceeds without waiting for user policy.
455 if (user_cloud_policy_subsystem_.get()) {
456 user_cloud_policy_subsystem_->GetCloudPolicyCacheBase()->
457 SetFetchingDone();
458 }
459 } else {
460 if (user_data_store_.get())
461 user_data_store_->SetOAuthToken(oauth_token);
462 }
463 }
464
465 CloudPolicyDataStore* BrowserPolicyConnector::GetDeviceCloudPolicyDataStore() {
466 #if defined(OS_CHROMEOS)
467 return device_data_store_.get();
468 #else
469 return NULL;
470 #endif 276 #endif
471 }
472
473 CloudPolicyDataStore* BrowserPolicyConnector::GetUserCloudPolicyDataStore() {
474 return user_data_store_.get();
475 }
476 277
477 const ConfigurationPolicyHandlerList* 278 const ConfigurationPolicyHandlerList*
478 BrowserPolicyConnector::GetHandlerList() const { 279 BrowserPolicyConnector::GetHandlerList() const {
479 return &handler_list_; 280 return &handler_list_;
480 } 281 }
481 282
482 UserAffiliation BrowserPolicyConnector::GetUserAffiliation( 283 UserAffiliation BrowserPolicyConnector::GetUserAffiliation(
483 const std::string& user_name) { 284 const std::string& user_name) {
484 #if defined(OS_CHROMEOS) 285 #if defined(OS_CHROMEOS)
485 if (install_attributes_.get() && 286 if (install_attributes_.get() &&
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 const string16 domain = 389 const string16 domain =
589 UTF8ToUTF16(gaia::ExtractDomainName(gaia::CanonicalizeEmail(username))); 390 UTF8ToUTF16(gaia::ExtractDomainName(gaia::CanonicalizeEmail(username)));
590 for (size_t i = 0; i < arraysize(kNonManagedDomainPatterns); i++) { 391 for (size_t i = 0; i < arraysize(kNonManagedDomainPatterns); i++) {
591 string16 pattern = WideToUTF16(kNonManagedDomainPatterns[i]); 392 string16 pattern = WideToUTF16(kNonManagedDomainPatterns[i]);
592 if (MatchDomain(domain, pattern)) 393 if (MatchDomain(domain, pattern))
593 return true; 394 return true;
594 } 395 }
595 return false; 396 return false;
596 } 397 }
597 398
598 void BrowserPolicyConnector::Observe(
599 int type,
600 const content::NotificationSource& source,
601 const content::NotificationDetails& details) {
602 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
603 if (type == chrome::NOTIFICATION_TOKEN_AVAILABLE) {
604 const TokenService* token_source =
605 content::Source<const TokenService>(source).ptr();
606 DCHECK_EQ(token_service_, token_source);
607 const TokenService::TokenAvailableDetails* token_details =
608 content::Details<const TokenService::TokenAvailableDetails>(details).
609 ptr();
610 if (token_details->service() == GaiaConstants::kDeviceManagementService) {
611 if (user_data_store_.get()) {
612 user_data_store_->SetGaiaToken(token_details->token());
613 }
614 }
615 } else {
616 NOTREACHED();
617 }
618 }
619
620 void BrowserPolicyConnector::InitializeDevicePolicy() {
621 #if defined(OS_CHROMEOS)
622 // Throw away the old backend.
623 device_cloud_policy_subsystem_.reset();
624 device_data_store_.reset();
625
626 CommandLine* command_line = CommandLine::ForCurrentProcess();
627 if (command_line->HasSwitch(switches::kDisableCloudPolicyService)) {
628 device_data_store_.reset(CloudPolicyDataStore::CreateForDevicePolicies());
629 DevicePolicyCache* device_policy_cache =
630 new DevicePolicyCache(device_data_store_.get(),
631 install_attributes_.get());
632
633 cloud_provider_->SetDevicePolicyCache(device_policy_cache);
634
635 device_cloud_policy_subsystem_.reset(new CloudPolicySubsystem(
636 device_data_store_.get(),
637 device_policy_cache,
638 GetDeviceManagementUrl()));
639 }
640 #endif
641 }
642
643 void BrowserPolicyConnector::CompleteInitialization() { 399 void BrowserPolicyConnector::CompleteInitialization() {
644 if (g_testing_provider) 400 if (g_testing_provider)
645 g_testing_provider->Init(); 401 g_testing_provider->Init();
646 if (platform_provider_) 402 if (platform_provider_)
647 platform_provider_->Init(); 403 platform_provider_->Init();
648 if (cloud_provider_)
649 cloud_provider_->Init();
650 404
651 #if defined(OS_CHROMEOS) 405 #if defined(OS_CHROMEOS)
652 global_user_cloud_policy_provider_.Init(); 406 global_user_cloud_policy_provider_.Init();
653 407
654 // Create the AppPackUpdater to start updating the cache. It requires the 408 // Create the AppPackUpdater to start updating the cache. It requires the
655 // system request context, which isn't available in Init(); therefore it is 409 // system request context, which isn't available in Init(); therefore it is
656 // created only once the loops are running. 410 // created only once the loops are running.
657 GetAppPackUpdater(); 411 GetAppPackUpdater();
658 412
659 if (device_cloud_policy_subsystem_.get()) {
660 // Read serial number and machine model. This must be done before we call
661 // CompleteInitialization() below such that the serial number is available
662 // for re-submission in case we're doing serial number recovery.
663 if (device_data_store_->machine_id().empty() ||
664 device_data_store_->machine_model().empty()) {
665 device_data_store_->set_machine_id(
666 DeviceCloudPolicyManagerChromeOS::GetMachineID());
667 device_data_store_->set_machine_model(
668 DeviceCloudPolicyManagerChromeOS::GetMachineModel());
669 }
670
671 device_cloud_policy_subsystem_->CompleteInitialization(
672 prefs::kDevicePolicyRefreshRate,
673 kServiceInitializationStartupDelay);
674 }
675
676 if (device_data_store_.get()) {
677 device_data_store_->set_device_status_collector(
678 new DeviceStatusCollector(
679 g_browser_process->local_state(),
680 chromeos::system::StatisticsProvider::GetInstance(),
681 NULL));
682 }
683
684 if (device_cloud_policy_manager_.get()) { 413 if (device_cloud_policy_manager_.get()) {
685 device_cloud_policy_manager_->Init(); 414 device_cloud_policy_manager_->Init();
686 scoped_ptr<CloudPolicyClient::StatusProvider> status_provider( 415 scoped_ptr<CloudPolicyClient::StatusProvider> status_provider(
687 new DeviceStatusCollector(g_browser_process->local_state(), 416 new DeviceStatusCollector(g_browser_process->local_state(),
688 chromeos::system::StatisticsProvider::GetInstance(), 417 chromeos::system::StatisticsProvider::GetInstance(),
689 NULL)); 418 NULL));
690 device_cloud_policy_manager_->Connect( 419 device_cloud_policy_manager_->Connect(
691 g_browser_process->local_state(), 420 g_browser_process->local_state(),
692 device_management_service_.get(), 421 device_management_service_.get(),
693 status_provider.Pass()); 422 status_provider.Pass());
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
735 BrowserPolicyConnector::CreatePolicyServiceWithProviders( 464 BrowserPolicyConnector::CreatePolicyServiceWithProviders(
736 ConfigurationPolicyProvider* user_cloud_policy_provider, 465 ConfigurationPolicyProvider* user_cloud_policy_provider,
737 ConfigurationPolicyProvider* managed_mode_policy_provider) { 466 ConfigurationPolicyProvider* managed_mode_policy_provider) {
738 PolicyServiceImpl::Providers providers; 467 PolicyServiceImpl::Providers providers;
739 if (g_testing_provider) { 468 if (g_testing_provider) {
740 providers.push_back(g_testing_provider); 469 providers.push_back(g_testing_provider);
741 } else { 470 } else {
742 // |providers| in decreasing order of priority. 471 // |providers| in decreasing order of priority.
743 if (platform_provider_) 472 if (platform_provider_)
744 providers.push_back(platform_provider_.get()); 473 providers.push_back(platform_provider_.get());
745 if (cloud_provider_)
746 providers.push_back(cloud_provider_.get());
747 474
748 #if defined(OS_CHROMEOS) 475 #if defined(OS_CHROMEOS)
749 if (device_cloud_policy_manager_.get()) 476 if (device_cloud_policy_manager_.get())
750 providers.push_back(device_cloud_policy_manager_.get()); 477 providers.push_back(device_cloud_policy_manager_.get());
751 if (!user_cloud_policy_provider) 478 if (!user_cloud_policy_provider)
752 user_cloud_policy_provider = &global_user_cloud_policy_provider_; 479 user_cloud_policy_provider = &global_user_cloud_policy_provider_;
753 #endif 480 #endif
754 481
755 if (user_cloud_policy_provider) 482 if (user_cloud_policy_provider)
756 providers.push_back(user_cloud_policy_provider); 483 providers.push_back(user_cloud_policy_provider);
(...skipping 23 matching lines...) Expand all
780 return new AsyncPolicyProvider(loader.Pass()); 507 return new AsyncPolicyProvider(loader.Pass());
781 } else { 508 } else {
782 return NULL; 509 return NULL;
783 } 510 }
784 #else 511 #else
785 return NULL; 512 return NULL;
786 #endif 513 #endif
787 } 514 }
788 515
789 } // namespace policy 516 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698