1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// found in the LICENSE file. 4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/basictypes.h" 6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/command_line.h" 7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/compiler_specific.h" 8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/files/file_path.h" 9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/path_service.h" 10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/chrome_notification_types.h" 11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/chromeos/login/demo_mode/demo_app_launcher.h" 12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/chromeos/login/test/app_window_waiter.h" 13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/extensions/extension_browsertest.h" 14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/profiles/profile.h" 15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/profiles/profile_manager.h" 16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/common/chrome_paths.h" 17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chromeos/chromeos_switches.h" 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chromeos/network/network_state.h" 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chromeos/network/network_state_handler.h" 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h" 21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/notification_service.h" 22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/notification_source.h" 23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/test/test_utils.h" 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/app_window/app_window_registry.h" 25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace chromeos { 28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace { 30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochbase::FilePath GetTestDemoAppPath() { 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::FilePath test_data_dir; 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir)); 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return test_data_dir.Append(FILE_PATH_LITERAL("chromeos/demo_app")); 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 37effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochProfile* WaitForProfile() { 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_manager::UserManager* user_manager = user_manager::UserManager::Get(); 39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!user_manager || !user_manager->IsUserLoggedIn()) { 40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch content::WindowedNotificationObserver( 41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch chrome::NOTIFICATION_SESSION_STARTED, 42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch content::NotificationService::AllSources()).Wait(); 43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return ProfileManager::GetActiveUserProfile(); 46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochbool VerifyDemoAppLaunch() { 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch Profile* profile = WaitForProfile(); 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return AppWindowWaiter(extensions::AppWindowRegistry::Get(profile), 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DemoAppLauncher::kDemoAppId).Wait() != NULL; 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liubool VerifyNetworksDisabled() { 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return !handler->FirstNetworkByType(NetworkTypePattern::NonVirtual()); 57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace 60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass DemoAppLauncherTest : public ExtensionBrowserTest { 62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public: 63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DemoAppLauncherTest() { 64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch set_exit_when_last_browser_closes(false); 65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual ~DemoAppLauncherTest() {} 68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch command_line->AppendSwitch(switches::kLoginManager); 71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch command_line->AppendSwitch(switches::kForceLoginManagerInTests); 72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch command_line->AppendSwitchASCII(switches::kLoginProfile, "user"); 73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch command_line->AppendSwitchASCII(switches::kDerelictIdleTimeout, "0"); 75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch command_line->AppendSwitchASCII(switches::kOobeTimerInterval, "0"); 76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch command_line->AppendSwitchASCII(switches::kDerelictDetectionTimeout, "0"); 77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void SetUp() OVERRIDE { 80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch chromeos::DemoAppLauncher::SetDemoAppPathForTesting(GetTestDemoAppPath()); 81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ExtensionBrowserTest::SetUp(); 82effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 83effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private: 85effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DISALLOW_COPY_AND_ASSIGN(DemoAppLauncherTest); 86effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 88effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochIN_PROC_BROWSER_TEST_F(DemoAppLauncherTest, Basic) { 89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // This test is fairly unique in the sense that the test actually starts as 90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // soon as Chrome launches, so there isn't any typical "launch this test" 91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // steps that we need to take. All we can do is verify that our demo app 92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // did launch. 93effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(VerifyDemoAppLaunch()); 94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 95effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuIN_PROC_BROWSER_TEST_F(DemoAppLauncherTest, NoNetwork) { 975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(VerifyDemoAppLaunch()); 985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(VerifyNetworksDisabled()); 995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 1005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 101effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace chromeos 102