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 7c54d77e84757919950fde7baf85cfe5a5638713..337b5483cd04faa32d4ade300b74f36734fafccb 100644 |
| --- a/chrome/browser/chromeos/login/kiosk_browsertest.cc |
| +++ b/chrome/browser/chromeos/login/kiosk_browsertest.cc |
| @@ -8,6 +8,7 @@ |
| #include "ash/desktop_background/desktop_background_controller.h" |
| #include "ash/desktop_background/desktop_background_controller_observer.h" |
| #include "ash/shell.h" |
| +#include "base/path_service.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/chrome_notification_types.h" |
| #include "chrome/browser/chromeos/app_mode/kiosk_app_launch_error.h" |
| @@ -24,6 +25,7 @@ |
| #include "chrome/browser/chromeos/settings/device_oauth2_token_service_factory.h" |
| #include "chrome/browser/extensions/extension_service.h" |
| #include "chrome/browser/extensions/extension_test_message_listener.h" |
| +#include "chrome/common/chrome_paths.h" |
| #include "chrome/common/chrome_switches.h" |
| #include "chrome/common/pref_names.h" |
| #include "chromeos/chromeos_switches.h" |
| @@ -55,6 +57,15 @@ const char kTestKioskApp[] = "ggbflgnkafappblpkiflbgpmkfdpnhhe"; |
| // detail/ibjkkfdnfcaoapcpheeijckmpcfkifob |
| const char kTestEnterpriseKioskApp[] = "ibjkkfdnfcaoapcpheeijckmpcfkifob"; |
| +// An offlien enable test app. Webstore data json is in |
|
Tim Song
2014/02/12 03:25:29
fix typo here and in all other places below to "of
xiyuan
2014/02/12 18:10:42
Done.
|
| +// chrome/test/data/chromeos/app_mode/webstore/inlineinstall/ |
| +// detail/ajoggoflpgplnnjkjamcmbepjdjdnpdp |
| +// An app profile with version 1.0.0 installed is in |
| +// chrome/test/data/chromeos/app_mode/offline_enabled_app_profile |
| +// The version 2.0.0 crx is in |
| +// chrome/test/data/chromeos/app_mode/webstore/downloads/ |
| +const char kTestOfflienEnabledKioskApp[] = "ajoggoflpgplnnjkjamcmbepjdjdnpdp"; |
| + |
| // Timeout while waiting for network connectivity during tests. |
| const int kTestNetworkTimeoutSeconds = 1; |
| @@ -244,8 +255,8 @@ class KioskTest : public OobeBaseTest { |
| virtual ~KioskTest() {} |
| protected: |
| - |
| virtual void SetUp() OVERRIDE { |
| + test_app_id_ = kTestKioskApp; |
| mock_user_manager_.reset(new MockUserManager); |
| AppLaunchController::SkipSplashWaitForTesting(); |
| AppLaunchController::SetNetworkWaitForTesting(kTestNetworkTimeoutSeconds); |
| @@ -270,11 +281,7 @@ class KioskTest : public OobeBaseTest { |
| // Create gaia and webstore URL from test server url but using different |
| // host names. This is to avoid gaia response being tagged as from |
| // webstore in chrome_resource_dispatcher_host_delegate.cc. |
| - const GURL& server_url = embedded_test_server()->base_url(); |
| - std::string webstore_host("webstore"); |
| - GURL::Replacements replace_webstore_host; |
| - replace_webstore_host.SetHostStr(webstore_host); |
| - GURL webstore_url = server_url.ReplaceComponents(replace_webstore_host); |
| + GURL webstore_url = GetTestWebstoreUrl(); |
| command_line->AppendSwitchASCII( |
| ::switches::kAppsGalleryURL, |
| webstore_url.Resolve("/chromeos/app_mode/webstore").spec()); |
| @@ -284,13 +291,21 @@ class KioskTest : public OobeBaseTest { |
| "/chromeos/app_mode/webstore/downloads/%s.crx").spec()); |
| } |
| + GURL GetTestWebstoreUrl() { |
| + const GURL& server_url = embedded_test_server()->base_url(); |
| + std::string webstore_host("webstore"); |
| + GURL::Replacements replace_webstore_host; |
| + replace_webstore_host.SetHostStr(webstore_host); |
| + return server_url.ReplaceComponents(replace_webstore_host); |
| + } |
| + |
| void ReloadKioskApps() { |
| - KioskAppManager::Get()->AddApp(kTestKioskApp); |
| + KioskAppManager::Get()->AddApp(test_app_id_); |
| } |
| void ReloadAutolaunchKioskApps() { |
| - KioskAppManager::Get()->AddApp(kTestKioskApp); |
| - KioskAppManager::Get()->SetAutoLaunchApp(kTestKioskApp); |
| + KioskAppManager::Get()->AddApp(test_app_id_); |
| + KioskAppManager::Get()->SetAutoLaunchApp(test_app_id_); |
| } |
| void PrepareAppLaunch() { |
| @@ -323,12 +338,20 @@ class KioskTest : public OobeBaseTest { |
| GetLoginUI()->CallJavascriptFunction( |
| "login.AppsMenuButton.runAppForTesting", |
| - base::StringValue(kTestKioskApp)); |
| + base::StringValue(test_app_id_)); |
| } |
| - void WaitForAppLaunchSuccess() { |
| - SimulateNetworkOnline(); |
| + const extensions::Extension* GetInstalledApp() { |
| + Profile* app_profile = ProfileManager::GetPrimaryUserProfile(); |
| + return extensions::ExtensionSystem::Get(app_profile)-> |
| + extension_service()->GetInstalledExtension(test_app_id_); |
| + } |
| + const Version& GetInstalledAppVersion() { |
| + return *GetInstalledApp()->version(); |
| + } |
| + |
| + void WaitForAppLaunchSuccess() { |
| ExtensionTestMessageListener |
| launch_data_check_listener("launchData.isKioskSession = true", false); |
| @@ -348,14 +371,14 @@ class KioskTest : public OobeBaseTest { |
| // Check if the kiosk webapp is really installed for the default profile. |
| const extensions::Extension* app = |
| extensions::ExtensionSystem::Get(app_profile)-> |
| - extension_service()->GetInstalledExtension(kTestKioskApp); |
| + extension_service()->GetInstalledExtension(test_app_id_); |
| EXPECT_TRUE(app); |
| // App should appear with its window. |
| apps::ShellWindowRegistry* shell_window_registry = |
| apps::ShellWindowRegistry::Get(app_profile); |
| apps::ShellWindow* window = |
| - ShellWindowObserver(shell_window_registry, kTestKioskApp).Wait(); |
| + ShellWindowObserver(shell_window_registry, test_app_id_).Wait(); |
| EXPECT_TRUE(window); |
| // Login screen should be gone or fading out. |
| @@ -367,7 +390,7 @@ class KioskTest : public OobeBaseTest { |
| 0.0f); |
| // Wait until the app terminates if it is still running. |
| - if (!shell_window_registry->GetShellWindowsForApp(kTestKioskApp).empty()) |
| + if (!shell_window_registry->GetShellWindowsForApp(test_app_id_).empty()) |
| content::RunMessageLoop(); |
| // Check that the app had been informed that it is running in a kiosk |
| @@ -418,12 +441,43 @@ class KioskTest : public OobeBaseTest { |
| return status; |
| } |
| + // Copies the app profile from |relative_app_profile_dir| from test directory |
| + // to the app profile directory under testing profile. |
| + // Note this must be called before app profile is loaded. |
| + void SetupAppProfile(const std::string& relative_app_profile_dir) { |
|
Tim Song
2014/02/12 03:25:29
Please also comment that this is used for tests wh
xiyuan
2014/02/12 18:10:42
Done.
|
| + base::FilePath app_profile_dir; |
| + ASSERT_TRUE(PathService::Get(chrome::DIR_USER_DATA, &app_profile_dir)); |
| + app_profile_dir = app_profile_dir.AppendASCII("user"); |
| + 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.AppendASCII("Preferences"), |
| + app_profile_dir.AppendASCII("Preferences"))); |
| + ASSERT_TRUE( |
| + base::CopyDirectory(test_data_dir.AppendASCII("Extensions"), |
| + app_profile_dir, |
| + true)); |
| + } |
| + |
| AppLaunchController* GetAppLaunchController() { |
| return chromeos::LoginDisplayHostImpl::default_host() |
| ->GetAppLaunchController(); |
| } |
| + MockUserManager* mock_user_manager() { return mock_user_manager_.get(); } |
| + |
| + void set_test_app_id(const std::string& test_app_id) { |
| + test_app_id_ = test_app_id; |
| + } |
| + const std::string& test_app_id() const { return test_app_id_; } |
| + |
| + private: |
| + std::string test_app_id_; |
| scoped_ptr<MockUserManager> mock_user_manager_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(KioskTest); |
| }; |
| IN_PROC_BROWSER_TEST_F(KioskTest, InstallAndLaunchApp) { |
| @@ -445,8 +499,8 @@ IN_PROC_BROWSER_TEST_F(KioskTest, LaunchAppNetworkDown) { |
| JsExpect("$('splash-config-network').hidden == false"); |
| // Set up fake user manager with an owner for the test. |
| - mock_user_manager_->SetActiveUser(kTestOwnerEmail); |
| - AppLaunchSigninScreen::SetUserManagerForTesting(mock_user_manager_.get()); |
| + mock_user_manager()->SetActiveUser(kTestOwnerEmail); |
| + AppLaunchSigninScreen::SetUserManagerForTesting(mock_user_manager()); |
| static_cast<LoginDisplayHostImpl*>(LoginDisplayHostImpl::default_host()) |
| ->GetOobeUI()->ShowOobeUI(false); |
| @@ -464,6 +518,7 @@ IN_PROC_BROWSER_TEST_F(KioskTest, LaunchAppNetworkDown) { |
| ASSERT_TRUE(GetAppLaunchController()->showing_network_dialog()); |
| + SimulateNetworkOnline(); |
| WaitForAppLaunchSuccess(); |
| } |
| @@ -481,6 +536,7 @@ IN_PROC_BROWSER_TEST_F(KioskTest, LaunchAppNetworkDownConfigureNotAllowed) { |
| JsExpect("$('splash-config-network').hidden == true"); |
| // Network becomes online and app launch is resumed. |
| + SimulateNetworkOnline(); |
| WaitForAppLaunchSuccess(); |
| } |
| @@ -499,6 +555,7 @@ IN_PROC_BROWSER_TEST_F(KioskTest, LaunchAppNetworkPortal) { |
| OobeScreenWaiter(OobeDisplay::SCREEN_ERROR_MESSAGE).Wait(); |
| ASSERT_TRUE(GetAppLaunchController()->showing_network_dialog()); |
| + SimulateNetworkOnline(); |
| WaitForAppLaunchSuccess(); |
| } |
| @@ -544,6 +601,61 @@ IN_PROC_BROWSER_TEST_F(KioskTest, LaunchInDiagnosticMode) { |
| WaitForAppLaunchSuccess(); |
| } |
| +IN_PROC_BROWSER_TEST_F(KioskTest, LaunchOfflineEnabledAppNoNetwork) { |
| + set_test_app_id(kTestOfflienEnabledKioskApp); |
| + SetupAppProfile("chromeos/app_mode/offline_enabled_app_profile"); |
| + |
| + PrepareAppLaunch(); |
| + SimulateNetworkOffline(); |
| + |
| + GetLoginUI()->CallJavascriptFunction( |
| + "login.AppsMenuButton.runAppForTesting", |
| + base::StringValue(test_app_id())); |
| + WaitForAppLaunchSuccess(); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(KioskTest, LaunchOfflineEnabledAppNoUpdate) { |
| + set_test_app_id(kTestOfflienEnabledKioskApp); |
| + SetupAppProfile("chromeos/app_mode/offline_enabled_app_profile"); |
| + |
| + GURL webstore_url = GetTestWebstoreUrl(); |
| + CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| + ::switches::kAppsGalleryUpdateURL, |
| + webstore_url.Resolve( |
| + "/chromeos/app_mode/webstore/update_check/no_update.xml").spec()); |
| + |
| + PrepareAppLaunch(); |
| + SimulateNetworkOnline(); |
| + |
| + GetLoginUI()->CallJavascriptFunction( |
| + "login.AppsMenuButton.runAppForTesting", |
| + base::StringValue(test_app_id())); |
| + WaitForAppLaunchSuccess(); |
| + |
| + EXPECT_EQ("1.0.0", GetInstalledAppVersion().GetString()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(KioskTest, LaunchOfflineEnabledAppHasUpdate) { |
| + set_test_app_id(kTestOfflienEnabledKioskApp); |
| + SetupAppProfile("chromeos/app_mode/offline_enabled_app_profile"); |
| + |
| + GURL webstore_url = GetTestWebstoreUrl(); |
| + CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| + ::switches::kAppsGalleryUpdateURL, |
| + webstore_url.Resolve( |
| + "/chromeos/app_mode/webstore/update_check/has_update.xml").spec()); |
| + |
| + PrepareAppLaunch(); |
| + SimulateNetworkOnline(); |
| + |
| + GetLoginUI()->CallJavascriptFunction( |
| + "login.AppsMenuButton.runAppForTesting", |
| + base::StringValue(test_app_id())); |
| + WaitForAppLaunchSuccess(); |
| + |
| + EXPECT_EQ("2.0.0", GetInstalledAppVersion().GetString()); |
| +} |
| + |
| IN_PROC_BROWSER_TEST_F(KioskTest, AutolaunchWarningCancel) { |
| EnableConsumerKioskMode(); |
| // Start UI, find menu entry for this app and launch it. |