| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/app_mode/kiosk_app_manager.h" | 5 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <set> | 8 #include <set> |
| 9 | 9 |
| 10 #include "base/barrier_closure.h" | 10 #include "base/barrier_closure.h" |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/files/file_path.h" | 12 #include "base/files/file_path.h" |
| 13 #include "base/files/file_util.h" | 13 #include "base/files/file_util.h" |
| 14 #include "base/logging.h" | 14 #include "base/logging.h" |
| 15 #include "base/path_service.h" | 15 #include "base/path_service.h" |
| 16 #include "base/prefs/pref_registry_simple.h" | 16 #include "base/prefs/pref_registry_simple.h" |
| 17 #include "base/prefs/pref_service.h" | 17 #include "base/prefs/pref_service.h" |
| 18 #include "base/prefs/scoped_user_pref_update.h" | 18 #include "base/prefs/scoped_user_pref_update.h" |
| 19 #include "base/stl_util.h" | 19 #include "base/stl_util.h" |
| 20 #include "base/sys_info.h" | 20 #include "base/sys_info.h" |
| 21 #include "chrome/browser/browser_process.h" | 21 #include "chrome/browser/browser_process.h" |
| 22 #include "chrome/browser/chromeos/app_mode/kiosk_app_data.h" | 22 #include "chrome/browser/chromeos/app_mode/kiosk_app_data.h" |
| 23 #include "chrome/browser/chromeos/app_mode/kiosk_app_external_loader.h" | 23 #include "chrome/browser/chromeos/app_mode/kiosk_app_external_loader.h" |
| 24 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager_observer.h" | 24 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager_observer.h" |
| 25 #include "chrome/browser/chromeos/app_mode/kiosk_external_updater.h" | 25 #include "chrome/browser/chromeos/app_mode/kiosk_external_updater.h" |
| 26 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h" |
| 26 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_fact
ory.h" | 27 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_fact
ory.h" |
| 27 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" | 28 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" |
| 28 #include "chrome/browser/chromeos/policy/device_local_account.h" | 29 #include "chrome/browser/chromeos/policy/device_local_account.h" |
| 29 #include "chrome/browser/chromeos/settings/cros_settings.h" | 30 #include "chrome/browser/chromeos/settings/cros_settings.h" |
| 30 #include "chrome/browser/extensions/external_loader.h" | 31 #include "chrome/browser/extensions/external_loader.h" |
| 31 #include "chrome/browser/extensions/external_provider_impl.h" | 32 #include "chrome/browser/extensions/external_provider_impl.h" |
| 32 #include "chrome/browser/lifetime/application_lifetime.h" | 33 #include "chrome/browser/lifetime/application_lifetime.h" |
| 33 #include "chrome/common/chrome_paths.h" | 34 #include "chrome/common/chrome_paths.h" |
| 34 #include "chrome/common/extensions/extension_constants.h" | 35 #include "chrome/common/extensions/extension_constants.h" |
| 35 #include "chromeos/chromeos_paths.h" | 36 #include "chromeos/chromeos_paths.h" |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 | 177 |
| 177 KioskAppManager::App::App() : is_loading(false), | 178 KioskAppManager::App::App() : is_loading(false), |
| 178 was_auto_launched_with_zero_delay(false) {} | 179 was_auto_launched_with_zero_delay(false) {} |
| 179 | 180 |
| 180 KioskAppManager::App::~App() {} | 181 KioskAppManager::App::~App() {} |
| 181 | 182 |
| 182 std::string KioskAppManager::GetAutoLaunchApp() const { | 183 std::string KioskAppManager::GetAutoLaunchApp() const { |
| 183 return auto_launch_app_id_; | 184 return auto_launch_app_id_; |
| 184 } | 185 } |
| 185 | 186 |
| 186 void KioskAppManager::SetAutoLaunchApp(const std::string& app_id) { | 187 void KioskAppManager::SetAutoLaunchApp(const std::string& app_id, |
| 188 OwnerSettingsServiceChromeOS* service) { |
| 187 SetAutoLoginState(AUTOLOGIN_REQUESTED); | 189 SetAutoLoginState(AUTOLOGIN_REQUESTED); |
| 188 // Clean first, so the proper change callbacks are triggered even | 190 // Clean first, so the proper change callbacks are triggered even |
| 189 // if we are only changing AutoLoginState here. | 191 // if we are only changing AutoLoginState here. |
| 190 if (!auto_launch_app_id_.empty()) { | 192 if (!auto_launch_app_id_.empty()) { |
| 191 CrosSettings::Get()->SetString(kAccountsPrefDeviceLocalAccountAutoLoginId, | 193 service->SetString(kAccountsPrefDeviceLocalAccountAutoLoginId, |
| 192 std::string()); | 194 std::string()); |
| 193 } | 195 } |
| 194 | 196 |
| 195 CrosSettings::Get()->SetString( | 197 service->SetString( |
| 196 kAccountsPrefDeviceLocalAccountAutoLoginId, | 198 kAccountsPrefDeviceLocalAccountAutoLoginId, |
| 197 app_id.empty() ? std::string() : GenerateKioskAppAccountId(app_id)); | 199 app_id.empty() ? std::string() : GenerateKioskAppAccountId(app_id)); |
| 198 CrosSettings::Get()->SetInteger( | 200 service->SetInteger(kAccountsPrefDeviceLocalAccountAutoLoginDelay, 0); |
| 199 kAccountsPrefDeviceLocalAccountAutoLoginDelay, 0); | |
| 200 } | 201 } |
| 201 | 202 |
| 202 void KioskAppManager::SetAppWasAutoLaunchedWithZeroDelay( | 203 void KioskAppManager::SetAppWasAutoLaunchedWithZeroDelay( |
| 203 const std::string& app_id) { | 204 const std::string& app_id) { |
| 204 DCHECK_EQ(auto_launch_app_id_, app_id); | 205 DCHECK_EQ(auto_launch_app_id_, app_id); |
| 205 currently_auto_launched_with_zero_delay_app_ = app_id; | 206 currently_auto_launched_with_zero_delay_app_ = app_id; |
| 206 } | 207 } |
| 207 | 208 |
| 208 void KioskAppManager::EnableConsumerKioskAutoLaunch( | 209 void KioskAppManager::EnableConsumerKioskAutoLaunch( |
| 209 const KioskAppManager::EnableKioskAutoLaunchCallback& callback) { | 210 const KioskAppManager::EnableKioskAutoLaunchCallback& callback) { |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 // Apps that were installed by the policy don't require machine owner | 326 // Apps that were installed by the policy don't require machine owner |
| 326 // consent through UI. | 327 // consent through UI. |
| 327 policy::BrowserPolicyConnectorChromeOS* connector = | 328 policy::BrowserPolicyConnectorChromeOS* connector = |
| 328 g_browser_process->platform_part()->browser_policy_connector_chromeos(); | 329 g_browser_process->platform_part()->browser_policy_connector_chromeos(); |
| 329 if (connector->IsEnterpriseManaged()) | 330 if (connector->IsEnterpriseManaged()) |
| 330 return true; | 331 return true; |
| 331 | 332 |
| 332 return GetAutoLoginState() == AUTOLOGIN_APPROVED; | 333 return GetAutoLoginState() == AUTOLOGIN_APPROVED; |
| 333 } | 334 } |
| 334 | 335 |
| 335 void KioskAppManager::AddApp(const std::string& app_id) { | 336 void KioskAppManager::AddApp(const std::string& app_id, |
| 337 OwnerSettingsServiceChromeOS* service) { |
| 336 std::vector<policy::DeviceLocalAccount> device_local_accounts = | 338 std::vector<policy::DeviceLocalAccount> device_local_accounts = |
| 337 policy::GetDeviceLocalAccounts(CrosSettings::Get()); | 339 policy::GetDeviceLocalAccounts(CrosSettings::Get()); |
| 338 | 340 |
| 339 // Don't insert the app if it's already in the list. | 341 // Don't insert the app if it's already in the list. |
| 340 for (std::vector<policy::DeviceLocalAccount>::const_iterator | 342 for (std::vector<policy::DeviceLocalAccount>::const_iterator |
| 341 it = device_local_accounts.begin(); | 343 it = device_local_accounts.begin(); |
| 342 it != device_local_accounts.end(); ++it) { | 344 it != device_local_accounts.end(); ++it) { |
| 343 if (it->type == policy::DeviceLocalAccount::TYPE_KIOSK_APP && | 345 if (it->type == policy::DeviceLocalAccount::TYPE_KIOSK_APP && |
| 344 it->kiosk_app_id == app_id) { | 346 it->kiosk_app_id == app_id) { |
| 345 return; | 347 return; |
| 346 } | 348 } |
| 347 } | 349 } |
| 348 | 350 |
| 349 // Add the new account. | 351 // Add the new account. |
| 350 device_local_accounts.push_back(policy::DeviceLocalAccount( | 352 device_local_accounts.push_back(policy::DeviceLocalAccount( |
| 351 policy::DeviceLocalAccount::TYPE_KIOSK_APP, | 353 policy::DeviceLocalAccount::TYPE_KIOSK_APP, |
| 352 GenerateKioskAppAccountId(app_id), | 354 GenerateKioskAppAccountId(app_id), |
| 353 app_id, | 355 app_id, |
| 354 std::string())); | 356 std::string())); |
| 355 | 357 |
| 356 policy::SetDeviceLocalAccounts(CrosSettings::Get(), device_local_accounts); | 358 policy::SetDeviceLocalAccounts(service, device_local_accounts); |
| 357 } | 359 } |
| 358 | 360 |
| 359 void KioskAppManager::RemoveApp(const std::string& app_id) { | 361 void KioskAppManager::RemoveApp(const std::string& app_id, |
| 362 OwnerSettingsServiceChromeOS* service) { |
| 360 // Resets auto launch app if it is the removed app. | 363 // Resets auto launch app if it is the removed app. |
| 361 if (auto_launch_app_id_ == app_id) | 364 if (auto_launch_app_id_ == app_id) |
| 362 SetAutoLaunchApp(std::string()); | 365 SetAutoLaunchApp(std::string(), service); |
| 363 | 366 |
| 364 std::vector<policy::DeviceLocalAccount> device_local_accounts = | 367 std::vector<policy::DeviceLocalAccount> device_local_accounts = |
| 365 policy::GetDeviceLocalAccounts(CrosSettings::Get()); | 368 policy::GetDeviceLocalAccounts(CrosSettings::Get()); |
| 366 if (device_local_accounts.empty()) | 369 if (device_local_accounts.empty()) |
| 367 return; | 370 return; |
| 368 | 371 |
| 369 // Remove entries that match |app_id|. | 372 // Remove entries that match |app_id|. |
| 370 for (std::vector<policy::DeviceLocalAccount>::iterator | 373 for (std::vector<policy::DeviceLocalAccount>::iterator |
| 371 it = device_local_accounts.begin(); | 374 it = device_local_accounts.begin(); |
| 372 it != device_local_accounts.end(); ++it) { | 375 it != device_local_accounts.end(); ++it) { |
| 373 if (it->type == policy::DeviceLocalAccount::TYPE_KIOSK_APP && | 376 if (it->type == policy::DeviceLocalAccount::TYPE_KIOSK_APP && |
| 374 it->kiosk_app_id == app_id) { | 377 it->kiosk_app_id == app_id) { |
| 375 device_local_accounts.erase(it); | 378 device_local_accounts.erase(it); |
| 376 break; | 379 break; |
| 377 } | 380 } |
| 378 } | 381 } |
| 379 | 382 |
| 380 policy::SetDeviceLocalAccounts(CrosSettings::Get(), device_local_accounts); | 383 policy::SetDeviceLocalAccounts(service, device_local_accounts); |
| 381 } | 384 } |
| 382 | 385 |
| 383 void KioskAppManager::GetApps(Apps* apps) const { | 386 void KioskAppManager::GetApps(Apps* apps) const { |
| 384 apps->clear(); | 387 apps->clear(); |
| 385 apps->reserve(apps_.size()); | 388 apps->reserve(apps_.size()); |
| 386 for (size_t i = 0; i < apps_.size(); ++i) { | 389 for (size_t i = 0; i < apps_.size(); ++i) { |
| 387 const KioskAppData& app_data = *apps_[i]; | 390 const KioskAppData& app_data = *apps_[i]; |
| 388 if (app_data.status() != KioskAppData::STATUS_ERROR) { | 391 if (app_data.status() != KioskAppData::STATUS_ERROR) { |
| 389 apps->push_back(App( | 392 apps->push_back(App( |
| 390 app_data, external_cache_->IsExtensionPending(app_data.app_id()), | 393 app_data, external_cache_->IsExtensionPending(app_data.app_id()), |
| (...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 731 *cache_dir = user_data_dir.AppendASCII(kCrxCacheDir); | 734 *cache_dir = user_data_dir.AppendASCII(kCrxCacheDir); |
| 732 } | 735 } |
| 733 | 736 |
| 734 void KioskAppManager::GetCrxUnpackDir(base::FilePath* unpack_dir) { | 737 void KioskAppManager::GetCrxUnpackDir(base::FilePath* unpack_dir) { |
| 735 base::FilePath temp_dir; | 738 base::FilePath temp_dir; |
| 736 base::GetTempDir(&temp_dir); | 739 base::GetTempDir(&temp_dir); |
| 737 *unpack_dir = temp_dir.AppendASCII(kCrxUnpackDir); | 740 *unpack_dir = temp_dir.AppendASCII(kCrxUnpackDir); |
| 738 } | 741 } |
| 739 | 742 |
| 740 } // namespace chromeos | 743 } // namespace chromeos |
| OLD | NEW |