Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(753)

Side by Side Diff: chrome/browser/chromeos/policy/server_backed_state_keys_broker.cc

Issue 2657013002: Introduce ThreadTaskRunnerHandle::OverrideForTesting and TestMockTimeTaskRunner::ScopedContext. (Closed)
Patch Set: fix RecentTabHelperTest crash? Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698