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

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

Issue 8499021: UserPolicyCache only becomes ready after policy has been fetched. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 9 years, 1 month 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/command_line.h" 8 #include "base/command_line.h"
9 #include "base/file_path.h" 9 #include "base/file_path.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 ScheduleServiceInitialization(delay_milliseconds); 225 ScheduleServiceInitialization(delay_milliseconds);
226 } 226 }
227 #if defined(OS_CHROMEOS) 227 #if defined(OS_CHROMEOS)
228 if (device_cloud_policy_subsystem_.get()) { 228 if (device_cloud_policy_subsystem_.get()) {
229 device_cloud_policy_subsystem_-> 229 device_cloud_policy_subsystem_->
230 ScheduleServiceInitialization(delay_milliseconds); 230 ScheduleServiceInitialization(delay_milliseconds);
231 } 231 }
232 #endif 232 #endif
233 } 233 }
234 void BrowserPolicyConnector::InitializeUserPolicy( 234 void BrowserPolicyConnector::InitializeUserPolicy(
235 const std::string& user_name) { 235 const std::string& user_name,
236 bool wait_for_policy_fetch) {
236 // Throw away the old backend. 237 // Throw away the old backend.
237 user_cloud_policy_subsystem_.reset(); 238 user_cloud_policy_subsystem_.reset();
238 user_policy_token_cache_.reset(); 239 user_policy_token_cache_.reset();
239 user_data_store_.reset(); 240 user_data_store_.reset();
240 token_service_ = NULL; 241 token_service_ = NULL;
241 registrar_.RemoveAll(); 242 registrar_.RemoveAll();
242 243
243 CommandLine* command_line = CommandLine::ForCurrentProcess(); 244 CommandLine* command_line = CommandLine::ForCurrentProcess();
244 245
245 FilePath policy_dir; 246 FilePath policy_dir;
246 PathService::Get(chrome::DIR_USER_DATA, &policy_dir); 247 PathService::Get(chrome::DIR_USER_DATA, &policy_dir);
247 #if defined(OS_CHROMEOS) 248 #if defined(OS_CHROMEOS)
248 policy_dir = policy_dir.Append( 249 policy_dir = policy_dir.Append(
249 command_line->GetSwitchValuePath(switches::kLoginProfile)); 250 command_line->GetSwitchValuePath(switches::kLoginProfile));
250 #endif 251 #endif
251 252
252 if (command_line->HasSwitch(switches::kDeviceManagementUrl)) { 253 if (command_line->HasSwitch(switches::kDeviceManagementUrl)) {
253 FilePath policy_cache_dir = policy_dir.Append(kPolicyDir); 254 FilePath policy_cache_dir = policy_dir.Append(kPolicyDir);
255
254 UserPolicyCache* user_policy_cache = 256 UserPolicyCache* user_policy_cache =
255 new UserPolicyCache(policy_cache_dir.Append(kPolicyCacheFile)); 257 new UserPolicyCache(policy_cache_dir.Append(kPolicyCacheFile),
258 wait_for_policy_fetch);
256 user_data_store_.reset(CloudPolicyDataStore::CreateForUserPolicies()); 259 user_data_store_.reset(CloudPolicyDataStore::CreateForUserPolicies());
257 user_policy_token_cache_.reset( 260 user_policy_token_cache_.reset(
258 new UserPolicyTokenCache(user_data_store_.get(), 261 new UserPolicyTokenCache(user_data_store_.get(),
259 policy_cache_dir.Append(kTokenCacheFile))); 262 policy_cache_dir.Append(kTokenCacheFile)));
260 263
261 // Prepending user caches meaning they will take precedence of device policy 264 // Prepending user caches meaning they will take precedence of device policy
262 // caches. 265 // caches.
263 managed_cloud_provider_->PrependCache(user_policy_cache); 266 managed_cloud_provider_->PrependCache(user_policy_cache);
264 recommended_cloud_provider_->PrependCache(user_policy_cache); 267 recommended_cloud_provider_->PrependCache(user_policy_cache);
265 user_cloud_policy_subsystem_.reset(new CloudPolicySubsystem( 268 user_cloud_policy_subsystem_.reset(new CloudPolicySubsystem(
266 user_data_store_.get(), 269 user_data_store_.get(),
267 user_policy_cache)); 270 user_policy_cache));
268 271
269 // Initiate the DM-Token load. 272 // Initiate the DM-Token load.
270 user_policy_token_cache_->Load(); 273 user_policy_token_cache_->Load();
271 274
272 user_data_store_->set_user_name(user_name); 275 user_data_store_->set_user_name(user_name);
273 user_data_store_->set_user_affiliation(GetUserAffiliation(user_name)); 276 user_data_store_->set_user_affiliation(GetUserAffiliation(user_name));
274 277
278 int64 delay =
279 wait_for_policy_fetch ? 0 : kServiceInitializationStartupDelay;
275 user_cloud_policy_subsystem_->CompleteInitialization( 280 user_cloud_policy_subsystem_->CompleteInitialization(
276 prefs::kUserPolicyRefreshRate, 281 prefs::kUserPolicyRefreshRate,
277 kServiceInitializationStartupDelay); 282 delay);
278 } 283 }
279 } 284 }
280 285
281 void BrowserPolicyConnector::SetUserPolicyTokenService( 286 void BrowserPolicyConnector::SetUserPolicyTokenService(
282 TokenService* token_service) { 287 TokenService* token_service) {
283 token_service_ = token_service; 288 token_service_ = token_service;
284 registrar_.Add(this, 289 registrar_.Add(this,
285 chrome::NOTIFICATION_TOKEN_AVAILABLE, 290 chrome::NOTIFICATION_TOKEN_AVAILABLE,
286 content::Source<TokenService>(token_service_)); 291 content::Source<TokenService>(token_service_));
287 292
288 if (token_service_->HasTokenForService( 293 if (token_service_->HasTokenForService(
289 GaiaConstants::kDeviceManagementService)) { 294 GaiaConstants::kDeviceManagementService)) {
290 user_data_store_->SetGaiaToken(token_service_->GetTokenForService( 295 user_data_store_->SetGaiaToken(token_service_->GetTokenForService(
291 GaiaConstants::kDeviceManagementService)); 296 GaiaConstants::kDeviceManagementService));
292 } 297 }
293 } 298 }
294 299
295 void BrowserPolicyConnector::RegisterForUserPolicy( 300 void BrowserPolicyConnector::RegisterForUserPolicy(
296 const std::string& oauth_token) { 301 const std::string& oauth_token) {
297 if (user_data_store_.get()) 302 if (oauth_token.empty()) {
298 user_data_store_->SetOAuthToken(oauth_token); 303 // An attempt to fetch the dm service oauth token has failed. Notify
304 // the user policy cache of this, so that a potential blocked login
305 // proceeds without waiting for user policy.
306 if (user_cloud_policy_subsystem_.get()) {
307 user_cloud_policy_subsystem_->GetCloudPolicyCacheBase()->
308 SetFetchingDone();
309 }
310 } else {
311 if (user_data_store_.get())
312 user_data_store_->SetOAuthToken(oauth_token);
313 }
299 } 314 }
300 315
301 const CloudPolicyDataStore* 316 const CloudPolicyDataStore*
302 BrowserPolicyConnector::GetDeviceCloudPolicyDataStore() const { 317 BrowserPolicyConnector::GetDeviceCloudPolicyDataStore() const {
303 #if defined(OS_CHROMEOS) 318 #if defined(OS_CHROMEOS)
304 return device_data_store_.get(); 319 return device_data_store_.get();
305 #else 320 #else
306 return NULL; 321 return NULL;
307 #endif 322 #endif
308 } 323 }
309 324
310 const CloudPolicyDataStore* 325 const CloudPolicyDataStore*
311 BrowserPolicyConnector::GetUserCloudPolicyDataStore() const { 326 BrowserPolicyConnector::GetUserCloudPolicyDataStore() const {
312 return user_data_store_.get(); 327 return user_data_store_.get();
313 } 328 }
314 329
315 const ConfigurationPolicyHandlerList* 330 const ConfigurationPolicyHandlerList*
316 BrowserPolicyConnector::GetHandlerList() const { 331 BrowserPolicyConnector::GetHandlerList() const {
317 return &handler_list_; 332 return &handler_list_;
318 } 333 }
319 334
335 CloudPolicyDataStore::UserAffiliation
336 BrowserPolicyConnector::GetUserAffiliation(const std::string& user_name) {
337 #if defined(OS_CHROMEOS)
338 if (install_attributes_.get()) {
339 size_t pos = user_name.find('@');
340 if (pos != std::string::npos &&
341 user_name.substr(pos + 1) == install_attributes_->GetDomain()) {
342 return CloudPolicyDataStore::USER_AFFILIATION_MANAGED;
343 }
344 }
345 #endif
346
347 return CloudPolicyDataStore::USER_AFFILIATION_NONE;
348 }
349
320 BrowserPolicyConnector::BrowserPolicyConnector() 350 BrowserPolicyConnector::BrowserPolicyConnector()
321 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { 351 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) {
322 managed_platform_provider_.reset(CreateManagedPlatformProvider()); 352 managed_platform_provider_.reset(CreateManagedPlatformProvider());
323 recommended_platform_provider_.reset(CreateRecommendedPlatformProvider()); 353 recommended_platform_provider_.reset(CreateRecommendedPlatformProvider());
324 354
325 managed_cloud_provider_.reset(new CloudPolicyProviderImpl( 355 managed_cloud_provider_.reset(new CloudPolicyProviderImpl(
326 GetChromePolicyDefinitionList(), 356 GetChromePolicyDefinitionList(),
327 CloudPolicyCacheBase::POLICY_LEVEL_MANDATORY)); 357 CloudPolicyCacheBase::POLICY_LEVEL_MANDATORY));
328 recommended_cloud_provider_.reset(new CloudPolicyProviderImpl( 358 recommended_cloud_provider_.reset(new CloudPolicyProviderImpl(
329 GetChromePolicyDefinitionList(), 359 GetChromePolicyDefinitionList(),
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 void BrowserPolicyConnector::InitializeDevicePolicySubsystem() { 439 void BrowserPolicyConnector::InitializeDevicePolicySubsystem() {
410 #if defined(OS_CHROMEOS) 440 #if defined(OS_CHROMEOS)
411 if (device_cloud_policy_subsystem_.get()) { 441 if (device_cloud_policy_subsystem_.get()) {
412 device_cloud_policy_subsystem_->CompleteInitialization( 442 device_cloud_policy_subsystem_->CompleteInitialization(
413 prefs::kDevicePolicyRefreshRate, 443 prefs::kDevicePolicyRefreshRate,
414 kServiceInitializationStartupDelay); 444 kServiceInitializationStartupDelay);
415 } 445 }
416 #endif 446 #endif
417 } 447 }
418 448
419 CloudPolicyDataStore::UserAffiliation
420 BrowserPolicyConnector::GetUserAffiliation(const std::string& user_name) {
421 #if defined(OS_CHROMEOS)
422 if (install_attributes_.get()) {
423 size_t pos = user_name.find('@');
424 if (pos != std::string::npos &&
425 user_name.substr(pos + 1) == install_attributes_->GetDomain()) {
426 return CloudPolicyDataStore::USER_AFFILIATION_MANAGED;
427 }
428 }
429 #endif
430
431 return CloudPolicyDataStore::USER_AFFILIATION_NONE;
432 }
433
434 // static 449 // static
435 BrowserPolicyConnector* BrowserPolicyConnector::CreateForTests() { 450 BrowserPolicyConnector* BrowserPolicyConnector::CreateForTests() {
436 return new BrowserPolicyConnector(NULL, NULL, NULL, NULL); 451 return new BrowserPolicyConnector(NULL, NULL, NULL, NULL);
437 } 452 }
438 453
439 // static 454 // static
440 ConfigurationPolicyProvider* 455 ConfigurationPolicyProvider*
441 BrowserPolicyConnector::CreateManagedPlatformProvider() { 456 BrowserPolicyConnector::CreateManagedPlatformProvider() {
442 const PolicyDefinitionList* policy_list = GetChromePolicyDefinitionList(); 457 const PolicyDefinitionList* policy_list = GetChromePolicyDefinitionList();
443 #if defined(OS_WIN) 458 #if defined(OS_WIN)
(...skipping 26 matching lines...) Expand all
470 config_dir_path.Append(FILE_PATH_LITERAL("recommended"))); 485 config_dir_path.Append(FILE_PATH_LITERAL("recommended")));
471 } else { 486 } else {
472 return NULL; 487 return NULL;
473 } 488 }
474 #else 489 #else
475 return NULL; 490 return NULL;
476 #endif 491 #endif
477 } 492 }
478 493
479 } // namespace policy 494 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698