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

Side by Side Diff: chrome/browser/chromeos/login/signed_settings.cc

Issue 8727037: Signed settings refactoring: Proper caching and more tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased to ToT and removed some debug output left. Created 9 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/login/signed_settings.h" 5 #include "chrome/browser/chromeos/login/signed_settings.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/memory/ref_counted.h" 11 #include "base/memory/ref_counted.h"
12 #include "base/stringprintf.h"
13 #include "base/threading/thread_restrictions.h" 12 #include "base/threading/thread_restrictions.h"
14 #include "base/values.h"
15 #include "chrome/browser/browser_process.h" 13 #include "chrome/browser/browser_process.h"
16 #include "chrome/browser/chromeos/cros/cros_library.h" 14 #include "chrome/browser/chromeos/cros/cros_library.h"
17 #include "chrome/browser/chromeos/cros_settings_names.h"
18 #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" 15 #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h"
19 #include "chrome/browser/chromeos/dbus/session_manager_client.h" 16 #include "chrome/browser/chromeos/dbus/session_manager_client.h"
20 #include "chrome/browser/chromeos/login/authenticator.h" 17 #include "chrome/browser/chromeos/login/authenticator.h"
21 #include "chrome/browser/chromeos/login/ownership_service.h" 18 #include "chrome/browser/chromeos/login/ownership_service.h"
22 #include "chrome/browser/chromeos/login/signed_settings_temp_storage.h"
23 #include "chrome/browser/policy/proto/chrome_device_policy.pb.h" 19 #include "chrome/browser/policy/proto/chrome_device_policy.pb.h"
24 #include "chrome/browser/policy/proto/device_management_backend.pb.h" 20 #include "chrome/browser/policy/proto/device_management_backend.pb.h"
25 #include "content/public/browser/browser_thread.h" 21 #include "content/public/browser/browser_thread.h"
26 22
27 namespace chromeos { 23 namespace chromeos {
28 using content::BrowserThread; 24 using content::BrowserThread;
29 using google::protobuf::RepeatedPtrField; 25 using google::protobuf::RepeatedPtrField;
30 using std::string; 26 using std::string;
31 27
32 // static 28 const char kDevicePolicyType[] = "google/chromeos/device";
33 const char SignedSettings::kDevicePolicyType[] = "google/chromeos/device";
34
35 SignedSettings::Relay::Relay(SignedSettings* s) : settings_(s) {
36 }
37
38 SignedSettings::Relay::~Relay() {}
39
40 void SignedSettings::Relay::OnSettingsOpCompleted(
41 SignedSettings::ReturnCode code,
42 const em::PolicyFetchResponse& value) {
43 if (code == SignedSettings::SUCCESS) {
44 settings_->Execute();
45 return;
46 }
47 settings_->Fail(code);
48 }
49 29
50 SignedSettings::SignedSettings() 30 SignedSettings::SignedSettings()
51 : service_(OwnershipService::GetSharedInstance()), 31 : service_(OwnershipService::GetSharedInstance()) {
52 relay_(NULL),
53 polfetcher_(NULL) {
54 } 32 }
55 33
56 SignedSettings::~SignedSettings() {} 34 SignedSettings::~SignedSettings() {}
57 35
58 void SignedSettings::TryToFetchPolicyAndCallBack() {
59 relay_.reset(new Relay(this));
60 polfetcher_ = SignedSettings::CreateRetrievePolicyOp(relay_.get());
61 polfetcher_->set_service(service_);
62 polfetcher_->Execute();
63 }
64
65 // static 36 // static
66 bool SignedSettings::PolicyIsSane(const em::PolicyFetchResponse& value, 37 bool SignedSettings::PolicyIsSane(const em::PolicyFetchResponse& value,
67 em::PolicyData* poldata) { 38 em::PolicyData* poldata) {
68 if (value.has_policy_data()) { 39 if (value.has_policy_data()) {
69 poldata->ParseFromString(value.policy_data()); 40 poldata->ParseFromString(value.policy_data());
70 if (poldata->has_policy_type() && 41 if (poldata->has_policy_type() &&
71 poldata->policy_type() == kDevicePolicyType && 42 poldata->policy_type() == kDevicePolicyType &&
72 poldata->has_policy_value()) { 43 poldata->has_policy_value()) {
73 return true; 44 return true;
74 } 45 }
75 } 46 }
76 return false; 47 return false;
77 } 48 }
78 49
79 // static 50 // static
80 SignedSettings::ReturnCode SignedSettings::MapKeyOpCode( 51 SignedSettings::ReturnCode SignedSettings::MapKeyOpCode(
81 OwnerManager::KeyOpCode return_code) { 52 OwnerManager::KeyOpCode return_code) {
82 return (return_code == OwnerManager::KEY_UNAVAILABLE ? 53 return (return_code == OwnerManager::KEY_UNAVAILABLE ?
83 KEY_UNAVAILABLE : BAD_SIGNATURE); 54 KEY_UNAVAILABLE : BAD_SIGNATURE);
84 } 55 }
85 56
86 class StorePropertyOp : public SignedSettings,
87 public SignedSettings::Delegate<bool> {
88 public:
89 StorePropertyOp(const std::string& name,
90 const base::Value& value,
91 SignedSettings::Delegate<bool>* d);
92 virtual ~StorePropertyOp();
93 void Execute();
94 void Fail(SignedSettings::ReturnCode code);
95 void Succeed(bool value);
96 // Implementation of OwnerManager::Delegate
97 void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code,
98 const std::vector<uint8>& payload);
99 // Implementation of SignedSettings::Delegate
100 void OnSettingsOpCompleted(ReturnCode code, bool value);
101
102 private:
103 void SetInPolicy(const std::string& prop,
104 const base::Value& value,
105 em::PolicyData* poldata);
106 // Always call d_->OnSettingOpCompleted() via this call.
107 // It guarantees that the callback will not be triggered until _after_
108 // Execute() returns, which is implicitly assumed by SignedSettingsHelper
109 // in some cases.
110 void PerformCallback(SignedSettings::ReturnCode code, bool value);
111
112 std::string name_;
113 scoped_ptr<base::Value> value_;
114 SignedSettings::Delegate<bool>* d_;
115 em::PolicyFetchResponse to_store_;
116 scoped_refptr<SignedSettings> store_op_;
117 };
118
119 class RetrievePropertyOp : public SignedSettings {
120 public:
121 RetrievePropertyOp(const std::string& name,
122 SignedSettings::Delegate<const base::Value*>* d);
123 virtual ~RetrievePropertyOp();
124 void Execute();
125 void Fail(SignedSettings::ReturnCode code);
126 void Succeed(const base::Value* value);
127 // Implementation of OwnerManager::Delegate::OnKeyOpComplete()
128 void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code,
129 const std::vector<uint8>& payload);
130
131 private:
132 base::Value* LookUpInPolicy(const std::string& prop);
133 // Always call d_->OnSettingOpCompleted() via this call.
134 // It guarantees that the callback will not be triggered until _after_
135 // Execute() returns, which is implicitly assumed by SignedSettingsHelper
136 // in some cases.
137 void PerformCallback(SignedSettings::ReturnCode code,
138 const base::Value* value);
139
140 std::string name_;
141 SignedSettings::Delegate<const base::Value*>* d_;
142 };
143
144 class StorePolicyOp : public SignedSettings { 57 class StorePolicyOp : public SignedSettings {
145 public: 58 public:
146 StorePolicyOp(em::PolicyFetchResponse* policy, 59 StorePolicyOp(em::PolicyFetchResponse* policy,
147 SignedSettings::Delegate<bool>* d); 60 SignedSettings::Delegate<bool>* d);
148 virtual ~StorePolicyOp(); 61 virtual ~StorePolicyOp();
149 void Execute(); 62 void Execute();
150 void Fail(SignedSettings::ReturnCode code); 63 void Fail(SignedSettings::ReturnCode code);
151 void Succeed(bool value); 64 void Succeed(bool value);
152 // Implementation of OwnerManager::Delegate 65 // Implementation of OwnerManager::Delegate
153 void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code, 66 void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 void PerformCallback(SignedSettings::ReturnCode code, 101 void PerformCallback(SignedSettings::ReturnCode code,
189 const em::PolicyFetchResponse& value); 102 const em::PolicyFetchResponse& value);
190 103
191 void ProcessPolicy(const std::string& serialized_proto); 104 void ProcessPolicy(const std::string& serialized_proto);
192 105
193 em::PolicyFetchResponse policy_; 106 em::PolicyFetchResponse policy_;
194 SignedSettings::Delegate<const em::PolicyFetchResponse&>* d_; 107 SignedSettings::Delegate<const em::PolicyFetchResponse&>* d_;
195 }; 108 };
196 109
197 // static 110 // static
198 SignedSettings* SignedSettings::CreateStorePropertyOp(
199 const std::string& name,
200 const base::Value& value,
201 SignedSettings::Delegate<bool>* d) {
202 DCHECK(d != NULL);
203 return new StorePropertyOp(name, value, d);
204 }
205
206 // static
207 SignedSettings* SignedSettings::CreateRetrievePropertyOp(
208 const std::string& name,
209 SignedSettings::Delegate<const base::Value*>* d) {
210 DCHECK(d != NULL);
211 return new RetrievePropertyOp(name, d);
212 }
213
214 // static
215 SignedSettings* SignedSettings::CreateStorePolicyOp( 111 SignedSettings* SignedSettings::CreateStorePolicyOp(
216 em::PolicyFetchResponse* policy, 112 em::PolicyFetchResponse* policy,
217 SignedSettings::Delegate<bool>* d) { 113 SignedSettings::Delegate<bool>* d) {
218 DCHECK(d != NULL); 114 DCHECK(d != NULL);
219 DCHECK(policy != NULL); 115 DCHECK(policy != NULL);
220 return new StorePolicyOp(policy, d); 116 return new StorePolicyOp(policy, d);
221 } 117 }
222 118
223 // static 119 // static
224 SignedSettings* SignedSettings::CreateRetrievePolicyOp( 120 SignedSettings* SignedSettings::CreateRetrievePolicyOp(
225 SignedSettings::Delegate<const em::PolicyFetchResponse&>* d) { 121 SignedSettings::Delegate<const em::PolicyFetchResponse&>* d) {
226 DCHECK(d != NULL); 122 DCHECK(d != NULL);
227 return new RetrievePolicyOp(d); 123 return new RetrievePolicyOp(d);
228 } 124 }
229 125
230 StorePropertyOp::StorePropertyOp(const std::string& name,
231 const base::Value& value,
232 SignedSettings::Delegate<bool>* d)
233 : name_(name),
234 value_(value.DeepCopy()),
235 d_(d),
236 store_op_(NULL) {
237 }
238
239 StorePropertyOp::~StorePropertyOp() {}
240
241 void StorePropertyOp::Execute() {
242 if (service_->GetStatus(true) != OwnershipService::OWNERSHIP_TAKEN) {
243 if (g_browser_process &&
244 g_browser_process->local_state() &&
245 SignedSettingsTempStorage::Store(name_, *value_,
246 g_browser_process->local_state())) {
247 Succeed(true);
248 return;
249 }
250 }
251 if (!service_->has_cached_policy()) {
252 TryToFetchPolicyAndCallBack();
253 return;
254 }
255 // Posts a task to the FILE thread to sign policy.
256 em::PolicyData to_sign;
257 to_sign.CheckTypeAndMergeFrom(service_->cached_policy());
258 SetInPolicy(name_, *value_, &to_sign);
259 to_store_.set_policy_data(to_sign.SerializeAsString());
260 service_->StartSigningAttempt(to_store_.policy_data(), this);
261 }
262
263 void StorePropertyOp::Fail(SignedSettings::ReturnCode code) {
264 BrowserThread::PostTask(
265 BrowserThread::UI, FROM_HERE,
266 base::Bind(&StorePropertyOp::PerformCallback, this, code, false));
267 }
268
269 void StorePropertyOp::Succeed(bool value) {
270 BrowserThread::PostTask(
271 BrowserThread::UI, FROM_HERE,
272 base::Bind(&StorePropertyOp::PerformCallback, this, SUCCESS, value));
273 }
274
275 void StorePropertyOp::OnKeyOpComplete(const OwnerManager::KeyOpCode return_code,
276 const std::vector<uint8>& sig) {
277 // Ensure we're on the UI thread, due to the need to send DBus traffic.
278 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
279 BrowserThread::PostTask(
280 BrowserThread::UI, FROM_HERE,
281 base::Bind(&StorePropertyOp::OnKeyOpComplete, this, return_code, sig));
282 return;
283 }
284 VLOG(2) << "StorePropertyOp::OnKeyOpComplete return_code = " << return_code;
285 // Now, sure we're on the UI thread.
286 if (return_code == OwnerManager::SUCCESS) {
287 to_store_.set_policy_data_signature(
288 std::string(reinterpret_cast<const char*>(&sig[0]), sig.size()));
289 store_op_ = CreateStorePolicyOp(&to_store_, this);
290 // d_->OnSettingsOpCompleted() will be called by this call.
291 store_op_->Execute();
292 } else {
293 Fail(SignedSettings::MapKeyOpCode(return_code));
294 }
295 }
296
297 void StorePropertyOp::OnSettingsOpCompleted(ReturnCode code, bool value) {
298 if (value && to_store_.has_policy_data()) {
299 em::PolicyData poldata;
300 poldata.ParseFromString(to_store_.policy_data());
301 service_->set_cached_policy(poldata);
302 Succeed(value);
303 return;
304 }
305 Fail(NOT_FOUND);
306 }
307
308 void StorePropertyOp::SetInPolicy(const std::string& prop,
309 const base::Value& value,
310 em::PolicyData* poldata) {
311 em::ChromeDeviceSettingsProto pol;
312 pol.ParseFromString(poldata->policy_value());
313 if (prop == kAccountsPrefAllowNewUser) {
314 em::AllowNewUsersProto* allow = pol.mutable_allow_new_users();
315 bool allow_value;
316 if (value.GetAsBoolean(&allow_value))
317 allow->set_allow_new_users(allow_value);
318 else
319 NOTREACHED();
320 } else if (prop == kAccountsPrefAllowGuest) {
321 em::GuestModeEnabledProto* guest = pol.mutable_guest_mode_enabled();
322 bool guest_value;
323 if (value.GetAsBoolean(&guest_value))
324 guest->set_guest_mode_enabled(guest_value);
325 else
326 NOTREACHED();
327 } else if (prop == kAccountsPrefShowUserNamesOnSignIn) {
328 em::ShowUserNamesOnSigninProto* show = pol.mutable_show_user_names();
329 bool show_value;
330 if (value.GetAsBoolean(&show_value))
331 show->set_show_user_names(show_value);
332 else
333 NOTREACHED();
334 } else if (prop == kSignedDataRoamingEnabled) {
335 em::DataRoamingEnabledProto* roam = pol.mutable_data_roaming_enabled();
336 bool roaming_value;
337 if (value.GetAsBoolean(&roaming_value))
338 roam->set_data_roaming_enabled(roaming_value);
339 else
340 NOTREACHED();
341 } else if (prop == kSettingProxyEverywhere) {
342 // TODO(cmasone): NOTIMPLEMENTED() once http://crosbug.com/13052 is fixed.
343 std::string proxy_value;
344 if (value.GetAsString(&proxy_value)) {
345 bool success =
346 pol.mutable_device_proxy_settings()->ParseFromString(proxy_value);
347 DCHECK(success);
348 } else {
349 NOTREACHED();
350 }
351 } else if (prop == kReleaseChannel) {
352 em::ReleaseChannelProto* release_channel = pol.mutable_release_channel();
353 std::string channel_value;
354 if (value.GetAsString(&channel_value))
355 release_channel->set_release_channel(channel_value);
356 else
357 NOTREACHED();
358 } else if (prop == kStatsReportingPref) {
359 em::MetricsEnabledProto* metrics = pol.mutable_metrics_enabled();
360 bool metrics_value;
361 if (value.GetAsBoolean(&metrics_value))
362 metrics->set_metrics_enabled(metrics_value);
363 else
364 NOTREACHED();
365 } else if (prop == kAccountsPrefUsers) {
366 em::UserWhitelistProto* whitelist_proto = pol.mutable_user_whitelist();
367 whitelist_proto->clear_user_whitelist();
368 const base::ListValue& users = static_cast<const base::ListValue&>(value);
369 for (base::ListValue::const_iterator i = users.begin();
370 i != users.end(); ++i) {
371 std::string email;
372 if ((*i)->GetAsString(&email))
373 whitelist_proto->add_user_whitelist(email.c_str());
374 }
375 } else if (prop == kDeviceOwner) {
376 // We don't serialize this one to the policy blob.
377 } else {
378 NOTREACHED();
379 }
380 poldata->set_policy_value(pol.SerializeAsString());
381 }
382
383 void StorePropertyOp::PerformCallback(SignedSettings::ReturnCode code,
384 bool value) {
385 d_->OnSettingsOpCompleted(code, value);
386 }
387
388 RetrievePropertyOp::RetrievePropertyOp(
389 const std::string& name,
390 SignedSettings::Delegate<const base::Value*>* d)
391 : name_(name),
392 d_(d) {
393 }
394
395 RetrievePropertyOp::~RetrievePropertyOp() {}
396
397 void RetrievePropertyOp::Execute() {
398 base::Value* value;
399 // TODO(dilmah): Fix the race:
400 // At the moment when device becomes owned there is lapse of time after
401 // device has been owned and before temp_storage settings are finally
402 // persisted into signed settings.
403 // In this lapse of time Retrieve loses access to those settings.
404 if (service_->GetStatus(true) != OwnershipService::OWNERSHIP_TAKEN) {
405 if (g_browser_process &&
406 g_browser_process->local_state() &&
407 SignedSettingsTempStorage::Retrieve(
408 name_, &value, g_browser_process->local_state())) {
409 Succeed(value->DeepCopy());
410 return;
411 }
412 }
413
414 if (!service_->has_cached_policy()) {
415 TryToFetchPolicyAndCallBack();
416 return;
417 }
418 value = LookUpInPolicy(name_);
419 if (!value)
420 Fail(NOT_FOUND);
421 else
422 Succeed(value);
423 }
424
425 void RetrievePropertyOp::Fail(SignedSettings::ReturnCode code) {
426 BrowserThread::PostTask(
427 BrowserThread::UI, FROM_HERE,
428 base::Bind(&RetrievePropertyOp::PerformCallback, this,
429 code, static_cast<const base::Value*>(NULL)));
430 }
431
432 void RetrievePropertyOp::Succeed(const base::Value* value) {
433 BrowserThread::PostTask(
434 BrowserThread::UI, FROM_HERE,
435 base::Bind(&RetrievePropertyOp::PerformCallback, this,
436 SUCCESS, base::Owned(value)));
437 }
438
439 // DEPRECATED.
440 void RetrievePropertyOp::OnKeyOpComplete(
441 const OwnerManager::KeyOpCode return_code,
442 const std::vector<uint8>& sig) {
443 NOTREACHED();
444 }
445
446 base::Value* RetrievePropertyOp::LookUpInPolicy(const std::string& prop) {
447 if (prop == kDeviceOwner) {
448 const em::PolicyData& data = service_->cached_policy();
449 if (data.has_username() && !data.has_request_token())
450 return base::Value::CreateStringValue(data.username());
451 }
452 VLOG(2) << "Looking up " << prop;
453 em::ChromeDeviceSettingsProto pol;
454 pol.ParseFromString(service_->cached_policy().policy_value());
455 if (prop == kAccountsPrefAllowNewUser) {
456 if (pol.has_allow_new_users() &&
457 pol.allow_new_users().has_allow_new_users() &&
458 pol.allow_new_users().allow_new_users()) {
459 // New users allowed, user_whitelist() ignored.
460 return base::Value::CreateBooleanValue(true);
461 }
462 // If we have the allow_new_users bool, and it is true, we honor that above.
463 // In all other cases (don't have it, have it and it is set to false, etc),
464 // We will honor the user_whitelist() if it is there and populated.
465 // Otherwise we default to allowing new users.
466 if (!pol.has_user_whitelist())
467 return base::Value::CreateBooleanValue(true);
468 return base::Value::CreateBooleanValue(
469 pol.user_whitelist().user_whitelist_size() == 0);
470
471 } else if (prop == kAccountsPrefAllowGuest) {
472 if (!pol.has_guest_mode_enabled() ||
473 !pol.guest_mode_enabled().has_guest_mode_enabled()) {
474 // Default to allowing guests;
475 return base::Value::CreateBooleanValue(true);
476 }
477 return base::Value::CreateBooleanValue(
478 pol.guest_mode_enabled().guest_mode_enabled());
479
480 } else if (prop == kAccountsPrefShowUserNamesOnSignIn) {
481 if (!pol.has_show_user_names() ||
482 !pol.show_user_names().has_show_user_names()) {
483 // Default to showing pods on the login screen;
484 return base::Value::CreateBooleanValue(true);
485 }
486 return base::Value::CreateBooleanValue(
487 pol.show_user_names().show_user_names());
488
489 } else if (prop == kSignedDataRoamingEnabled) {
490 if (!pol.has_data_roaming_enabled() ||
491 !pol.data_roaming_enabled().has_data_roaming_enabled()) {
492 // Default to disabling cellular data roaming;
493 return base::Value::CreateBooleanValue(false);
494 }
495 return base::Value::CreateBooleanValue(
496 pol.data_roaming_enabled().data_roaming_enabled());
497
498 } else if (prop == kSettingProxyEverywhere) {
499 // TODO(cmasone): NOTIMPLEMENTED() once http://crosbug.com/13052 is fixed.
500 std::string serialized;
501 if (pol.has_device_proxy_settings() &&
502 pol.device_proxy_settings().SerializeToString(&serialized)) {
503 return base::Value::CreateStringValue(serialized);
504 }
505
506 } else if (prop == kReleaseChannel) {
507 if (!pol.has_release_channel() ||
508 !pol.release_channel().has_release_channel()) {
509 // Default to an invalid channel (will be ignored).
510 return base::Value::CreateStringValue("");
511 }
512 return base::Value::CreateStringValue(
513 pol.release_channel().release_channel());
514
515 } else if (prop == kStatsReportingPref) {
516 if (pol.has_metrics_enabled()) {
517 return base::Value::CreateBooleanValue(
518 pol.metrics_enabled().metrics_enabled());
519 }
520 } else if (prop == kAccountsPrefUsers) {
521 base::ListValue* list = new base::ListValue();
522 const em::UserWhitelistProto& whitelist_proto = pol.user_whitelist();
523 const RepeatedPtrField<string>& whitelist =
524 whitelist_proto.user_whitelist();
525 for (RepeatedPtrField<string>::const_iterator it = whitelist.begin();
526 it != whitelist.end(); ++it) {
527 list->Append(base::Value::CreateStringValue(*it));
528 }
529 return list;
530 }
531 return NULL;
532 }
533
534 void RetrievePropertyOp::PerformCallback(SignedSettings::ReturnCode code,
535 const base::Value* value) {
536 d_->OnSettingsOpCompleted(code, value);
537 }
538 126
539 StorePolicyOp::StorePolicyOp(em::PolicyFetchResponse* policy, 127 StorePolicyOp::StorePolicyOp(em::PolicyFetchResponse* policy,
540 SignedSettings::Delegate<bool>* d) 128 SignedSettings::Delegate<bool>* d)
541 : policy_(policy), 129 : policy_(policy),
542 d_(d) { 130 d_(d) {
543 } 131 }
544 132
545 StorePolicyOp::~StorePolicyOp() {} 133 StorePolicyOp::~StorePolicyOp() {}
546 134
547 void StorePolicyOp::OnBoolComplete(bool success) { 135 void StorePolicyOp::OnBoolComplete(bool success) {
(...skipping 17 matching lines...) Expand all
565 BrowserThread::PostTask( 153 BrowserThread::PostTask(
566 BrowserThread::UI, FROM_HERE, 154 BrowserThread::UI, FROM_HERE,
567 base::Bind(&StorePolicyOp::PerformCallback, this, code, false)); 155 base::Bind(&StorePolicyOp::PerformCallback, this, code, false));
568 } 156 }
569 157
570 void StorePolicyOp::Succeed(bool ignored) { 158 void StorePolicyOp::Succeed(bool ignored) {
571 SignedSettings::ReturnCode code = SUCCESS; 159 SignedSettings::ReturnCode code = SUCCESS;
572 bool to_ret = true; 160 bool to_ret = true;
573 em::PolicyData poldata; 161 em::PolicyData poldata;
574 if (SignedSettings::PolicyIsSane(*policy_, &poldata)) { 162 if (SignedSettings::PolicyIsSane(*policy_, &poldata)) {
575 service_->set_cached_policy(poldata);
576 } else { 163 } else {
577 code = NOT_FOUND; 164 code = NOT_FOUND;
578 to_ret = false; 165 to_ret = false;
579 } 166 }
580 BrowserThread::PostTask( 167 BrowserThread::PostTask(
581 BrowserThread::UI, FROM_HERE, 168 BrowserThread::UI, FROM_HERE,
582 base::Bind(&StorePolicyOp::PerformCallback, this, code, to_ret)); 169 base::Bind(&StorePolicyOp::PerformCallback, this, code, to_ret));
583 } 170 }
584 171
585 void StorePolicyOp::OnKeyOpComplete(const OwnerManager::KeyOpCode return_code, 172 void StorePolicyOp::OnKeyOpComplete(const OwnerManager::KeyOpCode return_code,
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 VLOG(2) << "RetrievePolicyOp::Execute() failed with " << code; 222 VLOG(2) << "RetrievePolicyOp::Execute() failed with " << code;
636 BrowserThread::PostTask( 223 BrowserThread::PostTask(
637 BrowserThread::UI, FROM_HERE, 224 BrowserThread::UI, FROM_HERE,
638 base::Bind(&RetrievePolicyOp::PerformCallback, this, code, 225 base::Bind(&RetrievePolicyOp::PerformCallback, this, code,
639 em::PolicyFetchResponse())); 226 em::PolicyFetchResponse()));
640 } 227 }
641 228
642 void RetrievePolicyOp::Succeed(const em::PolicyFetchResponse& value) { 229 void RetrievePolicyOp::Succeed(const em::PolicyFetchResponse& value) {
643 em::PolicyData poldata; 230 em::PolicyData poldata;
644 if (SignedSettings::PolicyIsSane(value, &poldata)) { 231 if (SignedSettings::PolicyIsSane(value, &poldata)) {
645 service_->set_cached_policy(poldata);
646 BrowserThread::PostTask( 232 BrowserThread::PostTask(
647 BrowserThread::UI, FROM_HERE, 233 BrowserThread::UI, FROM_HERE,
648 base::Bind(&RetrievePolicyOp::PerformCallback, this, SUCCESS, value)); 234 base::Bind(&RetrievePolicyOp::PerformCallback, this, SUCCESS, value));
649 } else { 235 } else {
650 Fail(NOT_FOUND); 236 Fail(NOT_FOUND);
651 } 237 }
652 } 238 }
653 239
654 void RetrievePolicyOp::OnKeyOpComplete( 240 void RetrievePolicyOp::OnKeyOpComplete(
655 const OwnerManager::KeyOpCode return_code, 241 const OwnerManager::KeyOpCode return_code,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
691 sig.assign(sig_ptr, sig_ptr + policy_.policy_data_signature().length()); 277 sig.assign(sig_ptr, sig_ptr + policy_.policy_data_signature().length());
692 service_->StartVerifyAttempt(policy_.policy_data(), sig, this); 278 service_->StartVerifyAttempt(policy_.policy_data(), sig, this);
693 } 279 }
694 280
695 void RetrievePolicyOp::PerformCallback(SignedSettings::ReturnCode code, 281 void RetrievePolicyOp::PerformCallback(SignedSettings::ReturnCode code,
696 const em::PolicyFetchResponse& value) { 282 const em::PolicyFetchResponse& value) {
697 d_->OnSettingsOpCompleted(code, value); 283 d_->OnSettingsOpCompleted(code, value);
698 } 284 }
699 285
700 } // namespace chromeos 286 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698