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...) 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...) 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...) 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 |