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 |