| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/policy/async_policy_provider.h" | 5 #include "chrome/browser/policy/async_policy_provider.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "base/message_loop/message_loop_proxy.h" | 10 #include "base/message_loop/message_loop_proxy.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 // made before this call. So if a caller has modified the policy settings and | 72 // made before this call. So if a caller has modified the policy settings and |
| 73 // invoked RefreshPolicies(), then by the next notification these policies | 73 // invoked RefreshPolicies(), then by the next notification these policies |
| 74 // should already be provided. | 74 // should already be provided. |
| 75 // However, it's also possible that an asynchronous Reload() is in progress | 75 // However, it's also possible that an asynchronous Reload() is in progress |
| 76 // and just posted OnLoaderReloaded(). Therefore a task is posted to the | 76 // and just posted OnLoaderReloaded(). Therefore a task is posted to the |
| 77 // FILE thread before posting the next Reload, to prevent a potential | 77 // FILE thread before posting the next Reload, to prevent a potential |
| 78 // concurrent Reload() from triggering a notification too early. If another | 78 // concurrent Reload() from triggering a notification too early. If another |
| 79 // refresh task has been posted, it is invalidated now. | 79 // refresh task has been posted, it is invalidated now. |
| 80 refresh_callback_.Reset( | 80 refresh_callback_.Reset( |
| 81 base::Bind(&AsyncPolicyProvider::ReloadAfterRefreshSync, | 81 base::Bind(&AsyncPolicyProvider::ReloadAfterRefreshSync, |
| 82 base::Unretained(this))); | 82 weak_factory_.GetWeakPtr())); |
| 83 BrowserThread::PostTaskAndReply( | 83 BrowserThread::PostTaskAndReply( |
| 84 BrowserThread::FILE, FROM_HERE, | 84 BrowserThread::FILE, FROM_HERE, |
| 85 base::Bind(base::DoNothing), | 85 base::Bind(base::DoNothing), |
| 86 refresh_callback_.callback()); | 86 refresh_callback_.callback()); |
| 87 } | 87 } |
| 88 | 88 |
| 89 void AsyncPolicyProvider::RegisterPolicyDomain( |
| 90 scoped_refptr<const PolicyDomainDescriptor> descriptor) { |
| 91 if (loader_) { |
| 92 BrowserThread::PostTask(BrowserThread::FILE, |
| 93 FROM_HERE, |
| 94 base::Bind(&AsyncPolicyLoader::RegisterPolicyDomain, |
| 95 base::Unretained(loader_), |
| 96 descriptor)); |
| 97 } |
| 98 } |
| 99 |
| 89 void AsyncPolicyProvider::ReloadAfterRefreshSync() { | 100 void AsyncPolicyProvider::ReloadAfterRefreshSync() { |
| 90 DCHECK(CalledOnValidThread()); | 101 DCHECK(CalledOnValidThread()); |
| 91 // This task can only enter if it was posted from RefreshPolicies(), and it | 102 // This task can only enter if it was posted from RefreshPolicies(), and it |
| 92 // hasn't been cancelled meanwhile by another call to RefreshPolicies(). | 103 // hasn't been cancelled meanwhile by another call to RefreshPolicies(). |
| 93 DCHECK(!refresh_callback_.IsCancelled()); | 104 DCHECK(!refresh_callback_.IsCancelled()); |
| 94 // There can't be another refresh callback pending now, since its creation | 105 // There can't be another refresh callback pending now, since its creation |
| 95 // in RefreshPolicies() would have cancelled the current execution. So it's | 106 // in RefreshPolicies() would have cancelled the current execution. So it's |
| 96 // safe to cancel the |refresh_callback_| now, so that OnLoaderReloaded() | 107 // safe to cancel the |refresh_callback_| now, so that OnLoaderReloaded() |
| 97 // sees that there is no refresh pending. | 108 // sees that there is no refresh pending. |
| 98 refresh_callback_.Cancel(); | 109 refresh_callback_.Cancel(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 121 base::WeakPtr<AsyncPolicyProvider> weak_this, | 132 base::WeakPtr<AsyncPolicyProvider> weak_this, |
| 122 scoped_ptr<PolicyBundle> bundle) { | 133 scoped_ptr<PolicyBundle> bundle) { |
| 123 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 134 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 124 loop->PostTask(FROM_HERE, | 135 loop->PostTask(FROM_HERE, |
| 125 base::Bind(&AsyncPolicyProvider::OnLoaderReloaded, | 136 base::Bind(&AsyncPolicyProvider::OnLoaderReloaded, |
| 126 weak_this, | 137 weak_this, |
| 127 base::Passed(&bundle))); | 138 base::Passed(&bundle))); |
| 128 } | 139 } |
| 129 | 140 |
| 130 } // namespace policy | 141 } // namespace policy |
| OLD | NEW |