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

Unified Diff: chrome/browser/chromeos/app_mode/kiosk_app_manager.cc

Issue 269573010: Download and cache kiosk app extension when it is added via kiosk mamangement ui. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove the change from chromeos_path.cc/h. Created 6 years, 8 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 side-by-side diff with in-line comments
Download patch
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 9fab7ceeac9d6791832617b7529863b71ed90f4f..8b38fbf40c99d096485cbf2792e8e61e5197b265 100644
--- a/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc
+++ b/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc
@@ -8,6 +8,7 @@
#include <set>
#include "base/bind.h"
+#include "base/files/file_path.h"
#include "base/logging.h"
#include "base/path_service.h"
#include "base/prefs/pref_registry_simple.h"
@@ -23,7 +24,10 @@
#include "chrome/browser/chromeos/policy/device_local_account.h"
#include "chrome/browser/chromeos/settings/cros_settings.h"
#include "chrome/browser/chromeos/settings/owner_key_util.h"
+#include "chrome/browser/extensions/external_provider_impl.h"
#include "chrome/common/chrome_paths.h"
+#include "chrome/common/extensions/extension_constants.h"
+#include "chromeos/chromeos_paths.h"
#include "chromeos/cryptohome/async_method_caller.h"
#include "chromeos/settings/cros_settings_names.h"
#include "content/public/browser/browser_thread.h"
@@ -54,13 +58,21 @@ void CheckOwnerFilePresence(bool *present) {
*present = util->IsPublicKeyPresent();
}
+scoped_refptr<base::SequencedTaskRunner> GetBackgroundTaskRunner() {
+ base::SequencedWorkerPool* pool = content::BrowserThread::GetBlockingPool();
+ CHECK(pool);
+ return pool->GetSequencedTaskRunnerWithShutdownBehavior(
+ pool->GetSequenceToken(), base::SequencedWorkerPool::SKIP_ON_SHUTDOWN);
+}
+
} // namespace
// static
const char KioskAppManager::kKioskDictionaryName[] = "kiosk";
const char KioskAppManager::kKeyApps[] = "apps";
const char KioskAppManager::kKeyAutoLoginState[] = "auto_login_state";
-const char KioskAppManager::kIconCacheDir[] = "kiosk";
+const char KioskAppManager::kIconCacheDir[] = "kiosk/icon";
+const char KioskAppManager::kCrxCacheDir[] = "kiosk/crx";
// static
static base::LazyInstance<KioskAppManager> instance = LAZY_INSTANCE_INITIALIZER;
@@ -81,12 +93,12 @@ void KioskAppManager::RegisterPrefs(PrefRegistrySimple* registry) {
registry->RegisterDictionaryPref(kKioskDictionaryName);
}
-KioskAppManager::App::App(const KioskAppData& data)
+KioskAppManager::App::App(const KioskAppData& data, bool is_extension_pending)
: app_id(data.app_id()),
user_id(data.user_id()),
name(data.name()),
icon(data.icon()),
- is_loading(data.IsLoading()) {
+ is_loading(data.IsLoading() || is_extension_pending) {
}
KioskAppManager::App::App() : is_loading(false) {}
@@ -292,7 +304,8 @@ void KioskAppManager::GetApps(Apps* apps) const {
for (size_t i = 0; i < apps_.size(); ++i) {
const KioskAppData& app_data = *apps_[i];
if (app_data.status() != KioskAppData::STATUS_ERROR)
- apps->push_back(App(app_data));
+ apps->push_back(App(
+ app_data, external_cache_->IsExtensionPending(app_data.app_id())));
}
}
@@ -301,7 +314,7 @@ bool KioskAppManager::GetApp(const std::string& app_id, App* app) const {
if (!data)
return false;
- *app = App(*data);
+ *app = App(*data, external_cache_->IsExtensionPending(app_id));
return true;
}
@@ -352,6 +365,16 @@ void KioskAppManager::RemoveObserver(KioskAppManagerObserver* observer) {
}
KioskAppManager::KioskAppManager() : ownership_established_(false) {
+ base::FilePath cache_dir;
+ GetKioskAppCrxCacheDir(&cache_dir);
+ external_cache_.reset(
+ new ExternalCache(cache_dir,
+ g_browser_process->system_request_context(),
+ GetBackgroundTaskRunner(),
+ this,
+ true /* always_check_updates */,
+ false /* wait_for_cache_initialization */));
+
UpdateAppData();
local_accounts_subscription_ =
CrosSettings::Get()->AddSettingsObserver(
@@ -369,6 +392,7 @@ void KioskAppManager::CleanUp() {
local_accounts_subscription_.reset();
local_account_auto_login_id_subscription_.reset();
apps_.clear();
+ external_cache_.reset();
}
const KioskAppData* KioskAppManager::GetAppData(
@@ -426,14 +450,24 @@ void KioskAppManager::UpdateAppData() {
}
// Clears cache and deletes the remaining old data.
+ std::vector<std::string> apps_to_remove;
for (std::map<std::string, KioskAppData*>::iterator it = old_apps.begin();
it != old_apps.end(); ++it) {
it->second->ClearCache();
cryptohome::AsyncMethodCaller::GetInstance()->AsyncRemove(
it->second->user_id(),
base::Bind(&OnRemoveAppCryptohomeComplete, it->first));
+ apps_to_remove.push_back(it->second->app_id());
}
STLDeleteValues(&old_apps);
+ external_cache_->RemoveExtensions(apps_to_remove);
+
+ // Request external_cache_ to download new apps and update the existing
+ // apps.
+ scoped_ptr<base::DictionaryValue> prefs(new base::DictionaryValue);
+ for (size_t i = 0; i < apps_.size(); ++i)
+ prefs->Set(apps_[i]->app_id(), new base::DictionaryValue);
+ external_cache_->UpdateExtensionsList(prefs.Pass());
FOR_EACH_OBSERVER(KioskAppManagerObserver, observers_,
OnKioskAppsSettingsChanged());
@@ -457,6 +491,26 @@ void KioskAppManager::OnKioskAppDataLoadFailure(const std::string& app_id) {
OnKioskAppDataLoadFailure(app_id));
}
+void KioskAppManager::OnExtensionListsUpdated(
+ const base::DictionaryValue* prefs) {
+}
+
+void KioskAppManager::OnExtensionLoadedInCache(const std::string& id) {
+ KioskAppData* app_data = GetAppDataMutable(id);
+ if (!app_data)
+ return;
+ OnKioskAppDataChanged(id);
+}
+
+void KioskAppManager::OnExtensionDownloadFailed(
+ const std::string& id,
+ extensions::ExtensionDownloaderDelegate::Error error) {
+ KioskAppData* app_data = GetAppDataMutable(id);
+ if (!app_data)
+ return;
+ OnKioskAppDataLoadFailure(id);
+}
+
KioskAppManager::AutoLoginState KioskAppManager::GetAutoLoginState() const {
PrefService* prefs = g_browser_process->local_state();
const base::DictionaryValue* dict =
@@ -476,4 +530,10 @@ void KioskAppManager::SetAutoLoginState(AutoLoginState state) {
prefs->CommitPendingWrite();
}
+void KioskAppManager::GetKioskAppCrxCacheDir(base::FilePath* cache_dir) {
+ base::FilePath user_data_dir;
+ CHECK(PathService::Get(chrome::DIR_USER_DATA, &user_data_dir));
+ *cache_dir = user_data_dir.AppendASCII(kCrxCacheDir);
+}
+
} // namespace chromeos
« no previous file with comments | « chrome/browser/chromeos/app_mode/kiosk_app_manager.h ('k') | chrome/browser/chromeos/extensions/external_cache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698