| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "apps/app_window.h" | 5 #include "apps/app_window.h" |
| 6 #include "apps/app_window_registry.h" | 6 #include "apps/app_window_registry.h" |
| 7 #include "apps/ui/native_app_window.h" | 7 #include "apps/ui/native_app_window.h" |
| 8 #include "ash/desktop_background/desktop_background_controller.h" | 8 #include "ash/desktop_background/desktop_background_controller.h" |
| 9 #include "ash/desktop_background/desktop_background_controller_observer.h" | 9 #include "ash/desktop_background/desktop_background_controller_observer.h" |
| 10 #include "ash/shell.h" | 10 #include "ash/shell.h" |
| 11 #include "base/file_util.h" | 11 #include "base/file_util.h" |
| 12 #include "base/path_service.h" | 12 #include "base/path_service.h" |
| 13 #include "base/strings/string_number_conversions.h" | 13 #include "base/strings/string_number_conversions.h" |
| 14 #include "base/strings/string_util.h" | 14 #include "base/strings/string_util.h" |
| 15 #include "chrome/browser/browser_process.h" | 15 #include "chrome/browser/browser_process.h" |
| 16 #include "chrome/browser/chrome_notification_types.h" | 16 #include "chrome/browser/chrome_notification_types.h" |
| 17 #include "chrome/browser/chromeos/app_mode/kiosk_app_launch_error.h" | 17 #include "chrome/browser/chromeos/app_mode/kiosk_app_launch_error.h" |
| 18 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" | 18 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" |
| 19 #include "chrome/browser/chromeos/login/app_launch_controller.h" | 19 #include "chrome/browser/chromeos/login/app_launch_controller.h" |
| 20 #include "chrome/browser/chromeos/login/fake_user_manager.h" | 20 #include "chrome/browser/chromeos/login/fake_user_manager.h" |
| 21 #include "chrome/browser/chromeos/login/mock_user_manager.h" | 21 #include "chrome/browser/chromeos/login/mock_user_manager.h" |
| 22 #include "chrome/browser/chromeos/login/oobe_base_test.h" | 22 #include "chrome/browser/chromeos/login/oobe_base_test.h" |
| 23 #include "chrome/browser/chromeos/login/startup_utils.h" | 23 #include "chrome/browser/chromeos/login/startup_utils.h" |
| 24 #include "chrome/browser/chromeos/login/test/app_window_waiter.h" |
| 24 #include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h" | 25 #include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h" |
| 25 #include "chrome/browser/chromeos/login/wizard_controller.h" | 26 #include "chrome/browser/chromeos/login/wizard_controller.h" |
| 26 #include "chrome/browser/chromeos/policy/device_policy_cros_browser_test.h" | 27 #include "chrome/browser/chromeos/policy/device_policy_cros_browser_test.h" |
| 27 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" | 28 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" |
| 28 #include "chrome/browser/chromeos/profiles/profile_helper.h" | 29 #include "chrome/browser/chromeos/profiles/profile_helper.h" |
| 29 #include "chrome/browser/chromeos/settings/device_oauth2_token_service.h" | 30 #include "chrome/browser/chromeos/settings/device_oauth2_token_service.h" |
| 30 #include "chrome/browser/chromeos/settings/device_oauth2_token_service_factory.h
" | 31 #include "chrome/browser/chromeos/settings/device_oauth2_token_service_factory.h
" |
| 31 #include "chrome/browser/extensions/extension_service.h" | 32 #include "chrome/browser/extensions/extension_service.h" |
| 32 #include "chrome/browser/extensions/extension_test_message_listener.h" | 33 #include "chrome/browser/extensions/extension_test_message_listener.h" |
| 33 #include "chrome/common/chrome_constants.h" | 34 #include "chrome/common/chrome_constants.h" |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 | 221 |
| 221 content::WebContents* web_contents_; | 222 content::WebContents* web_contents_; |
| 222 const std::string js_; | 223 const std::string js_; |
| 223 scoped_refptr<content::MessageLoopRunner> runner_; | 224 scoped_refptr<content::MessageLoopRunner> runner_; |
| 224 | 225 |
| 225 DISALLOW_COPY_AND_ASSIGN(JsConditionWaiter); | 226 DISALLOW_COPY_AND_ASSIGN(JsConditionWaiter); |
| 226 }; | 227 }; |
| 227 | 228 |
| 228 } // namespace | 229 } // namespace |
| 229 | 230 |
| 230 // Helper class that monitors app windows to wait for a window to appear. | |
| 231 class AppWindowObserver : public apps::AppWindowRegistry::Observer { | |
| 232 public: | |
| 233 AppWindowObserver(apps::AppWindowRegistry* registry, | |
| 234 const std::string& app_id) | |
| 235 : registry_(registry), app_id_(app_id), window_(NULL), running_(false) { | |
| 236 registry_->AddObserver(this); | |
| 237 } | |
| 238 virtual ~AppWindowObserver() { registry_->RemoveObserver(this); } | |
| 239 | |
| 240 apps::AppWindow* Wait() { | |
| 241 running_ = true; | |
| 242 message_loop_runner_ = new content::MessageLoopRunner; | |
| 243 message_loop_runner_->Run(); | |
| 244 EXPECT_TRUE(window_); | |
| 245 return window_; | |
| 246 } | |
| 247 | |
| 248 // AppWindowRegistry::Observer | |
| 249 virtual void OnAppWindowAdded(apps::AppWindow* app_window) OVERRIDE { | |
| 250 if (!running_) | |
| 251 return; | |
| 252 | |
| 253 if (app_window->extension_id() == app_id_) { | |
| 254 window_ = app_window; | |
| 255 message_loop_runner_->Quit(); | |
| 256 running_ = false; | |
| 257 } | |
| 258 } | |
| 259 virtual void OnAppWindowIconChanged(apps::AppWindow* app_window) OVERRIDE {} | |
| 260 virtual void OnAppWindowRemoved(apps::AppWindow* app_window) OVERRIDE {} | |
| 261 | |
| 262 private: | |
| 263 apps::AppWindowRegistry* registry_; | |
| 264 std::string app_id_; | |
| 265 scoped_refptr<content::MessageLoopRunner> message_loop_runner_; | |
| 266 apps::AppWindow* window_; | |
| 267 bool running_; | |
| 268 | |
| 269 DISALLOW_COPY_AND_ASSIGN(AppWindowObserver); | |
| 270 }; | |
| 271 | |
| 272 class KioskTest : public OobeBaseTest { | 231 class KioskTest : public OobeBaseTest { |
| 273 public: | 232 public: |
| 274 KioskTest() { | 233 KioskTest() { |
| 275 set_exit_when_last_browser_closes(false); | 234 set_exit_when_last_browser_closes(false); |
| 276 } | 235 } |
| 277 | 236 |
| 278 virtual ~KioskTest() {} | 237 virtual ~KioskTest() {} |
| 279 | 238 |
| 280 protected: | 239 protected: |
| 281 virtual void SetUp() OVERRIDE { | 240 virtual void SetUp() OVERRIDE { |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 // Check if the kiosk webapp is really installed for the default profile. | 367 // Check if the kiosk webapp is really installed for the default profile. |
| 409 const extensions::Extension* app = | 368 const extensions::Extension* app = |
| 410 extensions::ExtensionSystem::Get(app_profile)-> | 369 extensions::ExtensionSystem::Get(app_profile)-> |
| 411 extension_service()->GetInstalledExtension(test_app_id_); | 370 extension_service()->GetInstalledExtension(test_app_id_); |
| 412 EXPECT_TRUE(app); | 371 EXPECT_TRUE(app); |
| 413 | 372 |
| 414 // App should appear with its window. | 373 // App should appear with its window. |
| 415 apps::AppWindowRegistry* app_window_registry = | 374 apps::AppWindowRegistry* app_window_registry = |
| 416 apps::AppWindowRegistry::Get(app_profile); | 375 apps::AppWindowRegistry::Get(app_profile); |
| 417 apps::AppWindow* window = | 376 apps::AppWindow* window = |
| 418 AppWindowObserver(app_window_registry, test_app_id_).Wait(); | 377 AppWindowWaiter(app_window_registry, test_app_id_).Wait(); |
| 419 EXPECT_TRUE(window); | 378 EXPECT_TRUE(window); |
| 420 | 379 |
| 421 // Login screen should be gone or fading out. | 380 // Login screen should be gone or fading out. |
| 422 chromeos::LoginDisplayHost* login_display_host = | 381 chromeos::LoginDisplayHost* login_display_host = |
| 423 chromeos::LoginDisplayHostImpl::default_host(); | 382 chromeos::LoginDisplayHostImpl::default_host(); |
| 424 EXPECT_TRUE( | 383 EXPECT_TRUE( |
| 425 login_display_host == NULL || | 384 login_display_host == NULL || |
| 426 login_display_host->GetNativeWindow()->layer()->GetTargetOpacity() == | 385 login_display_host->GetNativeWindow()->layer()->GetTargetOpacity() == |
| 427 0.0f); | 386 0.0f); |
| 428 | 387 |
| (...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1184 content::WindowedNotificationObserver( | 1143 content::WindowedNotificationObserver( |
| 1185 chrome::NOTIFICATION_KIOSK_APP_LAUNCHED, | 1144 chrome::NOTIFICATION_KIOSK_APP_LAUNCHED, |
| 1186 content::NotificationService::AllSources()).Wait(); | 1145 content::NotificationService::AllSources()).Wait(); |
| 1187 | 1146 |
| 1188 // Check installer status. | 1147 // Check installer status. |
| 1189 EXPECT_EQ(chromeos::KioskAppLaunchError::NONE, | 1148 EXPECT_EQ(chromeos::KioskAppLaunchError::NONE, |
| 1190 chromeos::KioskAppLaunchError::Get()); | 1149 chromeos::KioskAppLaunchError::Get()); |
| 1191 | 1150 |
| 1192 // Wait for the window to appear. | 1151 // Wait for the window to appear. |
| 1193 apps::AppWindow* window = | 1152 apps::AppWindow* window = |
| 1194 AppWindowObserver( | 1153 AppWindowWaiter( |
| 1195 apps::AppWindowRegistry::Get(ProfileManager::GetPrimaryUserProfile()), | 1154 apps::AppWindowRegistry::Get(ProfileManager::GetPrimaryUserProfile()), |
| 1196 kTestEnterpriseKioskApp).Wait(); | 1155 kTestEnterpriseKioskApp).Wait(); |
| 1197 ASSERT_TRUE(window); | 1156 ASSERT_TRUE(window); |
| 1198 | 1157 |
| 1199 // Check whether the app can retrieve an OAuth2 access token. | 1158 // Check whether the app can retrieve an OAuth2 access token. |
| 1200 std::string result; | 1159 std::string result; |
| 1201 EXPECT_TRUE(content::ExecuteScriptAndExtractString( | 1160 EXPECT_TRUE(content::ExecuteScriptAndExtractString( |
| 1202 window->web_contents(), | 1161 window->web_contents(), |
| 1203 "chrome.identity.getAuthToken({ 'interactive': false }, function(token) {" | 1162 "chrome.identity.getAuthToken({ 'interactive': false }, function(token) {" |
| 1204 " window.domAutomationController.setAutomationId(0);" | 1163 " window.domAutomationController.setAutomationId(0);" |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1282 content::WindowedNotificationObserver( | 1241 content::WindowedNotificationObserver( |
| 1283 chrome::NOTIFICATION_KIOSK_AUTOLAUNCH_WARNING_VISIBLE, | 1242 chrome::NOTIFICATION_KIOSK_AUTOLAUNCH_WARNING_VISIBLE, |
| 1284 content::NotificationService::AllSources()).Wait(); | 1243 content::NotificationService::AllSources()).Wait(); |
| 1285 | 1244 |
| 1286 // Wait for the wallpaper to load. | 1245 // Wait for the wallpaper to load. |
| 1287 WaitForWallpaper(); | 1246 WaitForWallpaper(); |
| 1288 EXPECT_TRUE(wallpaper_loaded()); | 1247 EXPECT_TRUE(wallpaper_loaded()); |
| 1289 } | 1248 } |
| 1290 | 1249 |
| 1291 } // namespace chromeos | 1250 } // namespace chromeos |
| OLD | NEW |