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) { |