| 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/ui/views/native_app_window_views.h" |
| 5 #include "ash/desktop_background/desktop_background_controller.h" | 6 #include "ash/desktop_background/desktop_background_controller.h" |
| 6 #include "ash/desktop_background/desktop_background_controller_observer.h" | 7 #include "ash/desktop_background/desktop_background_controller_observer.h" |
| 7 #include "ash/shell.h" | 8 #include "ash/shell.h" |
| 8 #include "base/bind.h" | 9 #include "base/bind.h" |
| 9 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| 10 #include "base/files/file_util.h" | 11 #include "base/files/file_util.h" |
| 11 #include "base/location.h" | 12 #include "base/location.h" |
| 12 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
| 13 #include "base/path_service.h" | 14 #include "base/path_service.h" |
| 14 #include "base/prefs/pref_service.h" | 15 #include "base/prefs/pref_service.h" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 #include "content/public/test/browser_test_utils.h" | 56 #include "content/public/test/browser_test_utils.h" |
| 56 #include "extensions/browser/app_window/app_window.h" | 57 #include "extensions/browser/app_window/app_window.h" |
| 57 #include "extensions/browser/app_window/app_window_registry.h" | 58 #include "extensions/browser/app_window/app_window_registry.h" |
| 58 #include "extensions/browser/app_window/native_app_window.h" | 59 #include "extensions/browser/app_window/native_app_window.h" |
| 59 #include "extensions/browser/extension_system.h" | 60 #include "extensions/browser/extension_system.h" |
| 60 #include "extensions/test/result_catcher.h" | 61 #include "extensions/test/result_catcher.h" |
| 61 #include "google_apis/gaia/gaia_constants.h" | 62 #include "google_apis/gaia/gaia_constants.h" |
| 62 #include "google_apis/gaia/gaia_switches.h" | 63 #include "google_apis/gaia/gaia_switches.h" |
| 63 #include "google_apis/gaia/gaia_urls.h" | 64 #include "google_apis/gaia/gaia_urls.h" |
| 64 #include "net/test/embedded_test_server/embedded_test_server.h" | 65 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 66 #include "ui/base/accelerators/accelerator.h" |
| 65 | 67 |
| 66 namespace em = enterprise_management; | 68 namespace em = enterprise_management; |
| 67 | 69 |
| 68 namespace chromeos { | 70 namespace chromeos { |
| 69 | 71 |
| 70 namespace { | 72 namespace { |
| 71 | 73 |
| 72 // This is a simple test app that creates an app window and immediately closes | 74 // This is a simple test app that creates an app window and immediately closes |
| 73 // it again. Webstore data json is in | 75 // it again. Webstore data json is in |
| 74 // chrome/test/data/chromeos/app_mode/webstore/inlineinstall/ | 76 // chrome/test/data/chromeos/app_mode/webstore/inlineinstall/ |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 const extensions::Extension* GetInstalledApp() { | 416 const extensions::Extension* GetInstalledApp() { |
| 415 Profile* app_profile = ProfileManager::GetPrimaryUserProfile(); | 417 Profile* app_profile = ProfileManager::GetPrimaryUserProfile(); |
| 416 return extensions::ExtensionSystem::Get(app_profile)-> | 418 return extensions::ExtensionSystem::Get(app_profile)-> |
| 417 extension_service()->GetInstalledExtension(test_app_id_); | 419 extension_service()->GetInstalledExtension(test_app_id_); |
| 418 } | 420 } |
| 419 | 421 |
| 420 const Version& GetInstalledAppVersion() { | 422 const Version& GetInstalledAppVersion() { |
| 421 return *GetInstalledApp()->version(); | 423 return *GetInstalledApp()->version(); |
| 422 } | 424 } |
| 423 | 425 |
| 424 void WaitForAppLaunchSuccess() { | 426 void WaitForAppLaunchAndOptionallyTerminateApp(bool terminate_app) { |
| 425 ExtensionTestMessageListener | 427 ExtensionTestMessageListener |
| 426 launch_data_check_listener("launchData.isKioskSession = true", false); | 428 launch_data_check_listener("launchData.isKioskSession = true", false); |
| 427 | 429 |
| 428 // Wait for the Kiosk App to launch. | 430 // Wait for the Kiosk App to launch. |
| 429 content::WindowedNotificationObserver( | 431 content::WindowedNotificationObserver( |
| 430 chrome::NOTIFICATION_KIOSK_APP_LAUNCHED, | 432 chrome::NOTIFICATION_KIOSK_APP_LAUNCHED, |
| 431 content::NotificationService::AllSources()).Wait(); | 433 content::NotificationService::AllSources()).Wait(); |
| 432 | 434 |
| 433 // Default profile switches to app profile after app is launched. | 435 // Default profile switches to app profile after app is launched. |
| 434 Profile* app_profile = ProfileManager::GetPrimaryUserProfile(); | 436 Profile* app_profile = ProfileManager::GetPrimaryUserProfile(); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 456 EXPECT_TRUE(window); | 458 EXPECT_TRUE(window); |
| 457 | 459 |
| 458 // Login screen should be gone or fading out. | 460 // Login screen should be gone or fading out. |
| 459 chromeos::LoginDisplayHost* login_display_host = | 461 chromeos::LoginDisplayHost* login_display_host = |
| 460 chromeos::LoginDisplayHostImpl::default_host(); | 462 chromeos::LoginDisplayHostImpl::default_host(); |
| 461 EXPECT_TRUE( | 463 EXPECT_TRUE( |
| 462 login_display_host == NULL || | 464 login_display_host == NULL || |
| 463 login_display_host->GetNativeWindow()->layer()->GetTargetOpacity() == | 465 login_display_host->GetNativeWindow()->layer()->GetTargetOpacity() == |
| 464 0.0f); | 466 0.0f); |
| 465 | 467 |
| 468 // Terminate the app. |
| 469 if (terminate_app) |
| 470 window->GetBaseWindow()->Close(); |
| 471 |
| 466 // Wait until the app terminates if it is still running. | 472 // Wait until the app terminates if it is still running. |
| 467 if (!app_window_registry->GetAppWindowsForApp(test_app_id_).empty()) | 473 if (!app_window_registry->GetAppWindowsForApp(test_app_id_).empty()) |
| 468 content::RunMessageLoop(); | 474 content::RunMessageLoop(); |
| 469 | 475 |
| 470 // Check that the app had been informed that it is running in a kiosk | 476 // Check that the app had been informed that it is running in a kiosk |
| 471 // session. | 477 // session. |
| 472 EXPECT_TRUE(launch_data_check_listener.was_satisfied()); | 478 EXPECT_TRUE(launch_data_check_listener.was_satisfied()); |
| 473 } | 479 } |
| 474 | 480 |
| 481 void WaitForAppLaunchSuccess() { |
| 482 WaitForAppLaunchAndOptionallyTerminateApp(true); |
| 483 } |
| 484 |
| 475 void WaitForAppLaunchNetworkTimeout() { | 485 void WaitForAppLaunchNetworkTimeout() { |
| 476 if (GetAppLaunchController()->network_wait_timedout()) | 486 if (GetAppLaunchController()->network_wait_timedout()) |
| 477 return; | 487 return; |
| 478 | 488 |
| 479 scoped_refptr<content::MessageLoopRunner> runner = | 489 scoped_refptr<content::MessageLoopRunner> runner = |
| 480 new content::MessageLoopRunner; | 490 new content::MessageLoopRunner; |
| 481 | 491 |
| 482 base::Closure callback = base::Bind( | 492 base::Closure callback = base::Bind( |
| 483 &OnNetworkWaitTimedOut, runner->QuitClosure()); | 493 &OnNetworkWaitTimedOut, runner->QuitClosure()); |
| 484 AppLaunchController::SetNetworkTimeoutCallbackForTesting(&callback); | 494 AppLaunchController::SetNetworkTimeoutCallbackForTesting(&callback); |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 603 scoped_ptr<MockUserManager> mock_user_manager_; | 613 scoped_ptr<MockUserManager> mock_user_manager_; |
| 604 | 614 |
| 605 DISALLOW_COPY_AND_ASSIGN(KioskTest); | 615 DISALLOW_COPY_AND_ASSIGN(KioskTest); |
| 606 }; | 616 }; |
| 607 | 617 |
| 608 IN_PROC_BROWSER_TEST_F(KioskTest, InstallAndLaunchApp) { | 618 IN_PROC_BROWSER_TEST_F(KioskTest, InstallAndLaunchApp) { |
| 609 StartAppLaunchFromLoginScreen(SimulateNetworkOnlineClosure()); | 619 StartAppLaunchFromLoginScreen(SimulateNetworkOnlineClosure()); |
| 610 WaitForAppLaunchSuccess(); | 620 WaitForAppLaunchSuccess(); |
| 611 } | 621 } |
| 612 | 622 |
| 623 IN_PROC_BROWSER_TEST_F(KioskTest, ZoomSupport) { |
| 624 ExtensionTestMessageListener |
| 625 app_window_loaded_listener("appWindowLoaded", false); |
| 626 StartAppLaunchFromLoginScreen(SimulateNetworkOnlineClosure()); |
| 627 app_window_loaded_listener.WaitUntilSatisfied(); |
| 628 |
| 629 Profile* app_profile = ProfileManager::GetPrimaryUserProfile(); |
| 630 ASSERT_TRUE(app_profile); |
| 631 |
| 632 extensions::AppWindowRegistry* app_window_registry = |
| 633 extensions::AppWindowRegistry::Get(app_profile); |
| 634 extensions::AppWindow* window = |
| 635 AppWindowWaiter(app_window_registry, test_app_id()).Wait(); |
| 636 ASSERT_TRUE(window); |
| 637 |
| 638 // Gets the original width of the app window. |
| 639 int original_width; |
| 640 EXPECT_TRUE(content::ExecuteScriptAndExtractInt( |
| 641 window->web_contents(), |
| 642 "window.domAutomationController.setAutomationId(0);" |
| 643 "window.domAutomationController.send(window.innerWidth);", |
| 644 &original_width)); |
| 645 |
| 646 apps::NativeAppWindowViews* native_app_window_views = |
| 647 static_cast<apps::NativeAppWindowViews*>(window->GetBaseWindow()); |
| 648 ui::AcceleratorTarget* accelerator_target = |
| 649 static_cast<ui::AcceleratorTarget*>(native_app_window_views); |
| 650 |
| 651 // Zoom in. Text is bigger and content window width becomes smaller. |
| 652 accelerator_target->AcceleratorPressed(ui::Accelerator( |
| 653 ui::VKEY_ADD, ui::EF_CONTROL_DOWN)); |
| 654 int width_zoomed_in; |
| 655 EXPECT_TRUE(content::ExecuteScriptAndExtractInt( |
| 656 window->web_contents(), |
| 657 "window.domAutomationController.setAutomationId(0);" |
| 658 "window.domAutomationController.send(window.innerWidth);", |
| 659 &width_zoomed_in)); |
| 660 DCHECK_LT(width_zoomed_in, original_width); |
| 661 |
| 662 // Go back to normal. Window width is restored. |
| 663 accelerator_target->AcceleratorPressed(ui::Accelerator( |
| 664 ui::VKEY_0, ui::EF_CONTROL_DOWN)); |
| 665 int width_zoom_normal; |
| 666 EXPECT_TRUE(content::ExecuteScriptAndExtractInt( |
| 667 window->web_contents(), |
| 668 "window.domAutomationController.setAutomationId(0);" |
| 669 "window.domAutomationController.send(window.innerWidth);", |
| 670 &width_zoom_normal)); |
| 671 DCHECK_EQ(width_zoom_normal, original_width); |
| 672 |
| 673 // Zoom out. Text is smaller and content window width becomes larger. |
| 674 accelerator_target->AcceleratorPressed(ui::Accelerator( |
| 675 ui::VKEY_SUBTRACT, ui::EF_CONTROL_DOWN)); |
| 676 int width_zoomed_out; |
| 677 EXPECT_TRUE(content::ExecuteScriptAndExtractInt( |
| 678 window->web_contents(), |
| 679 "window.domAutomationController.setAutomationId(0);" |
| 680 "window.domAutomationController.send(window.innerWidth);", |
| 681 &width_zoomed_out)); |
| 682 DCHECK_GT(width_zoomed_out, original_width); |
| 683 |
| 684 // Terminate the app. |
| 685 window->GetBaseWindow()->Close(); |
| 686 content::RunAllPendingInMessageLoop(); |
| 687 } |
| 688 |
| 613 IN_PROC_BROWSER_TEST_F(KioskTest, NotSignedInWithGAIAAccount) { | 689 IN_PROC_BROWSER_TEST_F(KioskTest, NotSignedInWithGAIAAccount) { |
| 614 // Tests that the kiosk session is not considered to be logged in with a GAIA | 690 // Tests that the kiosk session is not considered to be logged in with a GAIA |
| 615 // account. | 691 // account. |
| 616 StartAppLaunchFromLoginScreen(SimulateNetworkOnlineClosure()); | 692 StartAppLaunchFromLoginScreen(SimulateNetworkOnlineClosure()); |
| 617 WaitForAppLaunchSuccess(); | 693 WaitForAppLaunchSuccess(); |
| 618 | 694 |
| 619 Profile* app_profile = ProfileManager::GetPrimaryUserProfile(); | 695 Profile* app_profile = ProfileManager::GetPrimaryUserProfile(); |
| 620 ASSERT_TRUE(app_profile); | 696 ASSERT_TRUE(app_profile); |
| 621 EXPECT_FALSE(app_profile->GetPrefs()->HasPrefPath( | 697 EXPECT_FALSE(app_profile->GetPrefs()->HasPrefPath( |
| 622 prefs::kGoogleServicesUsername)); | 698 prefs::kGoogleServicesUsername)); |
| (...skipping 829 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1452 } | 1528 } |
| 1453 | 1529 |
| 1454 IN_PROC_BROWSER_TEST_F(KioskUpdateTest, PRE_PreserveLocalData) { | 1530 IN_PROC_BROWSER_TEST_F(KioskUpdateTest, PRE_PreserveLocalData) { |
| 1455 // Installs v1 app and writes some local data. | 1531 // Installs v1 app and writes some local data. |
| 1456 set_test_app_id(kTestLocalFsKioskApp); | 1532 set_test_app_id(kTestLocalFsKioskApp); |
| 1457 set_test_app_version("1.0.0"); | 1533 set_test_app_version("1.0.0"); |
| 1458 set_test_crx_file(test_app_id() + ".crx"); | 1534 set_test_crx_file(test_app_id() + ".crx"); |
| 1459 | 1535 |
| 1460 extensions::ResultCatcher catcher; | 1536 extensions::ResultCatcher catcher; |
| 1461 StartAppLaunchFromLoginScreen(SimulateNetworkOnlineClosure()); | 1537 StartAppLaunchFromLoginScreen(SimulateNetworkOnlineClosure()); |
| 1462 WaitForAppLaunchSuccess(); | 1538 WaitForAppLaunchAndOptionallyTerminateApp(false); |
| 1463 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); | 1539 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); |
| 1464 } | 1540 } |
| 1465 | 1541 |
| 1466 IN_PROC_BROWSER_TEST_F(KioskUpdateTest, PreserveLocalData) { | 1542 IN_PROC_BROWSER_TEST_F(KioskUpdateTest, PreserveLocalData) { |
| 1467 // Update existing v1 app installed in PRE_PreserveLocalData to v2 | 1543 // Update existing v1 app installed in PRE_PreserveLocalData to v2 |
| 1468 // that reads and verifies the local data. | 1544 // that reads and verifies the local data. |
| 1469 set_test_app_id(kTestLocalFsKioskApp); | 1545 set_test_app_id(kTestLocalFsKioskApp); |
| 1470 set_test_app_version("2.0.0"); | 1546 set_test_app_version("2.0.0"); |
| 1471 set_test_crx_file(test_app_id() + "_v2_read_and_verify_data.crx"); | 1547 set_test_crx_file(test_app_id() + "_v2_read_and_verify_data.crx"); |
| 1472 extensions::ResultCatcher catcher; | 1548 extensions::ResultCatcher catcher; |
| 1473 StartAppLaunchFromLoginScreen(SimulateNetworkOnlineClosure()); | 1549 StartAppLaunchFromLoginScreen(SimulateNetworkOnlineClosure()); |
| 1474 WaitForAppLaunchSuccess(); | 1550 WaitForAppLaunchAndOptionallyTerminateApp(false); |
| 1475 | 1551 |
| 1476 EXPECT_EQ("2.0.0", GetInstalledAppVersion().GetString()); | 1552 EXPECT_EQ("2.0.0", GetInstalledAppVersion().GetString()); |
| 1477 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); | 1553 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); |
| 1478 } | 1554 } |
| 1479 | 1555 |
| 1480 class KioskEnterpriseTest : public KioskTest { | 1556 class KioskEnterpriseTest : public KioskTest { |
| 1481 protected: | 1557 protected: |
| 1482 KioskEnterpriseTest() {} | 1558 KioskEnterpriseTest() {} |
| 1483 | 1559 |
| 1484 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { | 1560 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1696 content::WindowedNotificationObserver( | 1772 content::WindowedNotificationObserver( |
| 1697 chrome::NOTIFICATION_KIOSK_AUTOLAUNCH_WARNING_VISIBLE, | 1773 chrome::NOTIFICATION_KIOSK_AUTOLAUNCH_WARNING_VISIBLE, |
| 1698 content::NotificationService::AllSources()).Wait(); | 1774 content::NotificationService::AllSources()).Wait(); |
| 1699 | 1775 |
| 1700 // Wait for the wallpaper to load. | 1776 // Wait for the wallpaper to load. |
| 1701 WaitForWallpaper(); | 1777 WaitForWallpaper(); |
| 1702 EXPECT_TRUE(wallpaper_loaded()); | 1778 EXPECT_TRUE(wallpaper_loaded()); |
| 1703 } | 1779 } |
| 1704 | 1780 |
| 1705 } // namespace chromeos | 1781 } // namespace chromeos |
| OLD | NEW |