- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / settings / device_settings_test_helper.cc
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/settings/device_settings_test_helper.h"
6
7 #include "base/message_loop/message_loop.h"
8 #include "base/run_loop.h"
9 #include "base/threading/sequenced_worker_pool.h"
10 #include "chrome/browser/chromeos/settings/device_settings_service.h"
11 #include "chrome/browser/chromeos/settings/mock_owner_key_util.h"
12 #include "chrome/browser/policy/proto/chromeos/chrome_device_policy.pb.h"
13 #include "chromeos/dbus/dbus_thread_manager.h"
14 #include "chromeos/network/network_handler.h"
15 #include "content/public/browser/browser_thread.h"
16
17 namespace chromeos {
18
19 DeviceSettingsTestHelper::DeviceSettingsTestHelper() {}
20
21 DeviceSettingsTestHelper::~DeviceSettingsTestHelper() {}
22
23 void DeviceSettingsTestHelper::FlushLoops() {
24   // DeviceSettingsService may trigger operations that hop back and forth
25   // between the message loop and the blocking pool. 2 iterations are currently
26   // sufficient (key loading, signing).
27   for (int i = 0; i < 2; ++i) {
28     base::MessageLoop::current()->RunUntilIdle();
29     content::BrowserThread::GetBlockingPool()->FlushForTesting();
30   }
31   base::MessageLoop::current()->RunUntilIdle();
32 }
33
34 void DeviceSettingsTestHelper::FlushStore() {
35   std::vector<StorePolicyCallback> callbacks;
36   callbacks.swap(device_policy_.store_callbacks_);
37   for (std::vector<StorePolicyCallback>::iterator cb(callbacks.begin());
38        cb != callbacks.end(); ++cb) {
39     cb->Run(device_policy_.store_result_);
40   }
41
42   std::map<std::string, PolicyState>::iterator device_local_account_state;
43   for (device_local_account_state = device_local_account_policy_.begin();
44        device_local_account_state != device_local_account_policy_.end();
45        ++device_local_account_state) {
46     callbacks.swap(device_local_account_state->second.store_callbacks_);
47     for (std::vector<StorePolicyCallback>::iterator cb(callbacks.begin());
48          cb != callbacks.end(); ++cb) {
49       cb->Run(device_local_account_state->second.store_result_);
50     }
51   }
52 }
53
54 void DeviceSettingsTestHelper::FlushRetrieve() {
55   std::vector<RetrievePolicyCallback> callbacks;
56   callbacks.swap(device_policy_.retrieve_callbacks_);
57   for (std::vector<RetrievePolicyCallback>::iterator cb(callbacks.begin());
58        cb != callbacks.end(); ++cb) {
59     cb->Run(device_policy_.policy_blob_);
60   }
61
62   std::map<std::string, PolicyState>::iterator device_local_account_state;
63   for (device_local_account_state = device_local_account_policy_.begin();
64        device_local_account_state != device_local_account_policy_.end();
65        ++device_local_account_state) {
66     std::vector<RetrievePolicyCallback> callbacks;
67     callbacks.swap(device_local_account_state->second.retrieve_callbacks_);
68     for (std::vector<RetrievePolicyCallback>::iterator cb(callbacks.begin());
69          cb != callbacks.end(); ++cb) {
70       cb->Run(device_local_account_state->second.policy_blob_);
71     }
72   }
73 }
74
75 void DeviceSettingsTestHelper::Flush() {
76   do {
77     FlushLoops();
78     FlushStore();
79     FlushLoops();
80     FlushRetrieve();
81     FlushLoops();
82   } while (HasPendingOperations());
83 }
84
85 bool DeviceSettingsTestHelper::HasPendingOperations() const {
86   if (device_policy_.HasPendingOperations())
87     return true;
88
89   std::map<std::string, PolicyState>::const_iterator device_local_account_state;
90   for (device_local_account_state = device_local_account_policy_.begin();
91        device_local_account_state != device_local_account_policy_.end();
92        ++device_local_account_state) {
93     if (device_local_account_state->second.HasPendingOperations())
94       return true;
95   }
96
97   return false;
98 }
99
100 void DeviceSettingsTestHelper::Init(dbus::Bus* bus) {}
101
102 void DeviceSettingsTestHelper::AddObserver(Observer* observer) {}
103
104 void DeviceSettingsTestHelper::RemoveObserver(Observer* observer) {}
105
106 bool DeviceSettingsTestHelper::HasObserver(Observer* observer) {
107   return false;
108 }
109
110 void DeviceSettingsTestHelper::EmitLoginPromptReady() {}
111
112 void DeviceSettingsTestHelper::EmitLoginPromptVisible() {}
113
114 void DeviceSettingsTestHelper::RestartJob(int pid,
115                                           const std::string& command_line) {}
116
117 void DeviceSettingsTestHelper::StartSession(const std::string& user_email) {}
118
119 void DeviceSettingsTestHelper::StopSession() {}
120
121 void DeviceSettingsTestHelper::StartDeviceWipe() {}
122
123 void DeviceSettingsTestHelper::RequestLockScreen() {}
124
125 void DeviceSettingsTestHelper::NotifyLockScreenShown() {}
126
127 void DeviceSettingsTestHelper::NotifyLockScreenDismissed() {}
128
129 void DeviceSettingsTestHelper::RetrieveActiveSessions(
130       const ActiveSessionsCallback& callback) {}
131
132 void DeviceSettingsTestHelper::RetrieveDevicePolicy(
133     const RetrievePolicyCallback& callback) {
134   device_policy_.retrieve_callbacks_.push_back(callback);
135 }
136
137 void DeviceSettingsTestHelper::RetrievePolicyForUser(
138     const std::string& username,
139     const RetrievePolicyCallback& callback) {
140 }
141
142 std::string DeviceSettingsTestHelper::BlockingRetrievePolicyForUser(
143     const std::string& username) {
144   return "";
145 }
146
147 void DeviceSettingsTestHelper::RetrieveDeviceLocalAccountPolicy(
148     const std::string& account_id,
149     const RetrievePolicyCallback& callback) {
150   device_local_account_policy_[account_id].retrieve_callbacks_.push_back(
151       callback);
152 }
153
154 void DeviceSettingsTestHelper::StoreDevicePolicy(
155     const std::string& policy_blob,
156     const StorePolicyCallback& callback) {
157   device_policy_.policy_blob_ = policy_blob;
158   device_policy_.store_callbacks_.push_back(callback);
159 }
160
161 void DeviceSettingsTestHelper::StorePolicyForUser(
162     const std::string& username,
163     const std::string& policy_blob,
164     const std::string& policy_key,
165     const StorePolicyCallback& callback) {
166 }
167
168 void DeviceSettingsTestHelper::StoreDeviceLocalAccountPolicy(
169     const std::string& account_id,
170     const std::string& policy_blob,
171     const StorePolicyCallback& callback) {
172   device_local_account_policy_[account_id].policy_blob_ = policy_blob;
173   device_local_account_policy_[account_id].store_callbacks_.push_back(callback);
174 }
175
176 void DeviceSettingsTestHelper::SetFlagsForUser(
177     const std::string& account_id,
178     const std::vector<std::string>& flags) {}
179
180 DeviceSettingsTestHelper::PolicyState::PolicyState()
181     : store_result_(true) {}
182
183 DeviceSettingsTestHelper::PolicyState::~PolicyState() {}
184
185 ScopedDeviceSettingsTestHelper::ScopedDeviceSettingsTestHelper() {
186   DeviceSettingsService::Initialize();
187   DeviceSettingsService::Get()->SetSessionManager(this, new MockOwnerKeyUtil());
188   DeviceSettingsService::Get()->Load();
189   Flush();
190 }
191
192 ScopedDeviceSettingsTestHelper::~ScopedDeviceSettingsTestHelper() {
193   Flush();
194   DeviceSettingsService::Get()->UnsetSessionManager();
195   DeviceSettingsService::Shutdown();
196 }
197
198 DeviceSettingsTestBase::DeviceSettingsTestBase()
199     : loop_(base::MessageLoop::TYPE_UI),
200       ui_thread_(content::BrowserThread::UI, &loop_),
201       file_thread_(content::BrowserThread::FILE, &loop_),
202       owner_key_util_(new MockOwnerKeyUtil()) {}
203
204 DeviceSettingsTestBase::~DeviceSettingsTestBase() {
205   base::RunLoop().RunUntilIdle();
206 }
207
208 void DeviceSettingsTestBase::SetUp() {
209   // Initialize DBusThreadManager with a stub implementation.
210   DBusThreadManager::InitializeWithStub();
211   NetworkHandler::Initialize();
212   loop_.RunUntilIdle();
213
214   device_policy_.payload().mutable_metrics_enabled()->set_metrics_enabled(
215       false);
216   owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
217   device_policy_.Build();
218   device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob());
219   device_settings_service_.SetSessionManager(&device_settings_test_helper_,
220                                              owner_key_util_);
221 }
222
223 void DeviceSettingsTestBase::TearDown() {
224   FlushDeviceSettings();
225   device_settings_service_.UnsetSessionManager();
226   NetworkHandler::Shutdown();
227   DBusThreadManager::Shutdown();
228 }
229
230 void DeviceSettingsTestBase::FlushDeviceSettings() {
231   device_settings_test_helper_.Flush();
232 }
233
234 void DeviceSettingsTestBase::ReloadDeviceSettings() {
235   device_settings_service_.OwnerKeySet(true);
236   FlushDeviceSettings();
237 }
238
239 }  // namespace chromeos