Index: chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc |
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc |
index 6ad2e07a9c9d7453fce94b9b588b7e78fcfd39eb..1c8c03de3479a9ee79c2bd21079a789eef4b4705 100644 |
--- a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc |
+++ b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc |
@@ -51,13 +51,22 @@ const char kUMAInitialFetchOAuth2NetworkError[] = |
UserCloudPolicyManagerChromeOS::UserCloudPolicyManagerChromeOS( |
scoped_ptr<CloudPolicyStore> store, |
scoped_ptr<ResourceCache> resource_cache, |
- bool wait_for_policy_fetch) |
+ bool wait_for_policy_fetch, |
+ base::TimeDelta initial_policy_fetch_timeout) |
: CloudPolicyManager( |
PolicyNamespaceKey(dm_protocol::kChromeUserPolicyType, std::string()), |
store.get()), |
store_(store.Pass()), |
- wait_for_policy_fetch_(wait_for_policy_fetch) { |
+ wait_for_policy_fetch_(wait_for_policy_fetch), |
+ policy_fetch_timeout_(false, false) { |
time_init_started_ = base::Time::Now(); |
+ if (wait_for_policy_fetch_) { |
+ policy_fetch_timeout_.Start( |
+ FROM_HERE, |
+ initial_policy_fetch_timeout, |
+ base::Bind(&UserCloudPolicyManagerChromeOS::CancelWaitForPolicyFetch, |
+ base::Unretained(this))); |
+ } |
if (resource_cache) { |
// TODO(joaodasilva): Move the backend from the FILE thread to the blocking |
// pool. |
@@ -306,6 +315,9 @@ void UserCloudPolicyManagerChromeOS::OnInitialPolicyFetchComplete( |
} |
void UserCloudPolicyManagerChromeOS::CancelWaitForPolicyFetch() { |
+ if (!wait_for_policy_fetch_) |
+ return; |
+ |
wait_for_policy_fetch_ = false; |
CheckAndPublishPolicy(); |
// Now that |wait_for_policy_fetch_| is guaranteed to be false, the scheduler |