OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/cros/login_library.h" | 5 #include "chrome/browser/chromeos/cros/login_library.h" |
6 | 6 |
7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
| 8 #include "chrome/browser/browser_process.h" |
8 #include "chrome/browser/browser_thread.h" | 9 #include "chrome/browser/browser_thread.h" |
9 #include "chrome/browser/chromeos/cros/cros_library.h" | 10 #include "chrome/browser/chromeos/cros/cros_library.h" |
| 11 #include "chrome/browser/chromeos/login/signed_settings_temp_storage.h" |
| 12 #include "chrome/common/notification_service.h" |
| 13 #include "chrome/common/notification_type.h" |
10 | 14 |
11 namespace chromeos { | 15 namespace chromeos { |
12 | 16 |
13 class LoginLibraryImpl : public LoginLibrary { | 17 class LoginLibraryImpl : public LoginLibrary { |
14 public: | 18 public: |
15 LoginLibraryImpl() | 19 LoginLibraryImpl() |
16 : set_owner_key_callback_(NULL), | 20 : set_owner_key_callback_(NULL), |
17 whitelist_op_callback_(NULL), | 21 whitelist_op_callback_(NULL), |
18 property_op_callback_(NULL) { | 22 property_op_callback_(NULL) { |
19 if (CrosLibrary::Get()->EnsureLoaded()) | 23 if (CrosLibrary::Get()->EnsureLoaded()) |
(...skipping 27 matching lines...) Expand all Loading... |
47 if (chromeos::RetrievePropertySafe(name.c_str(), &prop)) { | 51 if (chromeos::RetrievePropertySafe(name.c_str(), &prop)) { |
48 OUT_value->assign(prop->value); | 52 OUT_value->assign(prop->value); |
49 CryptoBlob* sig = prop->signature; | 53 CryptoBlob* sig = prop->signature; |
50 OUT_signature->assign(sig->data, sig->data + sig->length); | 54 OUT_signature->assign(sig->data, sig->data + sig->length); |
51 chromeos::FreeProperty(prop); | 55 chromeos::FreeProperty(prop); |
52 return true; | 56 return true; |
53 } | 57 } |
54 return false; | 58 return false; |
55 } | 59 } |
56 | 60 |
57 bool SetOwnerKeyAsync(const std::vector<uint8>& public_key_der, | |
58 Delegate* callback) { | |
59 DCHECK(callback) << "must provide a callback to SetOwnerKeyAsync()"; | |
60 if (set_owner_key_callback_) | |
61 return false; | |
62 set_owner_key_callback_ = callback; | |
63 CryptoBlob* key = chromeos::CreateCryptoBlob(&public_key_der[0], | |
64 public_key_der.size()); | |
65 bool rv = chromeos::SetOwnerKeySafe(key); | |
66 chromeos::FreeCryptoBlob(key); | |
67 return rv; | |
68 } | |
69 | |
70 bool StorePropertyAsync(const std::string& name, | 61 bool StorePropertyAsync(const std::string& name, |
71 const std::string& value, | 62 const std::string& value, |
72 const std::vector<uint8>& signature, | 63 const std::vector<uint8>& signature, |
73 Delegate* callback) { | 64 Delegate* callback) { |
74 DCHECK(callback) << "must provide a callback to StorePropertyAsync()"; | 65 DCHECK(callback) << "must provide a callback to StorePropertyAsync()"; |
75 if (property_op_callback_) | 66 if (property_op_callback_) |
76 return false; | 67 return false; |
77 property_op_callback_ = callback; | 68 property_op_callback_ = callback; |
78 Property* prop = chromeos::CreateProperty(name.c_str(), | 69 Property* prop = chromeos::CreateProperty(name.c_str(), |
79 value.c_str(), | 70 value.c_str(), |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 default: | 158 default: |
168 NOTREACHED(); | 159 NOTREACHED(); |
169 break; | 160 break; |
170 } | 161 } |
171 } | 162 } |
172 | 163 |
173 void Init() { | 164 void Init() { |
174 session_connection_ = chromeos::MonitorSession(&Handler, this); | 165 session_connection_ = chromeos::MonitorSession(&Handler, this); |
175 } | 166 } |
176 | 167 |
177 void CompleteSetOwnerKey(bool result) { | 168 void CompleteSetOwnerKey(bool value) { |
178 if (set_owner_key_callback_) { | 169 VLOG(1) << "Owner key generation: " << (value ? "success" : "fail"); |
179 set_owner_key_callback_->OnComplete(result); | 170 NotificationType result = |
180 set_owner_key_callback_ = NULL; | 171 NotificationType::OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED; |
| 172 if (!value) |
| 173 result = NotificationType::OWNER_KEY_FETCH_ATTEMPT_FAILED; |
| 174 |
| 175 // Whether we exported the public key or not, send a notification indicating |
| 176 // that we're done with this attempt. |
| 177 NotificationService::current()->Notify(result, |
| 178 NotificationService::AllSources(), |
| 179 NotificationService::NoDetails()); |
| 180 |
| 181 // We stored some settings in transient storage before owner was assigned. |
| 182 // Now owner is assigned and key is generated and we should persist |
| 183 // those settings into signed storage. |
| 184 if (g_browser_process && g_browser_process->local_state()) { |
| 185 SignedSettingsTempStorage::Finalize(g_browser_process->local_state()); |
181 } | 186 } |
182 } | 187 } |
183 | 188 |
184 void CompleteWhitelistOp(bool result) { | 189 void CompleteWhitelistOp(bool result) { |
185 if (whitelist_op_callback_) { | 190 if (whitelist_op_callback_) { |
186 whitelist_op_callback_->OnComplete(result); | 191 whitelist_op_callback_->OnComplete(result); |
187 whitelist_op_callback_ = NULL; | 192 whitelist_op_callback_ = NULL; |
188 } | 193 } |
189 } | 194 } |
190 | 195 |
(...skipping 24 matching lines...) Expand all Loading... |
215 OUT_signature->assign(2, 0); | 220 OUT_signature->assign(2, 0); |
216 return true; | 221 return true; |
217 } | 222 } |
218 bool RetrieveProperty(const std::string& name, | 223 bool RetrieveProperty(const std::string& name, |
219 std::string* OUT_value, | 224 std::string* OUT_value, |
220 std::vector<uint8>* OUT_signature) { | 225 std::vector<uint8>* OUT_signature) { |
221 OUT_value->assign("stub"); | 226 OUT_value->assign("stub"); |
222 OUT_signature->assign(2, 0); | 227 OUT_signature->assign(2, 0); |
223 return true; | 228 return true; |
224 } | 229 } |
225 bool SetOwnerKeyAsync(const std::vector<uint8>& public_key_der, | |
226 Delegate* callback) { | |
227 BrowserThread::PostTask( | |
228 BrowserThread::UI, FROM_HERE, | |
229 NewRunnableFunction(&DoStubCallback, callback)); | |
230 return true; | |
231 } | |
232 bool StorePropertyAsync(const std::string& name, | 230 bool StorePropertyAsync(const std::string& name, |
233 const std::string& value, | 231 const std::string& value, |
234 const std::vector<uint8>& signature, | 232 const std::vector<uint8>& signature, |
235 Delegate* callback) { | 233 Delegate* callback) { |
236 BrowserThread::PostTask( | 234 BrowserThread::PostTask( |
237 BrowserThread::UI, FROM_HERE, | 235 BrowserThread::UI, FROM_HERE, |
238 NewRunnableFunction(&DoStubCallback, callback)); | 236 NewRunnableFunction(&DoStubCallback, callback)); |
239 return true; | 237 return true; |
240 } | 238 } |
241 bool UnwhitelistAsync(const std::string& email, | 239 bool UnwhitelistAsync(const std::string& email, |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 | 271 |
274 // static | 272 // static |
275 LoginLibrary* LoginLibrary::GetImpl(bool stub) { | 273 LoginLibrary* LoginLibrary::GetImpl(bool stub) { |
276 if (stub) | 274 if (stub) |
277 return new LoginLibraryStubImpl(); | 275 return new LoginLibraryStubImpl(); |
278 else | 276 else |
279 return new LoginLibraryImpl(); | 277 return new LoginLibraryImpl(); |
280 } | 278 } |
281 | 279 |
282 } // namespace chromeos | 280 } // namespace chromeos |
OLD | NEW |