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

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

Issue 7518012: Revert 94350 - 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, 4 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"
29 #include "content/browser/browser_thread.h" 27 #include "content/browser/browser_thread.h"
30 28
31 namespace chromeos { 29 namespace chromeos {
32 30
33 namespace { 31 namespace {
34 32
35 const char kTrueIncantation[] = "true"; 33 const char kTrueIncantation[] = "true";
36 const char kFalseIncantation[] = "false"; 34 const char kFalseIncantation[] = "false";
37 const char kTrustedSuffix[] = "/trusted"; 35 const char kTrustedSuffix[] = "/trusted";
38 36
39 // For all our boolean settings following is applicable: 37 // For all our boolean settings following is applicable:
40 // true is default permissive value and false is safe prohibitic value. 38 // true is default permissive value and false is safe prohibitic value.
41 // Exception: kSignedDataRoamingEnabled which has default value of false. 39 // Exception: kSignedDataRoamingEnabled which has default value of false.
42 const char* kBooleanSettings[] = { 40 const char* kBooleanSettings[] = {
43 kAccountsPrefAllowNewUser, 41 kAccountsPrefAllowNewUser,
44 kAccountsPrefAllowGuest, 42 kAccountsPrefAllowGuest,
45 kAccountsPrefShowUserNamesOnSignIn, 43 kAccountsPrefShowUserNamesOnSignIn,
46 kSignedDataRoamingEnabled, 44 kSignedDataRoamingEnabled,
47 kStatsReportingPref
48 }; 45 };
49 46
50 const char* kStringSettings[] = { 47 const char* kStringSettings[] = {
51 kDeviceOwner, 48 kDeviceOwner,
52 kReleaseChannel 49 kReleaseChannel
53 }; 50 };
54 51
55 const char* kListSettings[] = { 52 const char* kListSettings[] = {
56 kAccountsPrefUsers 53 kAccountsPrefUsers
57 }; 54 };
58 55
59 bool IsControlledBooleanSetting(const std::string& pref_path) { 56 bool IsControlledBooleanSetting(const std::string& pref_path) {
60 // TODO(nkostylev): Using std::find for 4 value array generates this warning 57 // TODO(nkostylev): Using std::find for 4 value array generates this warning
61 // in chroot stl_algo.h:231: error: array subscript is above array bounds. 58 // in chroot stl_algo.h:231: error: array subscript is above array bounds.
62 // GCC 4.4.3 59 // GCC 4.4.3
63 return (pref_path == kAccountsPrefAllowNewUser) || 60 return (pref_path == kAccountsPrefAllowNewUser) ||
64 (pref_path == kAccountsPrefAllowGuest) || 61 (pref_path == kAccountsPrefAllowGuest) ||
65 (pref_path == kAccountsPrefShowUserNamesOnSignIn) || 62 (pref_path == kAccountsPrefShowUserNamesOnSignIn) ||
66 (pref_path == kSignedDataRoamingEnabled) || 63 (pref_path == kSignedDataRoamingEnabled);
67 (pref_path == kStatsReportingPref);
68 } 64 }
69 65
70 bool IsControlledStringSetting(const std::string& pref_path) { 66 bool IsControlledStringSetting(const std::string& pref_path) {
71 return std::find(kStringSettings, 67 return std::find(kStringSettings,
72 kStringSettings + arraysize(kStringSettings), 68 kStringSettings + arraysize(kStringSettings),
73 pref_path) != 69 pref_path) !=
74 kStringSettings + arraysize(kStringSettings); 70 kStringSettings + arraysize(kStringSettings);
75 } 71 }
76 72
77 bool IsControlledListSetting(const std::string& pref_path) { 73 bool IsControlledListSetting(const std::string& pref_path) {
78 return std::find(kListSettings, 74 return std::find(kListSettings,
79 kListSettings + arraysize(kListSettings), 75 kListSettings + arraysize(kListSettings),
80 pref_path) != 76 pref_path) !=
81 kListSettings + arraysize(kListSettings); 77 kListSettings + arraysize(kListSettings);
82 } 78 }
83 79
84 void RegisterSetting(PrefService* local_state, const std::string& pref_path) { 80 void RegisterSetting(PrefService* local_state, const std::string& pref_path) {
85 local_state->RegisterBooleanPref((pref_path + kTrustedSuffix).c_str(), 81 local_state->RegisterBooleanPref((pref_path + kTrustedSuffix).c_str(),
86 false, 82 false,
87 PrefService::UNSYNCABLE_PREF); 83 PrefService::UNSYNCABLE_PREF);
88 if (IsControlledBooleanSetting(pref_path)) { 84 if (IsControlledBooleanSetting(pref_path)) {
89 if (pref_path == kSignedDataRoamingEnabled || 85 if (pref_path == kSignedDataRoamingEnabled)
90 pref_path == kStatsReportingPref)
91 local_state->RegisterBooleanPref(pref_path.c_str(), 86 local_state->RegisterBooleanPref(pref_path.c_str(),
92 false, 87 false,
93 PrefService::UNSYNCABLE_PREF); 88 PrefService::UNSYNCABLE_PREF);
94 else 89 else
95 local_state->RegisterBooleanPref(pref_path.c_str(), 90 local_state->RegisterBooleanPref(pref_path.c_str(),
96 true, 91 true,
97 PrefService::UNSYNCABLE_PREF); 92 PrefService::UNSYNCABLE_PREF);
98 } else if (IsControlledStringSetting(pref_path)) { 93 } else if (IsControlledStringSetting(pref_path)) {
99 local_state->RegisterStringPref(pref_path.c_str(), 94 local_state->RegisterStringPref(pref_path.c_str(),
100 "", 95 "",
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 } 279 }
285 280
286 // Called right before boolean property is changed. 281 // Called right before boolean property is changed.
287 void OnBooleanPropertyChange(const std::string& path, bool new_value) { 282 void OnBooleanPropertyChange(const std::string& path, bool new_value) {
288 if (path == kSignedDataRoamingEnabled) { 283 if (path == kSignedDataRoamingEnabled) {
289 if (!CrosLibrary::Get()->EnsureLoaded()) 284 if (!CrosLibrary::Get()->EnsureLoaded())
290 return; 285 return;
291 286
292 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); 287 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary();
293 cros->SetCellularDataRoamingAllowed(new_value); 288 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);
298 } 289 }
299 } 290 }
300 291
301 // Called right after signed value was checked. 292 // Called right after signed value was checked.
302 void OnBooleanPropertyRetrieve(const std::string& path, 293 void OnBooleanPropertyRetrieve(const std::string& path,
303 bool value, 294 bool value,
304 UseValue use_value) { 295 UseValue use_value) {
305 if (path == kSignedDataRoamingEnabled) { 296 if (path == kSignedDataRoamingEnabled) {
306 if (!CrosLibrary::Get()->EnsureLoaded()) 297 if (!CrosLibrary::Get()->EnsureLoaded())
307 return; 298 return;
308 299
309 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); 300 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary();
310 const NetworkDevice* cellular = cros->FindCellularDevice(); 301 const NetworkDevice* cellular = cros->FindCellularDevice();
311 if (cellular) { 302 if (cellular) {
312 bool device_value = cellular->data_roaming_allowed(); 303 bool device_value = cellular->data_roaming_allowed();
313 bool new_value = (use_value == USE_VALUE_SUPPLIED) ? value : false; 304 bool new_value = (use_value == USE_VALUE_SUPPLIED) ? value : false;
314 if (device_value != new_value) 305 if (device_value != new_value)
315 cros->SetCellularDataRoamingAllowed(new_value); 306 cros->SetCellularDataRoamingAllowed(new_value);
316 } 307 }
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);
324 } 308 }
325 } 309 }
326 310
327 void StartFetchingSetting(const std::string& name) { 311 void StartFetchingSetting(const std::string& name) {
328 DCHECK(g_browser_process); 312 DCHECK(g_browser_process);
329 PrefService* prefs = g_browser_process->local_state(); 313 PrefService* prefs = g_browser_process->local_state();
330 if (!prefs) 314 if (!prefs)
331 return; 315 return;
332 // Do not trust before fetching complete. 316 // Do not trust before fetching complete.
333 prefs->ClearPref((name + kTrustedSuffix).c_str()); 317 prefs->ClearPref((name + kTrustedSuffix).c_str());
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 Task* callback) { 481 Task* callback) {
498 return UserCrosSettingsTrust::GetInstance()->RequestTrustedEntity( 482 return UserCrosSettingsTrust::GetInstance()->RequestTrustedEntity(
499 kSignedDataRoamingEnabled, callback); 483 kSignedDataRoamingEnabled, callback);
500 } 484 }
501 485
502 bool UserCrosSettingsProvider::RequestTrustedOwner(Task* callback) { 486 bool UserCrosSettingsProvider::RequestTrustedOwner(Task* callback) {
503 return UserCrosSettingsTrust::GetInstance()->RequestTrustedEntity( 487 return UserCrosSettingsTrust::GetInstance()->RequestTrustedEntity(
504 kDeviceOwner, callback); 488 kDeviceOwner, callback);
505 } 489 }
506 490
507 bool UserCrosSettingsProvider::RequestTrustedReportingEnabled(Task* callback) {
508 return UserCrosSettingsTrust::GetInstance()->RequestTrustedEntity(
509 kStatsReportingPref, callback);
510 }
511
512 void UserCrosSettingsProvider::Reload() { 491 void UserCrosSettingsProvider::Reload() {
513 UserCrosSettingsTrust::GetInstance()->Reload(); 492 UserCrosSettingsTrust::GetInstance()->Reload();
514 } 493 }
515 494
516 // static 495 // static
517 bool UserCrosSettingsProvider::cached_allow_guest() { 496 bool UserCrosSettingsProvider::cached_allow_guest() {
518 // Trigger prefetching if singleton object still does not exist. 497 // Trigger prefetching if singleton object still does not exist.
519 UserCrosSettingsTrust::GetInstance(); 498 UserCrosSettingsTrust::GetInstance();
520 return g_browser_process->local_state()->GetBoolean(kAccountsPrefAllowGuest); 499 return g_browser_process->local_state()->GetBoolean(kAccountsPrefAllowGuest);
521 } 500 }
(...skipping 16 matching lines...) Expand all
538 517
539 // static 518 // static
540 bool UserCrosSettingsProvider::cached_show_users_on_signin() { 519 bool UserCrosSettingsProvider::cached_show_users_on_signin() {
541 // Trigger prefetching if singleton object still does not exist. 520 // Trigger prefetching if singleton object still does not exist.
542 UserCrosSettingsTrust::GetInstance(); 521 UserCrosSettingsTrust::GetInstance();
543 return g_browser_process->local_state()->GetBoolean( 522 return g_browser_process->local_state()->GetBoolean(
544 kAccountsPrefShowUserNamesOnSignIn); 523 kAccountsPrefShowUserNamesOnSignIn);
545 } 524 }
546 525
547 // static 526 // 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
556 const ListValue* UserCrosSettingsProvider::cached_whitelist() { 527 const ListValue* UserCrosSettingsProvider::cached_whitelist() {
557 PrefService* prefs = g_browser_process->local_state(); 528 PrefService* prefs = g_browser_process->local_state();
558 const ListValue* cached_users = prefs->GetList(kAccountsPrefUsers); 529 const ListValue* cached_users = prefs->GetList(kAccountsPrefUsers);
559 if (!prefs->IsManagedPreference(kAccountsPrefUsers)) { 530 if (!prefs->IsManagedPreference(kAccountsPrefUsers)) {
560 if (cached_users == NULL) { 531 if (cached_users == NULL) {
561 // Update whitelist cache. 532 // Update whitelist cache.
562 GetUserWhitelist(NULL); 533 GetUserWhitelist(NULL);
563 cached_users = prefs->GetList(kAccountsPrefUsers); 534 cached_users = prefs->GetList(kAccountsPrefUsers);
564 } 535 }
565 } 536 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 !UserManager::Get()->current_user_is_owner()); 590 !UserManager::Get()->current_user_is_owner());
620 return true; 591 return true;
621 } 592 }
622 593
623 return false; 594 return false;
624 } 595 }
625 596
626 bool UserCrosSettingsProvider::HandlesSetting(const std::string& path) { 597 bool UserCrosSettingsProvider::HandlesSetting(const std::string& path) {
627 return ::StartsWithASCII(path, "cros.accounts.", true) || 598 return ::StartsWithASCII(path, "cros.accounts.", true) ||
628 ::StartsWithASCII(path, "cros.signed.", true) || 599 ::StartsWithASCII(path, "cros.signed.", true) ||
629 ::StartsWithASCII(path, "cros.metrics.", true) ||
630 path == kReleaseChannel; 600 path == kReleaseChannel;
631 } 601 }
632 602
633 void UserCrosSettingsProvider::WhitelistUser(const std::string& email) { 603 void UserCrosSettingsProvider::WhitelistUser(const std::string& email) {
634 SignedSettingsHelper::Get()->StartWhitelistOp( 604 SignedSettingsHelper::Get()->StartWhitelistOp(
635 email, true, UserCrosSettingsTrust::GetInstance()); 605 email, true, UserCrosSettingsTrust::GetInstance());
636 PrefService* prefs = g_browser_process->local_state(); 606 PrefService* prefs = g_browser_process->local_state();
637 ListPrefUpdate cached_whitelist_update(prefs, kAccountsPrefUsers); 607 ListPrefUpdate cached_whitelist_update(prefs, kAccountsPrefUsers);
638 cached_whitelist_update->Append(Value::CreateStringValue(email)); 608 cached_whitelist_update->Append(Value::CreateStringValue(email));
639 prefs->ScheduleSavePersistentPrefs(); 609 prefs->ScheduleSavePersistentPrefs();
640 } 610 }
641 611
642 void UserCrosSettingsProvider::UnwhitelistUser(const std::string& email) { 612 void UserCrosSettingsProvider::UnwhitelistUser(const std::string& email) {
643 SignedSettingsHelper::Get()->StartWhitelistOp( 613 SignedSettingsHelper::Get()->StartWhitelistOp(
644 email, false, UserCrosSettingsTrust::GetInstance()); 614 email, false, UserCrosSettingsTrust::GetInstance());
645 615
646 PrefService* prefs = g_browser_process->local_state(); 616 PrefService* prefs = g_browser_process->local_state();
647 ListPrefUpdate cached_whitelist_update(prefs, kAccountsPrefUsers); 617 ListPrefUpdate cached_whitelist_update(prefs, kAccountsPrefUsers);
648 StringValue email_value(email); 618 StringValue email_value(email);
649 if (cached_whitelist_update->Remove(email_value) != -1) 619 if (cached_whitelist_update->Remove(email_value) != -1)
650 prefs->ScheduleSavePersistentPrefs(); 620 prefs->ScheduleSavePersistentPrefs();
651 } 621 }
652 622
653 // static 623 // static
654 void UserCrosSettingsProvider::UpdateCachedOwner(const std::string& email) { 624 void UserCrosSettingsProvider::UpdateCachedOwner(const std::string& email) {
655 UpdateCacheString(kDeviceOwner, email, USE_VALUE_SUPPLIED); 625 UpdateCacheString(kDeviceOwner, email, USE_VALUE_SUPPLIED);
656 } 626 }
657 627
658 } // namespace chromeos 628 } // 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