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

Unified Diff: chrome/browser/policy/cloud/cloud_policy_refresh_scheduler.cc

Issue 19733003: Implement cloud policy invalidations using the invalidation service framework. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 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/policy/cloud/cloud_policy_refresh_scheduler.cc
diff --git a/chrome/browser/policy/cloud/cloud_policy_refresh_scheduler.cc b/chrome/browser/policy/cloud/cloud_policy_refresh_scheduler.cc
index 0631673f5b6d94f45c17a2a535cd87ee094a2c94..224d660dccc13225012c899ae77d594597cfb279 100644
--- a/chrome/browser/policy/cloud/cloud_policy_refresh_scheduler.cc
+++ b/chrome/browser/policy/cloud/cloud_policy_refresh_scheduler.cc
@@ -35,11 +35,13 @@ const int64 CloudPolicyRefreshScheduler::kRefreshDelayMinMs =
30 * 60 * 1000; // 30 minutes.
const int64 CloudPolicyRefreshScheduler::kRefreshDelayMaxMs =
24 * 60 * 60 * 1000; // 1 day.
+const int64 CloudPolicyRefreshScheduler::kFirstRefreshDelayMs = 4000;
CloudPolicyRefreshScheduler::CloudPolicyRefreshScheduler(
CloudPolicyClient* client,
CloudPolicyStore* store,
- const scoped_refptr<base::SequencedTaskRunner>& task_runner)
+ const scoped_refptr<base::SequencedTaskRunner>& task_runner,
+ bool invalidations_enabled)
: client_(client),
store_(store),
task_runner_(task_runner),
@@ -50,11 +52,16 @@ CloudPolicyRefreshScheduler::CloudPolicyRefreshScheduler(
base::Bind(&CloudPolicyRefreshScheduler::RefreshNow,
base::Unretained(this)),
task_runner_,
- scoped_ptr<base::TickClock>(new base::DefaultTickClock())) {
+ scoped_ptr<base::TickClock>(new base::DefaultTickClock())),
+ first_refresh_(base::Time::NowFromSystemTime() +
+ base::TimeDelta::FromMilliseconds(kFirstRefreshDelayMs)) {
client_->AddObserver(this);
store_->AddObserver(this);
net::NetworkChangeNotifier::AddIPAddressObserver(this);
+ // Disable first refresh delay if invalidations are not enabled.
+ if (!invalidations_enabled)
+ first_refresh_ = base::Time();
UpdateLastRefreshFromPolicy();
ScheduleRefresh();
}
@@ -75,6 +82,13 @@ void CloudPolicyRefreshScheduler::RefreshSoon() {
rate_limiter_.PostRequest();
}
+void CloudPolicyRefreshScheduler::RefreshForInvalidation() {
+ // Remove the first refresh time restriction, as the intent is to prevent
+ // refreshes on login from occurring before invalidations can be processed.
+ first_refresh_ = base::Time();
+ RefreshNow();
+}
+
void CloudPolicyRefreshScheduler::OnPolicyFetched(CloudPolicyClient* client) {
error_retry_delay_ms_ = kInitialErrorRetryDelayMs;
@@ -219,10 +233,14 @@ void CloudPolicyRefreshScheduler::RefreshAfter(int delta_ms) {
base::TimeDelta delta(base::TimeDelta::FromMilliseconds(delta_ms));
refresh_callback_.Cancel();
+ // Make sure the refresh does not occur before the first refresh time.
rlarocque 2013/07/23 17:43:08 Did cloud policy refresh within minutes of restart
Joao da Silva 2013/07/23 20:44:47 On the desktop, yes (on Android we will delay it d
Steve Condie 2013/07/24 01:42:04 As we discussed I reverted all my changes to Cloud
+ base::Time now = base::Time::NowFromSystemTime();
+ base::TimeDelta min_delay;
+ if (now < first_refresh_)
+ min_delay = first_refresh_ - now;
+
// Schedule the callback.
- base::TimeDelta delay =
- std::max((last_refresh_ + delta) - base::Time::NowFromSystemTime(),
- base::TimeDelta());
+ base::TimeDelta delay = std::max((last_refresh_ + delta) - now, min_delay);
refresh_callback_.Reset(
base::Bind(&CloudPolicyRefreshScheduler::PerformRefresh,
base::Unretained(this)));

Powered by Google App Engine
This is Rietveld 408576698