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

Side by Side Diff: chrome/browser/chromeos/user_cros_settings_provider.cc

Issue 7524002: Merge 94322 - Rewire the metrics pref to the signed settings store on chromeos. (Closed) Base URL: svn://svn.chromium.org/chrome/branches/835/src/
Patch Set: Created 9 years, 5 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/user_cros_settings_provider.h" 5 #include "chrome/browser/chromeos/user_cros_settings_provider.h"
6 6
7 #include <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 9
10 #include "base/hash_tables.h" 10 #include "base/hash_tables.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/memory/singleton.h" 12 #include "base/memory/singleton.h"
13 #include "base/string_util.h" 13 #include "base/string_util.h"
14 #include "base/task.h" 14 #include "base/task.h"
15 #include "base/values.h" 15 #include "base/values.h"
16 #include "chrome/browser/browser_process.h" 16 #include "chrome/browser/browser_process.h"
17 #include "chrome/browser/chromeos/cros/cros_library.h" 17 #include "chrome/browser/chromeos/cros/cros_library.h"
18 #include "chrome/browser/chromeos/cros/login_library.h" 18 #include "chrome/browser/chromeos/cros/login_library.h"
19 #include "chrome/browser/chromeos/cros/network_library.h" 19 #include "chrome/browser/chromeos/cros/network_library.h"
20 #include "chrome/browser/chromeos/cros_settings.h" 20 #include "chrome/browser/chromeos/cros_settings.h"
21 #include "chrome/browser/chromeos/cros_settings_names.h" 21 #include "chrome/browser/chromeos/cros_settings_names.h"
22 #include "chrome/browser/chromeos/login/ownership_service.h" 22 #include "chrome/browser/chromeos/login/ownership_service.h"
23 #include "chrome/browser/chromeos/login/user_manager.h" 23 #include "chrome/browser/chromeos/login/user_manager.h"
24 #include "chrome/browser/policy/browser_policy_connector.h" 24 #include "chrome/browser/policy/browser_policy_connector.h"
25 #include "chrome/browser/prefs/pref_service.h" 25 #include "chrome/browser/prefs/pref_service.h"
26 #include "chrome/browser/prefs/scoped_user_pref_update.h" 26 #include "chrome/browser/prefs/scoped_user_pref_update.h"
27 #include "chrome/browser/ui/options/options_util.h"
28 #include "chrome/installer/util/google_update_settings.h"
27 #include "content/browser/browser_thread.h" 29 #include "content/browser/browser_thread.h"
28 30
29 namespace chromeos { 31 namespace chromeos {
30 32
31 namespace { 33 namespace {
32 34
33 const char kTrueIncantation[] = "true"; 35 const char kTrueIncantation[] = "true";
34 const char kFalseIncantation[] = "false"; 36 const char kFalseIncantation[] = "false";
35 const char kTrustedSuffix[] = "/trusted"; 37 const char kTrustedSuffix[] = "/trusted";
36 38
37 // For all our boolean settings following is applicable: 39 // For all our boolean settings following is applicable:
38 // true is default permissive value and false is safe prohibitic value. 40 // true is default permissive value and false is safe prohibitic value.
39 // Exception: kSignedDataRoamingEnabled which has default value of false. 41 // Exception: kSignedDataRoamingEnabled which has default value of false.
40 const char* kBooleanSettings[] = { 42 const char* kBooleanSettings[] = {
41 kAccountsPrefAllowNewUser, 43 kAccountsPrefAllowNewUser,
42 kAccountsPrefAllowGuest, 44 kAccountsPrefAllowGuest,
43 kAccountsPrefShowUserNamesOnSignIn, 45 kAccountsPrefShowUserNamesOnSignIn,
44 kSignedDataRoamingEnabled, 46 kSignedDataRoamingEnabled,
47 kStatsReportingPref
45 }; 48 };
46 49
47 const char* kStringSettings[] = { 50 const char* kStringSettings[] = {
48 kDeviceOwner, 51 kDeviceOwner,
49 kReleaseChannel 52 kReleaseChannel
50 }; 53 };
51 54
52 const char* kListSettings[] = { 55 const char* kListSettings[] = {
53 kAccountsPrefUsers 56 kAccountsPrefUsers
54 }; 57 };
55 58
56 bool IsControlledBooleanSetting(const std::string& pref_path) { 59 bool IsControlledBooleanSetting(const std::string& pref_path) {
57 // TODO(nkostylev): Using std::find for 4 value array generates this warning 60 // TODO(nkostylev): Using std::find for 4 value array generates this warning
58 // in chroot stl_algo.h:231: error: array subscript is above array bounds. 61 // in chroot stl_algo.h:231: error: array subscript is above array bounds.
59 // GCC 4.4.3 62 // GCC 4.4.3
60 return (pref_path == kAccountsPrefAllowNewUser) || 63 return (pref_path == kAccountsPrefAllowNewUser) ||
61 (pref_path == kAccountsPrefAllowGuest) || 64 (pref_path == kAccountsPrefAllowGuest) ||
62 (pref_path == kAccountsPrefShowUserNamesOnSignIn) || 65 (pref_path == kAccountsPrefShowUserNamesOnSignIn) ||
63 (pref_path == kSignedDataRoamingEnabled); 66 (pref_path == kSignedDataRoamingEnabled) ||
67 (pref_path == kStatsReportingPref);
64 } 68 }
65 69
66 bool IsControlledStringSetting(const std::string& pref_path) { 70 bool IsControlledStringSetting(const std::string& pref_path) {
67 return std::find(kStringSettings, 71 return std::find(kStringSettings,
68 kStringSettings + arraysize(kStringSettings), 72 kStringSettings + arraysize(kStringSettings),
69 pref_path) != 73 pref_path) !=
70 kStringSettings + arraysize(kStringSettings); 74 kStringSettings + arraysize(kStringSettings);
71 } 75 }
72 76
73 bool IsControlledListSetting(const std::string& pref_path) { 77 bool IsControlledListSetting(const std::string& pref_path) {
74 return std::find(kListSettings, 78 return std::find(kListSettings,
75 kListSettings + arraysize(kListSettings), 79 kListSettings + arraysize(kListSettings),
76 pref_path) != 80 pref_path) !=
77 kListSettings + arraysize(kListSettings); 81 kListSettings + arraysize(kListSettings);
78 } 82 }
79 83
80 void RegisterSetting(PrefService* local_state, const std::string& pref_path) { 84 void RegisterSetting(PrefService* local_state, const std::string& pref_path) {
81 local_state->RegisterBooleanPref((pref_path + kTrustedSuffix).c_str(), 85 local_state->RegisterBooleanPref((pref_path + kTrustedSuffix).c_str(),
82 false, 86 false,
83 PrefService::UNSYNCABLE_PREF); 87 PrefService::UNSYNCABLE_PREF);
84 if (IsControlledBooleanSetting(pref_path)) { 88 if (IsControlledBooleanSetting(pref_path)) {
85 if (pref_path == kSignedDataRoamingEnabled) 89 if (pref_path == kSignedDataRoamingEnabled ||
90 pref_path == kStatsReportingPref)
86 local_state->RegisterBooleanPref(pref_path.c_str(), 91 local_state->RegisterBooleanPref(pref_path.c_str(),
87 false, 92 false,
88 PrefService::UNSYNCABLE_PREF); 93 PrefService::UNSYNCABLE_PREF);
89 else 94 else
90 local_state->RegisterBooleanPref(pref_path.c_str(), 95 local_state->RegisterBooleanPref(pref_path.c_str(),
91 true, 96 true,
92 PrefService::UNSYNCABLE_PREF); 97 PrefService::UNSYNCABLE_PREF);
93 } else if (IsControlledStringSetting(pref_path)) { 98 } else if (IsControlledStringSetting(pref_path)) {
94 local_state->RegisterStringPref(pref_path.c_str(), 99 local_state->RegisterStringPref(pref_path.c_str(),
95 "", 100 "",
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 } 284 }
280 285
281 // Called right before boolean property is changed. 286 // Called right before boolean property is changed.
282 void OnBooleanPropertyChange(const std::string& path, bool new_value) { 287 void OnBooleanPropertyChange(const std::string& path, bool new_value) {
283 if (path == kSignedDataRoamingEnabled) { 288 if (path == kSignedDataRoamingEnabled) {
284 if (!CrosLibrary::Get()->EnsureLoaded()) 289 if (!CrosLibrary::Get()->EnsureLoaded())
285 return; 290 return;
286 291
287 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); 292 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary();
288 cros->SetCellularDataRoamingAllowed(new_value); 293 cros->SetCellularDataRoamingAllowed(new_value);
294 } else if (path == kStatsReportingPref) {
295 // TODO(pastarmovj): Remove this once we don't need to regenerate the
296 // consent file for the GUID anymore.
297 OptionsUtil::ResolveMetricsReportingEnabled(new_value);
289 } 298 }
290 } 299 }
291 300
292 // Called right after signed value was checked. 301 // Called right after signed value was checked.
293 void OnBooleanPropertyRetrieve(const std::string& path, 302 void OnBooleanPropertyRetrieve(const std::string& path,
294 bool value, 303 bool value,
295 UseValue use_value) { 304 UseValue use_value) {
296 if (path == kSignedDataRoamingEnabled) { 305 if (path == kSignedDataRoamingEnabled) {
297 if (!CrosLibrary::Get()->EnsureLoaded()) 306 if (!CrosLibrary::Get()->EnsureLoaded())
298 return; 307 return;
299 308
300 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); 309 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary();
301 const NetworkDevice* cellular = cros->FindCellularDevice(); 310 const NetworkDevice* cellular = cros->FindCellularDevice();
302 if (cellular) { 311 if (cellular) {
303 bool device_value = cellular->data_roaming_allowed(); 312 bool device_value = cellular->data_roaming_allowed();
304 bool new_value = (use_value == USE_VALUE_SUPPLIED) ? value : false; 313 bool new_value = (use_value == USE_VALUE_SUPPLIED) ? value : false;
305 if (device_value != new_value) 314 if (device_value != new_value)
306 cros->SetCellularDataRoamingAllowed(new_value); 315 cros->SetCellularDataRoamingAllowed(new_value);
307 } 316 }
317 } else if (path == kStatsReportingPref) {
318 bool stats_consent = (use_value == USE_VALUE_SUPPLIED) ? value : false;
319 // TODO(pastarmovj): Remove this once we don't need to regenerate the
320 // consent file for the GUID anymore.
321 VLOG(1) << "Metrics policy is being set to : " << stats_consent
322 << "(reason : " << use_value << ")";
323 OptionsUtil::ResolveMetricsReportingEnabled(stats_consent);
308 } 324 }
309 } 325 }
310 326
311 void StartFetchingSetting(const std::string& name) { 327 void StartFetchingSetting(const std::string& name) {
312 DCHECK(g_browser_process); 328 DCHECK(g_browser_process);
313 PrefService* prefs = g_browser_process->local_state(); 329 PrefService* prefs = g_browser_process->local_state();
314 if (!prefs) 330 if (!prefs)
315 return; 331 return;
316 // Do not trust before fetching complete. 332 // Do not trust before fetching complete.
317 prefs->ClearPref((name + kTrustedSuffix).c_str()); 333 prefs->ClearPref((name + kTrustedSuffix).c_str());
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 Task* callback) { 497 Task* callback) {
482 return UserCrosSettingsTrust::GetInstance()->RequestTrustedEntity( 498 return UserCrosSettingsTrust::GetInstance()->RequestTrustedEntity(
483 kSignedDataRoamingEnabled, callback); 499 kSignedDataRoamingEnabled, callback);
484 } 500 }
485 501
486 bool UserCrosSettingsProvider::RequestTrustedOwner(Task* callback) { 502 bool UserCrosSettingsProvider::RequestTrustedOwner(Task* callback) {
487 return UserCrosSettingsTrust::GetInstance()->RequestTrustedEntity( 503 return UserCrosSettingsTrust::GetInstance()->RequestTrustedEntity(
488 kDeviceOwner, callback); 504 kDeviceOwner, callback);
489 } 505 }
490 506
507 bool UserCrosSettingsProvider::RequestTrustedReportingEnabled(Task* callback) {
508 return UserCrosSettingsTrust::GetInstance()->RequestTrustedEntity(
509 kStatsReportingPref, callback);
510 }
511
491 void UserCrosSettingsProvider::Reload() { 512 void UserCrosSettingsProvider::Reload() {
492 UserCrosSettingsTrust::GetInstance()->Reload(); 513 UserCrosSettingsTrust::GetInstance()->Reload();
493 } 514 }
494 515
495 // static 516 // static
496 bool UserCrosSettingsProvider::cached_allow_guest() { 517 bool UserCrosSettingsProvider::cached_allow_guest() {
497 // Trigger prefetching if singleton object still does not exist. 518 // Trigger prefetching if singleton object still does not exist.
498 UserCrosSettingsTrust::GetInstance(); 519 UserCrosSettingsTrust::GetInstance();
499 return g_browser_process->local_state()->GetBoolean(kAccountsPrefAllowGuest); 520 return g_browser_process->local_state()->GetBoolean(kAccountsPrefAllowGuest);
500 } 521 }
(...skipping 16 matching lines...) Expand all
517 538
518 // static 539 // static
519 bool UserCrosSettingsProvider::cached_show_users_on_signin() { 540 bool UserCrosSettingsProvider::cached_show_users_on_signin() {
520 // Trigger prefetching if singleton object still does not exist. 541 // Trigger prefetching if singleton object still does not exist.
521 UserCrosSettingsTrust::GetInstance(); 542 UserCrosSettingsTrust::GetInstance();
522 return g_browser_process->local_state()->GetBoolean( 543 return g_browser_process->local_state()->GetBoolean(
523 kAccountsPrefShowUserNamesOnSignIn); 544 kAccountsPrefShowUserNamesOnSignIn);
524 } 545 }
525 546
526 // static 547 // static
548 bool UserCrosSettingsProvider::cached_reporting_enabled() {
549 // Trigger prefetching if singleton object still does not exist.
550 UserCrosSettingsTrust::GetInstance();
551 return g_browser_process->local_state()->GetBoolean(
552 kStatsReportingPref);
553 }
554
555 // static
527 const ListValue* UserCrosSettingsProvider::cached_whitelist() { 556 const ListValue* UserCrosSettingsProvider::cached_whitelist() {
528 PrefService* prefs = g_browser_process->local_state(); 557 PrefService* prefs = g_browser_process->local_state();
529 const ListValue* cached_users = prefs->GetList(kAccountsPrefUsers); 558 const ListValue* cached_users = prefs->GetList(kAccountsPrefUsers);
530 if (!prefs->IsManagedPreference(kAccountsPrefUsers)) { 559 if (!prefs->IsManagedPreference(kAccountsPrefUsers)) {
531 if (cached_users == NULL) { 560 if (cached_users == NULL) {
532 // Update whitelist cache. 561 // Update whitelist cache.
533 GetUserWhitelist(NULL); 562 GetUserWhitelist(NULL);
534 cached_users = prefs->GetList(kAccountsPrefUsers); 563 cached_users = prefs->GetList(kAccountsPrefUsers);
535 } 564 }
536 } 565 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 !UserManager::Get()->current_user_is_owner()); 619 !UserManager::Get()->current_user_is_owner());
591 return true; 620 return true;
592 } 621 }
593 622
594 return false; 623 return false;
595 } 624 }
596 625
597 bool UserCrosSettingsProvider::HandlesSetting(const std::string& path) { 626 bool UserCrosSettingsProvider::HandlesSetting(const std::string& path) {
598 return ::StartsWithASCII(path, "cros.accounts.", true) || 627 return ::StartsWithASCII(path, "cros.accounts.", true) ||
599 ::StartsWithASCII(path, "cros.signed.", true) || 628 ::StartsWithASCII(path, "cros.signed.", true) ||
629 ::StartsWithASCII(path, "cros.metrics.", true) ||
600 path == kReleaseChannel; 630 path == kReleaseChannel;
601 } 631 }
602 632
603 void UserCrosSettingsProvider::WhitelistUser(const std::string& email) { 633 void UserCrosSettingsProvider::WhitelistUser(const std::string& email) {
604 SignedSettingsHelper::Get()->StartWhitelistOp( 634 SignedSettingsHelper::Get()->StartWhitelistOp(
605 email, true, UserCrosSettingsTrust::GetInstance()); 635 email, true, UserCrosSettingsTrust::GetInstance());
606 PrefService* prefs = g_browser_process->local_state(); 636 PrefService* prefs = g_browser_process->local_state();
607 ListPrefUpdate cached_whitelist_update(prefs, kAccountsPrefUsers); 637 ListPrefUpdate cached_whitelist_update(prefs, kAccountsPrefUsers);
608 cached_whitelist_update->Append(Value::CreateStringValue(email)); 638 cached_whitelist_update->Append(Value::CreateStringValue(email));
609 prefs->ScheduleSavePersistentPrefs(); 639 prefs->ScheduleSavePersistentPrefs();
610 } 640 }
611 641
612 void UserCrosSettingsProvider::UnwhitelistUser(const std::string& email) { 642 void UserCrosSettingsProvider::UnwhitelistUser(const std::string& email) {
613 SignedSettingsHelper::Get()->StartWhitelistOp( 643 SignedSettingsHelper::Get()->StartWhitelistOp(
614 email, false, UserCrosSettingsTrust::GetInstance()); 644 email, false, UserCrosSettingsTrust::GetInstance());
615 645
616 PrefService* prefs = g_browser_process->local_state(); 646 PrefService* prefs = g_browser_process->local_state();
617 ListPrefUpdate cached_whitelist_update(prefs, kAccountsPrefUsers); 647 ListPrefUpdate cached_whitelist_update(prefs, kAccountsPrefUsers);
618 StringValue email_value(email); 648 StringValue email_value(email);
619 if (cached_whitelist_update->Remove(email_value) != -1) 649 if (cached_whitelist_update->Remove(email_value) != -1)
620 prefs->ScheduleSavePersistentPrefs(); 650 prefs->ScheduleSavePersistentPrefs();
621 } 651 }
622 652
623 // static 653 // static
624 void UserCrosSettingsProvider::UpdateCachedOwner(const std::string& email) { 654 void UserCrosSettingsProvider::UpdateCachedOwner(const std::string& email) {
625 UpdateCacheString(kDeviceOwner, email, USE_VALUE_SUPPLIED); 655 UpdateCacheString(kDeviceOwner, email, USE_VALUE_SUPPLIED);
626 } 656 }
627 657
628 } // namespace chromeos 658 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/user_cros_settings_provider.h ('k') | chrome/browser/ui/webui/crashes_ui.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698