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

Unified Diff: chrome/browser/profiles/profile_impl.cc

Issue 10693022: Add support for loading user cloud policy on desktop. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Tweaked some comments after self-review. Created 8 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/profiles/profile_impl.cc
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
index 0e03dbe5355b85a731a3e41ba2516da121ff3f61..babe81a8c7cdef6e8fbeb31c4040ea8e50aab2f2 100644
--- a/chrome/browser/profiles/profile_impl.cc
+++ b/chrome/browser/profiles/profile_impl.cc
@@ -56,6 +56,7 @@
#include "chrome/browser/net/url_fixer_upper.h"
#include "chrome/browser/plugin_prefs.h"
#include "chrome/browser/policy/policy_service.h"
+#include "chrome/browser/policy/user_cloud_policy_manager.h"
#include "chrome/browser/prefs/browser_prefs.h"
#include "chrome/browser/prefs/scoped_user_pref_update.h"
#include "chrome/browser/prerender/prerender_manager_factory.h"
@@ -285,10 +286,33 @@ ProfileImpl::ProfileImpl(const FilePath& path,
session_restore_enabled_ =
!command_line->HasSwitch(switches::kDisableRestoreSessionState);
#if defined(ENABLE_CONFIGURATION_POLICY)
- policy_service_.reset(
- g_browser_process->browser_policy_connector()->CreatePolicyService(this));
+ if (command_line->HasSwitch(switches::kEnableCloudPolicyService)) {
+ bool wait_for_policy_fetch = false;
+#if defined(OS_CHROMEOS)
+ // TODO(mnissler): Revisit once Chrome OS gains multi-profiles support.
+ // Don't wait for a policy fetch if there's no logged in user.
+ if (chromeos::UserManager::Get()->IsUserLoggedIn()) {
+ wait_for_policy_fetch =
+ g_browser_process->browser_policy_connector()->GetUserAffiliation(
+ chromeos::UserManager::Get()->GetLoggedInUser().email()) ==
+ policy::USER_AFFILIATION_MANAGED;
Mattias Nissler (ping if slow) 2012/08/03 12:19:08 Ah, I still feel bad for this hack. It would be ni
Andrew T Wilson (Slow) 2012/08/04 00:54:41 Well, ultimately PolicyService and UserCloudPolicy
+ }
#else
- policy_service_.reset(new policy::PolicyServiceStub());
+ // On desktop, there's no way to figure out if a user is logged in yet
+ // because prefs are not yet initialized. So we do not block waiting for
+ // the policy fetch to happen (because that would inhibit startup for
+ // non-signed-in users) and instead rely on the fact that a signed-in
+ // profile will already have policy downloaded. If no policy is available
+ // (due to a previous fetch failing), the normal policy refresh mechanism
+ // will cause it to get downloaded eventually.
Mattias Nissler (ping if slow) 2012/08/03 12:19:08 Not sure this is going to fly long term. If we for
Andrew T Wilson (Slow) 2012/08/04 00:54:41 Yeah, what we do here is very dependent on what ki
Mattias Nissler (ping if slow) 2012/08/06 08:33:52 Reapplying policy when it changes is generally our
+#endif
+ cloud_policy_manager_ = policy::UserCloudPolicyManager::Create(
+ this, wait_for_policy_fetch);
+ }
+ policy_service_ =
+ g_browser_process->browser_policy_connector()->CreatePolicyService(this);
+#else
+ policy_service_.reset(new policy::PolicyServiceStub());
#endif
if (create_mode == CREATE_MODE_ASYNCHRONOUS) {
prefs_.reset(PrefService::CreatePrefService(
@@ -643,6 +667,10 @@ bool ProfileImpl::WasCreatedByVersionOrLater(const std::string& version) {
return (profile_version.CompareTo(arg_version) >= 0);
}
+policy::UserCloudPolicyManager* ProfileImpl::GetUserCloudPolicyManager() {
+ return cloud_policy_manager_.get();
+}
+
policy::PolicyService* ProfileImpl::GetPolicyService() {
DCHECK(policy_service_.get()); // Should explicitly be initialized.
return policy_service_.get();

Powered by Google App Engine
This is Rietveld 408576698