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

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

Issue 14927015: Translate device-local account IDs to user IDs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix forward declaration. Created 7 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 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 465421589d410e7194678dd403ba9e25e4e86aec..9efe5bfaa04be4e05a457dd38cd13ea1c100227a 100644
--- a/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc
+++ b/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc
@@ -9,15 +9,14 @@
#include "base/bind.h"
#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
#include "base/path_service.h"
#include "base/prefs/pref_registry_simple.h"
#include "base/stl_util.h"
-#include "base/values.h"
#include "chrome/browser/chromeos/app_mode/kiosk_app_data.h"
#include "chrome/browser/chromeos/app_mode/kiosk_app_manager_observer.h"
-#include "chrome/browser/chromeos/login/user_manager.h"
+#include "chrome/browser/chromeos/policy/device_local_account.h"
#include "chrome/browser/chromeos/settings/cros_settings.h"
+#include "chrome/browser/chromeos/settings/cros_settings_names.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_paths.h"
#include "chromeos/cryptohome/async_method_caller.h"
@@ -26,8 +25,11 @@ namespace chromeos {
namespace {
-std::string FormatKioskAppUserId(const std::string& app_id) {
- return app_id + '@' + UserManager::kKioskAppUserDomain;
+// Domain that is used for kiosk-app account IDs.
+const char kKioskAppAccountDomain[] = "kiosk-apps";
+
+std::string GenerateKioskAppAccountId(const std::string& app_id) {
+ return app_id + '@' + kKioskAppAccountDomain;
}
void OnRemoveAppCryptohomeComplete(const std::string& app,
@@ -39,40 +41,6 @@ void OnRemoveAppCryptohomeComplete(const std::string& app,
}
}
-// Decodes a device-local account dictionary and extracts the |account_id| and
-// |app_id| if decoding is successful and the entry refers to a Kiosk App.
-bool DecodeDeviceLocalAccount(const base::Value* account_spec,
- std::string* account_id,
- std::string* app_id) {
- const base::DictionaryValue* account_dict = NULL;
- if (!account_spec->GetAsDictionary(&account_dict)) {
- NOTREACHED();
- return false;
- }
-
- if (!account_dict->GetStringWithoutPathExpansion(
- kAccountsPrefDeviceLocalAccountsKeyId, account_id)) {
- LOG(ERROR) << "Account ID missing";
- return false;
- }
-
- int type;
- if (!account_dict->GetIntegerWithoutPathExpansion(
- kAccountsPrefDeviceLocalAccountsKeyType, &type) ||
- type != DEVICE_LOCAL_ACCOUNT_TYPE_KIOSK_APP) {
- // Not a kiosk app.
- return false;
- }
-
- if (!account_dict->GetStringWithoutPathExpansion(
- kAccountsPrefDeviceLocalAccountsKeyKioskAppId, app_id)) {
- LOG(ERROR) << "Kiosk app id missing for " << *account_id;
- return false;
- }
-
- return true;
-}
-
} // namespace
// static
@@ -100,7 +68,8 @@ void KioskAppManager::RegisterPrefs(PrefRegistrySimple* registry) {
}
KioskAppManager::App::App(const KioskAppData& data)
- : id(data.id()),
+ : app_id(data.app_id()),
+ user_id(data.user_id()),
name(data.name()),
icon(data.icon()),
is_loading(data.IsLoading()) {
@@ -116,65 +85,53 @@ std::string KioskAppManager::GetAutoLaunchApp() const {
void KioskAppManager::SetAutoLaunchApp(const std::string& app_id) {
CrosSettings::Get()->SetString(
kAccountsPrefDeviceLocalAccountAutoLoginId,
- app_id.empty() ? std::string() : FormatKioskAppUserId(app_id));
+ app_id.empty() ? std::string() : GenerateKioskAppAccountId(app_id));
CrosSettings::Get()->SetInteger(
kAccountsPrefDeviceLocalAccountAutoLoginDelay, 0);
}
void KioskAppManager::AddApp(const std::string& app_id) {
- CrosSettings* cros_settings = CrosSettings::Get();
- const base::ListValue* accounts_list = NULL;
- cros_settings->GetList(kAccountsPrefDeviceLocalAccounts, &accounts_list);
-
- // Don't insert if the app if it's already in the list.
- base::ListValue new_accounts_list;
- if (accounts_list) {
- for (base::ListValue::const_iterator entry(accounts_list->begin());
- entry != accounts_list->end(); ++entry) {
- std::string account_id;
- std::string kiosk_app_id;
- if (DecodeDeviceLocalAccount(*entry, &account_id, &kiosk_app_id) &&
- kiosk_app_id == app_id) {
- return;
- }
- new_accounts_list.Append((*entry)->DeepCopy());
+ std::vector<policy::DeviceLocalAccount> device_local_accounts =
+ policy::GetDeviceLocalAccounts(CrosSettings::Get());
+
+ // Don't insert the app if it's already in the list.
+ for (std::vector<policy::DeviceLocalAccount>::const_iterator
+ it = device_local_accounts.begin();
+ it != device_local_accounts.end(); ++it) {
+ if (it->type == policy::DeviceLocalAccount::TYPE_KIOSK_APP &&
+ it->kiosk_app_id == app_id) {
+ return;
}
}
// Add the new account.
- scoped_ptr<base::DictionaryValue> new_entry(new base::DictionaryValue());
- new_entry->SetStringWithoutPathExpansion(
- kAccountsPrefDeviceLocalAccountsKeyId, FormatKioskAppUserId(app_id));
- new_entry->SetIntegerWithoutPathExpansion(
- kAccountsPrefDeviceLocalAccountsKeyType,
- DEVICE_LOCAL_ACCOUNT_TYPE_KIOSK_APP);
- new_entry->SetStringWithoutPathExpansion(
- kAccountsPrefDeviceLocalAccountsKeyKioskAppId, app_id);
- new_accounts_list.Append(new_entry.release());
- cros_settings->Set(kAccountsPrefDeviceLocalAccounts, new_accounts_list);
+ device_local_accounts.push_back(policy::DeviceLocalAccount(
+ policy::DeviceLocalAccount::TYPE_KIOSK_APP,
+ GenerateKioskAppAccountId(app_id),
+ app_id,
+ std::string()));
+
+ policy::SetDeviceLocalAccounts(CrosSettings::Get(), device_local_accounts);
}
void KioskAppManager::RemoveApp(const std::string& app_id) {
- CrosSettings* cros_settings = CrosSettings::Get();
- const base::ListValue* accounts_list = NULL;
- cros_settings->GetList(kAccountsPrefDeviceLocalAccounts, &accounts_list);
- if (!accounts_list)
+ std::vector<policy::DeviceLocalAccount> device_local_accounts =
+ policy::GetDeviceLocalAccounts(CrosSettings::Get());
+ if (device_local_accounts.empty())
return;
- // Duplicate the list, filtering out entries that match |app_id|.
- base::ListValue new_accounts_list;
- for (base::ListValue::const_iterator entry(accounts_list->begin());
- entry != accounts_list->end(); ++entry) {
- std::string account_id;
- std::string kiosk_app_id;
- if (DecodeDeviceLocalAccount(*entry, &account_id, &kiosk_app_id) &&
- kiosk_app_id == app_id) {
- continue;
+ // Remove entries that match |app_id|.
+ for (std::vector<policy::DeviceLocalAccount>::iterator
+ it = device_local_accounts.begin();
+ it != device_local_accounts.end(); ++it) {
+ if (it->type == policy::DeviceLocalAccount::TYPE_KIOSK_APP &&
+ it->kiosk_app_id == app_id) {
+ device_local_accounts.erase(it);
+ break;
}
- new_accounts_list.Append((*entry)->DeepCopy());
}
- cros_settings->Set(kAccountsPrefDeviceLocalAccounts, new_accounts_list);
+ policy::SetDeviceLocalAccounts(CrosSettings::Get(), device_local_accounts);
}
void KioskAppManager::GetApps(Apps* apps) const {
@@ -241,7 +198,7 @@ const KioskAppData* KioskAppManager::GetAppData(
const std::string& app_id) const {
for (size_t i = 0; i < apps_.size(); ++i) {
const KioskAppData* data = apps_[i];
- if (data->id() == app_id)
+ if (data->app_id() == app_id)
return data;
}
@@ -252,7 +209,7 @@ void KioskAppManager::UpdateAppData() {
// Gets app id to data mapping for existing apps.
std::map<std::string, KioskAppData*> old_apps;
for (size_t i = 0; i < apps_.size(); ++i)
- old_apps[apps_[i]->id()] = apps_[i];
+ old_apps[apps_[i]->app_id()] = apps_[i];
apps_.weak_clear(); // |old_apps| takes ownership
auto_launch_app_id_.clear();
@@ -260,32 +217,30 @@ void KioskAppManager::UpdateAppData() {
CrosSettings::Get()->GetString(kAccountsPrefDeviceLocalAccountAutoLoginId,
&auto_login_account_id);
- const base::ListValue* local_accounts;
- if (CrosSettings::Get()->GetList(kAccountsPrefDeviceLocalAccounts,
- &local_accounts)) {
- // Re-populates |apps_| and reuses existing KioskAppData when possible.
- for (base::ListValue::const_iterator account(local_accounts->begin());
- account != local_accounts->end(); ++account) {
- std::string account_id;
- std::string kiosk_app_id;
- if (!DecodeDeviceLocalAccount(*account, &account_id, &kiosk_app_id))
- continue;
-
- if (account_id == auto_login_account_id)
- auto_launch_app_id_ = kiosk_app_id;
-
- // TODO(mnissler): Support non-CWS update URLs.
-
- std::map<std::string, KioskAppData*>::iterator old_it =
- old_apps.find(kiosk_app_id);
- if (old_it != old_apps.end()) {
- apps_.push_back(old_it->second);
- old_apps.erase(old_it);
- } else {
- KioskAppData* new_app = new KioskAppData(this, kiosk_app_id);
- apps_.push_back(new_app); // Takes ownership of |new_app|.
- new_app->Load();
- }
+ // Re-populates |apps_| and reuses existing KioskAppData when possible.
+ const std::vector<policy::DeviceLocalAccount> device_local_accounts =
+ policy::GetDeviceLocalAccounts(CrosSettings::Get());
+ for (std::vector<policy::DeviceLocalAccount>::const_iterator
+ it = device_local_accounts.begin();
+ it != device_local_accounts.end(); ++it) {
+ if (it->type != policy::DeviceLocalAccount::TYPE_KIOSK_APP)
+ continue;
+
+ if (it->account_id == auto_login_account_id)
+ auto_launch_app_id_ = it->kiosk_app_id;
+
+ // TODO(mnissler): Support non-CWS update URLs.
+
+ std::map<std::string, KioskAppData*>::iterator old_it =
+ old_apps.find(it->kiosk_app_id);
+ if (old_it != old_apps.end()) {
+ apps_.push_back(old_it->second);
+ old_apps.erase(old_it);
+ } else {
+ KioskAppData* new_app =
+ new KioskAppData(this, it->kiosk_app_id, it->user_id);
+ apps_.push_back(new_app); // Takes ownership of |new_app|.
+ new_app->Load();
}
}

Powered by Google App Engine
This is Rietveld 408576698