Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/chromeos/policy/server_backed_state_keys_broker.h" | 5 #include "chrome/browser/chromeos/policy/server_backed_state_keys_broker.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| 11 #include "base/task_runner.h" | 11 #include "base/threading/thread_task_runner_handle.h" |
| 12 #include "chromeos/dbus/session_manager_client.h" | 12 #include "chromeos/dbus/session_manager_client.h" |
| 13 | 13 |
| 14 namespace policy { | 14 namespace policy { |
| 15 | 15 |
| 16 namespace { | 16 namespace { |
| 17 | 17 |
| 18 // Refresh interval for state keys. There's a quantized time component in | 18 // Refresh interval for state keys. There's a quantized time component in |
| 19 // state key generation, so they rotate over time. The quantum size is pretty | 19 // state key generation, so they rotate over time. The quantum size is pretty |
| 20 // coarse though (currently 2^23 seconds), so simply polling for a new state | 20 // coarse though (currently 2^23 seconds), so simply polling for a new state |
| 21 // keys once a day is good enough. | 21 // keys once a day is good enough. |
| 22 const int kPollIntervalSeconds = 60 * 60 * 24; | 22 constexpr base::TimeDelta kPollInterval = base::TimeDelta::FromDays(1); |
| 23 | 23 |
| 24 } // namespace | 24 } // namespace |
| 25 | 25 |
| 26 ServerBackedStateKeysBroker::ServerBackedStateKeysBroker( | 26 ServerBackedStateKeysBroker::ServerBackedStateKeysBroker( |
| 27 chromeos::SessionManagerClient* session_manager_client, | 27 chromeos::SessionManagerClient* session_manager_client) |
| 28 scoped_refptr<base::TaskRunner> delayed_task_runner) | |
| 29 : session_manager_client_(session_manager_client), | 28 : session_manager_client_(session_manager_client), |
| 30 delayed_task_runner_(delayed_task_runner), | |
| 31 requested_(false), | 29 requested_(false), |
| 32 initial_retrieval_completed_(false), | 30 initial_retrieval_completed_(false), |
| 33 weak_factory_(this) { | 31 weak_factory_(this) {} |
| 34 } | |
| 35 | 32 |
| 36 ServerBackedStateKeysBroker::~ServerBackedStateKeysBroker() { | 33 ServerBackedStateKeysBroker::~ServerBackedStateKeysBroker() { |
| 37 } | 34 } |
| 38 | 35 |
| 39 ServerBackedStateKeysBroker::Subscription | 36 ServerBackedStateKeysBroker::Subscription |
| 40 ServerBackedStateKeysBroker::RegisterUpdateCallback( | 37 ServerBackedStateKeysBroker::RegisterUpdateCallback( |
| 41 const base::Closure& callback) { | 38 const base::Closure& callback) { |
| 42 if (!available()) | 39 if (!available()) |
| 43 FetchStateKeys(); | 40 FetchStateKeys(); |
| 44 return update_callbacks_.Add(callback); | 41 return update_callbacks_.Add(callback); |
| 45 } | 42 } |
| 46 | 43 |
| 47 void ServerBackedStateKeysBroker::RequestStateKeys( | 44 void ServerBackedStateKeysBroker::RequestStateKeys( |
| 48 const StateKeysCallback& callback) { | 45 const StateKeysCallback& callback) { |
| 49 if (pending()) { | 46 if (pending()) { |
| 50 request_callbacks_.push_back(callback); | 47 request_callbacks_.push_back(callback); |
| 51 FetchStateKeys(); | 48 FetchStateKeys(); |
| 52 return; | 49 return; |
| 53 } | 50 } |
| 54 | 51 |
| 55 if (!callback.is_null()) | 52 if (!callback.is_null()) |
| 56 callback.Run(state_keys_); | 53 callback.Run(state_keys_); |
| 57 return; | 54 return; |
| 58 } | 55 } |
| 59 | 56 |
| 57 // static | |
| 58 base::TimeDelta ServerBackedStateKeysBroker::GetPollIntervalForTesting() { | |
| 59 return kPollInterval; | |
| 60 } | |
| 61 | |
| 60 void ServerBackedStateKeysBroker::FetchStateKeys() { | 62 void ServerBackedStateKeysBroker::FetchStateKeys() { |
| 61 if (!requested_) { | 63 if (!requested_) { |
| 62 requested_ = true; | 64 requested_ = true; |
| 63 session_manager_client_->GetServerBackedStateKeys( | 65 session_manager_client_->GetServerBackedStateKeys( |
| 64 base::Bind(&ServerBackedStateKeysBroker::StoreStateKeys, | 66 base::Bind(&ServerBackedStateKeysBroker::StoreStateKeys, |
| 65 weak_factory_.GetWeakPtr())); | 67 weak_factory_.GetWeakPtr())); |
| 66 } | 68 } |
| 67 } | 69 } |
| 68 | 70 |
| 69 void ServerBackedStateKeysBroker::StoreStateKeys( | 71 void ServerBackedStateKeysBroker::StoreStateKeys( |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 88 std::vector<StateKeysCallback> callbacks; | 90 std::vector<StateKeysCallback> callbacks; |
| 89 request_callbacks_.swap(callbacks); | 91 request_callbacks_.swap(callbacks); |
| 90 for (std::vector<StateKeysCallback>::const_iterator callback( | 92 for (std::vector<StateKeysCallback>::const_iterator callback( |
| 91 callbacks.begin()); | 93 callbacks.begin()); |
| 92 callback != callbacks.end(); | 94 callback != callbacks.end(); |
| 93 ++callback) { | 95 ++callback) { |
| 94 if (!callback->is_null()) | 96 if (!callback->is_null()) |
| 95 callback->Run(state_keys_); | 97 callback->Run(state_keys_); |
| 96 } | 98 } |
| 97 | 99 |
| 98 delayed_task_runner_->PostDelayedTask( | 100 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
|
emaxx
2017/03/01 14:43:53
nit: #include "base/single_thread_task_runner.h"?
gab
2017/03/02 00:33:31
By IWYU (include-what-you-use), thread_task_runner
emaxx
2017/03/02 02:39:39
I'm not entirely following this argument. ThreadTa
gab
2017/03/02 03:24:44
https://groups.google.com/a/chromium.org/d/topic/c
| |
| 99 FROM_HERE, | 101 FROM_HERE, |
| 100 base::Bind(&ServerBackedStateKeysBroker::FetchStateKeys, | 102 base::Bind(&ServerBackedStateKeysBroker::FetchStateKeys, |
| 101 weak_factory_.GetWeakPtr()), | 103 weak_factory_.GetWeakPtr()), |
| 102 base::TimeDelta::FromSeconds(kPollIntervalSeconds)); | 104 kPollInterval); |
| 103 } | 105 } |
| 104 | 106 |
| 105 } // namespace policy | 107 } // namespace policy |
| OLD | NEW |