| Index: chrome/browser/chromeos/app_mode/kiosk_app_manager_browsertest.cc
|
| diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_manager_browsertest.cc b/chrome/browser/chromeos/app_mode/kiosk_app_manager_browsertest.cc
|
| index ad615533b491d37c7d9ab88a3810ab5af0ff08f1..8fe5ca4c27b12e0ad4293205089e505b6929a04f 100644
|
| --- a/chrome/browser/chromeos/app_mode/kiosk_app_manager_browsertest.cc
|
| +++ b/chrome/browser/chromeos/app_mode/kiosk_app_manager_browsertest.cc
|
| @@ -5,6 +5,8 @@
|
| #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
|
|
|
| #include "base/command_line.h"
|
| +#include "base/file_util.h"
|
| +#include "base/files/scoped_temp_dir.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/path_service.h"
|
| #include "base/prefs/scoped_user_pref_update.h"
|
| @@ -15,11 +17,13 @@
|
| #include "chrome/browser/chromeos/policy/device_local_account.h"
|
| #include "chrome/browser/chromeos/settings/cros_settings.h"
|
| #include "chrome/browser/policy/browser_policy_connector.h"
|
| +#include "chrome/browser/ui/browser.h"
|
| #include "chrome/common/chrome_paths.h"
|
| #include "chrome/common/chrome_switches.h"
|
| #include "chrome/test/base/in_process_browser_test.h"
|
| #include "chromeos/settings/cros_settings_names.h"
|
| #include "content/public/test/test_utils.h"
|
| +#include "extensions/common/extension.h"
|
| #include "net/base/host_port_pair.h"
|
| #include "net/dns/mock_host_resolver.h"
|
| #include "net/test/embedded_test_server/embedded_test_server.h"
|
| @@ -60,6 +64,27 @@ void OnEnterpriseDeviceLock(
|
| runner_quit_task.Run();
|
| }
|
|
|
| +scoped_refptr<extensions::Extension> MakeApp(const std::string& name,
|
| + const std::string& version,
|
| + const std::string& url,
|
| + const std::string& id) {
|
| + std::string err;
|
| + base::DictionaryValue value;
|
| + value.SetString("name", name);
|
| + value.SetString("version", version);
|
| + value.SetString("app.launch.web_url", url);
|
| + scoped_refptr<extensions::Extension> app =
|
| + extensions::Extension::Create(
|
| + base::FilePath(),
|
| + extensions::Manifest::INTERNAL,
|
| + value,
|
| + extensions::Extension::WAS_INSTALLED_BY_DEFAULT,
|
| + id,
|
| + &err);
|
| + EXPECT_EQ(err, "");
|
| + return app;
|
| +}
|
| +
|
| class TestKioskAppManagerObserver : public KioskAppManagerObserver {
|
| public:
|
| explicit TestKioskAppManagerObserver(KioskAppManager* manager)
|
| @@ -153,6 +178,8 @@ class KioskAppManagerTest : public InProcessBrowserTest {
|
| // spawning sandbox host process. See crbug.com/322732.
|
| embedded_test_server()->StopThread();
|
|
|
| + ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
|
| +
|
| InProcessBrowserTest::SetUp();
|
| }
|
|
|
| @@ -198,8 +225,6 @@ class KioskAppManagerTest : public InProcessBrowserTest {
|
| return str;
|
| }
|
|
|
| - KioskAppManager* manager() const { return KioskAppManager::Get(); }
|
| -
|
| // Locks device for enterprise.
|
| policy::EnterpriseInstallAttributes::LockResult LockDeviceForEnterprise() {
|
| scoped_ptr<policy::EnterpriseInstallAttributes::LockResult> lock_result(
|
| @@ -219,7 +244,49 @@ class KioskAppManagerTest : public InProcessBrowserTest {
|
| return *lock_result.get();
|
| }
|
|
|
| + void SetExistingApp(const std::string& app_id,
|
| + const std::string& app_name,
|
| + const std::string& icon_file_name) {
|
| + base::FilePath test_dir;
|
| + ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir));
|
| + base::FilePath data_dir = test_dir.AppendASCII("chromeos/app_mode/");
|
| +
|
| + // Copy the icon file to temp dir for using because ClearAppData test
|
| + // deletes it.
|
| + base::FilePath icon_path = temp_dir_.path().AppendASCII(icon_file_name);
|
| + base::CopyFile(data_dir.AppendASCII(icon_file_name), icon_path);
|
| +
|
| + scoped_ptr<base::DictionaryValue> apps_dict(new base::DictionaryValue);
|
| + apps_dict->SetString(app_id + ".name", app_name);
|
| + apps_dict->SetString(app_id + ".icon", icon_path.MaybeAsASCII());
|
| +
|
| + PrefService* local_state = g_browser_process->local_state();
|
| + DictionaryPrefUpdate dict_update(local_state,
|
| + KioskAppManager::kKioskDictionaryName);
|
| + dict_update->Set(KioskAppManager::kKeyApps, apps_dict.release());
|
| +
|
| + // Make the app appear in device settings.
|
| + base::ListValue device_local_accounts;
|
| + scoped_ptr<base::DictionaryValue> entry(new base::DictionaryValue);
|
| + entry->SetStringWithoutPathExpansion(
|
| + kAccountsPrefDeviceLocalAccountsKeyId,
|
| + app_id + "_id");
|
| + entry->SetIntegerWithoutPathExpansion(
|
| + kAccountsPrefDeviceLocalAccountsKeyType,
|
| + policy::DeviceLocalAccount::TYPE_KIOSK_APP);
|
| + entry->SetStringWithoutPathExpansion(
|
| + kAccountsPrefDeviceLocalAccountsKeyKioskAppId,
|
| + app_id);
|
| + device_local_accounts.Append(entry.release());
|
| + CrosSettings::Get()->Set(kAccountsPrefDeviceLocalAccounts,
|
| + device_local_accounts);
|
| + }
|
| +
|
| + KioskAppManager* manager() const { return KioskAppManager::Get(); }
|
| +
|
| private:
|
| + base::ScopedTempDir temp_dir_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(KioskAppManagerTest);
|
| };
|
|
|
| @@ -272,36 +339,37 @@ IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, Basic) {
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, LoadCached) {
|
| - base::FilePath test_dir;
|
| - ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir));
|
| - base::FilePath data_dir = test_dir.AppendASCII("chromeos/app_mode/");
|
| + SetExistingApp("app_1", "Cached App1 Name", "red16x16.png");
|
| +
|
| + AppDataLoadWaiter waiter(manager());
|
| + waiter.Wait();
|
| + EXPECT_TRUE(waiter.loaded());
|
| +
|
| + KioskAppManager::Apps apps;
|
| + manager()->GetApps(&apps);
|
| + EXPECT_EQ(1u, apps.size());
|
| + EXPECT_EQ("app_1", apps[0].app_id);
|
| + EXPECT_EQ("Cached App1 Name", apps[0].name);
|
| + EXPECT_EQ(gfx::Size(16, 16), apps[0].icon.size());
|
| +}
|
|
|
| - scoped_ptr<base::DictionaryValue> apps_dict(new base::DictionaryValue);
|
| - apps_dict->SetString("app_1.name", "App1 Name");
|
| - std::string icon_path =
|
| - base::StringPrintf("%s/red16x16.png", data_dir.value().c_str());
|
| - apps_dict->SetString("app_1.icon", icon_path);
|
| +IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, ClearAppData) {
|
| + SetExistingApp("app_1", "Cached App1 Name", "red16x16.png");
|
|
|
| PrefService* local_state = g_browser_process->local_state();
|
| - DictionaryPrefUpdate dict_update(local_state,
|
| - KioskAppManager::kKioskDictionaryName);
|
| - dict_update->Set(KioskAppManager::kKeyApps, apps_dict.release());
|
| -
|
| - // Make the app appear in device settings.
|
| - base::ListValue device_local_accounts;
|
| - scoped_ptr<base::DictionaryValue> entry(new base::DictionaryValue);
|
| - entry->SetStringWithoutPathExpansion(
|
| - kAccountsPrefDeviceLocalAccountsKeyId,
|
| - "app_1_id");
|
| - entry->SetIntegerWithoutPathExpansion(
|
| - kAccountsPrefDeviceLocalAccountsKeyType,
|
| - policy::DeviceLocalAccount::TYPE_KIOSK_APP);
|
| - entry->SetStringWithoutPathExpansion(
|
| - kAccountsPrefDeviceLocalAccountsKeyKioskAppId,
|
| - "app_1");
|
| - device_local_accounts.Append(entry.release());
|
| - CrosSettings::Get()->Set(kAccountsPrefDeviceLocalAccounts,
|
| - device_local_accounts);
|
| + const base::DictionaryValue* dict =
|
| + local_state->GetDictionary(KioskAppManager::kKioskDictionaryName);
|
| + const base::DictionaryValue* apps_dict;
|
| + EXPECT_TRUE(dict->GetDictionary(KioskAppManager::kKeyApps, &apps_dict));
|
| + EXPECT_TRUE(apps_dict->HasKey("app_1"));
|
| +
|
| + manager()->ClearAppData("app_1");
|
| +
|
| + EXPECT_FALSE(apps_dict->HasKey("app_1"));
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, UpdateAppDataFromProfile) {
|
| + SetExistingApp("app_1", "Cached App1 Name", "red16x16.png");
|
|
|
| AppDataLoadWaiter waiter(manager());
|
| waiter.Wait();
|
| @@ -311,8 +379,20 @@ IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, LoadCached) {
|
| manager()->GetApps(&apps);
|
| EXPECT_EQ(1u, apps.size());
|
| EXPECT_EQ("app_1", apps[0].app_id);
|
| - EXPECT_EQ("App1 Name", apps[0].name);
|
| - EXPECT_EQ(gfx::Size(16, 16), apps[0].icon.size());
|
| + EXPECT_EQ("Cached App1 Name", apps[0].name);
|
| +
|
| + scoped_refptr<extensions::Extension> updated_app =
|
| + MakeApp("Updated App1 Name", "2.0", "http://localhost/", "app_1");
|
| + manager()->UpdateAppDataFromProfile(
|
| + "app_1", browser()->profile(), updated_app.get());
|
| +
|
| + waiter.Wait();
|
| + EXPECT_TRUE(waiter.loaded());
|
| +
|
| + manager()->GetApps(&apps);
|
| + EXPECT_EQ(1u, apps.size());
|
| + EXPECT_EQ("app_1", apps[0].app_id);
|
| + EXPECT_EQ("Updated App1 Name", apps[0].name);
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, BadApp) {
|
|
|