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

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

Issue 141803014: Merge 244632 "kiosk: Do update check during launch." (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1700/src/
Patch Set: Created 6 years, 11 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_browsertest.cc
===================================================================
--- chrome/browser/chromeos/app_mode/kiosk_app_manager_browsertest.cc (revision 246680)
+++ chrome/browser/chromeos/app_mode/kiosk_app_manager_browsertest.cc (working copy)
@@ -6,6 +6,8 @@
#include "base/at_exit.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"
@@ -16,13 +18,16 @@
#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/common/extensions/extension.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 "net/base/host_port_pair.h"
#include "net/dns/mock_host_resolver.h"
+#include "net/test/embedded_test_server/embedded_test_server.h"
namespace chromeos {
@@ -60,6 +65,27 @@
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)
@@ -101,14 +127,15 @@
explicit AppDataLoadWaiter(KioskAppManager* manager)
: manager_(manager),
loaded_(false) {
- manager_->AddObserver(this);
}
virtual ~AppDataLoadWaiter() {
- manager_->RemoveObserver(this);
}
void Wait() {
- base::MessageLoop::current()->Run();
+ manager_->AddObserver(this);
+ runner_ = new content::MessageLoopRunner;
+ runner_->Run();
+ manager_->RemoveObserver(this);
}
bool loaded() const { return loaded_; }
@@ -124,6 +151,7 @@
base::MessageLoop::current()->Quit();
}
+ scoped_refptr<content::MessageLoopRunner> runner_;
KioskAppManager* manager_;
bool loaded_;
@@ -138,20 +166,47 @@
virtual ~KioskAppManagerTest() {}
// InProcessBrowserTest overrides:
+ virtual void SetUp() OVERRIDE {
+ base::FilePath test_data_dir;
+ PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir);
+ base::FilePath webstore_dir =
+ test_data_dir.Append(FILE_PATH_LITERAL("chromeos/app_mode/"));
+ embedded_test_server()->ServeFilesFromDirectory(webstore_dir);
+ ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
+ // Stop IO thread here because no threads are allowed while
+ // spawning sandbox host process. See crbug.com/322732.
+ // embedded_test_server()->StopThread();
+
+ ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
+
+ InProcessBrowserTest::SetUp();
+ }
+
virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
- // We start the test server now instead of in
- // SetUpInProcessBrowserTestFixture so that we can get its port number.
- ASSERT_TRUE(test_server()->Start());
+ InProcessBrowserTest::SetUpCommandLine(command_line);
- net::HostPortPair host_port = test_server()->host_port_pair();
- test_gallery_url_ = base::StringPrintf(
- "http://%s:%d/files/chromeos/app_mode/webstore",
- kWebstoreDomain, host_port.port());
+ // Get fake webstore gallery URL. At the end, it should look something like
+ // http://cws.com:<test_server_port>/webstore.
+ const GURL& server_url = embedded_test_server()->base_url();
+ std::string google_host(kWebstoreDomain);
+ GURL::Replacements replace_google_host;
+ replace_google_host.SetHostStr(google_host);
+ GURL google_url = server_url.ReplaceComponents(replace_google_host);
+ GURL fake_store_url = google_url.Resolve("/webstore");
+ command_line->AppendSwitchASCII(switches::kAppsGalleryURL,
+ fake_store_url.spec());
+ }
- command_line->AppendSwitchASCII(
- switches::kAppsGalleryURL, test_gallery_url_);
+ virtual void SetUpOnMainThread() OVERRIDE {
+ InProcessBrowserTest::SetUpOnMainThread();
+
+ // Restart the thread as the sandbox host process has already been spawned.
+ // embedded_test_server()->RestartThreadAndListen();
}
+
virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
+ InProcessBrowserTest::SetUpInProcessBrowserTestFixture();
+
host_resolver()->AddRule(kWebstoreDomain, "127.0.0.1");
}
@@ -169,8 +224,6 @@
return str;
}
- KioskAppManager* manager() const { return KioskAppManager::Get(); }
-
// Locks device for enterprise.
policy::EnterpriseInstallAttributes::LockResult LockDeviceForEnterprise() {
scoped_ptr<policy::EnterpriseInstallAttributes::LockResult> lock_result(
@@ -190,9 +243,48 @@
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:
- std::string test_gallery_url_;
- base::ShadowingAtExitManager exit_manager_;
+ base::ScopedTempDir temp_dir_;
DISALLOW_COPY_AND_ASSIGN(KioskAppManagerTest);
};
@@ -246,37 +338,38 @@
}
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");
- 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);
+ 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());
+}
+
+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());
+ 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"));
- // 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);
+ 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();
EXPECT_TRUE(waiter.loaded());
@@ -285,8 +378,20 @@
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) {
« no previous file with comments | « chrome/browser/chromeos/app_mode/kiosk_app_manager.cc ('k') | chrome/browser/chromeos/app_mode/kiosk_app_update_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698