Index: chrome/browser/policy/asynchronous_policy_loader.cc |
diff --git a/chrome/browser/policy/asynchronous_policy_loader.cc b/chrome/browser/policy/asynchronous_policy_loader.cc |
index 1a55b66e512b7a65582599a61daca57a3e199450..e58d742d2017cf6f89a199eddc1f26c7ae3d086c 100644 |
--- a/chrome/browser/policy/asynchronous_policy_loader.cc |
+++ b/chrome/browser/policy/asynchronous_policy_loader.cc |
@@ -21,8 +21,8 @@ AsynchronousPolicyLoader::AsynchronousPolicyLoader( |
origin_loop_(MessageLoop::current()), |
stopped_(false) {} |
-void AsynchronousPolicyLoader::Init(const base::Closure& callback) { |
- updates_callback_ = callback; |
+void AsynchronousPolicyLoader::Init(const base::Closure& default_callback) { |
+ default_callback_ = default_callback; |
policy_.reset(delegate_->Load()); |
// Initialization can happen early when the file thread is not yet available, |
// but the subclass of the loader must do some of their initialization on the |
@@ -48,10 +48,13 @@ void AsynchronousPolicyLoader::Stop() { |
AsynchronousPolicyLoader::~AsynchronousPolicyLoader() { |
} |
-void AsynchronousPolicyLoader::Reload(bool force) { |
+void AsynchronousPolicyLoader::Reload(const base::Closure& callback, |
+ bool force) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
if (delegate_.get()) { |
- PostUpdatePolicyTask(delegate_->Load()); |
+ PostUpdatePolicyTask(callback, delegate_->Load()); |
+ } else { |
+ PostUpdatePolicyTask(callback, NULL); |
} |
} |
@@ -60,6 +63,7 @@ void AsynchronousPolicyLoader::CancelReloadTask() { |
} |
void AsynchronousPolicyLoader::ScheduleReloadTask( |
+ const base::Closure& callback, |
const base::TimeDelta& delay) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
@@ -67,8 +71,10 @@ void AsynchronousPolicyLoader::ScheduleReloadTask( |
BrowserThread::PostDelayedTask( |
BrowserThread::FILE, FROM_HERE, |
- base::Bind(&AsynchronousPolicyLoader::ReloadFromTask, |
- weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&AsynchronousPolicyLoader::Reload, |
+ weak_ptr_factory_.GetWeakPtr(), |
+ callback, |
+ false), |
delay.InMilliseconds()); |
} |
@@ -76,12 +82,7 @@ void AsynchronousPolicyLoader::ScheduleFallbackReloadTask() { |
// As a safeguard in case that the load delegate failed to timely notice a |
// change in policy, schedule a reload task that'll make us recheck after a |
// reasonable interval. |
- ScheduleReloadTask(reload_interval_); |
-} |
- |
-void AsynchronousPolicyLoader::ReloadFromTask() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
- Reload(false); |
+ ScheduleReloadTask(default_callback_, reload_interval_); |
} |
void AsynchronousPolicyLoader::InitOnFileThread() { |
@@ -93,19 +94,22 @@ void AsynchronousPolicyLoader::StopOnFileThread() { |
} |
void AsynchronousPolicyLoader::PostUpdatePolicyTask( |
+ const base::Closure& callback, |
DictionaryValue* new_policy) { |
// TODO(joaodasilva): make the callback own |new_policy|. |
origin_loop_->PostTask( |
FROM_HERE, |
- base::Bind(&AsynchronousPolicyLoader::UpdatePolicy, this, new_policy)); |
+ base::Bind(&AsynchronousPolicyLoader::UpdatePolicy, |
+ this, |
+ callback, |
+ new_policy)); |
} |
-void AsynchronousPolicyLoader::UpdatePolicy(DictionaryValue* new_policy_raw) { |
- scoped_ptr<DictionaryValue> new_policy(new_policy_raw); |
- DCHECK(policy_.get()); |
- policy_.swap(new_policy); |
+void AsynchronousPolicyLoader::UpdatePolicy(const base::Closure& callback, |
+ DictionaryValue* new_policy) { |
+ policy_.reset(new_policy); |
if (!stopped_) |
- updates_callback_.Run(); |
+ callback.Run(); |
} |
void AsynchronousPolicyLoader::InitAfterFileThreadAvailable() { |