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

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 and made clang happy. Created 9 years, 2 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 | 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/memory/ref_counted.h" 11 #include "base/memory/ref_counted.h"
11 #include "base/stringprintf.h" 12 #include "base/stringprintf.h"
12 #include "base/threading/thread_restrictions.h" 13 #include "base/threading/thread_restrictions.h"
13 #include "chrome/browser/browser_process.h" 14 #include "chrome/browser/browser_process.h"
14 #include "chrome/browser/chromeos/cros/cros_library.h" 15 #include "chrome/browser/chromeos/cros/cros_library.h"
15 #include "chrome/browser/chromeos/cros/login_library.h" 16 #include "chrome/browser/chromeos/cros/login_library.h"
16 #include "chrome/browser/chromeos/cros_settings_names.h" 17 #include "chrome/browser/chromeos/cros_settings_names.h"
17 #include "chrome/browser/chromeos/login/authenticator.h" 18 #include "chrome/browser/chromeos/login/authenticator.h"
18 #include "chrome/browser/chromeos/login/ownership_service.h" 19 #include "chrome/browser/chromeos/login/ownership_service.h"
19 #include "chrome/browser/chromeos/login/signed_settings_temp_storage.h" 20 #include "chrome/browser/chromeos/login/signed_settings_temp_storage.h"
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 const bool add_to_whitelist_; 154 const bool add_to_whitelist_;
154 SignedSettings::Delegate<bool>* d_; 155 SignedSettings::Delegate<bool>* d_;
155 em::PolicyFetchResponse to_store_; 156 em::PolicyFetchResponse to_store_;
156 scoped_refptr<SignedSettings> store_op_; 157 scoped_refptr<SignedSettings> store_op_;
157 }; 158 };
158 159
159 class StorePropertyOp : public SignedSettings, 160 class StorePropertyOp : public SignedSettings,
160 public SignedSettings::Delegate<bool> { 161 public SignedSettings::Delegate<bool> {
161 public: 162 public:
162 StorePropertyOp(const std::string& name, 163 StorePropertyOp(const std::string& name,
163 const std::string& value, 164 const base::Value& value,
164 SignedSettings::Delegate<bool>* d); 165 SignedSettings::Delegate<bool>* d);
165 virtual ~StorePropertyOp(); 166 virtual ~StorePropertyOp();
166 void Execute(); 167 void Execute();
167 void Fail(SignedSettings::ReturnCode code); 168 void Fail(SignedSettings::ReturnCode code);
168 void Succeed(bool value); 169 void Succeed(bool value);
169 // Implementation of OwnerManager::Delegate 170 // Implementation of OwnerManager::Delegate
170 void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code, 171 void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code,
171 const std::vector<uint8>& payload); 172 const std::vector<uint8>& payload);
172 // Implementation of SignedSettings::Delegate 173 // Implementation of SignedSettings::Delegate
173 void OnSettingsOpCompleted(ReturnCode code, bool value); 174 void OnSettingsOpCompleted(ReturnCode code, bool value);
174 175
175 private: 176 private:
176 void SetInPolicy(const std::string& prop, 177 void SetInPolicy(const std::string& prop,
177 const std::string& value, 178 const base::Value& value,
178 em::PolicyData* poldata); 179 em::PolicyData* poldata);
179 // Always call d_->OnSettingOpCompleted() via this call. 180 // Always call d_->OnSettingOpCompleted() via this call.
180 // It guarantees that the callback will not be triggered until _after_ 181 // It guarantees that the callback will not be triggered until _after_
181 // Execute() returns, which is implicitly assumed by SignedSettingsHelper 182 // Execute() returns, which is implicitly assumed by SignedSettingsHelper
182 // in some cases. 183 // in some cases.
183 void PerformCallback(SignedSettings::ReturnCode code, bool value); 184 void PerformCallback(SignedSettings::ReturnCode code, bool value);
184 185
185 std::string name_; 186 std::string name_;
186 std::string value_; 187 scoped_ptr<base::Value> value_;
187 SignedSettings::Delegate<bool>* d_; 188 SignedSettings::Delegate<bool>* d_;
188 em::PolicyFetchResponse to_store_; 189 em::PolicyFetchResponse to_store_;
189 scoped_refptr<SignedSettings> store_op_; 190 scoped_refptr<SignedSettings> store_op_;
190 }; 191 };
191 192
192 class RetrievePropertyOp : public SignedSettings { 193 class RetrievePropertyOp : public SignedSettings {
193 public: 194 public:
194 RetrievePropertyOp(const std::string& name, 195 RetrievePropertyOp(const std::string& name,
195 SignedSettings::Delegate<std::string>* d); 196 SignedSettings::Delegate<const base::Value&>* d);
196 virtual ~RetrievePropertyOp(); 197 virtual ~RetrievePropertyOp();
197 void Execute(); 198 void Execute();
198 void Fail(SignedSettings::ReturnCode code); 199 void Fail(SignedSettings::ReturnCode code);
199 void Succeed(const std::string& value); 200 void Succeed(const base::Value& value);
200 // Implementation of OwnerManager::Delegate::OnKeyOpComplete() 201 // Implementation of OwnerManager::Delegate::OnKeyOpComplete()
201 void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code, 202 void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code,
202 const std::vector<uint8>& payload); 203 const std::vector<uint8>& payload);
203 204
204 private: 205 private:
205 static const char* kVeritas[]; 206 static const char* kVeritas[];
Mattias Nissler (ping if slow) 2011/10/07 11:02:57 This should be unused, so remove it.
pastarmovj 2011/10/13 11:25:06 Done.
206 207
207 std::string LookUpInPolicy(const std::string& prop); 208 base::Value* LookUpInPolicy(const std::string& prop);
208 // Always call d_->OnSettingOpCompleted() via this call. 209 // Always call d_->OnSettingOpCompleted() via this call.
209 // It guarantees that the callback will not be triggered until _after_ 210 // It guarantees that the callback will not be triggered until _after_
210 // Execute() returns, which is implicitly assumed by SignedSettingsHelper 211 // Execute() returns, which is implicitly assumed by SignedSettingsHelper
211 // in some cases. 212 // in some cases.
212 void PerformCallback(SignedSettings::ReturnCode code, 213 void PerformCallback(SignedSettings::ReturnCode code,
213 const std::string& value); 214 const base::Value& value);
214 215
215 std::string name_; 216 std::string name_;
216 std::string value_; 217 scoped_ptr<base::Value> value_;
217 SignedSettings::Delegate<std::string>* d_; 218 SignedSettings::Delegate<const base::Value&>* d_;
218 }; 219 };
219 220
220 class StorePolicyOp : public SignedSettings { 221 class StorePolicyOp : public SignedSettings {
221 public: 222 public:
222 StorePolicyOp(em::PolicyFetchResponse* policy, 223 StorePolicyOp(em::PolicyFetchResponse* policy,
223 SignedSettings::Delegate<bool>* d); 224 SignedSettings::Delegate<bool>* d);
224 virtual ~StorePolicyOp(); 225 virtual ~StorePolicyOp();
225 void Execute(); 226 void Execute();
226 void Fail(SignedSettings::ReturnCode code); 227 void Fail(SignedSettings::ReturnCode code);
227 void Succeed(bool value); 228 void Succeed(bool value);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 SignedSettings::Delegate<bool>* d) { 288 SignedSettings::Delegate<bool>* d) {
288 DCHECK(d != NULL); 289 DCHECK(d != NULL);
289 return new WhitelistOp(Authenticator::Canonicalize(email), 290 return new WhitelistOp(Authenticator::Canonicalize(email),
290 add_to_whitelist, 291 add_to_whitelist,
291 d); 292 d);
292 } 293 }
293 294
294 // static 295 // static
295 SignedSettings* SignedSettings::CreateStorePropertyOp( 296 SignedSettings* SignedSettings::CreateStorePropertyOp(
296 const std::string& name, 297 const std::string& name,
297 const std::string& value, 298 const base::Value& value,
298 SignedSettings::Delegate<bool>* d) { 299 SignedSettings::Delegate<bool>* d) {
299 DCHECK(d != NULL); 300 DCHECK(d != NULL);
300 return new StorePropertyOp(name, value, d); 301 return new StorePropertyOp(name, value, d);
301 } 302 }
302 303
303 // static 304 // static
304 SignedSettings* SignedSettings::CreateRetrievePropertyOp( 305 SignedSettings* SignedSettings::CreateRetrievePropertyOp(
305 const std::string& name, 306 const std::string& name,
306 SignedSettings::Delegate<std::string>* d) { 307 SignedSettings::Delegate<const base::Value&>* d) {
307 DCHECK(d != NULL); 308 DCHECK(d != NULL);
308 return new RetrievePropertyOp(name, d); 309 return new RetrievePropertyOp(name, d);
309 } 310 }
310 311
311 // static 312 // static
312 SignedSettings* SignedSettings::CreateStorePolicyOp( 313 SignedSettings* SignedSettings::CreateStorePolicyOp(
313 em::PolicyFetchResponse* policy, 314 em::PolicyFetchResponse* policy,
314 SignedSettings::Delegate<bool>* d) { 315 SignedSettings::Delegate<bool>* d) {
315 DCHECK(d != NULL); 316 DCHECK(d != NULL);
316 DCHECK(policy != NULL); 317 DCHECK(policy != NULL);
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 return; 518 return;
518 } 519 }
519 LOG(WARNING) << "Whitelist modification no-op: " << email; 520 LOG(WARNING) << "Whitelist modification no-op: " << email;
520 } 521 }
521 522
522 void WhitelistOp::PerformCallback(SignedSettings::ReturnCode code, bool value) { 523 void WhitelistOp::PerformCallback(SignedSettings::ReturnCode code, bool value) {
523 d_->OnSettingsOpCompleted(code, value); 524 d_->OnSettingsOpCompleted(code, value);
524 } 525 }
525 526
526 StorePropertyOp::StorePropertyOp(const std::string& name, 527 StorePropertyOp::StorePropertyOp(const std::string& name,
527 const std::string& value, 528 const base::Value& value,
528 SignedSettings::Delegate<bool>* d) 529 SignedSettings::Delegate<bool>* d)
529 : name_(name), 530 : name_(name),
530 value_(value), 531 value_(value.DeepCopy()),
531 d_(d), 532 d_(d),
532 store_op_(NULL) { 533 store_op_(NULL) {
533 } 534 }
534 535
535 StorePropertyOp::~StorePropertyOp() {} 536 StorePropertyOp::~StorePropertyOp() {}
536 537
537 void StorePropertyOp::Execute() { 538 void StorePropertyOp::Execute() {
538 if (service_->GetStatus(true) != OwnershipService::OWNERSHIP_TAKEN) { 539 if (service_->GetStatus(true) != OwnershipService::OWNERSHIP_TAKEN) {
539 if (g_browser_process && 540 if (g_browser_process &&
540 g_browser_process->local_state() && 541 g_browser_process->local_state() &&
541 SignedSettingsTempStorage::Store(name_, value_, 542 SignedSettingsTempStorage::Store(name_, *value_,
542 g_browser_process->local_state())) { 543 g_browser_process->local_state())) {
543 Succeed(true); 544 Succeed(true);
544 return; 545 return;
545 } 546 }
546 } 547 }
547 if (!service_->has_cached_policy()) { 548 if (!service_->has_cached_policy()) {
548 TryToFetchPolicyAndCallBack(); 549 TryToFetchPolicyAndCallBack();
549 return; 550 return;
550 } 551 }
551 // Posts a task to the FILE thread to sign policy. 552 // Posts a task to the FILE thread to sign policy.
552 em::PolicyData to_sign; 553 em::PolicyData to_sign;
553 to_sign.CheckTypeAndMergeFrom(service_->cached_policy()); 554 to_sign.CheckTypeAndMergeFrom(service_->cached_policy());
554 SetInPolicy(name_, value_, &to_sign); 555 SetInPolicy(name_, *value_, &to_sign);
555 to_store_.set_policy_data(to_sign.SerializeAsString()); 556 to_store_.set_policy_data(to_sign.SerializeAsString());
556 service_->StartSigningAttempt(to_store_.policy_data(), this); 557 service_->StartSigningAttempt(to_store_.policy_data(), this);
557 } 558 }
558 559
559 void StorePropertyOp::Fail(SignedSettings::ReturnCode code) { 560 void StorePropertyOp::Fail(SignedSettings::ReturnCode code) {
560 BrowserThread::PostTask( 561 BrowserThread::PostTask(
561 BrowserThread::UI, FROM_HERE, 562 BrowserThread::UI, FROM_HERE,
562 NewRunnableMethod(this, &StorePropertyOp::PerformCallback, code, false)); 563 NewRunnableMethod(this, &StorePropertyOp::PerformCallback, code, false));
563 } 564 }
564 565
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
598 em::PolicyData poldata; 599 em::PolicyData poldata;
599 poldata.ParseFromString(to_store_.policy_data()); 600 poldata.ParseFromString(to_store_.policy_data());
600 service_->set_cached_policy(poldata); 601 service_->set_cached_policy(poldata);
601 Succeed(value); 602 Succeed(value);
602 return; 603 return;
603 } 604 }
604 Fail(NOT_FOUND); 605 Fail(NOT_FOUND);
605 } 606 }
606 607
607 void StorePropertyOp::SetInPolicy(const std::string& prop, 608 void StorePropertyOp::SetInPolicy(const std::string& prop,
608 const std::string& value, 609 const base::Value& value,
609 em::PolicyData* poldata) { 610 em::PolicyData* poldata) {
610 em::ChromeDeviceSettingsProto pol; 611 em::ChromeDeviceSettingsProto pol;
611 pol.ParseFromString(poldata->policy_value()); 612 pol.ParseFromString(poldata->policy_value());
612 if (prop == kAccountsPrefAllowNewUser) { 613 if (prop == kAccountsPrefAllowNewUser) {
613 em::AllowNewUsersProto* allow = pol.mutable_allow_new_users(); 614 em::AllowNewUsersProto* allow = pol.mutable_allow_new_users();
614 allow->set_allow_new_users(value == "true"); 615 bool allow_value;
615 616 if (value.GetAsBoolean(&allow_value))
617 allow->set_allow_new_users(allow_value);
Mattias Nissler (ping if slow) 2011/10/07 11:02:57 else NOTREACHED() (here and below?) Actually, it
pastarmovj 2011/10/13 11:25:06 Given the fact that we can only abstract the extra
616 } else if (prop == kAccountsPrefAllowGuest) { 618 } else if (prop == kAccountsPrefAllowGuest) {
617 em::GuestModeEnabledProto* guest = pol.mutable_guest_mode_enabled(); 619 em::GuestModeEnabledProto* guest = pol.mutable_guest_mode_enabled();
618 guest->set_guest_mode_enabled(value == "true"); 620 bool guest_value;
619 621 if (value.GetAsBoolean(&guest_value))
622 guest->set_guest_mode_enabled(guest_value);
620 } else if (prop == kAccountsPrefShowUserNamesOnSignIn) { 623 } else if (prop == kAccountsPrefShowUserNamesOnSignIn) {
621 em::ShowUserNamesOnSigninProto* show = pol.mutable_show_user_names(); 624 em::ShowUserNamesOnSigninProto* show = pol.mutable_show_user_names();
622 show->set_show_user_names(value == "true"); 625 bool show_value;
623 626 if (value.GetAsBoolean(&show_value))
627 show->set_show_user_names(show_value);
624 } else if (prop == kSignedDataRoamingEnabled) { 628 } else if (prop == kSignedDataRoamingEnabled) {
625 em::DataRoamingEnabledProto* roam = pol.mutable_data_roaming_enabled(); 629 em::DataRoamingEnabledProto* roam = pol.mutable_data_roaming_enabled();
626 roam->set_data_roaming_enabled(value == "true"); 630 bool roaming_value;
627 631 if (value.GetAsBoolean(&roaming_value))
632 roam->set_data_roaming_enabled(roaming_value);
628 } else if (prop == kSettingProxyEverywhere) { 633 } else if (prop == kSettingProxyEverywhere) {
629 // TODO(cmasone): NOTIMPLEMENTED() once http://crosbug.com/13052 is fixed. 634 // TODO(cmasone): NOTIMPLEMENTED() once http://crosbug.com/13052 is fixed.
630 bool success = pol.mutable_device_proxy_settings()->ParseFromString(value); 635 std::string proxy_value;
631 DCHECK(success); 636 if (value.GetAsString(&proxy_value)) {
632 637 bool success =
638 pol.mutable_device_proxy_settings()->ParseFromString(proxy_value);
639 DCHECK(success);
640 }
633 } else if (prop == kReleaseChannel) { 641 } else if (prop == kReleaseChannel) {
634 em::ReleaseChannelProto* release_channel = pol.mutable_release_channel(); 642 em::ReleaseChannelProto* release_channel = pol.mutable_release_channel();
635 release_channel->set_release_channel(value); 643 std::string channel_value;
636 644 if (value.GetAsString(&channel_value))
645 release_channel->set_release_channel(channel_value);
637 } else if (prop == kStatsReportingPref) { 646 } else if (prop == kStatsReportingPref) {
638 em::MetricsEnabledProto* metrics = pol.mutable_metrics_enabled(); 647 em::MetricsEnabledProto* metrics = pol.mutable_metrics_enabled();
639 metrics->set_metrics_enabled(value == "true"); 648 bool metrics_value;
640 649 if (value.GetAsBoolean(&metrics_value))
650 metrics->set_metrics_enabled(metrics_value);
651 } else if (prop == kAccountsPrefUsers) {
Chris Masone 2011/10/06 16:13:06 so, this essentially means that WhitelistOp is obs
pastarmovj 2011/10/13 11:25:06 I don't think this is much needed. The code still
652 em::UserWhitelistProto* whitelist_proto = pol.mutable_user_whitelist();
653 whitelist_proto->clear_user_whitelist();
654 const base::ListValue& users = static_cast<const base::ListValue&>(value);
655 for (base::ListValue::const_iterator i = users.begin();
656 i != users.end(); ++i) {
657 std::string email;
658 if ((*i)->GetAsString(&email))
659 whitelist_proto->add_user_whitelist(email.c_str());
660 }
641 } else { 661 } else {
642 NOTREACHED(); 662 NOTREACHED();
643 } 663 }
644 poldata->set_policy_value(pol.SerializeAsString()); 664 poldata->set_policy_value(pol.SerializeAsString());
645 } 665 }
646 666
647 void StorePropertyOp::PerformCallback(SignedSettings::ReturnCode code, 667 void StorePropertyOp::PerformCallback(SignedSettings::ReturnCode code,
648 bool value) { 668 bool value) {
649 d_->OnSettingsOpCompleted(code, value); 669 d_->OnSettingsOpCompleted(code, value);
650 } 670 }
651 671
652 // static 672 // static
653 const char* RetrievePropertyOp::kVeritas[] = { "false", "true" }; 673 const char* RetrievePropertyOp::kVeritas[] = { "false", "true" };
654 674
655 RetrievePropertyOp::RetrievePropertyOp(const std::string& name, 675 RetrievePropertyOp::RetrievePropertyOp(
656 SignedSettings::Delegate<std::string>* d) 676 const std::string& name,
677 SignedSettings::Delegate<const base::Value&>* d)
657 : name_(name), 678 : name_(name),
658 d_(d) { 679 d_(d) {
659 } 680 }
660 681
661 RetrievePropertyOp::~RetrievePropertyOp() {} 682 RetrievePropertyOp::~RetrievePropertyOp() {}
662 683
663 void RetrievePropertyOp::Execute() { 684 void RetrievePropertyOp::Execute() {
664 CHECK(chromeos::CrosLibrary::Get()->EnsureLoaded()); 685 CHECK(chromeos::CrosLibrary::Get()->EnsureLoaded());
665 // TODO(dilmah): Fix the race: 686 // TODO(dilmah): Fix the race:
666 // 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
667 // device has been owned and before temp_storage settings are finally 688 // device has been owned and before temp_storage settings are finally
668 // persisted into signed settings. 689 // persisted into signed settings.
669 // In this lapse of time Retrieve loses access to those settings. 690 // In this lapse of time Retrieve loses access to those settings.
670 if (service_->GetStatus(true) != OwnershipService::OWNERSHIP_TAKEN) { 691 if (service_->GetStatus(true) != OwnershipService::OWNERSHIP_TAKEN) {
692 base::Value* temp_value;
671 if (g_browser_process && 693 if (g_browser_process &&
672 g_browser_process->local_state() && 694 g_browser_process->local_state() &&
673 SignedSettingsTempStorage::Retrieve( 695 SignedSettingsTempStorage::Retrieve(
674 name_, &value_, g_browser_process->local_state())) { 696 name_, &temp_value, g_browser_process->local_state())) {
675 Succeed(value_); 697 value_.reset(temp_value->DeepCopy());
698 Succeed(*value_);
676 return; 699 return;
677 } 700 }
678 } 701 }
679 702
680 if (!service_->has_cached_policy()) { 703 if (!service_->has_cached_policy()) {
681 TryToFetchPolicyAndCallBack(); 704 TryToFetchPolicyAndCallBack();
682 return; 705 return;
683 } 706 }
684 std::string value = LookUpInPolicy(name_); 707 value_.reset(LookUpInPolicy(name_));
685 if (value.empty()) 708 if (!value_.get())
686 Fail(NOT_FOUND); 709 Fail(NOT_FOUND);
687 else 710 else
688 Succeed(value); 711 Succeed(*value_);
689 } 712 }
690 713
691 void RetrievePropertyOp::Fail(SignedSettings::ReturnCode code) { 714 void RetrievePropertyOp::Fail(SignedSettings::ReturnCode code) {
715 value_.reset(base::Value::CreateNullValue());
692 BrowserThread::PostTask( 716 BrowserThread::PostTask(
693 BrowserThread::UI, FROM_HERE, 717 BrowserThread::UI, FROM_HERE,
694 NewRunnableMethod(this, 718 base::Bind(&RetrievePropertyOp::PerformCallback, this,
695 &RetrievePropertyOp::PerformCallback, 719 code, base::ConstRef(*value_)));
696 code, std::string()));
697 } 720 }
698 721
699 void RetrievePropertyOp::Succeed(const std::string& value) { 722 void RetrievePropertyOp::Succeed(const base::Value& value) {
700 BrowserThread::PostTask( 723 BrowserThread::PostTask(
701 BrowserThread::UI, FROM_HERE, 724 BrowserThread::UI, FROM_HERE,
702 NewRunnableMethod(this, 725 base::Bind(&RetrievePropertyOp::PerformCallback, this,
703 &RetrievePropertyOp::PerformCallback, SUCCESS, value)); 726 SUCCESS, base::ConstRef(value)));
704 } 727 }
705 728
706 // DEPRECATED. 729 // DEPRECATED.
707 void RetrievePropertyOp::OnKeyOpComplete( 730 void RetrievePropertyOp::OnKeyOpComplete(
708 const OwnerManager::KeyOpCode return_code, 731 const OwnerManager::KeyOpCode return_code,
709 const std::vector<uint8>& sig) { 732 const std::vector<uint8>& sig) {
710 NOTREACHED(); 733 NOTREACHED();
711 } 734 }
712 735
713 std::string RetrievePropertyOp::LookUpInPolicy(const std::string& prop) { 736 base::Value* RetrievePropertyOp::LookUpInPolicy(const std::string& prop) {
714 if (prop == kDeviceOwner) { 737 if (prop == kDeviceOwner) {
715 const em::PolicyData& data = service_->cached_policy(); 738 const em::PolicyData& data = service_->cached_policy();
716 if (data.has_username() && !data.has_request_token()) 739 if (data.has_username() && !data.has_request_token())
717 return data.username(); 740 return base::Value::CreateStringValue(data.username());
718 return "";
719 } 741 }
720 VLOG(2) << "Looking up " << prop; 742 VLOG(2) << "Looking up " << prop;
721 em::ChromeDeviceSettingsProto pol; 743 em::ChromeDeviceSettingsProto pol;
722 pol.ParseFromString(service_->cached_policy().policy_value()); 744 pol.ParseFromString(service_->cached_policy().policy_value());
723 if (prop == kAccountsPrefAllowNewUser) { 745 if (prop == kAccountsPrefAllowNewUser) {
724 if (pol.has_allow_new_users() && 746 if (pol.has_allow_new_users() &&
725 pol.allow_new_users().has_allow_new_users() && 747 pol.allow_new_users().has_allow_new_users() &&
726 pol.allow_new_users().allow_new_users()) { 748 pol.allow_new_users().allow_new_users()) {
727 return kVeritas[1]; // New users allowed, user_whitelist() ignored. 749 // New users allowed, user_whitelist() ignored.
750 return base::Value::CreateBooleanValue(true);
728 } 751 }
729 // If we have the allow_new_users bool, and it is true, we honor that above. 752 // If we have the allow_new_users bool, and it is true, we honor that above.
730 // In all other cases (don't have it, have it and it is set to false, etc), 753 // In all other cases (don't have it, have it and it is set to false, etc),
731 // We will honor the user_whitelist() if it is there and populated. 754 // We will honor the user_whitelist() if it is there and populated.
732 // Otherwise, fail open (to do otherwise could render the device unusable). 755 // Otherwise we default to allowing new users.
733 if (!pol.has_user_whitelist()) 756 if (!pol.has_user_whitelist())
734 return kVeritas[1]; // Default to allowing new users. 757 return base::Value::CreateBooleanValue(true);
735 return kVeritas[pol.user_whitelist().user_whitelist_size() == 0]; 758 return (base::Value::CreateBooleanValue(
Mattias Nissler (ping if slow) 2011/10/07 11:02:57 don't need outer parentheses.
pastarmovj 2011/10/13 11:25:06 Done.
759 pol.user_whitelist().user_whitelist_size() == 0));
736 760
737 } else if (prop == kAccountsPrefAllowGuest) { 761 } else if (prop == kAccountsPrefAllowGuest) {
738 if (!pol.has_guest_mode_enabled() || 762 if (!pol.has_guest_mode_enabled() ||
739 !pol.guest_mode_enabled().has_guest_mode_enabled()) { 763 !pol.guest_mode_enabled().has_guest_mode_enabled()) {
740 return kVeritas[1]; // Default to allowing guests; 764 // Default to allowing guests;
765 return base::Value::CreateBooleanValue(true);
741 } 766 }
742 return kVeritas[pol.guest_mode_enabled().guest_mode_enabled()]; 767 return (base::Value::CreateBooleanValue(
768 pol.guest_mode_enabled().guest_mode_enabled()));
743 769
744 } else if (prop == kAccountsPrefShowUserNamesOnSignIn) { 770 } else if (prop == kAccountsPrefShowUserNamesOnSignIn) {
745 if (!pol.has_show_user_names() || 771 if (!pol.has_show_user_names() ||
746 !pol.show_user_names().has_show_user_names()) { 772 !pol.show_user_names().has_show_user_names()) {
747 return kVeritas[1]; // Default to showing pods on the login screen; 773 // Default to showing pods on the login screen;
774 return base::Value::CreateBooleanValue(true);
748 } 775 }
749 return kVeritas[pol.show_user_names().show_user_names()]; 776 return (base::Value::CreateBooleanValue(
777 pol.show_user_names().show_user_names()));
750 778
751 } else if (prop == kSignedDataRoamingEnabled) { 779 } else if (prop == kSignedDataRoamingEnabled) {
752 if (!pol.has_data_roaming_enabled() || 780 if (!pol.has_data_roaming_enabled() ||
753 !pol.data_roaming_enabled().has_data_roaming_enabled()) { 781 !pol.data_roaming_enabled().has_data_roaming_enabled()) {
754 return kVeritas[0]; // Default to disabling cellular data roaming; 782 // Default to disabling cellular data roaming;
783 return base::Value::CreateBooleanValue(false);
755 } 784 }
756 return kVeritas[pol.data_roaming_enabled().data_roaming_enabled()]; 785 return (base::Value::CreateBooleanValue(
786 pol.data_roaming_enabled().data_roaming_enabled()));
757 787
758 } else if (prop == kSettingProxyEverywhere) { 788 } else if (prop == kSettingProxyEverywhere) {
759 // TODO(cmasone): NOTIMPLEMENTED() once http://crosbug.com/13052 is fixed. 789 // TODO(cmasone): NOTIMPLEMENTED() once http://crosbug.com/13052 is fixed.
760 std::string serialized; 790 std::string serialized;
761 if (!pol.has_device_proxy_settings() || 791 if (pol.has_device_proxy_settings() &&
762 !pol.device_proxy_settings().SerializeToString(&serialized)) { 792 pol.device_proxy_settings().SerializeToString(&serialized)) {
763 return ""; // Default to invalid proxy config (will be ignored). 793 return base::Value::CreateStringValue(serialized);
764 } 794 }
765 return serialized;
766 795
767 } else if (prop == kReleaseChannel) { 796 } else if (prop == kReleaseChannel) {
768 if (!pol.has_release_channel() || 797 if (!pol.has_release_channel() ||
769 !pol.release_channel().has_release_channel()) { 798 !pol.release_channel().has_release_channel()) {
770 return ""; // Default to an invalid channel (will be ignored). 799 // Default to an invalid channel (will be ignored).
800 return base::Value::CreateStringValue("");
771 } 801 }
772 return pol.release_channel().release_channel(); 802 return (base::Value::CreateStringValue(
803 pol.release_channel().release_channel()));
773 804
774 } else if (prop == kStatsReportingPref) { 805 } else if (prop == kStatsReportingPref) {
775 if (pol.has_metrics_enabled()) { 806 if (pol.has_metrics_enabled()) {
776 return kVeritas[pol.metrics_enabled().metrics_enabled()]; 807 return (base::Value::CreateBooleanValue(
808 pol.metrics_enabled().metrics_enabled()));
777 } 809 }
810 } else if (prop == kAccountsPrefUsers) {
811 base::ListValue* list = new base::ListValue();
812 const em::UserWhitelistProto& whitelist_proto = pol.user_whitelist();
813 const RepeatedPtrField<string>& whitelist =
814 whitelist_proto.user_whitelist();
815 for (RepeatedPtrField<string>::const_iterator it = whitelist.begin();
816 it != whitelist.end(); ++it) {
817 list->Append(base::Value::CreateStringValue(*it));
818 }
819 return list;
778 } 820 }
779 return std::string(); 821 return NULL;
780 } 822 }
781 823
782 void RetrievePropertyOp::PerformCallback(SignedSettings::ReturnCode code, 824 void RetrievePropertyOp::PerformCallback(SignedSettings::ReturnCode code,
783 const std::string& value) { 825 const base::Value& value) {
784 d_->OnSettingsOpCompleted(code, value); 826 d_->OnSettingsOpCompleted(code, value);
785 } 827 }
786 828
787 StorePolicyOp::StorePolicyOp(em::PolicyFetchResponse* policy, 829 StorePolicyOp::StorePolicyOp(em::PolicyFetchResponse* policy,
788 SignedSettings::Delegate<bool>* d) 830 SignedSettings::Delegate<bool>* d)
789 : policy_(policy), 831 : policy_(policy),
790 d_(d) { 832 d_(d) {
791 } 833 }
792 834
793 StorePolicyOp::~StorePolicyOp() {} 835 StorePolicyOp::~StorePolicyOp() {}
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 sig.assign(sig_ptr, sig_ptr + policy_.policy_data_signature().length()); 997 sig.assign(sig_ptr, sig_ptr + policy_.policy_data_signature().length());
956 service_->StartVerifyAttempt(policy_.policy_data(), sig, this); 998 service_->StartVerifyAttempt(policy_.policy_data(), sig, this);
957 } 999 }
958 1000
959 void RetrievePolicyOp::PerformCallback(SignedSettings::ReturnCode code, 1001 void RetrievePolicyOp::PerformCallback(SignedSettings::ReturnCode code,
960 const em::PolicyFetchResponse& value) { 1002 const em::PolicyFetchResponse& value) {
961 d_->OnSettingsOpCompleted(code, value); 1003 d_->OnSettingsOpCompleted(code, value);
962 } 1004 }
963 1005
964 } // namespace chromeos 1006 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698