diff options
-rw-r--r-- | chrome/browser/policy/device_policy_cache.cc | 21 | ||||
-rw-r--r-- | chrome/browser/policy/device_policy_cache.h | 3 | ||||
-rw-r--r-- | chrome/browser/policy/proto/chrome_device_policy.proto | 9 |
3 files changed, 30 insertions, 3 deletions
diff --git a/chrome/browser/policy/device_policy_cache.cc b/chrome/browser/policy/device_policy_cache.cc index aada619..300b952 100644 --- a/chrome/browser/policy/device_policy_cache.cc +++ b/chrome/browser/policy/device_policy_cache.cc @@ -352,7 +352,7 @@ void DevicePolicyCache::DecodeDevicePolicy( PolicyMap* policies) { // Decode the various groups of policies. DecodeLoginPolicies(policy, policies); - DecodeKioskPolicies(policy, policies); + DecodeKioskPolicies(policy, policies, install_attributes_); DecodeNetworkPolicies(policy, policies, install_attributes_); DecodeReportingPolicies(policy, policies); DecodeGenericPolicies(policy, policies); @@ -425,7 +425,12 @@ void DevicePolicyCache::DecodeLoginPolicies( // static void DevicePolicyCache::DecodeKioskPolicies( const em::ChromeDeviceSettingsProto& policy, - PolicyMap* policies) { + PolicyMap* policies, + EnterpriseInstallAttributes* install_attributes) { + // No policies if this is not KIOSK. + if (install_attributes->GetMode() != DEVICE_MODE_KIOSK) + return; + if (policy.has_forced_logout_timeouts()) { const em::ForcedLogoutTimeoutsProto& container( policy.forced_logout_timeouts()); @@ -479,6 +484,18 @@ void DevicePolicyCache::DecodeKioskPolicies( POLICY_SCOPE_MACHINE, app_pack_list); } + + if (policy.has_pinned_apps()) { + const em::PinnedAppsProto& container(policy.pinned_apps()); + base::ListValue* pinned_apps_list = new base::ListValue(); + for (int i = 0; i < container.app_id_size(); ++i) + pinned_apps_list->Append(Value::CreateStringValue(container.app_id(i))); + + policies->Set(key::kPinnedLauncherApps, + POLICY_LEVEL_RECOMMENDED, + POLICY_SCOPE_MACHINE, + pinned_apps_list); + } } // static diff --git a/chrome/browser/policy/device_policy_cache.h b/chrome/browser/policy/device_policy_cache.h index 1c38167..c396a9f 100644 --- a/chrome/browser/policy/device_policy_cache.h +++ b/chrome/browser/policy/device_policy_cache.h @@ -89,7 +89,8 @@ class DevicePolicyCache : public CloudPolicyCacheBase { PolicyMap* policies); static void DecodeKioskPolicies( const enterprise_management::ChromeDeviceSettingsProto& policy, - PolicyMap* policies); + PolicyMap* policies, + EnterpriseInstallAttributes* install_attributes); static void DecodeNetworkPolicies( const enterprise_management::ChromeDeviceSettingsProto& policy, PolicyMap* policies, diff --git a/chrome/browser/policy/proto/chrome_device_policy.proto b/chrome/browser/policy/proto/chrome_device_policy.proto index b899812..17a1743c 100644 --- a/chrome/browser/policy/proto/chrome_device_policy.proto +++ b/chrome/browser/policy/proto/chrome_device_policy.proto @@ -114,6 +114,14 @@ message AppPackProto { repeated AppPackEntryProto app_pack = 1; } +// This is a special policy for kiosk/retail mode that specifies what apps +// should be pinned to the launcher. For regular accounts, pinned apps are +// controlled through user policy. +message PinnedAppsProto { + // App IDs for the apps to pin. + repeated string app_id = 1; +} + message ForcedLogoutTimeoutsProto { // All timeouts are specified in milliseconds. @@ -201,4 +209,5 @@ message ChromeDeviceSettingsProto { optional ScreenSaverProto login_screen_saver = 16; optional AutoUpdateSettingsProto auto_update_settings = 17; optional StartUpUrlsProto start_up_urls = 18; + optional PinnedAppsProto pinned_apps = 19; } |