diff options
Diffstat (limited to 'remoting/test/remote_desktop_browsertest.cc')
-rw-r--r-- | remoting/test/remote_desktop_browsertest.cc | 218 |
1 files changed, 156 insertions, 62 deletions
diff --git a/remoting/test/remote_desktop_browsertest.cc b/remoting/test/remote_desktop_browsertest.cc index c8d8bf7..8d91a06 100644 --- a/remoting/test/remote_desktop_browsertest.cc +++ b/remoting/test/remote_desktop_browsertest.cc @@ -36,59 +36,6 @@ void RemoteDesktopBrowserTest::TearDownInProcessBrowserTestFixture() { DisableDNSLookupForThisTest(); } -void RemoteDesktopBrowserTest::ParseCommandLine() { - CommandLine* command_line = CommandLine::ForCurrentProcess(); - - // The test framework overrides any command line user-data-dir - // argument with a /tmp/.org.chromium.Chromium.XXXXXX directory. - // That happens in the ChromeTestLauncherDelegate, and affects - // all unit tests (no opt out available). It intentionally erases - // any --user-data-dir switch if present and appends a new one. - // Re-override the default data dir if override-user-data-dir - // is specified. - if (command_line->HasSwitch(kOverrideUserDataDir)) { - const base::FilePath& override_user_data_dir = - command_line->GetSwitchValuePath(kOverrideUserDataDir); - - ASSERT_FALSE(override_user_data_dir.empty()); - - command_line->AppendSwitchPath(switches::kUserDataDir, - override_user_data_dir); - } - - username_ = command_line->GetSwitchValueASCII(kUsername); - password_ = command_line->GetSwitchValueASCII(kkPassword); - - no_cleanup_ = command_line->HasSwitch(kNoCleanup); - no_install_ = command_line->HasSwitch(kNoInstall); - - if (!no_install_) { - webapp_crx_ = command_line->GetSwitchValuePath(kWebAppCrx); - ASSERT_FALSE(webapp_crx_.empty()); - } -} - -void RemoteDesktopBrowserTest::EnableDNSLookupForThisTest( - net::RuleBasedHostResolverProc* host_resolver) { - // mock_host_resolver_override_ takes ownership of the resolver. - scoped_refptr<net::RuleBasedHostResolverProc> resolver = - new net::RuleBasedHostResolverProc(host_resolver); - resolver->AllowDirectLookup("*.google.com"); - // On Linux, we use Chromium's NSS implementation which uses the following - // hosts for certificate verification. Without these overrides, running the - // integration tests on Linux causes errors as we make external DNS lookups. - resolver->AllowDirectLookup("*.thawte.com"); - resolver->AllowDirectLookup("*.geotrust.com"); - resolver->AllowDirectLookup("*.gstatic.com"); - resolver->AllowDirectLookup("*.googleapis.com"); - mock_host_resolver_override_.reset( - new net::ScopedDefaultHostResolverProc(resolver.get())); -} - -void RemoteDesktopBrowserTest::DisableDNSLookupForThisTest() { - mock_host_resolver_override_.reset(); -} - void RemoteDesktopBrowserTest::VerifyInternetAccess() { GURL google_url("http://www.google.com"); NavigateToURLAndWait(google_url); @@ -109,15 +56,6 @@ void RemoteDesktopBrowserTest::UninstallChromotingApp() { chromoting_id_.clear(); } -void RemoteDesktopBrowserTest::LaunchChromotingApp() { - ASSERT_FALSE(ChromotingID().empty()); - - const GURL chromoting_main = Chromoting_Main_URL(); - NavigateToURLAndWait(chromoting_main); - - EXPECT_EQ(GetCurrentURL(), chromoting_main); -} - void RemoteDesktopBrowserTest::VerifyChromotingLoaded(bool expected) { const ExtensionSet* extensions = extension_service()->extensions(); scoped_refptr<const extensions::Extension> extension; @@ -147,6 +85,15 @@ void RemoteDesktopBrowserTest::VerifyChromotingLoaded(bool expected) { EXPECT_EQ(installed, expected); } +void RemoteDesktopBrowserTest::LaunchChromotingApp() { + ASSERT_FALSE(ChromotingID().empty()); + + const GURL chromoting_main = Chromoting_Main_URL(); + NavigateToURLAndWait(chromoting_main); + + EXPECT_EQ(GetCurrentURL(), chromoting_main); +} + void RemoteDesktopBrowserTest::Authorize() { // The chromoting extension should be installed. ASSERT_FALSE(ChromotingID().empty()); @@ -210,4 +157,151 @@ void RemoteDesktopBrowserTest::Approve() { "remoting.OAuth2.prototype.isAuthenticated()")); } +void RemoteDesktopBrowserTest::Install() { + // TODO: add support for installing unpacked extension (the v2 app needs it). + if (!NoInstall()) { + VerifyChromotingLoaded(false); + InstallChromotingApp(); + } + + VerifyChromotingLoaded(true); +} + +void RemoteDesktopBrowserTest::Cleanup() { + // TODO: Remove this hack by blocking on the appropriate notification. + // The browser may still be loading images embedded in the webapp. If we + // uinstall it now those load will fail. Navigating away to avoid the load + // failures. + ui_test_utils::NavigateToURL(browser(), GURL("about:blank")); + + if (!NoCleanup()) { + UninstallChromotingApp(); + VerifyChromotingLoaded(false); + } +} + +void RemoteDesktopBrowserTest::Auth() { + Authorize(); + Authenticate(); + Approve(); +} + +void RemoteDesktopBrowserTest::EnableDNSLookupForThisTest( + net::RuleBasedHostResolverProc* host_resolver) { + // mock_host_resolver_override_ takes ownership of the resolver. + scoped_refptr<net::RuleBasedHostResolverProc> resolver = + new net::RuleBasedHostResolverProc(host_resolver); + resolver->AllowDirectLookup("*.google.com"); + // On Linux, we use Chromium's NSS implementation which uses the following + // hosts for certificate verification. Without these overrides, running the + // integration tests on Linux causes errors as we make external DNS lookups. + resolver->AllowDirectLookup("*.thawte.com"); + resolver->AllowDirectLookup("*.geotrust.com"); + resolver->AllowDirectLookup("*.gstatic.com"); + resolver->AllowDirectLookup("*.googleapis.com"); + mock_host_resolver_override_.reset( + new net::ScopedDefaultHostResolverProc(resolver.get())); +} + +void RemoteDesktopBrowserTest::DisableDNSLookupForThisTest() { + mock_host_resolver_override_.reset(); +} + +void RemoteDesktopBrowserTest::ParseCommandLine() { + CommandLine* command_line = CommandLine::ForCurrentProcess(); + + // The test framework overrides any command line user-data-dir + // argument with a /tmp/.org.chromium.Chromium.XXXXXX directory. + // That happens in the ChromeTestLauncherDelegate, and affects + // all unit tests (no opt out available). It intentionally erases + // any --user-data-dir switch if present and appends a new one. + // Re-override the default data dir if override-user-data-dir + // is specified. + if (command_line->HasSwitch(kOverrideUserDataDir)) { + const base::FilePath& override_user_data_dir = + command_line->GetSwitchValuePath(kOverrideUserDataDir); + + ASSERT_FALSE(override_user_data_dir.empty()); + + command_line->AppendSwitchPath(switches::kUserDataDir, + override_user_data_dir); + } + + username_ = command_line->GetSwitchValueASCII(kUsername); + password_ = command_line->GetSwitchValueASCII(kkPassword); + + no_cleanup_ = command_line->HasSwitch(kNoCleanup); + no_install_ = command_line->HasSwitch(kNoInstall); + + if (!no_install_) { + webapp_crx_ = command_line->GetSwitchValuePath(kWebAppCrx); + ASSERT_FALSE(webapp_crx_.empty()); + } +} + +void RemoteDesktopBrowserTest::ExecuteScript(const std::string& script) { + ASSERT_TRUE(content::ExecuteScript( + browser()->tab_strip_model()->GetActiveWebContents(), script)); +} + +void RemoteDesktopBrowserTest::ExecuteScriptAndWait(const std::string& script) { + content::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, + content::Source<content::NavigationController>( + &browser()->tab_strip_model()->GetActiveWebContents()-> + GetController())); + + ExecuteScript(script); + + observer.Wait(); +} + +void RemoteDesktopBrowserTest::ExecuteScriptAndWaitUntil( + const std::string& script, + const GURL& target) { + content::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, + content::Source<content::NavigationController>( + &browser()->tab_strip_model()->GetActiveWebContents()-> + GetController())); + + ExecuteScript(script); + + observer.Wait(); + + // TODO: is there a better way to wait for all the redirections to complete? + while (GetCurrentURL() != target) { + content::WindowedNotificationObserver( + content::NOTIFICATION_LOAD_STOP, + content::Source<content::NavigationController>( + &browser()->tab_strip_model()->GetActiveWebContents()-> + GetController())).Wait(); + } +} + +bool RemoteDesktopBrowserTest::ExecuteScriptAndExtractBool( + const std::string& script) { + bool result; + // Using a private assert function because ASSERT_TRUE can only be used in + // void returning functions. + _ASSERT_TRUE(content::ExecuteScriptAndExtractBool( + browser()->tab_strip_model()->GetActiveWebContents(), + "window.domAutomationController.send(" + script + ");", + &result)); + + return result; +} + +// Helper to navigate to a given url. +void RemoteDesktopBrowserTest::NavigateToURLAndWait(const GURL& url) { + content::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, + content::Source<content::NavigationController>( + &browser()->tab_strip_model()->GetActiveWebContents()-> + GetController())); + + ui_test_utils::NavigateToURL(browser(), url); + observer.Wait(); +} + } // namespace remoting |