Index: chrome/browser/policy/async_policy_loader.cc |
diff --git a/chrome/browser/policy/async_policy_loader.cc b/chrome/browser/policy/async_policy_loader.cc |
deleted file mode 100644 |
index 19659d8373df963cfe11f083aa6a39bd2787bd4e..0000000000000000000000000000000000000000 |
--- a/chrome/browser/policy/async_policy_loader.cc |
+++ /dev/null |
@@ -1,138 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/policy/async_policy_loader.h" |
- |
-#include "base/bind.h" |
-#include "base/location.h" |
-#include "base/sequenced_task_runner.h" |
-#include "components/policy/core/common/policy_bundle.h" |
- |
-using base::Time; |
-using base::TimeDelta; |
- |
-namespace policy { |
- |
-namespace { |
- |
-// Amount of time to wait for the files on disk to settle before trying to load |
-// them. This alleviates the problem of reading partially written files and |
-// makes it possible to batch quasi-simultaneous changes. |
-const int kSettleIntervalSeconds = 5; |
- |
-// The time interval for rechecking policy. This is the fallback in case the |
-// implementation never detects changes. |
-const int kReloadIntervalSeconds = 15 * 60; |
- |
-} // namespace |
- |
-AsyncPolicyLoader::AsyncPolicyLoader( |
- scoped_refptr<base::SequencedTaskRunner> task_runner) |
- : task_runner_(task_runner), |
- weak_factory_(this) {} |
- |
-AsyncPolicyLoader::~AsyncPolicyLoader() {} |
- |
-Time AsyncPolicyLoader::LastModificationTime() { |
- return Time(); |
-} |
- |
-void AsyncPolicyLoader::Reload(bool force) { |
- DCHECK(task_runner_->RunsTasksOnCurrentThread()); |
- |
- TimeDelta delay; |
- Time now = Time::Now(); |
- // Check if there was a recent modification to the underlying files. |
- if (!force && !IsSafeToReload(now, &delay)) { |
- ScheduleNextReload(delay); |
- return; |
- } |
- |
- scoped_ptr<PolicyBundle> bundle(Load()); |
- |
- // Check if there was a modification while reading. |
- if (!force && !IsSafeToReload(now, &delay)) { |
- ScheduleNextReload(delay); |
- return; |
- } |
- |
- // Filter out mismatching policies. |
- schema_map_->FilterBundle(bundle.get()); |
- |
- update_callback_.Run(bundle.Pass()); |
- ScheduleNextReload(TimeDelta::FromSeconds(kReloadIntervalSeconds)); |
-} |
- |
-scoped_ptr<PolicyBundle> AsyncPolicyLoader::InitialLoad( |
- const scoped_refptr<SchemaMap>& schema_map) { |
- // This is the first load, early during startup. Use this to record the |
- // initial |last_modification_time_|, so that potential changes made before |
- // installing the watches can be detected. |
- last_modification_time_ = LastModificationTime(); |
- schema_map_ = schema_map; |
- scoped_ptr<PolicyBundle> bundle(Load()); |
- // Filter out mismatching policies. |
- schema_map_->FilterBundle(bundle.get()); |
- return bundle.Pass(); |
-} |
- |
-void AsyncPolicyLoader::Init(const UpdateCallback& update_callback) { |
- DCHECK(task_runner_->RunsTasksOnCurrentThread()); |
- DCHECK(update_callback_.is_null()); |
- DCHECK(!update_callback.is_null()); |
- update_callback_ = update_callback; |
- |
- InitOnBackgroundThread(); |
- |
- // There might have been changes to the underlying files since the initial |
- // load and before the watchers have been created. |
- if (LastModificationTime() != last_modification_time_) |
- Reload(false); |
- |
- // Start periodic refreshes. |
- ScheduleNextReload(TimeDelta::FromSeconds(kReloadIntervalSeconds)); |
-} |
- |
-void AsyncPolicyLoader::RefreshPolicies(scoped_refptr<SchemaMap> schema_map) { |
- DCHECK(task_runner_->RunsTasksOnCurrentThread()); |
- schema_map_ = schema_map; |
- Reload(true); |
-} |
- |
-void AsyncPolicyLoader::ScheduleNextReload(TimeDelta delay) { |
- DCHECK(task_runner_->RunsTasksOnCurrentThread()); |
- weak_factory_.InvalidateWeakPtrs(); |
- task_runner_->PostDelayedTask(FROM_HERE, |
- base::Bind(&AsyncPolicyLoader::Reload, |
- weak_factory_.GetWeakPtr(), |
- false /* force */), |
- delay); |
-} |
- |
-bool AsyncPolicyLoader::IsSafeToReload(const Time& now, TimeDelta* delay) { |
- Time last_modification = LastModificationTime(); |
- if (last_modification.is_null()) |
- return true; |
- |
- // If there was a change since the last recorded modification, wait some more. |
- const TimeDelta kSettleInterval( |
- TimeDelta::FromSeconds(kSettleIntervalSeconds)); |
- if (last_modification != last_modification_time_) { |
- last_modification_time_ = last_modification; |
- last_modification_clock_ = now; |
- *delay = kSettleInterval; |
- return false; |
- } |
- |
- // Check whether the settle interval has elapsed. |
- const TimeDelta age = now - last_modification_clock_; |
- if (age < kSettleInterval) { |
- *delay = kSettleInterval - age; |
- return false; |
- } |
- |
- return true; |
-} |
- |
-} // namespace policy |