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

Side by Side Diff: chrome/browser/extensions/api/settings_private/prefs_util.cc

Issue 2849823003: ChromeOS: implement per-user time zone preferences. (Closed)
Patch Set: Try remove g_browser_process check Created 3 years, 7 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/extensions/api/settings_private/prefs_util.h" 5 #include "chrome/browser/extensions/api/settings_private/prefs_util.h"
6 6
7 #include "build/build_config.h" 7 #include "build/build_config.h"
8 #include "chrome/browser/browser_process.h" 8 #include "chrome/browser/browser_process.h"
9 #include "chrome/browser/extensions/chrome_extension_function.h" 9 #include "chrome/browser/extensions/chrome_extension_function.h"
10 #include "chrome/browser/extensions/settings_api_helpers.h" 10 #include "chrome/browser/extensions/settings_api_helpers.h"
(...skipping 20 matching lines...) Expand all
31 #include "extensions/browser/extension_system.h" 31 #include "extensions/browser/extension_system.h"
32 #include "extensions/browser/management_policy.h" 32 #include "extensions/browser/management_policy.h"
33 #include "extensions/common/extension.h" 33 #include "extensions/common/extension.h"
34 34
35 #if defined(OS_CHROMEOS) 35 #if defined(OS_CHROMEOS)
36 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h" 36 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h"
37 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_fact ory.h" 37 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_fact ory.h"
38 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" 38 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
39 #include "chrome/browser/chromeos/profiles/profile_helper.h" 39 #include "chrome/browser/chromeos/profiles/profile_helper.h"
40 #include "chrome/browser/chromeos/settings/cros_settings.h" 40 #include "chrome/browser/chromeos/settings/cros_settings.h"
41 #include "chrome/browser/chromeos/system/timezone_util.h"
41 #include "chromeos/settings/cros_settings_names.h" 42 #include "chromeos/settings/cros_settings_names.h"
42 #include "ui/chromeos/events/pref_names.h" 43 #include "ui/chromeos/events/pref_names.h"
43 #endif 44 #endif
44 45
45 namespace { 46 namespace {
46 47
47 #if defined(OS_CHROMEOS) 48 #if defined(OS_CHROMEOS)
48 bool IsPrivilegedCrosSetting(const std::string& pref_name) { 49 bool IsPrivilegedCrosSetting(const std::string& pref_name) {
49 if (!chromeos::CrosSettings::IsCrosSettings(pref_name)) 50 if (!chromeos::CrosSettings::IsCrosSettings(pref_name))
50 return false; 51 return false;
51 // kSystemTimezone should be changeable by all users. 52 // All Cros settings are considered privileged and are either policy
52 if (pref_name == chromeos::kSystemTimezone)
53 return false;
54 // All other Cros settings are considered privileged and are either policy
55 // controlled or owner controlled. 53 // controlled or owner controlled.
56 return true; 54 return true;
57 } 55 }
56
57 bool IsCrosSettingReadOnly(const std::string& pref_name) {
58 // System timezone is never directly changable by user.
59 return pref_name == chromeos::kSystemTimezone;
60 }
58 #endif 61 #endif
59 62
60 } // namespace 63 } // namespace
61 64
62 namespace extensions { 65 namespace extensions {
63 66
64 namespace settings_private = api::settings_private; 67 namespace settings_private = api::settings_private;
65 68
66 PrefsUtil::PrefsUtil(Profile* profile) : profile_(profile) {} 69 PrefsUtil::PrefsUtil(Profile* profile) : profile_(profile) {}
67 70
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 settings_private::PrefType::PREF_TYPE_BOOLEAN; 280 settings_private::PrefType::PREF_TYPE_BOOLEAN;
278 (*s_whitelist)[proxy_config::prefs::kUseSharedProxies] = 281 (*s_whitelist)[proxy_config::prefs::kUseSharedProxies] =
279 settings_private::PrefType::PREF_TYPE_BOOLEAN; 282 settings_private::PrefType::PREF_TYPE_BOOLEAN;
280 (*s_whitelist)[::prefs::kWakeOnWifiDarkConnect] = 283 (*s_whitelist)[::prefs::kWakeOnWifiDarkConnect] =
281 settings_private::PrefType::PREF_TYPE_BOOLEAN; 284 settings_private::PrefType::PREF_TYPE_BOOLEAN;
282 (*s_whitelist)[::chromeos::kSignedDataRoamingEnabled] = 285 (*s_whitelist)[::chromeos::kSignedDataRoamingEnabled] =
283 settings_private::PrefType::PREF_TYPE_BOOLEAN; 286 settings_private::PrefType::PREF_TYPE_BOOLEAN;
284 287
285 // Timezone settings. 288 // Timezone settings.
286 (*s_whitelist)[chromeos::kSystemTimezone] = 289 (*s_whitelist)[chromeos::kSystemTimezone] =
287 settings_private::PrefType::PREF_TYPE_BOOLEAN; 290 settings_private::PrefType::PREF_TYPE_STRING;
291 (*s_whitelist)[prefs::kUserTimezone] =
292 settings_private::PrefType::PREF_TYPE_STRING;
288 (*s_whitelist)[::prefs::kResolveTimezoneByGeolocation] = 293 (*s_whitelist)[::prefs::kResolveTimezoneByGeolocation] =
289 settings_private::PrefType::PREF_TYPE_BOOLEAN; 294 settings_private::PrefType::PREF_TYPE_BOOLEAN;
290 295
291 // Ash settings. 296 // Ash settings.
292 (*s_whitelist)[::prefs::kEnableStylusTools] = 297 (*s_whitelist)[::prefs::kEnableStylusTools] =
293 settings_private::PrefType::PREF_TYPE_BOOLEAN; 298 settings_private::PrefType::PREF_TYPE_BOOLEAN;
294 (*s_whitelist)[::prefs::kLaunchPaletteOnEjectEvent] = 299 (*s_whitelist)[::prefs::kLaunchPaletteOnEjectEvent] =
295 settings_private::PrefType::PREF_TYPE_BOOLEAN; 300 settings_private::PrefType::PREF_TYPE_BOOLEAN;
296 301
297 // Input method settings. 302 // Input method settings.
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 pref = pref_service->FindPreference(name); 444 pref = pref_service->FindPreference(name);
440 if (!pref) 445 if (!pref)
441 return nullptr; 446 return nullptr;
442 pref_object.reset(new settings_private::PrefObject()); 447 pref_object.reset(new settings_private::PrefObject());
443 pref_object->key = pref->name(); 448 pref_object->key = pref->name();
444 pref_object->type = GetType(name, pref->GetType()); 449 pref_object->type = GetType(name, pref->GetType());
445 pref_object->value.reset(pref->GetValue()->DeepCopy()); 450 pref_object->value.reset(pref->GetValue()->DeepCopy());
446 } 451 }
447 452
448 #if defined(OS_CHROMEOS) 453 #if defined(OS_CHROMEOS)
454 // We first check for enterprise-managed, then for primary-user managed.
455 // Otherwise in multiprofile mode enterprise preference for the secondary
456 // user will appear primary-user-controlled, which looks strange, because
457 // primary user preference will be disabled with "enterprise controlled"
458 // status.
459 if (IsPrefEnterpriseManaged(name)) {
460 // Enterprise managed prefs are treated the same as device policy restricted
461 // prefs in the UI.
462 pref_object->controlled_by =
463 settings_private::ControlledBy::CONTROLLED_BY_DEVICE_POLICY;
464 pref_object->enforcement =
465 settings_private::Enforcement::ENFORCEMENT_ENFORCED;
466 return pref_object;
467 }
468
449 if (IsPrefPrimaryUserControlled(name)) { 469 if (IsPrefPrimaryUserControlled(name)) {
450 pref_object->controlled_by = 470 pref_object->controlled_by =
451 settings_private::ControlledBy::CONTROLLED_BY_PRIMARY_USER; 471 settings_private::ControlledBy::CONTROLLED_BY_PRIMARY_USER;
452 pref_object->enforcement = 472 pref_object->enforcement =
453 settings_private::Enforcement::ENFORCEMENT_ENFORCED; 473 settings_private::Enforcement::ENFORCEMENT_ENFORCED;
454 pref_object->controlled_by_name.reset( 474 pref_object->controlled_by_name.reset(
455 new std::string(user_manager::UserManager::Get() 475 new std::string(user_manager::UserManager::Get()
456 ->GetPrimaryUser() 476 ->GetPrimaryUser()
457 ->GetAccountId() 477 ->GetAccountId()
458 .GetUserEmail())); 478 .GetUserEmail()));
459 return pref_object; 479 return pref_object;
460 } 480 }
461
462 if (IsPrefEnterpriseManaged(name)) {
463 // Enterprise managed prefs are treated the same as device policy restricted
464 // prefs in the UI.
465 pref_object->controlled_by =
466 settings_private::ControlledBy::CONTROLLED_BY_DEVICE_POLICY;
467 pref_object->enforcement =
468 settings_private::Enforcement::ENFORCEMENT_ENFORCED;
469 return pref_object;
470 }
471 #endif 481 #endif
472 482
473 if (pref && pref->IsManaged()) { 483 if (pref && pref->IsManaged()) {
474 pref_object->controlled_by = 484 pref_object->controlled_by =
475 settings_private::ControlledBy::CONTROLLED_BY_USER_POLICY; 485 settings_private::ControlledBy::CONTROLLED_BY_USER_POLICY;
476 pref_object->enforcement = 486 pref_object->enforcement =
477 settings_private::Enforcement::ENFORCEMENT_ENFORCED; 487 settings_private::Enforcement::ENFORCEMENT_ENFORCED;
478 return pref_object; 488 return pref_object;
479 } 489 }
480 490
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 settings_private::Enforcement::ENFORCEMENT_ENFORCED; 523 settings_private::Enforcement::ENFORCEMENT_ENFORCED;
514 pref_object->extension_id.reset(new std::string(extension->id())); 524 pref_object->extension_id.reset(new std::string(extension->id()));
515 pref_object->controlled_by_name.reset(new std::string(extension->name())); 525 pref_object->controlled_by_name.reset(new std::string(extension->name()));
516 bool can_be_disabled = !ExtensionSystem::Get(profile_)->management_policy() 526 bool can_be_disabled = !ExtensionSystem::Get(profile_)->management_policy()
517 ->MustRemainEnabled(extension, nullptr); 527 ->MustRemainEnabled(extension, nullptr);
518 pref_object->extension_can_be_disabled.reset(new bool(can_be_disabled)); 528 pref_object->extension_can_be_disabled.reset(new bool(can_be_disabled));
519 return pref_object; 529 return pref_object;
520 } 530 }
521 531
522 // TODO(dbeam): surface !IsUserModifiable or IsPrefSupervisorControlled? 532 // TODO(dbeam): surface !IsUserModifiable or IsPrefSupervisorControlled?
523
524 return pref_object; 533 return pref_object;
525 } 534 }
526 535
527 PrefsUtil::SetPrefResult PrefsUtil::SetPref(const std::string& pref_name, 536 PrefsUtil::SetPrefResult PrefsUtil::SetPref(const std::string& pref_name,
528 const base::Value* value) { 537 const base::Value* value) {
529 if (GetWhitelistedPrefType(pref_name) == 538 if (GetWhitelistedPrefType(pref_name) ==
530 settings_private::PrefType::PREF_TYPE_NONE) { 539 settings_private::PrefType::PREF_TYPE_NONE) {
531 return PREF_NOT_FOUND; 540 return PREF_NOT_FOUND;
532 } 541 }
533 542
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
644 return false; 653 return false;
645 #endif 654 #endif
646 } 655 }
647 656
648 bool PrefsUtil::IsPrefTypeURL(const std::string& pref_name) { 657 bool PrefsUtil::IsPrefTypeURL(const std::string& pref_name) {
649 return GetWhitelistedPrefType(pref_name) == 658 return GetWhitelistedPrefType(pref_name) ==
650 settings_private::PrefType::PREF_TYPE_URL; 659 settings_private::PrefType::PREF_TYPE_URL;
651 } 660 }
652 661
653 #if defined(OS_CHROMEOS) 662 #if defined(OS_CHROMEOS)
663
654 bool PrefsUtil::IsPrefEnterpriseManaged(const std::string& pref_name) { 664 bool PrefsUtil::IsPrefEnterpriseManaged(const std::string& pref_name) {
655 if (IsPrivilegedCrosSetting(pref_name)) { 665 policy::BrowserPolicyConnectorChromeOS* connector =
656 policy::BrowserPolicyConnectorChromeOS* connector = 666 g_browser_process->platform_part()->browser_policy_connector_chromeos();
657 g_browser_process->platform_part()->browser_policy_connector_chromeos(); 667 if (connector->IsEnterpriseManaged()) {
658 if (connector->IsEnterpriseManaged()) 668 if (IsPrivilegedCrosSetting(pref_name))
659 return true; 669 return true;
670
671 if (pref_name == prefs::kUserTimezone ||
672 pref_name == prefs::kResolveTimezoneByGeolocation) {
673 return chromeos::system::IsTimezonePrefsManaged(pref_name);
674 }
660 } 675 }
661 return false; 676 return false;
662 } 677 }
663 678
664 bool PrefsUtil::IsPrefOwnerControlled(const std::string& pref_name) { 679 bool PrefsUtil::IsPrefOwnerControlled(const std::string& pref_name) {
665 if (IsPrivilegedCrosSetting(pref_name)) { 680 if (IsPrivilegedCrosSetting(pref_name)) {
666 if (!chromeos::ProfileHelper::IsOwnerProfile(profile_)) 681 if (!chromeos::ProfileHelper::IsOwnerProfile(profile_))
667 return true; 682 return true;
668 } 683 }
669 return false; 684 return false;
670 } 685 }
671 686
672 bool PrefsUtil::IsPrefPrimaryUserControlled(const std::string& pref_name) { 687 bool PrefsUtil::IsPrefPrimaryUserControlled(const std::string& pref_name) {
673 if (pref_name == prefs::kWakeOnWifiDarkConnect) { 688 if (pref_name == prefs::kWakeOnWifiDarkConnect ||
689 pref_name == prefs::kResolveTimezoneByGeolocation ||
690 pref_name == prefs::kUserTimezone) {
674 user_manager::UserManager* user_manager = user_manager::UserManager::Get(); 691 user_manager::UserManager* user_manager = user_manager::UserManager::Get();
675 const user_manager::User* user = 692 const user_manager::User* user =
676 chromeos::ProfileHelper::Get()->GetUserByProfile(profile_); 693 chromeos::ProfileHelper::Get()->GetUserByProfile(profile_);
677 if (user && 694 if (user &&
678 user->GetAccountId() != user_manager->GetPrimaryUser()->GetAccountId()) 695 user->GetAccountId() != user_manager->GetPrimaryUser()->GetAccountId())
679 return true; 696 return true;
stevenjb 2017/05/16 17:16:57 {}
Alexander Alekseev 2017/05/19 11:25:29 Done.
680 } 697 }
681 return false; 698 return false;
682 } 699 }
683 #endif 700 #endif
684 701
685 bool PrefsUtil::IsPrefSupervisorControlled(const std::string& pref_name) { 702 bool PrefsUtil::IsPrefSupervisorControlled(const std::string& pref_name) {
686 if (pref_name != prefs::kBrowserGuestModeEnabled && 703 if (pref_name != prefs::kBrowserGuestModeEnabled &&
687 pref_name != prefs::kBrowserAddPersonEnabled) { 704 pref_name != prefs::kBrowserAddPersonEnabled) {
688 return false; 705 return false;
689 } 706 }
690 return profile_->IsSupervised(); 707 return profile_->IsSupervised();
691 } 708 }
692 709
693 bool PrefsUtil::IsPrefUserModifiable(const std::string& pref_name) { 710 bool PrefsUtil::IsPrefUserModifiable(const std::string& pref_name) {
711 #if defined(OS_CHROMEOS)
712 if (IsCrosSettingReadOnly(pref_name))
713 return false;
714 #endif
715
694 const PrefService::Preference* profile_pref = 716 const PrefService::Preference* profile_pref =
695 profile_->GetPrefs()->FindPreference(pref_name); 717 profile_->GetPrefs()->FindPreference(pref_name);
696 if (profile_pref) 718 if (profile_pref)
697 return profile_pref->IsUserModifiable(); 719 return profile_pref->IsUserModifiable();
698 720
699 const PrefService::Preference* local_state_pref = 721 const PrefService::Preference* local_state_pref =
700 g_browser_process->local_state()->FindPreference(pref_name); 722 g_browser_process->local_state()->FindPreference(pref_name);
701 if (local_state_pref) 723 if (local_state_pref)
702 return local_state_pref->IsUserModifiable(); 724 return local_state_pref->IsUserModifiable();
703 725
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 ExtensionPrefValueMapFactory::GetForBrowserContext(profile_) 793 ExtensionPrefValueMapFactory::GetForBrowserContext(profile_)
772 ->GetExtensionControllingPref(pref_object.key); 794 ->GetExtensionControllingPref(pref_object.key);
773 if (extension_id.empty()) 795 if (extension_id.empty())
774 return nullptr; 796 return nullptr;
775 797
776 return ExtensionRegistry::Get(profile_)->GetExtensionById( 798 return ExtensionRegistry::Get(profile_)->GetExtensionById(
777 extension_id, ExtensionRegistry::ENABLED); 799 extension_id, ExtensionRegistry::ENABLED);
778 } 800 }
779 801
780 } // namespace extensions 802 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698