Index: trunk/src/chrome/browser/net/websocket_browsertest.cc |
=================================================================== |
--- trunk/src/chrome/browser/net/websocket_browsertest.cc (revision 282330) |
+++ trunk/src/chrome/browser/net/websocket_browsertest.cc (working copy) |
@@ -2,141 +2,51 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "base/compiler_specific.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/memory/scoped_ptr.h" |
#include "base/strings/string_util.h" |
#include "base/strings/utf_string_conversions.h" |
-#include "chrome/browser/chrome_notification_types.h" |
#include "chrome/browser/ui/browser.h" |
-#include "chrome/browser/ui/login/login_prompt.h" |
#include "chrome/browser/ui/tabs/tab_strip_model.h" |
#include "chrome/test/base/in_process_browser_test.h" |
#include "chrome/test/base/ui_test_utils.h" |
-#include "content/public/browser/navigation_controller.h" |
-#include "content/public/browser/notification_details.h" |
-#include "content/public/browser/notification_registrar.h" |
-#include "content/public/browser/notification_source.h" |
-#include "content/public/browser/web_contents.h" |
#include "content/public/test/browser_test_utils.h" |
#include "net/base/test_data_directory.h" |
#include "net/test/spawned_test_server/spawned_test_server.h" |
-#include "url/gurl.h" |
namespace { |
class WebSocketBrowserTest : public InProcessBrowserTest { |
public: |
WebSocketBrowserTest() |
- : ws_server_(net::SpawnedTestServer::TYPE_WS, |
- net::SpawnedTestServer::kLocalhost, |
- net::GetWebSocketTestDataDirectory()), |
- wss_server_(net::SpawnedTestServer::TYPE_WSS, |
- SSLOptions(SSLOptions::CERT_OK), |
- net::GetWebSocketTestDataDirectory()) {} |
- |
- protected: |
- // Prepare the title watcher. |
- virtual void SetUpOnMainThread() OVERRIDE { |
- watcher_.reset(new content::TitleWatcher( |
- browser()->tab_strip_model()->GetActiveWebContents(), |
- base::ASCIIToUTF16("PASS"))); |
- watcher_->AlsoWaitForTitle(base::ASCIIToUTF16("FAIL")); |
+ : ws_server_(net::SpawnedTestServer::TYPE_WS, |
+ net::SpawnedTestServer::kLocalhost, |
+ net::GetWebSocketTestDataDirectory()), |
+ wss_server_(net::SpawnedTestServer::TYPE_WSS, |
+ SSLOptions(SSLOptions::CERT_OK), |
+ net::GetWebSocketTestDataDirectory()) { |
} |
- virtual void CleanUpOnMainThread() OVERRIDE { watcher_.reset(); } |
- |
- std::string WaitAndGetTitle() { |
- return base::UTF16ToUTF8(watcher_->WaitAndGetTitle()); |
- } |
- |
+ protected: |
net::SpawnedTestServer ws_server_; |
net::SpawnedTestServer wss_server_; |
private: |
typedef net::SpawnedTestServer::SSLOptions SSLOptions; |
- scoped_ptr<content::TitleWatcher> watcher_; |
DISALLOW_COPY_AND_ASSIGN(WebSocketBrowserTest); |
}; |
-// Framework for tests using the connect_to.html page served by a separate HTTP |
-// server. |
-class WebSocketBrowserConnectToTest : public WebSocketBrowserTest { |
- protected: |
- WebSocketBrowserConnectToTest() |
- : http_server_(net::SpawnedTestServer::TYPE_HTTP, |
- net::SpawnedTestServer::kLocalhost, |
- net::GetWebSocketTestDataDirectory()) {} |
- |
- // The title watcher and HTTP server are set up automatically by the test |
- // framework. Each test case still needs to configure and start the |
- // WebSocket server(s) it needs. |
- virtual void SetUpOnMainThread() OVERRIDE { |
- WebSocketBrowserTest::SetUpOnMainThread(); |
- ASSERT_TRUE(http_server_.StartInBackground()); |
- } |
- |
- // Supply a ws: or wss: URL to connect to. |
- void ConnectTo(GURL url) { |
- ASSERT_TRUE(http_server_.BlockUntilStarted()); |
- std::string query("url=" + url.spec()); |
- GURL::Replacements replacements; |
- replacements.SetQueryStr(query); |
- ui_test_utils::NavigateToURL(browser(), |
- http_server_.GetURL("files/connect_to.html") |
- .ReplaceComponents(replacements)); |
- } |
- |
- private: |
- net::SpawnedTestServer http_server_; |
-}; |
- |
-// Automatically fill in any login prompts that appear with the supplied |
-// credentials. |
-class AutoLogin : public content::NotificationObserver { |
- public: |
- AutoLogin(const std::string& username, |
- const std::string& password, |
- content::NavigationController* navigation_controller) |
- : username_(base::UTF8ToUTF16(username)), |
- password_(base::UTF8ToUTF16(password)), |
- logged_in_(false) { |
- registrar_.Add( |
- this, |
- chrome::NOTIFICATION_AUTH_NEEDED, |
- content::Source<content::NavigationController>(navigation_controller)); |
- } |
- |
- // NotificationObserver implementation |
- virtual void Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) OVERRIDE { |
- DCHECK_EQ(chrome::NOTIFICATION_AUTH_NEEDED, type); |
- scoped_refptr<LoginHandler> login_handler = |
- content::Details<LoginNotificationDetails>(details)->handler(); |
- login_handler->SetAuth(username_, password_); |
- logged_in_ = true; |
- } |
- |
- bool logged_in() const { return logged_in_; } |
- |
- private: |
- const base::string16 username_; |
- const base::string16 password_; |
- bool logged_in_; |
- |
- content::NotificationRegistrar registrar_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AutoLogin); |
-}; |
- |
// Test that the browser can handle a WebSocket frame split into multiple TCP |
// segments. |
IN_PROC_BROWSER_TEST_F(WebSocketBrowserTest, WebSocketSplitSegments) { |
// Launch a WebSocket server. |
ASSERT_TRUE(ws_server_.Start()); |
+ // Setup page title observer. |
+ content::WebContents* tab = |
+ browser()->tab_strip_model()->GetActiveWebContents(); |
+ content::TitleWatcher watcher(tab, base::ASCIIToUTF16("PASS")); |
+ watcher.AlsoWaitForTitle(base::ASCIIToUTF16("FAIL")); |
+ |
// Visit a HTTP page for testing. |
std::string scheme("http"); |
GURL::Replacements replacements; |
@@ -146,13 +56,20 @@ |
ws_server_.GetURL( |
"split_packet_check.html").ReplaceComponents(replacements)); |
- EXPECT_EQ("PASS", WaitAndGetTitle()); |
+ const base::string16 result = watcher.WaitAndGetTitle(); |
+ EXPECT_TRUE(EqualsASCII(result, "PASS")); |
} |
IN_PROC_BROWSER_TEST_F(WebSocketBrowserTest, SecureWebSocketSplitRecords) { |
// Launch a secure WebSocket server. |
ASSERT_TRUE(wss_server_.Start()); |
+ // Setup page title observer. |
+ content::WebContents* tab = |
+ browser()->tab_strip_model()->GetActiveWebContents(); |
+ content::TitleWatcher watcher(tab, base::ASCIIToUTF16("PASS")); |
+ watcher.AlsoWaitForTitle(base::ASCIIToUTF16("FAIL")); |
+ |
// Visit a HTTPS page for testing. |
std::string scheme("https"); |
GURL::Replacements replacements; |
@@ -162,101 +79,8 @@ |
wss_server_.GetURL( |
"split_packet_check.html").ReplaceComponents(replacements)); |
- EXPECT_EQ("PASS", WaitAndGetTitle()); |
+ const base::string16 result = watcher.WaitAndGetTitle(); |
+ EXPECT_TRUE(EqualsASCII(result, "PASS")); |
} |
-IN_PROC_BROWSER_TEST_F(WebSocketBrowserTest, WebSocketBasicAuthInHTTPURL) { |
- // Launch a basic-auth-protected WebSocket server. |
- ws_server_.set_websocket_basic_auth(true); |
- ASSERT_TRUE(ws_server_.Start()); |
- |
- // Visit a HTTP page for testing. |
- std::string scheme("http"); |
- GURL::Replacements replacements; |
- replacements.SetSchemeStr(scheme); |
- ui_test_utils::NavigateToURL( |
- browser(), |
- ws_server_.GetURLWithUserAndPassword("connect_check.html", "test", "test") |
- .ReplaceComponents(replacements)); |
- |
- EXPECT_EQ("PASS", WaitAndGetTitle()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(WebSocketBrowserTest, WebSocketBasicAuthInHTTPSURL) { |
- // Launch a basic-auth-protected secure WebSocket server. |
- wss_server_.set_websocket_basic_auth(true); |
- ASSERT_TRUE(wss_server_.Start()); |
- |
- // Visit a HTTPS page for testing. |
- std::string scheme("https"); |
- GURL::Replacements replacements; |
- replacements.SetSchemeStr(scheme); |
- ui_test_utils::NavigateToURL( |
- browser(), |
- wss_server_.GetURLWithUserAndPassword( |
- "connect_check.html", "test", "test") |
- .ReplaceComponents(replacements)); |
- |
- EXPECT_EQ("PASS", WaitAndGetTitle()); |
-} |
- |
-// This test verifies that login details entered by the user into the login |
-// prompt to authenticate the main page are re-used for WebSockets from the same |
-// origin. |
-IN_PROC_BROWSER_TEST_F(WebSocketBrowserTest, WebSocketBasicAuthPrompt) { |
- // Launch a basic-auth-protected WebSocket server. |
- ws_server_.set_websocket_basic_auth(true); |
- ASSERT_TRUE(ws_server_.Start()); |
- |
- content::NavigationController* navigation_controller = |
- &browser()->tab_strip_model()->GetActiveWebContents()->GetController(); |
- AutoLogin auto_login("test", "test", navigation_controller); |
- |
- // Visit a HTTP page for testing. |
- std::string scheme("http"); |
- GURL::Replacements replacements; |
- replacements.SetSchemeStr(scheme); |
- ui_test_utils::NavigateToURL( |
- browser(), |
- ws_server_.GetURL("connect_check.html").ReplaceComponents(replacements)); |
- |
- EXPECT_TRUE(auto_login.logged_in()); |
- EXPECT_EQ("PASS", WaitAndGetTitle()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(WebSocketBrowserConnectToTest, |
- WebSocketBasicAuthInWSURL) { |
- // Launch a basic-auth-protected WebSocket server. |
- ws_server_.set_websocket_basic_auth(true); |
- ASSERT_TRUE(ws_server_.Start()); |
- |
- ConnectTo(ws_server_.GetURLWithUserAndPassword( |
- "echo-with-no-extension", "test", "test")); |
- |
- EXPECT_EQ("PASS", WaitAndGetTitle()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(WebSocketBrowserConnectToTest, |
- WebSocketBasicAuthInWSURLBadCreds) { |
- // Launch a basic-auth-protected WebSocket server. |
- ws_server_.set_websocket_basic_auth(true); |
- ASSERT_TRUE(ws_server_.Start()); |
- |
- ConnectTo(ws_server_.GetURLWithUserAndPassword( |
- "echo-with-no-extension", "wrong-user", "wrong-password")); |
- |
- EXPECT_EQ("FAIL", WaitAndGetTitle()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(WebSocketBrowserConnectToTest, |
- WebSocketBasicAuthNoCreds) { |
- // Launch a basic-auth-protected WebSocket server. |
- ws_server_.set_websocket_basic_auth(true); |
- ASSERT_TRUE(ws_server_.Start()); |
- |
- ConnectTo(ws_server_.GetURL("echo-with-no-extension")); |
- |
- EXPECT_EQ("FAIL", WaitAndGetTitle()); |
-} |
- |
} // namespace |