OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/managed_mode/managed_user_service.h" | 5 #include "chrome/browser/managed_mode/managed_user_service.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/memory/ref_counted.h" | 8 #include "base/memory/ref_counted.h" |
9 #include "base/prefs/pref_service.h" | 9 #include "base/prefs/pref_service.h" |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
12 #include "chrome/browser/browser_process.h" | 12 #include "chrome/browser/browser_process.h" |
13 #include "chrome/browser/chrome_notification_types.h" | 13 #include "chrome/browser/chrome_notification_types.h" |
14 #include "chrome/browser/extensions/extension_service.h" | 14 #include "chrome/browser/extensions/extension_service.h" |
15 #include "chrome/browser/managed_mode/custodian_profile_downloader_service.h" | 15 #include "chrome/browser/managed_mode/custodian_profile_downloader_service.h" |
16 #include "chrome/browser/managed_mode/custodian_profile_downloader_service_facto
ry.h" | 16 #include "chrome/browser/managed_mode/custodian_profile_downloader_service_facto
ry.h" |
17 #include "chrome/browser/managed_mode/managed_mode_site_list.h" | 17 #include "chrome/browser/managed_mode/managed_mode_site_list.h" |
18 #include "chrome/browser/managed_mode/managed_user_constants.h" | 18 #include "chrome/browser/managed_mode/managed_user_constants.h" |
19 #include "chrome/browser/managed_mode/managed_user_registration_utility.h" | 19 #include "chrome/browser/managed_mode/managed_user_registration_utility.h" |
20 #include "chrome/browser/managed_mode/managed_user_settings_service.h" | 20 #include "chrome/browser/managed_mode/managed_user_settings_service.h" |
21 #include "chrome/browser/managed_mode/managed_user_settings_service_factory.h" | 21 #include "chrome/browser/managed_mode/managed_user_settings_service_factory.h" |
22 #include "chrome/browser/managed_mode/managed_user_shared_settings_service.h" | |
23 #include "chrome/browser/managed_mode/managed_user_shared_settings_service_facto
ry.h" | 22 #include "chrome/browser/managed_mode/managed_user_shared_settings_service_facto
ry.h" |
24 #include "chrome/browser/managed_mode/managed_user_sync_service.h" | 23 #include "chrome/browser/managed_mode/managed_user_sync_service.h" |
25 #include "chrome/browser/managed_mode/managed_user_sync_service_factory.h" | 24 #include "chrome/browser/managed_mode/managed_user_sync_service_factory.h" |
| 25 #include "chrome/browser/managed_mode/permission_request_creator.h" |
26 #include "chrome/browser/managed_mode/supervised_user_pref_mapping_service.h" | 26 #include "chrome/browser/managed_mode/supervised_user_pref_mapping_service.h" |
27 #include "chrome/browser/managed_mode/supervised_user_pref_mapping_service_facto
ry.h" | 27 #include "chrome/browser/managed_mode/supervised_user_pref_mapping_service_facto
ry.h" |
28 #include "chrome/browser/profiles/profile.h" | 28 #include "chrome/browser/profiles/profile.h" |
29 #include "chrome/browser/profiles/profile_info_cache.h" | 29 #include "chrome/browser/profiles/profile_info_cache.h" |
30 #include "chrome/browser/profiles/profile_manager.h" | 30 #include "chrome/browser/profiles/profile_manager.h" |
31 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 31 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
32 #include "chrome/browser/signin/signin_manager_factory.h" | 32 #include "chrome/browser/signin/signin_manager_factory.h" |
33 #include "chrome/browser/sync/profile_sync_service.h" | 33 #include "chrome/browser/sync/profile_sync_service.h" |
34 #include "chrome/browser/sync/profile_sync_service_factory.h" | 34 #include "chrome/browser/sync/profile_sync_service_factory.h" |
35 #include "chrome/browser/ui/browser.h" | 35 #include "chrome/browser/ui/browser.h" |
(...skipping 18 matching lines...) Expand all Loading... |
54 | 54 |
55 #if defined(OS_CHROMEOS) | 55 #if defined(OS_CHROMEOS) |
56 #include "chrome/browser/chromeos/login/users/supervised_user_manager.h" | 56 #include "chrome/browser/chromeos/login/users/supervised_user_manager.h" |
57 #include "chrome/browser/chromeos/login/users/user_manager.h" | 57 #include "chrome/browser/chromeos/login/users/user_manager.h" |
58 #endif | 58 #endif |
59 | 59 |
60 using base::DictionaryValue; | 60 using base::DictionaryValue; |
61 using base::UserMetricsAction; | 61 using base::UserMetricsAction; |
62 using content::BrowserThread; | 62 using content::BrowserThread; |
63 | 63 |
64 const char kManagedUserAccessRequestKeyPrefix[] = | |
65 "X-ManagedUser-AccessRequests"; | |
66 const char kManagedUserAccessRequestTime[] = "timestamp"; | |
67 const char kManagedUserName[] = "name"; | |
68 | |
69 // Key for the notification setting of the custodian. This is a shared setting | |
70 // so we can include the setting in the access request data that is used to | |
71 // trigger notifications. | |
72 const char kNotificationSetting[] = "custodian-notification-setting"; | |
73 | |
74 ManagedUserService::URLFilterContext::URLFilterContext() | 64 ManagedUserService::URLFilterContext::URLFilterContext() |
75 : ui_url_filter_(new ManagedModeURLFilter), | 65 : ui_url_filter_(new ManagedModeURLFilter), |
76 io_url_filter_(new ManagedModeURLFilter) {} | 66 io_url_filter_(new ManagedModeURLFilter) {} |
77 ManagedUserService::URLFilterContext::~URLFilterContext() {} | 67 ManagedUserService::URLFilterContext::~URLFilterContext() {} |
78 | 68 |
79 ManagedModeURLFilter* | 69 ManagedModeURLFilter* |
80 ManagedUserService::URLFilterContext::ui_url_filter() const { | 70 ManagedUserService::URLFilterContext::ui_url_filter() const { |
81 return ui_url_filter_.get(); | 71 return ui_url_filter_.get(); |
82 } | 72 } |
83 | 73 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 base::Bind(&ManagedModeURLFilter::SetManualURLs, | 123 base::Bind(&ManagedModeURLFilter::SetManualURLs, |
134 io_url_filter_, base::Owned(url_map.release()))); | 124 io_url_filter_, base::Owned(url_map.release()))); |
135 } | 125 } |
136 | 126 |
137 ManagedUserService::ManagedUserService(Profile* profile) | 127 ManagedUserService::ManagedUserService(Profile* profile) |
138 : profile_(profile), | 128 : profile_(profile), |
139 waiting_for_sync_initialization_(false), | 129 waiting_for_sync_initialization_(false), |
140 is_profile_active_(false), | 130 is_profile_active_(false), |
141 elevated_for_testing_(false), | 131 elevated_for_testing_(false), |
142 did_shutdown_(false), | 132 did_shutdown_(false), |
| 133 waiting_for_permissions_(false), |
143 weak_ptr_factory_(this) { | 134 weak_ptr_factory_(this) { |
144 } | 135 } |
145 | 136 |
146 ManagedUserService::~ManagedUserService() { | 137 ManagedUserService::~ManagedUserService() { |
147 DCHECK(did_shutdown_); | 138 DCHECK(did_shutdown_); |
148 } | 139 } |
149 | 140 |
150 void ManagedUserService::Shutdown() { | 141 void ManagedUserService::Shutdown() { |
151 did_shutdown_ = true; | 142 did_shutdown_ = true; |
152 if (ProfileIsManaged()) { | 143 if (ProfileIsManaged()) { |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 ManagedModeURLFilter::FilteringBehavior behavior = | 428 ManagedModeURLFilter::FilteringBehavior behavior = |
438 ManagedModeURLFilter::BehaviorFromInt(behavior_value); | 429 ManagedModeURLFilter::BehaviorFromInt(behavior_value); |
439 url_filter_context_.SetDefaultFilteringBehavior(behavior); | 430 url_filter_context_.SetDefaultFilteringBehavior(behavior); |
440 } | 431 } |
441 | 432 |
442 void ManagedUserService::UpdateSiteLists() { | 433 void ManagedUserService::UpdateSiteLists() { |
443 url_filter_context_.LoadWhitelists(GetActiveSiteLists()); | 434 url_filter_context_.LoadWhitelists(GetActiveSiteLists()); |
444 } | 435 } |
445 | 436 |
446 bool ManagedUserService::AccessRequestsEnabled() { | 437 bool ManagedUserService::AccessRequestsEnabled() { |
| 438 if (waiting_for_permissions_) |
| 439 return false; |
| 440 |
447 ProfileSyncService* service = | 441 ProfileSyncService* service = |
448 ProfileSyncServiceFactory::GetForProfile(profile_); | 442 ProfileSyncServiceFactory::GetForProfile(profile_); |
449 GoogleServiceAuthError::State state = service->GetAuthError().state(); | 443 GoogleServiceAuthError::State state = service->GetAuthError().state(); |
450 // We allow requesting access if Sync is working or has a transient error. | 444 // We allow requesting access if Sync is working or has a transient error. |
451 return (state == GoogleServiceAuthError::NONE || | 445 return (state == GoogleServiceAuthError::NONE || |
452 state == GoogleServiceAuthError::CONNECTION_FAILED || | 446 state == GoogleServiceAuthError::CONNECTION_FAILED || |
453 state == GoogleServiceAuthError::SERVICE_UNAVAILABLE); | 447 state == GoogleServiceAuthError::SERVICE_UNAVAILABLE); |
454 } | 448 } |
455 | 449 |
| 450 void ManagedUserService::OnPermissionRequestIssued( |
| 451 const GoogleServiceAuthError& error) { |
| 452 waiting_for_permissions_ = false; |
| 453 // TODO(akuegel): Figure out how to show the result of issuing the permission |
| 454 // request in the UI. Currently, we assume the permission request was created |
| 455 // successfully. |
| 456 } |
| 457 |
456 void ManagedUserService::AddAccessRequest(const GURL& url) { | 458 void ManagedUserService::AddAccessRequest(const GURL& url) { |
457 // Normalize the URL. | 459 // Normalize the URL. |
458 GURL normalized_url = ManagedModeURLFilter::Normalize(url); | 460 GURL normalized_url = ManagedModeURLFilter::Normalize(url); |
459 | 461 |
460 // Escape the URL. | 462 // Escape the URL. |
461 std::string output(net::EscapeQueryParamValue(normalized_url.spec(), true)); | 463 std::string output(net::EscapeQueryParamValue(normalized_url.spec(), true)); |
462 | 464 |
463 // Add the prefix. | 465 waiting_for_permissions_ = true; |
464 std::string key = ManagedUserSettingsService::MakeSplitSettingKey( | 466 permissions_creator_->CreatePermissionRequest( |
465 kManagedUserAccessRequestKeyPrefix, output); | 467 output, |
466 | 468 base::Bind(&ManagedUserService::OnPermissionRequestIssued, |
467 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue); | 469 weak_ptr_factory_.GetWeakPtr())); |
468 | |
469 // TODO(sergiu): Use sane time here when it's ready. | |
470 dict->SetDouble(kManagedUserAccessRequestTime, base::Time::Now().ToJsTime()); | |
471 | |
472 dict->SetString(kManagedUserName, | |
473 profile_->GetPrefs()->GetString(prefs::kProfileName)); | |
474 | |
475 // Copy the notification setting of the custodian. | |
476 std::string managed_user_id = | |
477 profile_->GetPrefs()->GetString(prefs::kManagedUserId); | |
478 const base::Value* value = | |
479 ManagedUserSharedSettingsServiceFactory::GetForBrowserContext(profile_) | |
480 ->GetValue(managed_user_id, kNotificationSetting); | |
481 bool notifications_enabled = false; | |
482 if (CommandLine::ForCurrentProcess()->HasSwitch( | |
483 switches::kEnableAccessRequestNotifications)) { | |
484 notifications_enabled = true; | |
485 } else if (value) { | |
486 bool success = value->GetAsBoolean(¬ifications_enabled); | |
487 DCHECK(success); | |
488 } | |
489 dict->SetBoolean(kNotificationSetting, notifications_enabled); | |
490 | |
491 GetSettingsService()->UploadItem(key, dict.PassAs<base::Value>()); | |
492 } | 470 } |
493 | 471 |
494 ManagedUserService::ManualBehavior ManagedUserService::GetManualBehaviorForHost( | 472 ManagedUserService::ManualBehavior ManagedUserService::GetManualBehaviorForHost( |
495 const std::string& hostname) { | 473 const std::string& hostname) { |
496 const base::DictionaryValue* dict = | 474 const base::DictionaryValue* dict = |
497 profile_->GetPrefs()->GetDictionary(prefs::kManagedModeManualHosts); | 475 profile_->GetPrefs()->GetDictionary(prefs::kManagedModeManualHosts); |
498 bool allow = false; | 476 bool allow = false; |
499 if (!dict->GetBooleanWithoutPathExpansion(hostname, &allow)) | 477 if (!dict->GetBooleanWithoutPathExpansion(hostname, &allow)) |
500 return MANUAL_NONE; | 478 return MANUAL_NONE; |
501 | 479 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 | 539 |
562 CommandLine* command_line = CommandLine::ForCurrentProcess(); | 540 CommandLine* command_line = CommandLine::ForCurrentProcess(); |
563 if (command_line->HasSwitch(switches::kManagedUserSyncToken)) { | 541 if (command_line->HasSwitch(switches::kManagedUserSyncToken)) { |
564 InitSync( | 542 InitSync( |
565 command_line->GetSwitchValueASCII(switches::kManagedUserSyncToken)); | 543 command_line->GetSwitchValueASCII(switches::kManagedUserSyncToken)); |
566 } | 544 } |
567 | 545 |
568 ProfileOAuth2TokenService* token_service = | 546 ProfileOAuth2TokenService* token_service = |
569 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); | 547 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); |
570 token_service->LoadCredentials(managed_users::kManagedUserPseudoEmail); | 548 token_service->LoadCredentials(managed_users::kManagedUserPseudoEmail); |
| 549 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| 550 switches::kPermissionRequestApiUrl)) { |
| 551 permissions_creator_ = |
| 552 PermissionRequestCreator::CreateWithProfile(profile_); |
| 553 } else { |
| 554 PrefService* pref_service = profile_->GetPrefs(); |
| 555 permissions_creator_ = PermissionRequestCreator::CreateWithSettingsService( |
| 556 settings_service, |
| 557 ManagedUserSharedSettingsServiceFactory::GetForBrowserContext(profile_), |
| 558 pref_service->GetString(prefs::kProfileName), |
| 559 pref_service->GetString(prefs::kManagedUserId)); |
| 560 } |
571 | 561 |
572 extensions::ExtensionSystem* extension_system = | 562 extensions::ExtensionSystem* extension_system = |
573 extensions::ExtensionSystem::Get(profile_); | 563 extensions::ExtensionSystem::Get(profile_); |
574 extensions::ManagementPolicy* management_policy = | 564 extensions::ManagementPolicy* management_policy = |
575 extension_system->management_policy(); | 565 extension_system->management_policy(); |
576 if (management_policy) | 566 if (management_policy) |
577 extension_system->management_policy()->RegisterProvider(this); | 567 extension_system->management_policy()->RegisterProvider(this); |
578 | 568 |
579 registrar_.Add(this, | 569 registrar_.Add(this, |
580 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, | 570 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
696 | 686 |
697 void ManagedUserService::OnBrowserSetLastActive(Browser* browser) { | 687 void ManagedUserService::OnBrowserSetLastActive(Browser* browser) { |
698 bool profile_became_active = profile_->IsSameProfile(browser->profile()); | 688 bool profile_became_active = profile_->IsSameProfile(browser->profile()); |
699 if (!is_profile_active_ && profile_became_active) | 689 if (!is_profile_active_ && profile_became_active) |
700 content::RecordAction(UserMetricsAction("ManagedUsers_OpenProfile")); | 690 content::RecordAction(UserMetricsAction("ManagedUsers_OpenProfile")); |
701 else if (is_profile_active_ && !profile_became_active) | 691 else if (is_profile_active_ && !profile_became_active) |
702 content::RecordAction(UserMetricsAction("ManagedUsers_SwitchProfile")); | 692 content::RecordAction(UserMetricsAction("ManagedUsers_SwitchProfile")); |
703 | 693 |
704 is_profile_active_ = profile_became_active; | 694 is_profile_active_ = profile_became_active; |
705 } | 695 } |
OLD | NEW |