Chromium Code Reviews| Index: chrome/browser/chromeos/login/kiosk_browsertest.cc |
| diff --git a/chrome/browser/chromeos/login/kiosk_browsertest.cc b/chrome/browser/chromeos/login/kiosk_browsertest.cc |
| index c0f0451410c35e9166972032429630030e966789..b2d26e36d47cc84b5005c6343548552b5b5065d0 100644 |
| --- a/chrome/browser/chromeos/login/kiosk_browsertest.cc |
| +++ b/chrome/browser/chromeos/login/kiosk_browsertest.cc |
| @@ -237,6 +237,9 @@ class KioskTest : public OobeBaseTest { |
| protected: |
| virtual void SetUp() OVERRIDE { |
| test_app_id_ = kTestKioskApp; |
| + set_test_app_version("1.0.0"); |
| + set_test_crx_file(test_app_id() + ".crx"); |
| + needs_background_networking_ = true; |
| mock_user_manager_.reset(new MockUserManager); |
| ProfileHelper::SetAlwaysReturnPrimaryUserForTesting(true); |
| AppLaunchController::SkipSplashWaitForTesting(); |
| @@ -275,17 +278,28 @@ class KioskTest : public OobeBaseTest { |
| } |
| void ReloadKioskApps() { |
| + SetupTestAppUpdateCheck(); |
| + |
| // Remove then add to ensure NOTIFICATION_KIOSK_APPS_LOADED fires. |
| KioskAppManager::Get()->RemoveApp(test_app_id_); |
| KioskAppManager::Get()->AddApp(test_app_id_); |
| } |
| + void SetupTestAppUpdateCheck() { |
| + if (!test_app_version().empty()) { |
| + fake_cws_->SetUpdateCrx( |
| + test_app_id(), test_crx_file(), test_app_version()); |
| + } |
| + } |
| + |
| void ReloadAutolaunchKioskApps() { |
| + SetupTestAppUpdateCheck(); |
| + |
| KioskAppManager::Get()->AddApp(test_app_id_); |
| KioskAppManager::Get()->SetAutoLaunchApp(test_app_id_); |
| } |
| - void PrepareAppLaunch() { |
| + void StartUIForAppLaunch() { |
| EnableConsumerKioskMode(); |
| // Start UI |
| @@ -307,6 +321,11 @@ class KioskTest : public OobeBaseTest { |
| else |
| login_signal.Wait(); |
| } |
| + } |
| + |
| + void PrepareAppLaunch() { |
| + // Start UI |
| + StartUIForAppLaunch(); |
| // Wait for the Kiosk App configuration to reload. |
| content::WindowedNotificationObserver apps_loaded_signal( |
| @@ -431,32 +450,6 @@ class KioskTest : public OobeBaseTest { |
| return status; |
| } |
| - // Copies the app profile from |relative_app_profile_dir| from test directory |
| - // to the app profile directory (assuming "user") under testing profile. This |
| - // is for that needs to have a kiosk app already installed from a previous |
| - // run. Note this must be called before app profile is loaded. |
| - void SetupAppProfile(const std::string& relative_app_profile_dir) { |
| - base::FilePath app_profile_dir; |
| - KioskAppManager::App app_data; |
| - CHECK(KioskAppManager::Get()->GetApp(test_app_id(), &app_data)); |
| - std::string app_user_id_hash = |
| - CryptohomeClient::GetStubSanitizedUsername(app_data.user_id); |
| - app_profile_dir = |
| - ProfileHelper::GetProfilePathByUserIdHash(app_user_id_hash); |
| - ASSERT_TRUE(base::CreateDirectory(app_profile_dir)); |
| - |
| - base::FilePath test_data_dir; |
| - ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir)); |
| - test_data_dir = test_data_dir.AppendASCII(relative_app_profile_dir); |
| - ASSERT_TRUE( |
| - base::CopyFile(test_data_dir.Append(chrome::kPreferencesFilename), |
| - app_profile_dir.Append(chrome::kPreferencesFilename))); |
| - ASSERT_TRUE( |
| - base::CopyDirectory(test_data_dir.AppendASCII("Extensions"), |
| - app_profile_dir, |
| - true)); |
| - } |
| - |
| void RunAppLaunchNetworkDownTest() { |
| mock_user_manager()->SetActiveUser(kTestOwnerEmail); |
| AppLaunchSigninScreen::SetUserManagerForTesting(mock_user_manager()); |
| @@ -509,10 +502,20 @@ class KioskTest : public OobeBaseTest { |
| test_app_id_ = test_app_id; |
| } |
| const std::string& test_app_id() const { return test_app_id_; } |
| + void set_test_app_version(const std::string& version) { |
| + test_app_version_ = version; |
| + } |
| + const std::string& test_app_version() const { return test_app_version_; } |
| + void set_test_crx_file(const std::string& filename) { |
| + test_crx_file_ = filename; |
| + } |
| + const std::string& test_crx_file() const { return test_crx_file_; } |
| FakeCWS* fake_cws() { return fake_cws_.get(); } |
| private: |
| std::string test_app_id_; |
| + std::string test_app_version_; |
| + std::string test_crx_file_; |
| scoped_ptr<FakeCWS> fake_cws_; |
| scoped_ptr<MockUserManager> mock_user_manager_; |
| @@ -585,6 +588,8 @@ IN_PROC_BROWSER_TEST_F(KioskTest, LaunchAppNetworkDownConfigureNotAllowed) { |
| ScopedCanConfigureNetwork can_configure_network(false, true); |
| // Start app launch and wait for network connectivity timeout. |
| + set_test_app_version("1.0.0"); |
| + set_test_crx_file(test_app_id() + ".crx"); |
|
xiyuan
2014/07/15 02:32:51
Are these two lines necessary?
jennyz
2014/07/15 16:36:41
woops, removed.
|
| StartAppLaunchFromLoginScreen(SimulateNetworkOfflineClosure()); |
| OobeScreenWaiter splash_waiter(OobeDisplay::SCREEN_APP_LAUNCH_SPLASH); |
| splash_waiter.Wait(); |
| @@ -619,6 +624,8 @@ IN_PROC_BROWSER_TEST_F(KioskTest, DISABLED_LaunchAppNetworkPortal) { |
| } |
| IN_PROC_BROWSER_TEST_F(KioskTest, LaunchAppUserCancel) { |
| + // Make fake_cws_ return empty update response. |
| + set_test_app_version(""); |
| StartAppLaunchFromLoginScreen(SimulateNetworkOfflineClosure()); |
| OobeScreenWaiter splash_waiter(OobeDisplay::SCREEN_APP_LAUNCH_SPLASH); |
| splash_waiter.Wait(); |
| @@ -636,6 +643,8 @@ IN_PROC_BROWSER_TEST_F(KioskTest, LaunchAppUserCancel) { |
| } |
| IN_PROC_BROWSER_TEST_F(KioskTest, LaunchInDiagnosticMode) { |
| + set_test_app_version("1.0.0"); |
| + set_test_crx_file(test_app_id() + ".crx"); |
|
xiyuan
2014/07/15 02:32:51
Are these two lines necessary?
jennyz
2014/07/15 16:36:41
Done.
|
| PrepareAppLaunch(); |
| SimulateNetworkOnline(); |
| @@ -882,75 +891,237 @@ class KioskUpdateTest : public KioskTest { |
| virtual ~KioskUpdateTest() {} |
| protected: |
| - virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| - // Needs background networking so that ExtensionDownloader works. |
| - needs_background_networking_ = true; |
| - KioskTest::SetUpCommandLine(command_line); |
| - } |
| - |
| virtual void SetUpOnMainThread() OVERRIDE { |
| KioskTest::SetUpOnMainThread(); |
| } |
| + void PreCacheApp(const std::string& app_id, |
| + const std::string& version, |
| + const std::string& crx_file) { |
| + set_test_app_id(app_id); |
| + set_test_app_version(version); |
| + set_test_crx_file(crx_file); |
| + |
| + KioskAppManager* manager = KioskAppManager::Get(); |
| + AppDataLoadWaiter waiter(manager, app_id, version); |
| + ReloadKioskApps(); |
| + waiter.Wait(); |
| + EXPECT_TRUE(waiter.loaded()); |
| + std::string cached_version; |
| + base::FilePath file_path; |
| + EXPECT_TRUE(manager->GetCachedCrx(app_id, &file_path, &cached_version)); |
| + EXPECT_EQ(version, cached_version); |
| + } |
| + |
| + void UpdateExternalCache(const std::string& version, |
| + const std::string& crx_file) { |
| + set_test_app_version(version); |
| + set_test_crx_file(crx_file); |
| + SetupTestAppUpdateCheck(); |
| + |
| + KioskAppManager* manager = KioskAppManager::Get(); |
| + AppDataLoadWaiter waiter(manager, test_app_id(), version); |
| + KioskAppManager::Get()->UpdateExternalCache(); |
| + waiter.Wait(); |
| + EXPECT_TRUE(waiter.loaded()); |
| + std::string cached_version; |
| + base::FilePath file_path; |
| + EXPECT_TRUE( |
| + manager->GetCachedCrx(test_app_id(), &file_path, &cached_version)); |
| + EXPECT_EQ(version, cached_version); |
| + } |
| + |
| + void PreCacheAndLaunchApp(const std::string& app_id, |
| + const std::string& version, |
| + const std::string& crx_file) { |
| + set_test_app_id(app_id); |
| + set_test_app_version(version); |
| + set_test_crx_file(crx_file); |
| + PrepareAppLaunch(); |
| + SimulateNetworkOnline(); |
| + LaunchApp(test_app_id(), false); |
| + WaitForAppLaunchSuccess(); |
| + EXPECT_EQ(version, GetInstalledAppVersion().GetString()); |
| + } |
| + |
| private: |
| + class AppDataLoadWaiter : public KioskAppManagerObserver { |
| + public: |
| + AppDataLoadWaiter(KioskAppManager* manager, |
| + const std::string& app_id, |
| + const std::string& version) |
| + : runner_(NULL), |
| + manager_(manager), |
| + loaded_(false), |
| + quit_(false), |
| + app_id_(app_id), |
| + version_(version) { |
| + manager_->AddObserver(this); |
| + } |
| + |
| + virtual ~AppDataLoadWaiter() { manager_->RemoveObserver(this); } |
| + |
| + void Wait() { |
| + if (quit_) |
| + return; |
| + runner_ = new content::MessageLoopRunner; |
| + runner_->Run(); |
| + } |
| + |
| + bool loaded() const { return loaded_; } |
| + |
| + private: |
| + // KioskAppManagerObserver overrides: |
| + virtual void OnKioskExtensionLoadedInCache( |
| + const std::string& app_id) OVERRIDE { |
| + std::string cached_version; |
| + base::FilePath file_path; |
| + if (!manager_->GetCachedCrx(app_id_, &file_path, &cached_version)) |
| + return; |
| + if (version_ != cached_version) |
| + return; |
| + loaded_ = true; |
| + quit_ = true; |
| + if (runner_) |
| + runner_->Quit(); |
| + } |
| + |
| + virtual void OnKioskExtensionDownloadFailed( |
| + const std::string& app_id) OVERRIDE { |
| + loaded_ = false; |
| + quit_ = true; |
| + if (runner_) |
| + runner_->Quit(); |
| + } |
| + |
| + scoped_refptr<content::MessageLoopRunner> runner_; |
| + KioskAppManager* manager_; |
| + bool loaded_; |
| + bool quit_; |
| + std::string app_id_; |
| + std::string version_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(AppDataLoadWaiter); |
| + }; |
| DISALLOW_COPY_AND_ASSIGN(KioskUpdateTest); |
| }; |
| +IN_PROC_BROWSER_TEST_F(KioskUpdateTest, PRE_LaunchOfflineEnabledAppNoNetwork) { |
| + PreCacheAndLaunchApp(kTestOfflineEnabledKioskApp, |
| + "1.0.0", |
| + std::string(kTestOfflineEnabledKioskApp) + "_v1.crx"); |
| +} |
| + |
| IN_PROC_BROWSER_TEST_F(KioskUpdateTest, LaunchOfflineEnabledAppNoNetwork) { |
| set_test_app_id(kTestOfflineEnabledKioskApp); |
| + StartUIForAppLaunch(); |
| + SimulateNetworkOffline(); |
| + LaunchApp(test_app_id(), false); |
| + WaitForAppLaunchSuccess(); |
| - PrepareAppLaunch(); |
| + EXPECT_EQ("1.0.0", GetInstalledAppVersion().GetString()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(KioskUpdateTest, |
| + PRE_LaunchCachedOfflineEnabledAppNoNetwork) { |
| + PreCacheApp(kTestOfflineEnabledKioskApp, |
| + "1.0.0", |
| + std::string(kTestOfflineEnabledKioskApp) + "_v1.crx"); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(KioskUpdateTest, |
| + LaunchCachedOfflineEnabledAppNoNetwork) { |
| + set_test_app_id(kTestOfflineEnabledKioskApp); |
| + EXPECT_TRUE( |
| + KioskAppManager::Get()->HasCachedCrx(kTestOfflineEnabledKioskApp)); |
| + StartUIForAppLaunch(); |
| SimulateNetworkOffline(); |
| - SetupAppProfile("chromeos/app_mode/offline_enabled_app_profile"); |
| + LaunchApp(test_app_id(), false); |
| + WaitForAppLaunchSuccess(); |
| + |
| + EXPECT_EQ("1.0.0", GetInstalledAppVersion().GetString()); |
| +} |
| +// Network offline, app v1.0 has run before, has cached v2.0 crx and v2.0 should |
| +// be installed and launched during next launch. |
| +IN_PROC_BROWSER_TEST_F(KioskUpdateTest, |
| + PRE_LaunchCachedNewVersionOfflineEnabledAppNoNetwork) { |
| + // Install and launch v1 app. |
| + PreCacheAndLaunchApp(kTestOfflineEnabledKioskApp, |
| + "1.0.0", |
| + std::string(kTestOfflineEnabledKioskApp) + "_v1.crx"); |
| + // Update cache for v2 app. |
| + UpdateExternalCache("2.0.0", |
| + std::string(kTestOfflineEnabledKioskApp) + ".crx"); |
| + // The installed app is still in v1. |
| + EXPECT_EQ("1.0.0", GetInstalledAppVersion().GetString()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(KioskUpdateTest, |
| + LaunchCachedNewVersionOfflineEnabledAppNoNetwork) { |
| + set_test_app_id(kTestOfflineEnabledKioskApp); |
| + EXPECT_TRUE(KioskAppManager::Get()->HasCachedCrx(test_app_id())); |
| + |
| + StartUIForAppLaunch(); |
| + SimulateNetworkOffline(); |
| LaunchApp(test_app_id(), false); |
| WaitForAppLaunchSuccess(); |
| + |
| + // v2 app should have been installed. |
| + EXPECT_EQ("2.0.0", GetInstalledAppVersion().GetString()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(KioskUpdateTest, PRE_LaunchOfflineEnabledAppNoUpdate) { |
| + PreCacheAndLaunchApp(kTestOfflineEnabledKioskApp, |
| + "1.0.0", |
| + std::string(kTestOfflineEnabledKioskApp) + "_v1.crx"); |
| } |
| IN_PROC_BROWSER_TEST_F(KioskUpdateTest, LaunchOfflineEnabledAppNoUpdate) { |
| set_test_app_id(kTestOfflineEnabledKioskApp); |
| - |
| fake_cws()->SetNoUpdate(test_app_id()); |
| - PrepareAppLaunch(); |
| + StartUIForAppLaunch(); |
| SimulateNetworkOnline(); |
| - SetupAppProfile("chromeos/app_mode/offline_enabled_app_profile"); |
|
xiyuan
2014/07/15 02:32:51
We can delete chrome/test/data/chromeos/app_mode/o
jennyz
2014/07/15 18:34:24
Done.
|
| - |
| LaunchApp(test_app_id(), false); |
| WaitForAppLaunchSuccess(); |
| EXPECT_EQ("1.0.0", GetInstalledAppVersion().GetString()); |
| } |
| +IN_PROC_BROWSER_TEST_F(KioskUpdateTest, PRE_LaunchOfflineEnabledAppHasUpdate) { |
| + PreCacheAndLaunchApp(kTestOfflineEnabledKioskApp, |
| + "1.0.0", |
| + std::string(kTestOfflineEnabledKioskApp) + "_v1.crx"); |
| +} |
| + |
| IN_PROC_BROWSER_TEST_F(KioskUpdateTest, LaunchOfflineEnabledAppHasUpdate) { |
| set_test_app_id(kTestOfflineEnabledKioskApp); |
| - |
| fake_cws()->SetUpdateCrx( |
| test_app_id(), "ajoggoflpgplnnjkjamcmbepjdjdnpdp.crx", "2.0.0"); |
| - PrepareAppLaunch(); |
| + StartUIForAppLaunch(); |
| SimulateNetworkOnline(); |
| - SetupAppProfile("chromeos/app_mode/offline_enabled_app_profile"); |
| - |
| LaunchApp(test_app_id(), false); |
| WaitForAppLaunchSuccess(); |
| EXPECT_EQ("2.0.0", GetInstalledAppVersion().GetString()); |
| } |
| +IN_PROC_BROWSER_TEST_F(KioskUpdateTest, PRE_PermissionChange) { |
| + PreCacheAndLaunchApp(kTestOfflineEnabledKioskApp, |
| + "2.0.0", |
| + std::string(kTestOfflineEnabledKioskApp) + ".crx"); |
| +} |
| + |
| IN_PROC_BROWSER_TEST_F(KioskUpdateTest, PermissionChange) { |
| set_test_app_id(kTestOfflineEnabledKioskApp); |
| + set_test_app_version("2.0.0"); |
| + set_test_crx_file(test_app_id() + "_v2_permission_change.crx"); |
| - fake_cws()->SetUpdateCrx( |
| - test_app_id(), |
| - "ajoggoflpgplnnjkjamcmbepjdjdnpdp_v2_permission_change.crx", |
| - "2.0.0"); |
| - |
| - PrepareAppLaunch(); |
| + StartUIForAppLaunch(); |
| SimulateNetworkOnline(); |
| - SetupAppProfile("chromeos/app_mode/offline_enabled_app_profile"); |
| - |
| LaunchApp(test_app_id(), false); |
| WaitForAppLaunchSuccess(); |
| @@ -960,6 +1131,8 @@ IN_PROC_BROWSER_TEST_F(KioskUpdateTest, PermissionChange) { |
| IN_PROC_BROWSER_TEST_F(KioskUpdateTest, PRE_PreserveLocalData) { |
| // Installs v1 app and writes some local data. |
| set_test_app_id(kTestLocalFsKioskApp); |
| + set_test_app_version("1.0.0"); |
| + set_test_crx_file(test_app_id() + ".crx"); |
| ResultCatcher catcher; |
| StartAppLaunchFromLoginScreen(SimulateNetworkOnlineClosure()); |
| @@ -971,12 +1144,8 @@ IN_PROC_BROWSER_TEST_F(KioskUpdateTest, PreserveLocalData) { |
| // Update existing v1 app installed in PRE_PreserveLocalData to v2 |
| // that reads and verifies the local data. |
| set_test_app_id(kTestLocalFsKioskApp); |
| - |
| - fake_cws()->SetUpdateCrx( |
| - test_app_id(), |
| - "bmbpicmpniaclbbpdkfglgipkkebnbjf_v2_read_and_verify_data.crx", |
| - "2.0.0"); |
| - |
| + set_test_app_version("2.0.0"); |
| + set_test_crx_file(test_app_id() + "_v2_read_and_verify_data.crx"); |
| ResultCatcher catcher; |
| StartAppLaunchFromLoginScreen(SimulateNetworkOnlineClosure()); |
| WaitForAppLaunchSuccess(); |
| @@ -997,6 +1166,11 @@ class KioskEnterpriseTest : public KioskTest { |
| } |
| virtual void SetUpOnMainThread() OVERRIDE { |
| + set_test_app_id(kTestEnterpriseKioskApp); |
| + set_test_app_version("1.0.0"); |
| + set_test_crx_file(test_app_id() + ".crx"); |
| + SetupTestAppUpdateCheck(); |
| + |
| KioskTest::SetUpOnMainThread(); |
| // Configure kTestEnterpriseKioskApp in device policy. |
| em::DeviceLocalAccountsProto* accounts = |