Commit a2198523 authored by weitaosu@chromium.org's avatar weitaosu@chromium.org

Adding the "Authenticate" step to the "MANUAL_Auth" test case. Also added the...

Adding the "Authenticate" step to the "MANUAL_Auth" test case. Also added the username and password command line options.

BUG=134210

Review URL: https://chromiumcodereview.appspot.com/22274016

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@217089 0039d316-1c4b-4281-b951-d872f2087c98
parent 46801eaa
...@@ -35,6 +35,15 @@ const char kOverrideUserDataDir[] = "override-user-data-dir"; ...@@ -35,6 +35,15 @@ const char kOverrideUserDataDir[] = "override-user-data-dir";
const char kNoCleanup[] = "no-cleanup"; const char kNoCleanup[] = "no-cleanup";
const char kNoInstall[] = "no-install"; const char kNoInstall[] = "no-install";
const char kWebAppCrx[] = "webapp-crx"; const char kWebAppCrx[] = "webapp-crx";
const char kUsername[] = "username";
const char kkPassword[] = "password";
// ASSERT_TRUE can only be used in void returning functions.
void _ASSERT_TRUE(bool condition) {
ASSERT_TRUE(condition);
return;
}
} }
namespace remoting { namespace remoting {
...@@ -77,6 +86,8 @@ class RemoteDesktopBrowserTest : public ExtensionBrowserTest { ...@@ -77,6 +86,8 @@ class RemoteDesktopBrowserTest : public ExtensionBrowserTest {
void Authorize(); void Authorize();
void Authenticate();
// Whether to perform the cleanup tasks (uninstalling chromoting, etc). // Whether to perform the cleanup tasks (uninstalling chromoting, etc).
// This is useful for diagnostic purposes. // This is useful for diagnostic purposes.
bool NoCleanup() { return no_cleanup_; } bool NoCleanup() { return no_cleanup_; }
...@@ -107,6 +118,59 @@ class RemoteDesktopBrowserTest : public ExtensionBrowserTest { ...@@ -107,6 +118,59 @@ class RemoteDesktopBrowserTest : public ExtensionBrowserTest {
return browser()->tab_strip_model()->GetActiveWebContents()->GetURL(); return browser()->tab_strip_model()->GetActiveWebContents()->GetURL();
} }
// Helper to execute a javascript code snippet on the current page.
void ExecuteScript(const std::string& script) {
ASSERT_TRUE(content::ExecuteScript(
browser()->tab_strip_model()->GetActiveWebContents(), script));
}
// Helper to execute a javascript code snippet on the current page and
// wait for page load to complete.
void 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();
}
// Helper to execute a javascript code snippet on the current page and
// extract the boolean result.
bool 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 check whether a html element with the given name exists on
// the current page.
bool HtmlElementExists(const std::string& name) {
return ExecuteScriptAndExtractBool(
"document.getElementById(\"" + name + "\") != null");
}
// Helper to navigate to a given url.
void 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();
}
// This test needs to make live DNS requests for access to // This test needs to make live DNS requests for access to
// GAIA and sync server URLs under google.com. We use a scoped version // GAIA and sync server URLs under google.com. We use a scoped version
// to override the default resolver while the test is active. // to override the default resolver while the test is active.
...@@ -116,6 +180,8 @@ class RemoteDesktopBrowserTest : public ExtensionBrowserTest { ...@@ -116,6 +180,8 @@ class RemoteDesktopBrowserTest : public ExtensionBrowserTest {
bool no_install_; bool no_install_;
std::string chromoting_id_; std::string chromoting_id_;
base::FilePath webapp_crx_; base::FilePath webapp_crx_;
std::string username_;
std::string password_;
}; };
void RemoteDesktopBrowserTest::ParseCommandLine() { void RemoteDesktopBrowserTest::ParseCommandLine() {
...@@ -138,6 +204,9 @@ void RemoteDesktopBrowserTest::ParseCommandLine() { ...@@ -138,6 +204,9 @@ void RemoteDesktopBrowserTest::ParseCommandLine() {
override_user_data_dir); override_user_data_dir);
} }
username_ = command_line->GetSwitchValueASCII(kUsername);
password_ = command_line->GetSwitchValueASCII(kkPassword);
no_cleanup_ = command_line->HasSwitch(kNoCleanup); no_cleanup_ = command_line->HasSwitch(kNoCleanup);
no_install_ = command_line->HasSwitch(kNoInstall); no_install_ = command_line->HasSwitch(kNoInstall);
...@@ -169,15 +238,8 @@ void RemoteDesktopBrowserTest::DisableDNSLookupForThisTest() { ...@@ -169,15 +238,8 @@ void RemoteDesktopBrowserTest::DisableDNSLookupForThisTest() {
} }
void RemoteDesktopBrowserTest::VerifyInternetAccess() { void RemoteDesktopBrowserTest::VerifyInternetAccess() {
content::WindowedNotificationObserver observer(
content::NOTIFICATION_LOAD_STOP,
content::Source<content::NavigationController>(
&browser()->tab_strip_model()->GetActiveWebContents()->
GetController()));
GURL google_url("http://www.google.com"); GURL google_url("http://www.google.com");
ui_test_utils::NavigateToURL(browser(), google_url); NavigateToURLAndWait(google_url);
observer.Wait();
EXPECT_EQ(GetCurrentURL().host(), "www.google.com"); EXPECT_EQ(GetCurrentURL().host(), "www.google.com");
} }
...@@ -197,17 +259,10 @@ void RemoteDesktopBrowserTest::UninstallChromotingApp() { ...@@ -197,17 +259,10 @@ void RemoteDesktopBrowserTest::UninstallChromotingApp() {
void RemoteDesktopBrowserTest::LaunchChromotingApp() { void RemoteDesktopBrowserTest::LaunchChromotingApp() {
ASSERT_FALSE(ChromotingID().empty()); ASSERT_FALSE(ChromotingID().empty());
std::string url = "chrome-extension://" + ChromotingID() + "/main.html"; std::string url = "chrome-extension://" + ChromotingID() + "/main.html";
const GURL chromoting_main(url); const GURL chromoting_main(url);
NavigateToURLAndWait(chromoting_main);
content::WindowedNotificationObserver observer(
content::NOTIFICATION_LOAD_STOP,
content::Source<content::NavigationController>(
&browser()->tab_strip_model()->GetActiveWebContents()->
GetController()));
ui_test_utils::NavigateToURL(browser(), chromoting_main);
observer.Wait();
EXPECT_EQ(GetCurrentURL(), chromoting_main); EXPECT_EQ(GetCurrentURL(), chromoting_main);
} }
...@@ -249,42 +304,37 @@ void RemoteDesktopBrowserTest::Authorize() { ...@@ -249,42 +304,37 @@ void RemoteDesktopBrowserTest::Authorize() {
// and isAuthenticated() should be false (auth dialog visible). // and isAuthenticated() should be false (auth dialog visible).
std::string url = "chrome-extension://" + ChromotingID() + "/main.html"; std::string url = "chrome-extension://" + ChromotingID() + "/main.html";
ASSERT_EQ(GetCurrentURL().spec(), url); ASSERT_EQ(GetCurrentURL().spec(), url);
ASSERT_FALSE(ExecuteScriptAndExtractBool(
"remoting.OAuth2.prototype.isAuthenticated()"));
bool result; ExecuteScriptAndWait("remoting.OAuth2.prototype.doAuthRedirect();");
ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
browser()->tab_strip_model()->GetActiveWebContents(),
"window.domAutomationController.send("
"remoting.OAuth2.prototype.isAuthenticated());",
&result));
EXPECT_FALSE(result);
content::WindowedNotificationObserver observer(
content::NOTIFICATION_LOAD_STOP,
content::Source<content::NavigationController>(
&browser()->tab_strip_model()->GetActiveWebContents()->
GetController()));
ASSERT_TRUE(content::ExecuteScript(
browser()->tab_strip_model()->GetActiveWebContents(),
"remoting.OAuth2.prototype.doAuthRedirect()"));
observer.Wait();
// Verify the active tab is at the "Google Accounts" login page. // Verify the active tab is at the "Google Accounts" login page.
EXPECT_EQ(GetCurrentURL().host(), "accounts.google.com"); EXPECT_EQ(GetCurrentURL().host(), "accounts.google.com");
EXPECT_TRUE(HtmlElementExists("Email"));
EXPECT_TRUE(HtmlElementExists("Passwd"));
}
ASSERT_TRUE(content::ExecuteScriptAndExtractBool( void RemoteDesktopBrowserTest::Authenticate() {
browser()->tab_strip_model()->GetActiveWebContents(), // The chromoting extension should be installed.
"window.domAutomationController.send(" ASSERT_FALSE(ChromotingID().empty());
"document.getElementById(\"Email\") != null);",
&result)); // The active tab should have the "Google Accounts" login page loaded.
EXPECT_TRUE(result); ASSERT_EQ(GetCurrentURL().host(), "accounts.google.com");
ASSERT_TRUE(HtmlElementExists("Email"));
ASSERT_TRUE(content::ExecuteScriptAndExtractBool( ASSERT_TRUE(HtmlElementExists("Passwd"));
browser()->tab_strip_model()->GetActiveWebContents(),
"window.domAutomationController.send(" // Now log in using the username and password passed in from the command line.
"document.getElementById(\"Passwd\") != null);", ExecuteScriptAndWait(
&result)); "document.getElementById(\"Email\").value = \"" + username_ + "\";" +
EXPECT_TRUE(result); "document.getElementById(\"Passwd\").value = \"" + password_ +"\";" +
"document.forms[\"gaia_loginform\"].submit();");
EXPECT_EQ(GetCurrentURL().host(), "accounts.google.com");
// TODO: Is there a better way to verify we are on the
// "Request for Permission" page?
EXPECT_TRUE(HtmlElementExists("submit_approve_access"));
} }
IN_PROC_BROWSER_TEST_F(RemoteDesktopBrowserTest, MANUAL_Launch) { IN_PROC_BROWSER_TEST_F(RemoteDesktopBrowserTest, MANUAL_Launch) {
...@@ -325,6 +375,8 @@ IN_PROC_BROWSER_TEST_F(RemoteDesktopBrowserTest, MANUAL_Auth) { ...@@ -325,6 +375,8 @@ IN_PROC_BROWSER_TEST_F(RemoteDesktopBrowserTest, MANUAL_Auth) {
Authorize(); Authorize();
Authenticate();
if (!NoCleanup()) { if (!NoCleanup()) {
UninstallChromotingApp(); UninstallChromotingApp();
VerifyChromotingLoaded(false); VerifyChromotingLoaded(false);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment