Index: chrome/browser/chromeos/app_mode/kiosk_app_manager.cc |
diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc b/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc |
index d7e93c267d97ba6655e8fffd95116dbaf7a2caea..61b128726faf03040826e965a12db8b8a612e1b2 100644 |
--- a/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc |
+++ b/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc |
@@ -9,6 +9,7 @@ |
#include "base/bind.h" |
#include "base/files/file_path.h" |
+#include "base/files/file_util.h" |
#include "base/logging.h" |
#include "base/path_service.h" |
#include "base/prefs/pref_registry_simple.h" |
@@ -20,6 +21,7 @@ |
#include "chrome/browser/chromeos/app_mode/kiosk_app_data.h" |
#include "chrome/browser/chromeos/app_mode/kiosk_app_external_loader.h" |
#include "chrome/browser/chromeos/app_mode/kiosk_app_manager_observer.h" |
+#include "chrome/browser/chromeos/app_mode/kiosk_external_updater.h" |
#include "chrome/browser/chromeos/ownership/owner_settings_service.h" |
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" |
#include "chrome/browser/chromeos/policy/device_local_account.h" |
@@ -76,6 +78,7 @@ const char KioskAppManager::kKeyApps[] = "apps"; |
const char KioskAppManager::kKeyAutoLoginState[] = "auto_login_state"; |
const char KioskAppManager::kIconCacheDir[] = "kiosk/icon"; |
const char KioskAppManager::kCrxCacheDir[] = "kiosk/crx"; |
+const char KioskAppManager::kCrxUnpackDir[] = "kiosk_unpack"; |
// static |
static base::LazyInstance<KioskAppManager> instance = LAZY_INSTANCE_INITIALIZER; |
@@ -372,6 +375,12 @@ bool KioskAppManager::HasCachedCrx(const std::string& app_id) const { |
return GetCachedCrx(app_id, &crx_path, &version); |
} |
+bool KioskAppManager::GetCachedCrx(const std::string& app_id, |
+ base::FilePath* file_path, |
+ std::string* version) const { |
+ return external_cache_->GetExtension(app_id, file_path, version); |
+} |
+ |
void KioskAppManager::AddObserver(KioskAppManagerObserver* observer) { |
observers_.AddObserver(observer); |
} |
@@ -409,6 +418,19 @@ void KioskAppManager::UpdateExternalCache() { |
UpdateAppData(); |
} |
+void KioskAppManager::OnKioskAppCacheUpdated(const std::string& app_id) { |
+ FOR_EACH_OBSERVER( |
+ KioskAppManagerObserver, observers_, OnKioskAppCacheUpdated(app_id)); |
+} |
+ |
+void KioskAppManager::PutValidatedExternalExtension( |
+ const std::string& app_id, |
+ const base::FilePath& crx_path, |
+ const std::string& version, |
+ const ExternalCache::PutExternalExtensionCallback& callback) { |
+ external_cache_->PutExternalExtension(app_id, crx_path, version, callback); |
+} |
+ |
KioskAppManager::KioskAppManager() |
: ownership_established_(false), external_loader_created_(false) { |
base::FilePath cache_dir; |
@@ -433,10 +455,20 @@ KioskAppManager::KioskAppManager() |
KioskAppManager::~KioskAppManager() {} |
+void KioskAppManager::MonitorKioskExternalUpdate() { |
+ base::FilePath cache_dir; |
+ GetCrxCacheDir(&cache_dir); |
+ base::FilePath unpack_dir; |
+ GetCrxUnpackDir(&unpack_dir); |
+ usb_stick_updater_.reset(new KioskExternalUpdater( |
+ GetBackgroundTaskRunner(), cache_dir, unpack_dir)); |
+} |
+ |
void KioskAppManager::CleanUp() { |
local_accounts_subscription_.reset(); |
local_account_auto_login_id_subscription_.reset(); |
apps_.clear(); |
+ usb_stick_updater_.reset(); |
external_cache_.reset(); |
} |
@@ -588,10 +620,10 @@ void KioskAppManager::GetCrxCacheDir(base::FilePath* cache_dir) { |
*cache_dir = user_data_dir.AppendASCII(kCrxCacheDir); |
} |
-bool KioskAppManager::GetCachedCrx(const std::string& app_id, |
- base::FilePath* file_path, |
- std::string* version) const { |
- return external_cache_->GetExtension(app_id, file_path, version); |
+void KioskAppManager::GetCrxUnpackDir(base::FilePath* unpack_dir) { |
+ base::FilePath temp_dir; |
+ base::GetTempDir(&temp_dir); |
+ *unpack_dir = temp_dir.AppendASCII(kCrxUnpackDir); |
} |
} // namespace chromeos |