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

Side by Side Diff: chrome/browser/chromeos/settings/device_settings_provider.cc

Issue 1411863002: Use kMetricsReportingEnabled instead of kStatsReporingPref on metrics side (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add default value for device setting Created 5 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/settings/device_settings_provider.h" 5 #include "chrome/browser/chromeos/settings/device_settings_provider.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 kServiceAccountIdentity, 80 kServiceAccountIdentity,
81 kSignedDataRoamingEnabled, 81 kSignedDataRoamingEnabled,
82 kStartUpFlags, 82 kStartUpFlags,
83 kStatsReportingPref, 83 kStatsReportingPref,
84 kSystemTimezonePolicy, 84 kSystemTimezonePolicy,
85 kSystemUse24HourClock, 85 kSystemUse24HourClock,
86 kUpdateDisabled, 86 kUpdateDisabled,
87 kVariationsRestrictParameter, 87 kVariationsRestrictParameter,
88 }; 88 };
89 89
90 bool HasOldMetricsFile() {
91 // TODO(pastarmovj): Remove this once migration is not needed anymore.
92 // If the value is not set we should try to migrate legacy consent file.
93 // Loading consent file state causes us to do blocking IO on UI thread.
94 // Temporarily allow it until we fix http://crbug.com/62626
95 base::ThreadRestrictions::ScopedAllowIO allow_io;
96 return GoogleUpdateSettings::GetCollectStatsConsent();
97 }
98
99 void DecodeLoginPolicies( 90 void DecodeLoginPolicies(
100 const em::ChromeDeviceSettingsProto& policy, 91 const em::ChromeDeviceSettingsProto& policy,
101 PrefValueMap* new_values_cache) { 92 PrefValueMap* new_values_cache) {
102 // For all our boolean settings the following is applicable: 93 // For all our boolean settings the following is applicable:
103 // true is default permissive value and false is safe prohibitive value. 94 // true is default permissive value and false is safe prohibitive value.
104 // Exceptions: 95 // Exceptions:
105 // kAccountsPrefEphemeralUsersEnabled has a default value of false. 96 // kAccountsPrefEphemeralUsersEnabled has a default value of false.
106 // kAccountsPrefSupervisedUsersEnabled has a default value of false 97 // kAccountsPrefSupervisedUsersEnabled has a default value of false
107 // for enterprise devices and true for consumer devices. 98 // for enterprise devices and true for consumer devices.
108 // kAccountsPrefTransferSAMLCookies has a default value of false. 99 // kAccountsPrefTransferSAMLCookies has a default value of false.
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 } 357 }
367 } 358 }
368 359
369 void DecodeGenericPolicies( 360 void DecodeGenericPolicies(
370 const em::ChromeDeviceSettingsProto& policy, 361 const em::ChromeDeviceSettingsProto& policy,
371 PrefValueMap* new_values_cache) { 362 PrefValueMap* new_values_cache) {
372 if (policy.has_metrics_enabled()) { 363 if (policy.has_metrics_enabled()) {
373 new_values_cache->SetBoolean(kStatsReportingPref, 364 new_values_cache->SetBoolean(kStatsReportingPref,
374 policy.metrics_enabled().metrics_enabled()); 365 policy.metrics_enabled().metrics_enabled());
375 } else { 366 } else {
376 new_values_cache->SetBoolean(kStatsReportingPref, HasOldMetricsFile()); 367 new_values_cache->SetBoolean(kStatsReportingPref, false);
377 } 368 }
378 369
379 if (!policy.has_release_channel() || 370 if (!policy.has_release_channel() ||
380 !policy.release_channel().has_release_channel()) { 371 !policy.release_channel().has_release_channel()) {
381 // Default to an invalid channel (will be ignored). 372 // Default to an invalid channel (will be ignored).
382 new_values_cache->SetString(kReleaseChannel, ""); 373 new_values_cache->SetString(kReleaseChannel, "");
383 } else { 374 } else {
384 new_values_cache->SetString(kReleaseChannel, 375 new_values_cache->SetString(kReleaseChannel,
385 policy.release_channel().release_channel()); 376 policy.release_channel().release_channel());
386 } 377 }
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 // Set the cache to the updated value. 538 // Set the cache to the updated value.
548 UpdateValuesCache(data, device_settings_, TEMPORARILY_UNTRUSTED); 539 UpdateValuesCache(data, device_settings_, TEMPORARILY_UNTRUSTED);
549 540
550 if (!device_settings_cache::Store(data, g_browser_process->local_state())) { 541 if (!device_settings_cache::Store(data, g_browser_process->local_state())) {
551 LOG(ERROR) << "Couldn't store to the temp storage."; 542 LOG(ERROR) << "Couldn't store to the temp storage.";
552 NotifyObservers(path); 543 NotifyObservers(path);
553 return; 544 return;
554 } 545 }
555 } 546 }
556 547
557 bool metrics_value;
558 if (path == kStatsReportingPref && in_value.GetAsBoolean(&metrics_value))
559 ApplyMetricsSetting(false, metrics_value);
560 } 548 }
561 549
562 void DeviceSettingsProvider::OwnershipStatusChanged() { 550 void DeviceSettingsProvider::OwnershipStatusChanged() {
563 DeviceSettingsService::OwnershipStatus new_ownership_status = 551 DeviceSettingsService::OwnershipStatus new_ownership_status =
564 device_settings_service_->GetOwnershipStatus(); 552 device_settings_service_->GetOwnershipStatus();
565 553
566 if (device_settings_service_->GetOwnerSettingsService()) 554 if (device_settings_service_->GetOwnerSettingsService())
567 device_settings_service_->GetOwnerSettingsService()->AddObserver(this); 555 device_settings_service_->GetOwnerSettingsService()->AddObserver(this);
568 556
569 // If the device just became owned, write the settings accumulated in the 557 // If the device just became owned, write the settings accumulated in the
(...skipping 19 matching lines...) Expand all
589 577
590 scoped_ptr<em::PolicyData> policy(new em::PolicyData()); 578 scoped_ptr<em::PolicyData> policy(new em::PolicyData());
591 policy->set_username(device_settings_service_->GetUsername()); 579 policy->set_username(device_settings_service_->GetUsername());
592 CHECK(device_settings_.SerializeToString(policy->mutable_policy_value())); 580 CHECK(device_settings_.SerializeToString(policy->mutable_policy_value()));
593 if (!device_settings_service_->GetOwnerSettingsService() 581 if (!device_settings_service_->GetOwnerSettingsService()
594 ->CommitTentativeDeviceSettings(policy.Pass())) { 582 ->CommitTentativeDeviceSettings(policy.Pass())) {
595 LOG(ERROR) << "Can't store policy"; 583 LOG(ERROR) << "Can't store policy";
596 } 584 }
597 } 585 }
598 586
599 // The owner key might have become available, allowing migration to happen.
600 AttemptMigration();
601
602 ownership_status_ = new_ownership_status; 587 ownership_status_ = new_ownership_status;
603 } 588 }
604 589
605 void DeviceSettingsProvider::DeviceSettingsUpdated() { 590 void DeviceSettingsProvider::DeviceSettingsUpdated() {
606 if (!store_callback_factory_.HasWeakPtrs()) 591 if (!store_callback_factory_.HasWeakPtrs())
607 UpdateAndProceedStoring(); 592 UpdateAndProceedStoring();
608 } 593 }
609 594
610 void DeviceSettingsProvider::OnDeviceSettingsServiceShutdown() { 595 void DeviceSettingsProvider::OnDeviceSettingsServiceShutdown() {
611 device_settings_service_ = nullptr; 596 device_settings_service_ = nullptr;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 if (!new_values_cache.GetValue(iter->first, &value)) 662 if (!new_values_cache.GetValue(iter->first, &value))
678 notifications.push_back(iter->first); 663 notifications.push_back(iter->first);
679 } 664 }
680 // Swap and notify. 665 // Swap and notify.
681 values_cache_.Swap(&new_values_cache); 666 values_cache_.Swap(&new_values_cache);
682 trusted_status_ = trusted_status; 667 trusted_status_ = trusted_status;
683 for (size_t i = 0; i < notifications.size(); ++i) 668 for (size_t i = 0; i < notifications.size(); ++i)
684 NotifyObservers(notifications[i]); 669 NotifyObservers(notifications[i]);
685 } 670 }
686 671
687 void DeviceSettingsProvider::ApplyMetricsSetting(bool use_file,
688 bool new_value) {
689 // TODO(pastarmovj): Remove this once migration is not needed anymore.
690 // If the value is not set we should try to migrate legacy consent file.
691 if (use_file) {
692 new_value = HasOldMetricsFile();
693 // Make sure the values will get eventually written to the policy file.
694 migration_values_.SetBoolean(kStatsReportingPref, new_value);
695 AttemptMigration();
696 VLOG(1) << "No metrics policy set will revert to checking "
697 << "consent file which is "
698 << (new_value ? "on." : "off.");
699 UMA_HISTOGRAM_COUNTS("DeviceSettings.MetricsMigrated", 1);
700 }
701 VLOG(1) << "Metrics policy is being set to : " << new_value
702 << "(use file : " << use_file << ")";
703 // TODO(pastarmovj): Remove this once we don't need to regenerate the
704 // consent file for the GUID anymore.
705 InitiateMetricsReportingChange(new_value, OnMetricsReportingCallbackType());
706 }
707
708 void DeviceSettingsProvider::ApplySideEffects(
709 const em::ChromeDeviceSettingsProto& settings) {
710 // First migrate metrics settings as needed.
711 if (settings.has_metrics_enabled())
712 ApplyMetricsSetting(false, settings.metrics_enabled().metrics_enabled());
713 else
714 ApplyMetricsSetting(true, false);
715 }
716
717 bool DeviceSettingsProvider::MitigateMissingPolicy() { 672 bool DeviceSettingsProvider::MitigateMissingPolicy() {
718 // First check if the device has been owned already and if not exit 673 // First check if the device has been owned already and if not exit
719 // immediately. 674 // immediately.
720 policy::BrowserPolicyConnectorChromeOS* connector = 675 policy::BrowserPolicyConnectorChromeOS* connector =
721 g_browser_process->platform_part()->browser_policy_connector_chromeos(); 676 g_browser_process->platform_part()->browser_policy_connector_chromeos();
722 if (connector->GetDeviceMode() != policy::DEVICE_MODE_CONSUMER) 677 if (connector->GetDeviceMode() != policy::DEVICE_MODE_CONSUMER)
723 return false; 678 return false;
724 679
725 // If we are here the policy file were corrupted or missing. This can happen 680 // If we are here the policy file were corrupted or missing. This can happen
726 // because we are migrating Pre R11 device to the new secure policies or there 681 // because we are migrating Pre R11 device to the new secure policies or there
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
787 const em::ChromeDeviceSettingsProto* device_settings = 742 const em::ChromeDeviceSettingsProto* device_settings =
788 device_settings_service_->device_settings(); 743 device_settings_service_->device_settings();
789 if (policy_data && device_settings) { 744 if (policy_data && device_settings) {
790 if (!device_settings_cache::Store(*policy_data, 745 if (!device_settings_cache::Store(*policy_data,
791 g_browser_process->local_state())) { 746 g_browser_process->local_state())) {
792 LOG(ERROR) << "Couldn't update the local state cache."; 747 LOG(ERROR) << "Couldn't update the local state cache.";
793 } 748 }
794 UpdateValuesCache(*policy_data, *device_settings, TRUSTED); 749 UpdateValuesCache(*policy_data, *device_settings, TRUSTED);
795 device_settings_ = *device_settings; 750 device_settings_ = *device_settings;
796 751
797 // TODO(pastarmovj): Make those side effects responsibility of the
798 // respective subsystems.
799 ApplySideEffects(*device_settings);
800
801 settings_loaded = true; 752 settings_loaded = true;
802 } else { 753 } else {
803 // Initial policy load is still pending. 754 // Initial policy load is still pending.
804 trusted_status_ = TEMPORARILY_UNTRUSTED; 755 trusted_status_ = TEMPORARILY_UNTRUSTED;
805 } 756 }
806 break; 757 break;
807 } 758 }
808 case DeviceSettingsService::STORE_NO_POLICY: 759 case DeviceSettingsService::STORE_NO_POLICY:
809 if (MitigateMissingPolicy()) 760 if (MitigateMissingPolicy())
810 break; 761 break;
(...skipping 21 matching lines...) Expand all
832 783
833 // Notify the observers we are done. 784 // Notify the observers we are done.
834 std::vector<base::Closure> callbacks; 785 std::vector<base::Closure> callbacks;
835 callbacks.swap(callbacks_); 786 callbacks.swap(callbacks_);
836 for (size_t i = 0; i < callbacks.size(); ++i) 787 for (size_t i = 0; i < callbacks.size(); ++i)
837 callbacks[i].Run(); 788 callbacks[i].Run();
838 789
839 return settings_loaded; 790 return settings_loaded;
840 } 791 }
841 792
842 void DeviceSettingsProvider::AttemptMigration() {
843 if (device_settings_service_->HasPrivateOwnerKey()) {
844 PrefValueMap::const_iterator i;
845 for (i = migration_values_.begin(); i != migration_values_.end(); ++i)
846 DoSet(i->first, *i->second);
847 migration_values_.Clear();
848 }
849 }
850
851 } // namespace chromeos 793 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698