| 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 a2cebe7fd386fc7c91dc397e56a79648355b5322..7cbc5ef2bb373582ac396ff7da5aa440c80b6197 100644
|
| --- a/chrome/browser/policy/asynchronous_policy_loader.cc
|
| +++ b/chrome/browser/policy/asynchronous_policy_loader.cc
|
| @@ -5,7 +5,10 @@
|
| #include "chrome/browser/policy/asynchronous_policy_loader.h"
|
|
|
| #include "base/bind.h"
|
| +#include "base/bind_helpers.h"
|
| #include "base/message_loop.h"
|
| +#include "chrome/browser/policy/policy_bundle.h"
|
| +#include "chrome/browser/policy/policy_map.h"
|
| #include "content/public/browser/browser_thread.h"
|
|
|
| using content::BrowserThread;
|
| @@ -21,11 +24,14 @@ AsynchronousPolicyLoader::AsynchronousPolicyLoader(
|
| origin_loop_(MessageLoop::current()),
|
| stopped_(false) {}
|
|
|
| -void AsynchronousPolicyLoader::Init(const base::Closure& callback) {
|
| - updates_callback_ = callback;
|
| +void AsynchronousPolicyLoader::Init(const UpdateCallback& callback) {
|
| + update_callback_ = callback;
|
| +
|
| + // Load initial policy synchronously at startup.
|
| scoped_ptr<PolicyMap> policy(delegate_->Load());
|
| if (policy.get())
|
| - policy_.Swap(policy.get());
|
| + UpdatePolicy(policy.Pass());
|
| +
|
| // 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
|
| // file thread. Posting to the file thread directly before it is initialized
|
| @@ -95,17 +101,20 @@ void AsynchronousPolicyLoader::StopOnFileThread() {
|
| }
|
|
|
| void AsynchronousPolicyLoader::PostUpdatePolicyTask(PolicyMap* new_policy) {
|
| - // TODO(joaodasilva): make the callback own |new_policy|.
|
| + scoped_ptr<PolicyMap> policy(new_policy);
|
| origin_loop_->PostTask(
|
| FROM_HERE,
|
| - base::Bind(&AsynchronousPolicyLoader::UpdatePolicy, this, new_policy));
|
| + base::Bind(&AsynchronousPolicyLoader::UpdatePolicy,
|
| + this, base::Passed(&policy)));
|
| }
|
|
|
| -void AsynchronousPolicyLoader::UpdatePolicy(PolicyMap* new_policy_raw) {
|
| - scoped_ptr<PolicyMap> new_policy(new_policy_raw);
|
| - policy_.Swap(new_policy_raw);
|
| - if (!stopped_)
|
| - updates_callback_.Run();
|
| +void AsynchronousPolicyLoader::UpdatePolicy(scoped_ptr<PolicyMap> policy) {
|
| + if (!stopped_) {
|
| + // TODO(joaodasilva): make this load policy from other namespaces too.
|
| + scoped_ptr<PolicyBundle> bundle(new PolicyBundle());
|
| + bundle->Get(POLICY_DOMAIN_CHROME, std::string()).Swap(policy.get());
|
| + update_callback_.Run(bundle.Pass());
|
| + }
|
| }
|
|
|
| void AsynchronousPolicyLoader::InitAfterFileThreadAvailable() {
|
|
|