summaryrefslogtreecommitdiffstats
path: root/remoting/test/remote_desktop_browsertest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'remoting/test/remote_desktop_browsertest.cc')
-rw-r--r--remoting/test/remote_desktop_browsertest.cc218
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