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

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

Issue 8091002: PART2: Make SignedSettings use proper Value types instead of string all around the place. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased on ToT+Part1 and addressed comments. Created 9 years, 1 month 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"
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 const bool add_to_whitelist_; 156 const bool add_to_whitelist_;
157 SignedSettings::Delegate<bool>* d_; 157 SignedSettings::Delegate<bool>* d_;
158 em::PolicyFetchResponse to_store_; 158 em::PolicyFetchResponse to_store_;
159 scoped_refptr<SignedSettings> store_op_; 159 scoped_refptr<SignedSettings> store_op_;
160 }; 160 };
161 161
162 class StorePropertyOp : public SignedSettings, 162 class StorePropertyOp : public SignedSettings,
163 public SignedSettings::Delegate<bool> { 163 public SignedSettings::Delegate<bool> {
164 public: 164 public:
165 StorePropertyOp(const std::string& name, 165 StorePropertyOp(const std::string& name,
166 const std::string& value, 166 const base::Value& value,
167 SignedSettings::Delegate<bool>* d); 167 SignedSettings::Delegate<bool>* d);
168 virtual ~StorePropertyOp(); 168 virtual ~StorePropertyOp();
169 void Execute(); 169 void Execute();
170 void Fail(SignedSettings::ReturnCode code); 170 void Fail(SignedSettings::ReturnCode code);
171 void Succeed(bool value); 171 void Succeed(bool value);
172 // Implementation of OwnerManager::Delegate 172 // Implementation of OwnerManager::Delegate
173 void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code, 173 void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code,
174 const std::vector<uint8>& payload); 174 const std::vector<uint8>& payload);
175 // Implementation of SignedSettings::Delegate 175 // Implementation of SignedSettings::Delegate
176 void OnSettingsOpCompleted(ReturnCode code, bool value); 176 void OnSettingsOpCompleted(ReturnCode code, bool value);
177 177
178 private: 178 private:
179 void SetInPolicy(const std::string& prop, 179 void SetInPolicy(const std::string& prop,
180 const std::string& value, 180 const base::Value& value,
181 em::PolicyData* poldata); 181 em::PolicyData* poldata);
182 // Always call d_->OnSettingOpCompleted() via this call. 182 // Always call d_->OnSettingOpCompleted() via this call.
183 // It guarantees that the callback will not be triggered until _after_ 183 // It guarantees that the callback will not be triggered until _after_
184 // Execute() returns, which is implicitly assumed by SignedSettingsHelper 184 // Execute() returns, which is implicitly assumed by SignedSettingsHelper
185 // in some cases. 185 // in some cases.
186 void PerformCallback(SignedSettings::ReturnCode code, bool value); 186 void PerformCallback(SignedSettings::ReturnCode code, bool value);
187 187
188 std::string name_; 188 std::string name_;
189 std::string value_; 189 scoped_ptr<base::Value> value_;
190 SignedSettings::Delegate<bool>* d_; 190 SignedSettings::Delegate<bool>* d_;
191 em::PolicyFetchResponse to_store_; 191 em::PolicyFetchResponse to_store_;
192 scoped_refptr<SignedSettings> store_op_; 192 scoped_refptr<SignedSettings> store_op_;
193 }; 193 };
194 194
195 class RetrievePropertyOp : public SignedSettings { 195 class RetrievePropertyOp : public SignedSettings {
196 public: 196 public:
197 RetrievePropertyOp(const std::string& name, 197 RetrievePropertyOp(const std::string& name,
198 SignedSettings::Delegate<std::string>* d); 198 SignedSettings::Delegate<const base::Value*>* d);
199 virtual ~RetrievePropertyOp(); 199 virtual ~RetrievePropertyOp();
200 void Execute(); 200 void Execute();
201 void Fail(SignedSettings::ReturnCode code); 201 void Fail(SignedSettings::ReturnCode code);
202 void Succeed(const std::string& value); 202 void Succeed(const base::Value* value);
203 // Implementation of OwnerManager::Delegate::OnKeyOpComplete() 203 // Implementation of OwnerManager::Delegate::OnKeyOpComplete()
204 void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code, 204 void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code,
205 const std::vector<uint8>& payload); 205 const std::vector<uint8>& payload);
206 206
207 private: 207 private:
208 static const char* kVeritas[]; 208 base::Value* LookUpInPolicy(const std::string& prop);
209
210 std::string LookUpInPolicy(const std::string& prop);
211 // Always call d_->OnSettingOpCompleted() via this call. 209 // Always call d_->OnSettingOpCompleted() via this call.
212 // It guarantees that the callback will not be triggered until _after_ 210 // It guarantees that the callback will not be triggered until _after_
213 // Execute() returns, which is implicitly assumed by SignedSettingsHelper 211 // Execute() returns, which is implicitly assumed by SignedSettingsHelper
214 // in some cases. 212 // in some cases.
215 void PerformCallback(SignedSettings::ReturnCode code, 213 void PerformCallback(SignedSettings::ReturnCode code,
216 const std::string& value); 214 const base::Value* value);
217 215
218 std::string name_; 216 std::string name_;
219 std::string value_; 217 SignedSettings::Delegate<const base::Value*>* d_;
220 SignedSettings::Delegate<std::string>* d_;
221 }; 218 };
222 219
223 class StorePolicyOp : public SignedSettings { 220 class StorePolicyOp : public SignedSettings {
224 public: 221 public:
225 StorePolicyOp(em::PolicyFetchResponse* policy, 222 StorePolicyOp(em::PolicyFetchResponse* policy,
226 SignedSettings::Delegate<bool>* d); 223 SignedSettings::Delegate<bool>* d);
227 virtual ~StorePolicyOp(); 224 virtual ~StorePolicyOp();
228 void Execute(); 225 void Execute();
229 void Fail(SignedSettings::ReturnCode code); 226 void Fail(SignedSettings::ReturnCode code);
230 void Succeed(bool value); 227 void Succeed(bool value);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 SignedSettings::Delegate<bool>* d) { 285 SignedSettings::Delegate<bool>* d) {
289 DCHECK(d != NULL); 286 DCHECK(d != NULL);
290 return new WhitelistOp(Authenticator::Canonicalize(email), 287 return new WhitelistOp(Authenticator::Canonicalize(email),
291 add_to_whitelist, 288 add_to_whitelist,
292 d); 289 d);
293 } 290 }
294 291
295 // static 292 // static
296 SignedSettings* SignedSettings::CreateStorePropertyOp( 293 SignedSettings* SignedSettings::CreateStorePropertyOp(
297 const std::string& name, 294 const std::string& name,
298 const std::string& value, 295 const base::Value& value,
299 SignedSettings::Delegate<bool>* d) { 296 SignedSettings::Delegate<bool>* d) {
300 DCHECK(d != NULL); 297 DCHECK(d != NULL);
301 return new StorePropertyOp(name, value, d); 298 return new StorePropertyOp(name, value, d);
302 } 299 }
303 300
304 // static 301 // static
305 SignedSettings* SignedSettings::CreateRetrievePropertyOp( 302 SignedSettings* SignedSettings::CreateRetrievePropertyOp(
306 const std::string& name, 303 const std::string& name,
307 SignedSettings::Delegate<std::string>* d) { 304 SignedSettings::Delegate<const base::Value*>* d) {
308 DCHECK(d != NULL); 305 DCHECK(d != NULL);
309 return new RetrievePropertyOp(name, d); 306 return new RetrievePropertyOp(name, d);
310 } 307 }
311 308
312 // static 309 // static
313 SignedSettings* SignedSettings::CreateStorePolicyOp( 310 SignedSettings* SignedSettings::CreateStorePolicyOp(
314 em::PolicyFetchResponse* policy, 311 em::PolicyFetchResponse* policy,
315 SignedSettings::Delegate<bool>* d) { 312 SignedSettings::Delegate<bool>* d) {
316 DCHECK(d != NULL); 313 DCHECK(d != NULL);
317 DCHECK(policy != NULL); 314 DCHECK(policy != NULL);
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 return; 510 return;
514 } 511 }
515 LOG(WARNING) << "Whitelist modification no-op: " << email; 512 LOG(WARNING) << "Whitelist modification no-op: " << email;
516 } 513 }
517 514
518 void WhitelistOp::PerformCallback(SignedSettings::ReturnCode code, bool value) { 515 void WhitelistOp::PerformCallback(SignedSettings::ReturnCode code, bool value) {
519 d_->OnSettingsOpCompleted(code, value); 516 d_->OnSettingsOpCompleted(code, value);
520 } 517 }
521 518
522 StorePropertyOp::StorePropertyOp(const std::string& name, 519 StorePropertyOp::StorePropertyOp(const std::string& name,
523 const std::string& value, 520 const base::Value& value,
524 SignedSettings::Delegate<bool>* d) 521 SignedSettings::Delegate<bool>* d)
525 : name_(name), 522 : name_(name),
526 value_(value), 523 value_(value.DeepCopy()),
527 d_(d), 524 d_(d),
528 store_op_(NULL) { 525 store_op_(NULL) {
529 } 526 }
530 527
531 StorePropertyOp::~StorePropertyOp() {} 528 StorePropertyOp::~StorePropertyOp() {}
532 529
533 void StorePropertyOp::Execute() { 530 void StorePropertyOp::Execute() {
534 if (service_->GetStatus(true) != OwnershipService::OWNERSHIP_TAKEN) { 531 if (service_->GetStatus(true) != OwnershipService::OWNERSHIP_TAKEN) {
535 if (g_browser_process && 532 if (g_browser_process &&
536 g_browser_process->local_state() && 533 g_browser_process->local_state() &&
537 SignedSettingsTempStorage::Store(name_, value_, 534 SignedSettingsTempStorage::Store(name_, *value_,
538 g_browser_process->local_state())) { 535 g_browser_process->local_state())) {
539 Succeed(true); 536 Succeed(true);
540 return; 537 return;
541 } 538 }
542 } 539 }
543 if (!service_->has_cached_policy()) { 540 if (!service_->has_cached_policy()) {
544 TryToFetchPolicyAndCallBack(); 541 TryToFetchPolicyAndCallBack();
545 return; 542 return;
546 } 543 }
547 // Posts a task to the FILE thread to sign policy. 544 // Posts a task to the FILE thread to sign policy.
548 em::PolicyData to_sign; 545 em::PolicyData to_sign;
549 to_sign.CheckTypeAndMergeFrom(service_->cached_policy()); 546 to_sign.CheckTypeAndMergeFrom(service_->cached_policy());
550 SetInPolicy(name_, value_, &to_sign); 547 SetInPolicy(name_, *value_, &to_sign);
551 to_store_.set_policy_data(to_sign.SerializeAsString()); 548 to_store_.set_policy_data(to_sign.SerializeAsString());
552 service_->StartSigningAttempt(to_store_.policy_data(), this); 549 service_->StartSigningAttempt(to_store_.policy_data(), this);
553 } 550 }
554 551
555 void StorePropertyOp::Fail(SignedSettings::ReturnCode code) { 552 void StorePropertyOp::Fail(SignedSettings::ReturnCode code) {
556 BrowserThread::PostTask( 553 BrowserThread::PostTask(
557 BrowserThread::UI, FROM_HERE, 554 BrowserThread::UI, FROM_HERE,
558 base::Bind(&StorePropertyOp::PerformCallback, this, code, false)); 555 base::Bind(&StorePropertyOp::PerformCallback, this, code, false));
559 } 556 }
560 557
(...skipping 30 matching lines...) Expand all
591 em::PolicyData poldata; 588 em::PolicyData poldata;
592 poldata.ParseFromString(to_store_.policy_data()); 589 poldata.ParseFromString(to_store_.policy_data());
593 service_->set_cached_policy(poldata); 590 service_->set_cached_policy(poldata);
594 Succeed(value); 591 Succeed(value);
595 return; 592 return;
596 } 593 }
597 Fail(NOT_FOUND); 594 Fail(NOT_FOUND);
598 } 595 }
599 596
600 void StorePropertyOp::SetInPolicy(const std::string& prop, 597 void StorePropertyOp::SetInPolicy(const std::string& prop,
601 const std::string& value, 598 const base::Value& value,
602 em::PolicyData* poldata) { 599 em::PolicyData* poldata) {
603 em::ChromeDeviceSettingsProto pol; 600 em::ChromeDeviceSettingsProto pol;
604 pol.ParseFromString(poldata->policy_value()); 601 pol.ParseFromString(poldata->policy_value());
605 if (prop == kAccountsPrefAllowNewUser) { 602 if (prop == kAccountsPrefAllowNewUser) {
606 em::AllowNewUsersProto* allow = pol.mutable_allow_new_users(); 603 em::AllowNewUsersProto* allow = pol.mutable_allow_new_users();
607 allow->set_allow_new_users(value == "true"); 604 bool allow_value;
608 605 if (value.GetAsBoolean(&allow_value))
606 allow->set_allow_new_users(allow_value);
607 else
608 NOTREACHED();
609 } else if (prop == kAccountsPrefAllowGuest) { 609 } else if (prop == kAccountsPrefAllowGuest) {
610 em::GuestModeEnabledProto* guest = pol.mutable_guest_mode_enabled(); 610 em::GuestModeEnabledProto* guest = pol.mutable_guest_mode_enabled();
611 guest->set_guest_mode_enabled(value == "true"); 611 bool guest_value;
612 612 if (value.GetAsBoolean(&guest_value))
613 guest->set_guest_mode_enabled(guest_value);
614 else
615 NOTREACHED();
613 } else if (prop == kAccountsPrefShowUserNamesOnSignIn) { 616 } else if (prop == kAccountsPrefShowUserNamesOnSignIn) {
614 em::ShowUserNamesOnSigninProto* show = pol.mutable_show_user_names(); 617 em::ShowUserNamesOnSigninProto* show = pol.mutable_show_user_names();
615 show->set_show_user_names(value == "true"); 618 bool show_value;
616 619 if (value.GetAsBoolean(&show_value))
620 show->set_show_user_names(show_value);
621 else
622 NOTREACHED();
617 } else if (prop == kSignedDataRoamingEnabled) { 623 } else if (prop == kSignedDataRoamingEnabled) {
618 em::DataRoamingEnabledProto* roam = pol.mutable_data_roaming_enabled(); 624 em::DataRoamingEnabledProto* roam = pol.mutable_data_roaming_enabled();
619 roam->set_data_roaming_enabled(value == "true"); 625 bool roaming_value;
620 626 if (value.GetAsBoolean(&roaming_value))
627 roam->set_data_roaming_enabled(roaming_value);
628 else
629 NOTREACHED();
621 } else if (prop == kSettingProxyEverywhere) { 630 } else if (prop == kSettingProxyEverywhere) {
622 // TODO(cmasone): NOTIMPLEMENTED() once http://crosbug.com/13052 is fixed. 631 // TODO(cmasone): NOTIMPLEMENTED() once http://crosbug.com/13052 is fixed.
623 bool success = pol.mutable_device_proxy_settings()->ParseFromString(value); 632 std::string proxy_value;
624 DCHECK(success); 633 if (value.GetAsString(&proxy_value)) {
625 634 bool success =
635 pol.mutable_device_proxy_settings()->ParseFromString(proxy_value);
636 DCHECK(success);
637 } else {
638 NOTREACHED();
639 }
626 } else if (prop == kReleaseChannel) { 640 } else if (prop == kReleaseChannel) {
627 em::ReleaseChannelProto* release_channel = pol.mutable_release_channel(); 641 em::ReleaseChannelProto* release_channel = pol.mutable_release_channel();
628 release_channel->set_release_channel(value); 642 std::string channel_value;
629 643 if (value.GetAsString(&channel_value))
644 release_channel->set_release_channel(channel_value);
645 else
646 NOTREACHED();
630 } else if (prop == kStatsReportingPref) { 647 } else if (prop == kStatsReportingPref) {
631 em::MetricsEnabledProto* metrics = pol.mutable_metrics_enabled(); 648 em::MetricsEnabledProto* metrics = pol.mutable_metrics_enabled();
632 metrics->set_metrics_enabled(value == "true"); 649 bool metrics_value;
633 650 if (value.GetAsBoolean(&metrics_value))
651 metrics->set_metrics_enabled(metrics_value);
652 else
653 NOTREACHED();
654 } else if (prop == kAccountsPrefUsers) {
655 em::UserWhitelistProto* whitelist_proto = pol.mutable_user_whitelist();
656 whitelist_proto->clear_user_whitelist();
657 const base::ListValue& users = static_cast<const base::ListValue&>(value);
658 for (base::ListValue::const_iterator i = users.begin();
659 i != users.end(); ++i) {
660 std::string email;
661 if ((*i)->GetAsString(&email))
662 whitelist_proto->add_user_whitelist(email.c_str());
663 }
634 } else { 664 } else {
635 NOTREACHED(); 665 NOTREACHED();
636 } 666 }
637 poldata->set_policy_value(pol.SerializeAsString()); 667 poldata->set_policy_value(pol.SerializeAsString());
638 } 668 }
639 669
640 void StorePropertyOp::PerformCallback(SignedSettings::ReturnCode code, 670 void StorePropertyOp::PerformCallback(SignedSettings::ReturnCode code,
641 bool value) { 671 bool value) {
642 d_->OnSettingsOpCompleted(code, value); 672 d_->OnSettingsOpCompleted(code, value);
643 } 673 }
644 674
645 // static 675 RetrievePropertyOp::RetrievePropertyOp(
646 const char* RetrievePropertyOp::kVeritas[] = { "false", "true" }; 676 const std::string& name,
647 677 SignedSettings::Delegate<const base::Value*>* d)
648 RetrievePropertyOp::RetrievePropertyOp(const std::string& name,
649 SignedSettings::Delegate<std::string>* d)
650 : name_(name), 678 : name_(name),
651 d_(d) { 679 d_(d) {
652 } 680 }
653 681
654 RetrievePropertyOp::~RetrievePropertyOp() {} 682 RetrievePropertyOp::~RetrievePropertyOp() {}
655 683
656 void RetrievePropertyOp::Execute() { 684 void RetrievePropertyOp::Execute() {
685 base::Value* value;
657 // TODO(dilmah): Fix the race: 686 // TODO(dilmah): Fix the race:
658 // At the moment when device becomes owned there is lapse of time after 687 // At the moment when device becomes owned there is lapse of time after
659 // device has been owned and before temp_storage settings are finally 688 // device has been owned and before temp_storage settings are finally
660 // persisted into signed settings. 689 // persisted into signed settings.
661 // In this lapse of time Retrieve loses access to those settings. 690 // In this lapse of time Retrieve loses access to those settings.
662 if (service_->GetStatus(true) != OwnershipService::OWNERSHIP_TAKEN) { 691 if (service_->GetStatus(true) != OwnershipService::OWNERSHIP_TAKEN) {
663 if (g_browser_process && 692 if (g_browser_process &&
664 g_browser_process->local_state() && 693 g_browser_process->local_state() &&
665 SignedSettingsTempStorage::Retrieve( 694 SignedSettingsTempStorage::Retrieve(
666 name_, &value_, g_browser_process->local_state())) { 695 name_, &value, g_browser_process->local_state())) {
667 Succeed(value_); 696 Succeed(value->DeepCopy());
668 return; 697 return;
669 } 698 }
670 } 699 }
671 700
672 if (!service_->has_cached_policy()) { 701 if (!service_->has_cached_policy()) {
673 TryToFetchPolicyAndCallBack(); 702 TryToFetchPolicyAndCallBack();
674 return; 703 return;
675 } 704 }
676 std::string value = LookUpInPolicy(name_); 705 value = LookUpInPolicy(name_);
677 if (value.empty()) 706 if (!value)
678 Fail(NOT_FOUND); 707 Fail(NOT_FOUND);
679 else 708 else
680 Succeed(value); 709 Succeed(value);
681 } 710 }
682 711
683 void RetrievePropertyOp::Fail(SignedSettings::ReturnCode code) { 712 void RetrievePropertyOp::Fail(SignedSettings::ReturnCode code) {
684 BrowserThread::PostTask( 713 BrowserThread::PostTask(
685 BrowserThread::UI, FROM_HERE, 714 BrowserThread::UI, FROM_HERE,
686 base::Bind(&RetrievePropertyOp::PerformCallback, this, code, 715 base::Bind(&RetrievePropertyOp::PerformCallback, this,
687 std::string())); 716 code, static_cast<const base::Value*>(NULL)));
688 } 717 }
689 718
690 void RetrievePropertyOp::Succeed(const std::string& value) { 719 void RetrievePropertyOp::Succeed(const base::Value* value) {
691 BrowserThread::PostTask( 720 BrowserThread::PostTask(
692 BrowserThread::UI, FROM_HERE, 721 BrowserThread::UI, FROM_HERE,
693 base::Bind(&RetrievePropertyOp::PerformCallback, this, SUCCESS, value)); 722 base::Bind(&RetrievePropertyOp::PerformCallback, this,
723 SUCCESS, base::Owned(value)));
694 } 724 }
695 725
696 // DEPRECATED. 726 // DEPRECATED.
697 void RetrievePropertyOp::OnKeyOpComplete( 727 void RetrievePropertyOp::OnKeyOpComplete(
698 const OwnerManager::KeyOpCode return_code, 728 const OwnerManager::KeyOpCode return_code,
699 const std::vector<uint8>& sig) { 729 const std::vector<uint8>& sig) {
700 NOTREACHED(); 730 NOTREACHED();
701 } 731 }
702 732
703 std::string RetrievePropertyOp::LookUpInPolicy(const std::string& prop) { 733 base::Value* RetrievePropertyOp::LookUpInPolicy(const std::string& prop) {
704 if (prop == kDeviceOwner) { 734 if (prop == kDeviceOwner) {
705 const em::PolicyData& data = service_->cached_policy(); 735 const em::PolicyData& data = service_->cached_policy();
706 if (data.has_username() && !data.has_request_token()) 736 if (data.has_username() && !data.has_request_token())
707 return data.username(); 737 return base::Value::CreateStringValue(data.username());
708 return "";
709 } 738 }
710 VLOG(2) << "Looking up " << prop; 739 VLOG(2) << "Looking up " << prop;
711 em::ChromeDeviceSettingsProto pol; 740 em::ChromeDeviceSettingsProto pol;
712 pol.ParseFromString(service_->cached_policy().policy_value()); 741 pol.ParseFromString(service_->cached_policy().policy_value());
713 if (prop == kAccountsPrefAllowNewUser) { 742 if (prop == kAccountsPrefAllowNewUser) {
714 if (pol.has_allow_new_users() && 743 if (pol.has_allow_new_users() &&
715 pol.allow_new_users().has_allow_new_users() && 744 pol.allow_new_users().has_allow_new_users() &&
716 pol.allow_new_users().allow_new_users()) { 745 pol.allow_new_users().allow_new_users()) {
717 return kVeritas[1]; // New users allowed, user_whitelist() ignored. 746 // New users allowed, user_whitelist() ignored.
747 return base::Value::CreateBooleanValue(true);
718 } 748 }
719 // If we have the allow_new_users bool, and it is true, we honor that above. 749 // If we have the allow_new_users bool, and it is true, we honor that above.
720 // In all other cases (don't have it, have it and it is set to false, etc), 750 // In all other cases (don't have it, have it and it is set to false, etc),
721 // We will honor the user_whitelist() if it is there and populated. 751 // We will honor the user_whitelist() if it is there and populated.
722 // Otherwise, fail open (to do otherwise could render the device unusable). 752 // Otherwise we default to allowing new users.
723 if (!pol.has_user_whitelist()) 753 if (!pol.has_user_whitelist())
724 return kVeritas[1]; // Default to allowing new users. 754 return base::Value::CreateBooleanValue(true);
725 return kVeritas[pol.user_whitelist().user_whitelist_size() == 0]; 755 return base::Value::CreateBooleanValue(
756 pol.user_whitelist().user_whitelist_size() == 0);
726 757
727 } else if (prop == kAccountsPrefAllowGuest) { 758 } else if (prop == kAccountsPrefAllowGuest) {
728 if (!pol.has_guest_mode_enabled() || 759 if (!pol.has_guest_mode_enabled() ||
729 !pol.guest_mode_enabled().has_guest_mode_enabled()) { 760 !pol.guest_mode_enabled().has_guest_mode_enabled()) {
730 return kVeritas[1]; // Default to allowing guests; 761 // Default to allowing guests;
762 return base::Value::CreateBooleanValue(true);
731 } 763 }
732 return kVeritas[pol.guest_mode_enabled().guest_mode_enabled()]; 764 return base::Value::CreateBooleanValue(
765 pol.guest_mode_enabled().guest_mode_enabled());
733 766
734 } else if (prop == kAccountsPrefShowUserNamesOnSignIn) { 767 } else if (prop == kAccountsPrefShowUserNamesOnSignIn) {
735 if (!pol.has_show_user_names() || 768 if (!pol.has_show_user_names() ||
736 !pol.show_user_names().has_show_user_names()) { 769 !pol.show_user_names().has_show_user_names()) {
737 return kVeritas[1]; // Default to showing pods on the login screen; 770 // Default to showing pods on the login screen;
771 return base::Value::CreateBooleanValue(true);
738 } 772 }
739 return kVeritas[pol.show_user_names().show_user_names()]; 773 return base::Value::CreateBooleanValue(
774 pol.show_user_names().show_user_names());
740 775
741 } else if (prop == kSignedDataRoamingEnabled) { 776 } else if (prop == kSignedDataRoamingEnabled) {
742 if (!pol.has_data_roaming_enabled() || 777 if (!pol.has_data_roaming_enabled() ||
743 !pol.data_roaming_enabled().has_data_roaming_enabled()) { 778 !pol.data_roaming_enabled().has_data_roaming_enabled()) {
744 return kVeritas[0]; // Default to disabling cellular data roaming; 779 // Default to disabling cellular data roaming;
780 return base::Value::CreateBooleanValue(false);
745 } 781 }
746 return kVeritas[pol.data_roaming_enabled().data_roaming_enabled()]; 782 return base::Value::CreateBooleanValue(
783 pol.data_roaming_enabled().data_roaming_enabled());
747 784
748 } else if (prop == kSettingProxyEverywhere) { 785 } else if (prop == kSettingProxyEverywhere) {
749 // TODO(cmasone): NOTIMPLEMENTED() once http://crosbug.com/13052 is fixed. 786 // TODO(cmasone): NOTIMPLEMENTED() once http://crosbug.com/13052 is fixed.
750 std::string serialized; 787 std::string serialized;
751 if (!pol.has_device_proxy_settings() || 788 if (pol.has_device_proxy_settings() &&
752 !pol.device_proxy_settings().SerializeToString(&serialized)) { 789 pol.device_proxy_settings().SerializeToString(&serialized)) {
753 return ""; // Default to invalid proxy config (will be ignored). 790 return base::Value::CreateStringValue(serialized);
754 } 791 }
755 return serialized;
756 792
757 } else if (prop == kReleaseChannel) { 793 } else if (prop == kReleaseChannel) {
758 if (!pol.has_release_channel() || 794 if (!pol.has_release_channel() ||
759 !pol.release_channel().has_release_channel()) { 795 !pol.release_channel().has_release_channel()) {
760 return ""; // Default to an invalid channel (will be ignored). 796 // Default to an invalid channel (will be ignored).
797 return base::Value::CreateStringValue("");
761 } 798 }
762 return pol.release_channel().release_channel(); 799 return base::Value::CreateStringValue(
800 pol.release_channel().release_channel());
763 801
764 } else if (prop == kStatsReportingPref) { 802 } else if (prop == kStatsReportingPref) {
765 if (pol.has_metrics_enabled()) { 803 if (pol.has_metrics_enabled()) {
766 return kVeritas[pol.metrics_enabled().metrics_enabled()]; 804 return base::Value::CreateBooleanValue(
805 pol.metrics_enabled().metrics_enabled());
767 } 806 }
807 } else if (prop == kAccountsPrefUsers) {
808 base::ListValue* list = new base::ListValue();
809 const em::UserWhitelistProto& whitelist_proto = pol.user_whitelist();
810 const RepeatedPtrField<string>& whitelist =
811 whitelist_proto.user_whitelist();
812 for (RepeatedPtrField<string>::const_iterator it = whitelist.begin();
813 it != whitelist.end(); ++it) {
814 list->Append(base::Value::CreateStringValue(*it));
815 }
816 return list;
768 } 817 }
769 return std::string(); 818 return NULL;
770 } 819 }
771 820
772 void RetrievePropertyOp::PerformCallback(SignedSettings::ReturnCode code, 821 void RetrievePropertyOp::PerformCallback(SignedSettings::ReturnCode code,
773 const std::string& value) { 822 const base::Value* value) {
774 d_->OnSettingsOpCompleted(code, value); 823 d_->OnSettingsOpCompleted(code, value);
775 } 824 }
776 825
777 StorePolicyOp::StorePolicyOp(em::PolicyFetchResponse* policy, 826 StorePolicyOp::StorePolicyOp(em::PolicyFetchResponse* policy,
778 SignedSettings::Delegate<bool>* d) 827 SignedSettings::Delegate<bool>* d)
779 : policy_(policy), 828 : policy_(policy),
780 d_(d) { 829 d_(d) {
781 } 830 }
782 831
783 StorePolicyOp::~StorePolicyOp() {} 832 StorePolicyOp::~StorePolicyOp() {}
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
929 sig.assign(sig_ptr, sig_ptr + policy_.policy_data_signature().length()); 978 sig.assign(sig_ptr, sig_ptr + policy_.policy_data_signature().length());
930 service_->StartVerifyAttempt(policy_.policy_data(), sig, this); 979 service_->StartVerifyAttempt(policy_.policy_data(), sig, this);
931 } 980 }
932 981
933 void RetrievePolicyOp::PerformCallback(SignedSettings::ReturnCode code, 982 void RetrievePolicyOp::PerformCallback(SignedSettings::ReturnCode code,
934 const em::PolicyFetchResponse& value) { 983 const em::PolicyFetchResponse& value) {
935 d_->OnSettingsOpCompleted(code, value); 984 d_->OnSettingsOpCompleted(code, value);
936 } 985 }
937 986
938 } // namespace chromeos 987 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698