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

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

Issue 271263002: New test cases for kiosk app crx file cache. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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_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 a675a7e9e40f99b3a0d893c20b577212a7154ecc..3100efdae16879eb6cd90aa389c7f7542397bd03 100644
--- a/chrome/browser/chromeos/app_mode/kiosk_app_manager_browsertest.cc
+++ b/chrome/browser/chromeos/app_mode/kiosk_app_manager_browsertest.cc
@@ -14,6 +14,7 @@
#include "base/values.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/app_mode/kiosk_app_manager_observer.h"
+#include "chrome/browser/chromeos/app_mode/kiosk_test_common.h"
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
#include "chrome/browser/chromeos/policy/device_local_account.h"
#include "chrome/browser/chromeos/settings/cros_settings.h"
@@ -34,6 +35,23 @@ namespace {
const char kWebstoreDomain[] = "cws.com";
+// An app to test local fs data persistence across app update. V1 app writes
+// data into local fs. V2 app reads and verifies the data.
+// Webstore data json is in
+// chrome/test/data/chromeos/app_mode/webstore/inlineinstall/
+// detail/bmbpicmpniaclbbpdkfglgipkkebnbjf
+// The version 1.0.0 installed is in
+// chrome/test/data/chromeos/app_mode/webstore/downloads/
+// bmbpicmpniaclbbpdkfglgipkkebnbjf.crx
+// The version 2.0.0 crx is in
+// chrome/test/data/chromeos/app_mode/webstore/downloads/
+// bmbpicmpniaclbbpdkfglgipkkebnbjf_v2_read_and_verify_data.crx
+const char kTestLocalFsKioskApp[] = "bmbpicmpniaclbbpdkfglgipkkebnbjf";
+const char kTestLocalFsKioskAppName[] = "Kiosk App With Local Data";
+
+// Kiosk app crx file download path under web store site.
+const char kCrxDownloadPath[] = "/webstore/downloads/";
xiyuan 2014/05/09 20:49:15 This feels like part of KioskTestCommon (FakeCWS).
jennyz 2014/05/13 00:31:21 Done.
+
// Helper KioskAppManager::GetConsumerKioskAutoLaunchStatusCallback
// implementation.
void ConsumerKioskAutoLaunchStatusCheck(
@@ -126,8 +144,15 @@ class AppDataLoadWaiter : public KioskAppManagerObserver {
public:
explicit AppDataLoadWaiter(KioskAppManager* manager)
: manager_(manager),
- loaded_(false) {
- }
+ loaded_(false),
+ data_change_count_(0),
+ data_loaded_threshold_(1) {}
+
+ AppDataLoadWaiter(KioskAppManager* manager, int data_loaded_threshold)
xiyuan 2014/05/09 20:49:15 Let's keep just this one and remove the one in lin
jennyz 2014/05/13 00:31:21 Done.
+ : manager_(manager),
+ loaded_(false),
+ data_change_count_(0),
+ data_loaded_threshold_(data_loaded_threshold) {}
virtual ~AppDataLoadWaiter() {
}
@@ -144,6 +169,9 @@ class AppDataLoadWaiter : public KioskAppManagerObserver {
private:
// KioskAppManagerObserver overrides:
virtual void OnKioskAppDataChanged(const std::string& app_id) OVERRIDE {
+ ++data_change_count_;
+ if (data_change_count_ < data_loaded_threshold_)
+ return;
loaded_ = true;
runner_->Quit();
}
@@ -156,13 +184,16 @@ class AppDataLoadWaiter : public KioskAppManagerObserver {
scoped_refptr<content::MessageLoopRunner> runner_;
KioskAppManager* manager_;
bool loaded_;
+ int data_change_count_;
+ int data_loaded_threshold_;
DISALLOW_COPY_AND_ASSIGN(AppDataLoadWaiter);
};
} // namespace
-class KioskAppManagerTest : public InProcessBrowserTest {
+class KioskAppManagerTest : public InProcessBrowserTest,
+ public KioskTestCommon {
public:
KioskAppManagerTest() {}
virtual ~KioskAppManagerTest() {}
@@ -193,10 +224,10 @@ class KioskAppManagerTest : public InProcessBrowserTest {
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");
+ web_store_url_ = server_url.ReplaceComponents(replace_google_host);
+ GURL gallery_url = web_store_url_.Resolve("/webstore");
command_line->AppendSwitchASCII(switches::kAppsGalleryURL,
- fake_store_url.spec());
+ gallery_url.spec());
}
virtual void SetUpOnMainThread() OVERRIDE {
@@ -283,10 +314,94 @@ class KioskAppManagerTest : public InProcessBrowserTest {
device_local_accounts);
}
+ void SetupCrxDownloads() {
+ GURL downloads_url = web_store_url_.Resolve(kCrxDownloadPath);
+ CommandLine::ForCurrentProcess()->AppendSwitchASCII(
+ ::switches::kAppsGalleryDownloadURL, downloads_url.spec());
+ }
+
+ void SetupCrxUpdate() {
+ GURL update_url = web_store_url_.Resolve("/webstore/update_check.xml");
+ CommandLine::ForCurrentProcess()->AppendSwitchASCII(
+ ::switches::kAppsGalleryUpdateURL, update_url.spec());
+
+ embedded_test_server()->RegisterRequestHandler(base::Bind(
+ &KioskAppManagerTest::HandleRequest, base::Unretained(this)));
+ }
+
+ bool GetKioskAppExtension(const std::string& app_id,
+ base::FilePath* file_path,
+ std::string* version) {
+ return manager()->GetKioskAppExtension(app_id, file_path, version);
+ }
+
+ void UpdateAppData() { manager()->UpdateAppData(); }
+
+ void RunAddNewAppTest(const std::string& id,
+ const std::string& version,
+ const std::string& app_name) {
+ SetupCrxDownloads();
+ SetupCrxUpdate();
+ std::string crx_file_name = id + ".crx";
+ SetUpdateCrx(web_store_url_, kCrxDownloadPath, id, crx_file_name, version);
+
+ AppDataLoadWaiter waiter(manager(), 2);
+ manager()->AddApp(id);
+ waiter.Wait();
+ EXPECT_TRUE(waiter.loaded());
+
+ // Check CRX file is cached.
+ base::FilePath crx_path;
+ std::string crx_version;
+ EXPECT_TRUE(GetKioskAppExtension(id, &crx_path, &crx_version));
+ EXPECT_TRUE(base::PathExists(crx_path));
+ EXPECT_EQ(version, crx_version);
+ // Verify the original crx file is identical to the cached file.
+ base::FilePath test_data_dir;
+ PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir);
+ std::string src_file_path_str =
+ std::string("chromeos/app_mode/webstore/downloads/") + crx_file_name;
+ base::FilePath src_file_path = test_data_dir.Append(src_file_path_str);
+ EXPECT_TRUE(base::PathExists(src_file_path));
+ EXPECT_TRUE(base::ContentsEqual(src_file_path, crx_path));
+
+ // Check manifest data is cached correctly.
+ KioskAppManager::Apps apps;
+ manager()->GetApps(&apps);
+ ASSERT_EQ(1u, apps.size());
+ EXPECT_EQ(id, apps[0].app_id);
+ EXPECT_EQ(app_name, apps[0].name);
+ EXPECT_EQ(gfx::Size(16, 16), apps[0].icon.size());
+
+ // Check data is cached in local state.
+ PrefService* local_state = g_browser_process->local_state();
+ const base::DictionaryValue* dict =
+ local_state->GetDictionary(KioskAppManager::kKioskDictionaryName);
+
+ std::string name;
+ std::string name_key = "apps." + id + ".name";
+ EXPECT_TRUE(dict->GetString(name_key, &name));
+ EXPECT_EQ(apps[0].name, name);
+
+ std::string icon_path_string;
+ std::string icon_path_key = "apps." + id + ".icon";
+ EXPECT_TRUE(dict->GetString(icon_path_key, &icon_path_string));
+
+ base::FilePath expected_icon_path;
+ ASSERT_TRUE(PathService::Get(chrome::DIR_USER_DATA, &expected_icon_path));
+ expected_icon_path =
+ expected_icon_path.AppendASCII(KioskAppManager::kIconCacheDir)
+ .AppendASCII(apps[0].app_id)
+ .AddExtension(".png");
+ EXPECT_EQ(expected_icon_path.value(), icon_path_string);
+ }
+
KioskAppManager* manager() const { return KioskAppManager::Get(); }
+ GURL web_store_url() const { return web_store_url_; }
private:
base::ScopedTempDir temp_dir_;
+ GURL web_store_url_;
DISALLOW_COPY_AND_ASSIGN(KioskAppManagerTest);
};
@@ -446,6 +561,73 @@ IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, GoodApp) {
EXPECT_EQ(expected_icon_path.value(), icon_path_string);
}
+IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, DownloadNewApp) {
+ base::FilePath crx_path;
+ RunAddNewAppTest(kTestLocalFsKioskApp, "1.0.0", kTestLocalFsKioskAppName);
+}
+
+IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, RemoveApp) {
+ // Add a new app.
+ RunAddNewAppTest(kTestLocalFsKioskApp, "1.0.0", kTestLocalFsKioskAppName);
+ KioskAppManager::Apps apps;
+ manager()->GetApps(&apps);
+ ASSERT_EQ(1u, apps.size());
+ base::FilePath crx_path;
+ std::string version;
+ EXPECT_TRUE(GetKioskAppExtension(kTestLocalFsKioskApp, &crx_path, &version));
+ EXPECT_TRUE(base::PathExists(crx_path));
+ EXPECT_EQ("1.0.0", version);
+
+ // Remove the app now.
+ manager()->RemoveApp(kTestLocalFsKioskApp);
+ manager()->GetApps(&apps);
+ ASSERT_EQ(0u, apps.size());
+ EXPECT_FALSE(base::PathExists(crx_path));
+ EXPECT_FALSE(GetKioskAppExtension(kTestLocalFsKioskApp, &crx_path, &version));
+}
+
+IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, UpdateApp) {
+ // Add a version 1 app first.
+ RunAddNewAppTest(kTestLocalFsKioskApp, "1.0.0", kTestLocalFsKioskAppName);
+ KioskAppManager::Apps apps;
+ manager()->GetApps(&apps);
+ ASSERT_EQ(1u, apps.size());
+ base::FilePath crx_path;
+ std::string version;
+ EXPECT_TRUE(GetKioskAppExtension(kTestLocalFsKioskApp, &crx_path, &version));
+ EXPECT_TRUE(base::PathExists(crx_path));
+ EXPECT_EQ("1.0.0", version);
+
+ // Update to version 2.
+ SetUpdateCrx(web_store_url(),
+ kCrxDownloadPath,
+ kTestLocalFsKioskApp,
+ "bmbpicmpniaclbbpdkfglgipkkebnbjf_v2_read_and_verify_data.crx",
+ "2.0.0");
+ AppDataLoadWaiter waiter(manager());
+ UpdateAppData();
+ waiter.Wait();
+ EXPECT_TRUE(waiter.loaded());
+
+ // Verify the app has been updated to v2.
+ manager()->GetApps(&apps);
+ ASSERT_EQ(1u, apps.size());
+ base::FilePath new_crx_path;
+ std::string new_version;
+ EXPECT_TRUE(
+ GetKioskAppExtension(kTestLocalFsKioskApp, &new_crx_path, &new_version));
+ EXPECT_EQ("2.0.0", new_version);
+ EXPECT_TRUE(base::PathExists(new_crx_path));
+ // Get original version 2 source download crx file path.
+ base::FilePath test_data_dir;
+ PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir);
+ base::FilePath v2_file_path = test_data_dir.Append(FILE_PATH_LITERAL(
+ "chromeos/app_mode/webstore/downloads/"
+ "bmbpicmpniaclbbpdkfglgipkkebnbjf_v2_read_and_verify_data.crx"));
+ EXPECT_TRUE(base::PathExists(v2_file_path));
+ EXPECT_TRUE(base::ContentsEqual(v2_file_path, new_crx_path));
+}
+
IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, EnableConsumerKiosk) {
scoped_ptr<KioskAppManager::ConsumerKioskAutoLaunchStatus> status(
new KioskAppManager::ConsumerKioskAutoLaunchStatus(

Powered by Google App Engine
This is Rietveld 408576698