| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/device_management_policy_provider.h" | 5 #include "chrome/browser/policy/device_management_policy_provider.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
| 9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
| 10 #include "base/rand_util.h" | 10 #include "base/rand_util.h" |
| 11 #include "base/task.h" | 11 #include "base/task.h" |
| 12 #include "chrome/browser/browser_thread.h" | 12 #include "chrome/browser/browser_thread.h" |
| 13 #include "chrome/browser/profile.h" |
| 13 #include "chrome/browser/policy/device_management_backend.h" | 14 #include "chrome/browser/policy/device_management_backend.h" |
| 14 #include "chrome/browser/policy/device_management_policy_cache.h" | 15 #include "chrome/browser/policy/device_management_policy_cache.h" |
| 15 #include "chrome/browser/policy/proto/device_management_constants.h" | 16 #include "chrome/browser/policy/proto/device_management_constants.h" |
| 16 #include "chrome/common/chrome_paths.h" | 17 #include "chrome/common/chrome_paths.h" |
| 17 #include "chrome/common/chrome_switches.h" | 18 #include "chrome/common/chrome_switches.h" |
| 18 #include "chrome/common/notification_service.h" | 19 #include "chrome/common/notification_service.h" |
| 19 #include "chrome/common/notification_type.h" | 20 #include "chrome/common/notification_type.h" |
| 20 | 21 |
| 21 namespace policy { | 22 namespace policy { |
| 22 | 23 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 provider->RefreshTaskExecute(); | 64 provider->RefreshTaskExecute(); |
| 64 } | 65 } |
| 65 | 66 |
| 66 private: | 67 private: |
| 67 base::WeakPtr<DeviceManagementPolicyProvider> provider_; | 68 base::WeakPtr<DeviceManagementPolicyProvider> provider_; |
| 68 }; | 69 }; |
| 69 | 70 |
| 70 DeviceManagementPolicyProvider::DeviceManagementPolicyProvider( | 71 DeviceManagementPolicyProvider::DeviceManagementPolicyProvider( |
| 71 const ConfigurationPolicyProvider::PolicyDefinitionList* policy_list, | 72 const ConfigurationPolicyProvider::PolicyDefinitionList* policy_list, |
| 72 DeviceManagementBackend* backend, | 73 DeviceManagementBackend* backend, |
| 73 TokenService* token_service, | 74 Profile* profile) |
| 74 const FilePath& storage_dir) | |
| 75 : ConfigurationPolicyProvider(policy_list), | 75 : ConfigurationPolicyProvider(policy_list), |
| 76 backend_(backend), | 76 backend_(backend), |
| 77 token_service_(token_service), | 77 profile_(profile), |
| 78 storage_dir_(GetOrCreateDeviceManagementDir(storage_dir)), | 78 storage_dir_(GetOrCreateDeviceManagementDir(profile_->GetPath())), |
| 79 policy_request_pending_(false), | 79 policy_request_pending_(false), |
| 80 refresh_task_pending_(false), | 80 refresh_task_pending_(false), |
| 81 policy_refresh_rate_ms_(kPolicyRefreshRateInMilliseconds), | 81 policy_refresh_rate_ms_(kPolicyRefreshRateInMilliseconds), |
| 82 policy_refresh_max_earlier_ms_(kPolicyRefreshMaxEarlierInMilliseconds), | 82 policy_refresh_max_earlier_ms_(kPolicyRefreshMaxEarlierInMilliseconds), |
| 83 policy_refresh_error_delay_ms_(kPolicyRefreshErrorDelayInMilliseconds), | 83 policy_refresh_error_delay_ms_(kPolicyRefreshErrorDelayInMilliseconds), |
| 84 token_fetch_error_delay_ms_(kDeviceTokenRefreshErrorDelayInMilliseconds) { | 84 token_fetch_error_delay_ms_(kDeviceTokenRefreshErrorDelayInMilliseconds) { |
| 85 Initialize(); | 85 Initialize(); |
| 86 } | 86 } |
| 87 | 87 |
| 88 DeviceManagementPolicyProvider::~DeviceManagementPolicyProvider() {} | 88 DeviceManagementPolicyProvider::~DeviceManagementPolicyProvider() {} |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 token_fetch_error_delay_ms_ *= 2; | 130 token_fetch_error_delay_ms_ *= 2; |
| 131 if (token_fetch_error_delay_ms_ > policy_refresh_rate_ms_) | 131 if (token_fetch_error_delay_ms_ > policy_refresh_rate_ms_) |
| 132 token_fetch_error_delay_ms_ = policy_refresh_rate_ms_; | 132 token_fetch_error_delay_ms_ = policy_refresh_rate_ms_; |
| 133 } | 133 } |
| 134 | 134 |
| 135 void DeviceManagementPolicyProvider::OnNotManaged() { | 135 void DeviceManagementPolicyProvider::OnNotManaged() { |
| 136 VLOG(1) << "This device is not managed."; | 136 VLOG(1) << "This device is not managed."; |
| 137 } | 137 } |
| 138 | 138 |
| 139 void DeviceManagementPolicyProvider::Shutdown() { | 139 void DeviceManagementPolicyProvider::Shutdown() { |
| 140 token_service_ = NULL; | 140 profile_ = NULL; |
| 141 if (token_fetcher_) | 141 if (token_fetcher_) |
| 142 token_fetcher_->Shutdown(); | 142 token_fetcher_->Shutdown(); |
| 143 } | 143 } |
| 144 | 144 |
| 145 void DeviceManagementPolicyProvider::Initialize() { | 145 void DeviceManagementPolicyProvider::Initialize() { |
| 146 const FilePath policy_path = storage_dir_.Append( | 146 const FilePath policy_path = storage_dir_.Append( |
| 147 FILE_PATH_LITERAL("Policy")); | 147 FILE_PATH_LITERAL("Policy")); |
| 148 cache_.reset(new DeviceManagementPolicyCache(policy_path)); | 148 cache_.reset(new DeviceManagementPolicyCache(policy_path)); |
| 149 cache_->LoadPolicyFromFile(); | 149 cache_->LoadPolicyFromFile(); |
| 150 | 150 |
| 151 // Defer initialization that requires the IOThread until after the IOThread | 151 // Defer initialization that requires the IOThread until after the IOThread |
| 152 // has been initialized. | 152 // has been initialized. |
| 153 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 153 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 154 new InitializeAfterIOThreadExistsTask(AsWeakPtr())); | 154 new InitializeAfterIOThreadExistsTask(AsWeakPtr())); |
| 155 } | 155 } |
| 156 | 156 |
| 157 void DeviceManagementPolicyProvider::InitializeAfterIOThreadExists() { | 157 void DeviceManagementPolicyProvider::InitializeAfterIOThreadExists() { |
| 158 const FilePath token_path = storage_dir_.Append( | 158 if (profile_) { |
| 159 FILE_PATH_LITERAL("Token")); | 159 if (!token_fetcher_) { |
| 160 if (token_service_) { | 160 token_fetcher_ = new DeviceTokenFetcher( |
| 161 token_fetcher_ = | 161 backend_.get(), profile_, GetTokenPath()); |
| 162 new DeviceTokenFetcher(backend_.get(), token_service_, token_path); | 162 } |
| 163 registrar_.Init(token_fetcher_); | 163 registrar_.Init(token_fetcher_); |
| 164 registrar_.AddObserver(this); | 164 registrar_.AddObserver(this); |
| 165 token_fetcher_->StartFetching(); | 165 token_fetcher_->StartFetching(); |
| 166 } | 166 } |
| 167 } | 167 } |
| 168 | 168 |
| 169 void DeviceManagementPolicyProvider::SendPolicyRequest() { | 169 void DeviceManagementPolicyProvider::SendPolicyRequest() { |
| 170 if (!policy_request_pending_) { | 170 if (!policy_request_pending_) { |
| 171 policy_request_pending_ = true; | 171 policy_request_pending_ = true; |
| 172 em::DevicePolicyRequest policy_request; | 172 em::DevicePolicyRequest policy_request; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 delay_in_milliseconds); | 210 delay_in_milliseconds); |
| 211 } | 211 } |
| 212 | 212 |
| 213 int64 DeviceManagementPolicyProvider::GetRefreshTaskDelay() { | 213 int64 DeviceManagementPolicyProvider::GetRefreshTaskDelay() { |
| 214 int64 delay = policy_refresh_rate_ms_; | 214 int64 delay = policy_refresh_rate_ms_; |
| 215 if (policy_refresh_max_earlier_ms_) | 215 if (policy_refresh_max_earlier_ms_) |
| 216 delay -= base::RandGenerator(policy_refresh_max_earlier_ms_); | 216 delay -= base::RandGenerator(policy_refresh_max_earlier_ms_); |
| 217 return delay; | 217 return delay; |
| 218 } | 218 } |
| 219 | 219 |
| 220 FilePath DeviceManagementPolicyProvider::GetTokenPath() { |
| 221 return storage_dir_.Append(FILE_PATH_LITERAL("Token")); |
| 222 } |
| 223 |
| 224 void DeviceManagementPolicyProvider::SetDeviceTokenFetcher( |
| 225 DeviceTokenFetcher* token_fetcher) { |
| 226 DCHECK(!token_fetcher_); |
| 227 token_fetcher_ = token_fetcher; |
| 228 } |
| 229 |
| 220 // static | 230 // static |
| 221 std::string DeviceManagementPolicyProvider::GetDeviceManagementURL() { | 231 std::string DeviceManagementPolicyProvider::GetDeviceManagementURL() { |
| 222 return CommandLine::ForCurrentProcess()->GetSwitchValueASCII( | 232 return CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
| 223 switches::kDeviceManagementUrl); | 233 switches::kDeviceManagementUrl); |
| 224 } | 234 } |
| 225 | 235 |
| 226 // static | 236 // static |
| 227 FilePath DeviceManagementPolicyProvider::GetOrCreateDeviceManagementDir( | 237 FilePath DeviceManagementPolicyProvider::GetOrCreateDeviceManagementDir( |
| 228 const FilePath& user_data_dir) { | 238 const FilePath& user_data_dir) { |
| 229 const FilePath device_management_dir = user_data_dir.Append( | 239 const FilePath device_management_dir = user_data_dir.Append( |
| 230 FILE_PATH_LITERAL("Device Management")); | 240 FILE_PATH_LITERAL("Device Management")); |
| 231 if (!file_util::DirectoryExists(device_management_dir)) { | 241 if (!file_util::DirectoryExists(device_management_dir)) { |
| 232 if (!file_util::CreateDirectory(device_management_dir)) | 242 if (!file_util::CreateDirectory(device_management_dir)) |
| 233 NOTREACHED(); | 243 NOTREACHED(); |
| 234 } | 244 } |
| 235 return device_management_dir; | 245 return device_management_dir; |
| 236 } | 246 } |
| 237 | 247 |
| 238 } // namespace policy | 248 } // namespace policy |
| OLD | NEW |