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

Unified Diff: chrome/browser/policy/device_management_policy_provider.h

Issue 5219006: Refresh policies from DM server periodically (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments Created 10 years, 1 month 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/policy/device_management_policy_provider.h
diff --git a/chrome/browser/policy/device_management_policy_provider.h b/chrome/browser/policy/device_management_policy_provider.h
index d91e22bbd8fcf98d130dfc01dbd88b15db42fa7e..89ef850caa4c77a518db2cc600dcf049a8387440 100644
--- a/chrome/browser/policy/device_management_policy_provider.h
+++ b/chrome/browser/policy/device_management_policy_provider.h
@@ -10,13 +10,11 @@
#include "base/file_path.h"
#include "base/scoped_ptr.h"
+#include "base/time.h"
#include "base/weak_ptr.h"
#include "chrome/browser/policy/configuration_policy_provider.h"
#include "chrome/browser/policy/device_management_backend.h"
-#include "chrome/common/notification_details.h"
-#include "chrome/common/notification_observer.h"
-#include "chrome/common/notification_registrar.h"
-#include "chrome/common/notification_source.h"
+#include "chrome/browser/policy/device_token_fetcher.h"
class TokenService;
@@ -24,16 +22,15 @@ namespace policy {
class DeviceManagementBackend;
class DeviceManagementPolicyCache;
-class DeviceTokenFetcher;
// Provides policy fetched from the device management server. With the exception
// of the Provide method, which can be called on the FILE thread, all public
// methods must be called on the UI thread.
class DeviceManagementPolicyProvider
: public ConfigurationPolicyProvider,
- public NotificationObserver,
public DeviceManagementBackend::DevicePolicyResponseDelegate,
- public base::SupportsWeakPtr<DeviceManagementPolicyProvider> {
+ public base::SupportsWeakPtr<DeviceManagementPolicyProvider>,
+ public DeviceTokenFetcher::Observer {
public:
DeviceManagementPolicyProvider(const PolicyDefinitionList* policy_list,
DeviceManagementBackend* backend,
@@ -45,16 +42,16 @@ class DeviceManagementPolicyProvider
// ConfigurationPolicyProvider implementation:
virtual bool Provide(ConfigurationPolicyStoreInterface* store);
- // NotificationObserver implementation:
- virtual void Observe(NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details);
-
// DevicePolicyResponseDelegate implementation:
virtual void HandlePolicyResponse(
const em::DevicePolicyResponse& response);
virtual void OnError(DeviceManagementBackend::ErrorCode code);
+ // DeviceTokenFetcher::Observer implementation:
+ void OnTokenSuccess();
+ void OnTokenError();
+ void OnNotManaged();
+
// True if a policy request has been sent to the device management backend
// server and no response or error has yet been received.
bool IsPolicyRequestPending() const { return policy_request_pending_; }
@@ -65,6 +62,9 @@ class DeviceManagementPolicyProvider
private:
class InitializeAfterIOThreadExistsTask;
+ class RefreshTask;
+
+ friend class DeviceManagementPolicyProviderTest;
// Called by constructors to perform shared initialization. Initialization
// requiring the IOThread must not be performed directly in this method,
@@ -80,9 +80,15 @@ class DeviceManagementPolicyProvider
// already outstanding.
void SendPolicyRequest();
- // True if policy must be re-fetched because the cached policy is too old or
- // its time stamp is invalid.
- bool IsPolicyStale() const;
+ // Triggers policy refresh, re-requesting device token and policy information
+ // as necessary.
+ void RefreshTaskExecute();
+
+ // Schedules a new RefreshTask.
+ void ScheduleRefreshTask(int64 delay_in_milliseconds);
+
+ // Calculates when the next RefreshTask shall be executed.
+ int64 GetRefreshTaskDelay();
// Provides the URL at which requests are sent to from the device management
// backend.
@@ -93,13 +99,32 @@ class DeviceManagementPolicyProvider
static FilePath GetOrCreateDeviceManagementDir(
const FilePath& user_data_dir);
+ // Give unit tests the ability to override timeout settings.
+ void set_policy_refresh_rate_ms(int64 policy_refresh_rate_ms) {
+ policy_refresh_rate_ms_ = policy_refresh_rate_ms;
+ }
+ void set_policy_refresh_max_earlier_ms(int64 policy_refresh_max_earlier_ms) {
+ policy_refresh_max_earlier_ms_ = policy_refresh_max_earlier_ms;
+ }
+ void set_policy_refresh_error_delay_ms(int64 policy_refresh_error_delay_ms) {
+ policy_refresh_error_delay_ms_ = policy_refresh_error_delay_ms;
+ }
+ void set_token_fetch_error_delay_ms(int64 token_fetch_error_delay_ms) {
+ token_fetch_error_delay_ms_ = token_fetch_error_delay_ms;
+ }
+
scoped_ptr<DeviceManagementBackend> backend_;
- TokenService* token_service_; // weak
+ TokenService* token_service_; // weak
scoped_ptr<DeviceManagementPolicyCache> cache_;
scoped_refptr<DeviceTokenFetcher> token_fetcher_;
- NotificationRegistrar registrar_;
+ DeviceTokenFetcher::ObserverRegistrar registrar_;
FilePath storage_dir_;
bool policy_request_pending_;
+ bool refresh_task_pending_;
+ int64 policy_refresh_rate_ms_;
+ int64 policy_refresh_max_earlier_ms_;
+ int64 policy_refresh_error_delay_ms_;
+ int64 token_fetch_error_delay_ms_;
DISALLOW_COPY_AND_ASSIGN(DeviceManagementPolicyProvider);
};

Powered by Google App Engine
This is Rietveld 408576698