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