summaryrefslogtreecommitdiff
path: root/chromium/net/websockets/websocket_stream_cookie_test.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-06-18 14:10:49 +0200
committerOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2015-06-18 13:53:24 +0000
commit813fbf95af77a531c57a8c497345ad2c61d475b3 (patch)
tree821b2c8de8365f21b6c9ba17a236fb3006a1d506 /chromium/net/websockets/websocket_stream_cookie_test.cc
parentaf6588f8d723931a298c995fa97259bb7f7deb55 (diff)
downloadqtwebengine-chromium-813fbf95af77a531c57a8c497345ad2c61d475b3.tar.gz
BASELINE: Update chromium to 44.0.2403.47
Change-Id: Ie056fedba95cf5e5c76b30c4b2c80fca4764aa2f Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Diffstat (limited to 'chromium/net/websockets/websocket_stream_cookie_test.cc')
-rw-r--r--chromium/net/websockets/websocket_stream_cookie_test.cc503
1 files changed, 503 insertions, 0 deletions
diff --git a/chromium/net/websockets/websocket_stream_cookie_test.cc b/chromium/net/websockets/websocket_stream_cookie_test.cc
new file mode 100644
index 00000000000..9b819b5260b
--- /dev/null
+++ b/chromium/net/websockets/websocket_stream_cookie_test.cc
@@ -0,0 +1,503 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+
+#include "base/callback_forward.h"
+#include "base/memory/weak_ptr.h"
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
+#include "base/thread_task_runner_handle.h"
+#include "net/cookies/cookie_store.h"
+#include "net/socket/socket_test_util.h"
+#include "net/websockets/websocket_stream_create_test_base.h"
+#include "net/websockets/websocket_test_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+namespace net {
+namespace {
+
+using ::testing::TestWithParam;
+using ::testing::ValuesIn;
+
+const char kNoCookieHeader[] = "";
+
+class TestBase : public WebSocketStreamCreateTestBase {
+ public:
+ void CreateAndConnect(const GURL& url,
+ const std::string& origin,
+ const std::string& cookie_header,
+ const std::string& response_body) {
+ // We assume cookie_header ends with CRLF if not empty, as
+ // WebSocketStandardRequestWithCookies requires. Use AddCRLFIfNotEmpty
+ // in a call site.
+ CHECK(cookie_header.empty() || EndsWith(cookie_header, "\r\n", true));
+
+ url_request_context_host_.SetExpectations(
+ WebSocketStandardRequestWithCookies(url.path(), url.host(), origin,
+ cookie_header, std::string()),
+ response_body);
+ CreateAndConnectStream(url.spec(), NoSubProtocols(), origin, nullptr);
+ }
+
+ std::string AddCRLFIfNotEmpty(const std::string& s) {
+ return s.empty() ? s : s + "\r\n";
+ }
+};
+
+struct ClientUseCookieParameter {
+ // The URL for the WebSocket connection.
+ const char* const url;
+ // The URL for the previously set cookies.
+ const char* const cookie_url;
+ // The previously set cookies contents.
+ const char* const cookie_line;
+ // The Cookie: HTTP header expected to appear in the WS request. An empty
+ // string means there is no Cookie: header.
+ const char* const cookie_header;
+};
+
+class WebSocketStreamClientUseCookieTest
+ : public TestBase,
+ public TestWithParam<ClientUseCookieParameter> {
+ public:
+ ~WebSocketStreamClientUseCookieTest() override {
+ // Permit any endpoint locks to be released.
+ stream_request_.reset();
+ stream_.reset();
+ base::RunLoop().RunUntilIdle();
+ }
+
+ static void SetCookieHelperFunction(const base::Closure& task,
+ base::WeakPtr<bool> weak_is_called,
+ base::WeakPtr<bool> weak_result,
+ bool success) {
+ *weak_is_called = true;
+ *weak_result = success;
+ base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, task);
+ }
+};
+
+struct ServerSetCookieParameter {
+ // The URL for the WebSocket connection.
+ const char* const url;
+ // The URL used to query cookies after the response received.
+ const char* const cookie_url;
+ // The cookies expected to appear for |cookie_url| inquiry.
+ const char* const cookie_line;
+ // The Set-Cookie: HTTP header attached to the response.
+ const char* const cookie_header;
+};
+
+class WebSocketStreamServerSetCookieTest
+ : public TestBase,
+ public TestWithParam<ServerSetCookieParameter> {
+ public:
+ ~WebSocketStreamServerSetCookieTest() override {
+ // Permit any endpoint locks to be released.
+ stream_request_.reset();
+ stream_.reset();
+ base::RunLoop().RunUntilIdle();
+ }
+
+ static void GetCookiesHelperFunction(const base::Closure& task,
+ base::WeakPtr<bool> weak_is_called,
+ base::WeakPtr<std::string> weak_result,
+ const std::string& cookies) {
+ *weak_is_called = true;
+ *weak_result = cookies;
+ base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, task);
+ }
+};
+
+TEST_P(WebSocketStreamClientUseCookieTest, ClientUseCookie) {
+ // For wss tests.
+ ssl_data_.push_back(new SSLSocketDataProvider(ASYNC, OK));
+
+ CookieStore* store =
+ url_request_context_host_.GetURLRequestContext()->cookie_store();
+
+ const GURL url(GetParam().url);
+ const GURL cookie_url(GetParam().cookie_url);
+ const std::string origin("http://www.example.com");
+ const std::string cookie_line(GetParam().cookie_line);
+ const std::string cookie_header(AddCRLFIfNotEmpty(GetParam().cookie_header));
+
+ bool is_called = false;
+ bool set_cookie_result = false;
+ base::WeakPtrFactory<bool> weak_is_called(&is_called);
+ base::WeakPtrFactory<bool> weak_set_cookie_result(&set_cookie_result);
+
+ base::RunLoop run_loop;
+ store->SetCookieWithOptionsAsync(
+ cookie_url, cookie_line, CookieOptions(),
+ base::Bind(&SetCookieHelperFunction, run_loop.QuitClosure(),
+ weak_is_called.GetWeakPtr(),
+ weak_set_cookie_result.GetWeakPtr()));
+ run_loop.Run();
+ ASSERT_TRUE(is_called);
+ ASSERT_TRUE(set_cookie_result);
+
+ CreateAndConnect(url, origin, cookie_header, WebSocketStandardResponse(""));
+ WaitUntilConnectDone();
+ EXPECT_FALSE(has_failed());
+}
+
+TEST_P(WebSocketStreamServerSetCookieTest, ServerSetCookie) {
+ // For wss tests.
+ ssl_data_.push_back(new SSLSocketDataProvider(ASYNC, OK));
+
+ const GURL url(GetParam().url);
+ const GURL cookie_url(GetParam().cookie_url);
+ const std::string origin("http://www.example.com");
+ const std::string cookie_line(GetParam().cookie_line);
+ const std::string cookie_header(AddCRLFIfNotEmpty(GetParam().cookie_header));
+
+ const std::string response = base::StringPrintf(
+ "HTTP/1.1 101 Switching Protocols\r\n"
+ "Upgrade: websocket\r\n"
+ "Connection: Upgrade\r\n"
+ "%s"
+ "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
+ "\r\n",
+ cookie_header.c_str());
+
+ CookieStore* store =
+ url_request_context_host_.GetURLRequestContext()->cookie_store();
+
+ CreateAndConnect(url, origin, "", response);
+ WaitUntilConnectDone();
+ EXPECT_FALSE(has_failed());
+
+ bool is_called = false;
+ std::string get_cookies_result;
+ base::WeakPtrFactory<bool> weak_is_called(&is_called);
+ base::WeakPtrFactory<std::string> weak_get_cookies_result(
+ &get_cookies_result);
+ base::RunLoop run_loop;
+ store->GetCookiesWithOptionsAsync(
+ cookie_url, CookieOptions(),
+ base::Bind(&GetCookiesHelperFunction, run_loop.QuitClosure(),
+ weak_is_called.GetWeakPtr(),
+ weak_get_cookies_result.GetWeakPtr()));
+ run_loop.Run();
+ EXPECT_TRUE(is_called);
+ EXPECT_EQ(cookie_line, get_cookies_result);
+}
+
+// Test parameters definitions follow...
+
+const ClientUseCookieParameter kClientUseCookieParameters[] = {
+ // Non-secure cookies for ws
+ {"ws://www.example.com",
+ "http://www.example.com",
+ "test-cookie",
+ "Cookie: test-cookie"},
+
+ {"ws://www.example.com",
+ "https://www.example.com",
+ "test-cookie",
+ "Cookie: test-cookie"},
+
+ {"ws://www.example.com",
+ "ws://www.example.com",
+ "test-cookie",
+ "Cookie: test-cookie"},
+
+ {"ws://www.example.com",
+ "wss://www.example.com",
+ "test-cookie",
+ "Cookie: test-cookie"},
+
+ // Non-secure cookies for wss
+ {"wss://www.example.com",
+ "http://www.example.com",
+ "test-cookie",
+ "Cookie: test-cookie"},
+
+ {"wss://www.example.com",
+ "https://www.example.com",
+ "test-cookie",
+ "Cookie: test-cookie"},
+
+ {"wss://www.example.com",
+ "ws://www.example.com",
+ "test-cookie",
+ "Cookie: test-cookie"},
+
+ {"wss://www.example.com",
+ "wss://www.example.com",
+ "test-cookie",
+ "Cookie: test-cookie"},
+
+ // Secure-cookies for ws
+ {"ws://www.example.com",
+ "https://www.example.com",
+ "test-cookie; secure",
+ kNoCookieHeader},
+
+ {"ws://www.example.com",
+ "wss://www.example.com",
+ "test-cookie; secure",
+ kNoCookieHeader},
+
+ // Secure-cookies for wss
+ {"wss://www.example.com",
+ "https://www.example.com",
+ "test-cookie; secure",
+ "Cookie: test-cookie"},
+
+ {"wss://www.example.com",
+ "wss://www.example.com",
+ "test-cookie; secure",
+ "Cookie: test-cookie"},
+
+ // Non-secure cookies for ws (sharing domain)
+ {"ws://www.example.com",
+ "http://www2.example.com",
+ "test-cookie; Domain=example.com",
+ "Cookie: test-cookie"},
+
+ {"ws://www.example.com",
+ "https://www2.example.com",
+ "test-cookie; Domain=example.com",
+ "Cookie: test-cookie"},
+
+ {"ws://www.example.com",
+ "ws://www2.example.com",
+ "test-cookie; Domain=example.com",
+ "Cookie: test-cookie"},
+
+ {"ws://www.example.com",
+ "wss://www2.example.com",
+ "test-cookie; Domain=example.com",
+ "Cookie: test-cookie"},
+
+ // Non-secure cookies for wss (sharing domain)
+ {"wss://www.example.com",
+ "http://www2.example.com",
+ "test-cookie; Domain=example.com",
+ "Cookie: test-cookie"},
+
+ {"wss://www.example.com",
+ "https://www2.example.com",
+ "test-cookie; Domain=example.com",
+ "Cookie: test-cookie"},
+
+ {"wss://www.example.com",
+ "ws://www2.example.com",
+ "test-cookie; Domain=example.com",
+ "Cookie: test-cookie"},
+
+ {"wss://www.example.com",
+ "wss://www2.example.com",
+ "test-cookie; Domain=example.com",
+ "Cookie: test-cookie"},
+
+ // Secure-cookies for ws (sharing domain)
+ {"ws://www.example.com",
+ "https://www2.example.com",
+ "test-cookie; Domain=example.com; secure",
+ kNoCookieHeader},
+
+ {"ws://www.example.com",
+ "wss://www2.example.com",
+ "test-cookie; Domain=example.com; secure",
+ kNoCookieHeader},
+
+ // Secure-cookies for wss (sharing domain)
+ {"wss://www.example.com",
+ "https://www2.example.com",
+ "test-cookie; Domain=example.com; secure",
+ "Cookie: test-cookie"},
+
+ {"wss://www.example.com",
+ "wss://www2.example.com",
+ "test-cookie; Domain=example.com; secure",
+ "Cookie: test-cookie"},
+
+ // Non-matching cookies for ws
+ {"ws://www.example.com",
+ "http://www2.example.com",
+ "test-cookie",
+ kNoCookieHeader},
+
+ {"ws://www.example.com",
+ "https://www2.example.com",
+ "test-cookie",
+ kNoCookieHeader},
+
+ {"ws://www.example.com",
+ "ws://www2.example.com",
+ "test-cookie",
+ kNoCookieHeader},
+
+ {"ws://www.example.com",
+ "wss://www2.example.com",
+ "test-cookie",
+ kNoCookieHeader},
+
+ // Non-matching cookies for wss
+ {"wss://www.example.com",
+ "http://www2.example.com",
+ "test-cookie",
+ kNoCookieHeader},
+
+ {"wss://www.example.com",
+ "https://www2.example.com",
+ "test-cookie",
+ kNoCookieHeader},
+
+ {"wss://www.example.com",
+ "ws://www2.example.com",
+ "test-cookie",
+ kNoCookieHeader},
+
+ {"wss://www.example.com",
+ "wss://www2.example.com",
+ "test-cookie",
+ kNoCookieHeader},
+};
+
+INSTANTIATE_TEST_CASE_P(WebSocketStreamClientUseCookieTest,
+ WebSocketStreamClientUseCookieTest,
+ ValuesIn(kClientUseCookieParameters));
+
+const ServerSetCookieParameter kServerSetCookieParameters[] = {
+ // Cookies coming from ws
+ {"ws://www.example.com",
+ "http://www.example.com",
+ "test-cookie",
+ "Set-Cookie: test-cookie"},
+
+ {"ws://www.example.com",
+ "https://www.example.com",
+ "test-cookie",
+ "Set-Cookie: test-cookie"},
+
+ {"ws://www.example.com",
+ "ws://www.example.com",
+ "test-cookie",
+ "Set-Cookie: test-cookie"},
+
+ {"ws://www.example.com",
+ "wss://www.example.com",
+ "test-cookie",
+ "Set-Cookie: test-cookie"},
+
+ // Cookies coming from wss
+ {"wss://www.example.com",
+ "http://www.example.com",
+ "test-cookie",
+ "Set-Cookie: test-cookie"},
+
+ {"wss://www.example.com",
+ "https://www.example.com",
+ "test-cookie",
+ "Set-Cookie: test-cookie"},
+
+ {"wss://www.example.com",
+ "ws://www.example.com",
+ "test-cookie",
+ "Set-Cookie: test-cookie"},
+
+ {"wss://www.example.com",
+ "wss://www.example.com",
+ "test-cookie",
+ "Set-Cookie: test-cookie"},
+
+ // cookies coming from ws (sharing domain)
+ {"ws://www.example.com",
+ "http://www2.example.com",
+ "test-cookie",
+ "Set-Cookie: test-cookie; Domain=example.com"},
+
+ {"ws://www.example.com",
+ "https://www2.example.com",
+ "test-cookie",
+ "Set-Cookie: test-cookie; Domain=example.com"},
+
+ {"ws://www.example.com",
+ "ws://www2.example.com",
+ "test-cookie",
+ "Set-Cookie: test-cookie; Domain=example.com"},
+
+ {"ws://www.example.com",
+ "wss://www2.example.com",
+ "test-cookie",
+ "Set-Cookie: test-cookie; Domain=example.com"},
+
+ // cookies coming from wss (sharing domain)
+ {"wss://www.example.com",
+ "http://www2.example.com",
+ "test-cookie",
+ "Set-Cookie: test-cookie; Domain=example.com"},
+
+ {"wss://www.example.com",
+ "https://www2.example.com",
+ "test-cookie",
+ "Set-Cookie: test-cookie; Domain=example.com"},
+
+ {"wss://www.example.com",
+ "ws://www2.example.com",
+ "test-cookie",
+ "Set-Cookie: test-cookie; Domain=example.com"},
+
+ {"wss://www.example.com",
+ "wss://www2.example.com",
+ "test-cookie",
+ "Set-Cookie: test-cookie; Domain=example.com"},
+
+ // Non-matching cookies coming from ws
+ {"ws://www.example.com",
+ "http://www2.example.com",
+ "",
+ "Set-Cookie: test-cookie"},
+
+ {"ws://www.example.com",
+ "https://www2.example.com",
+ "",
+ "Set-Cookie: test-cookie"},
+
+ {"ws://www.example.com",
+ "ws://www2.example.com",
+ "",
+ "Set-Cookie: test-cookie"},
+
+ {"ws://www.example.com",
+ "wss://www2.example.com",
+ "",
+ "Set-Cookie: test-cookie"},
+
+ // Non-matching cookies coming from wss
+ {"wss://www.example.com",
+ "http://www2.example.com",
+ "",
+ "Set-Cookie: test-cookie"},
+
+ {"wss://www.example.com",
+ "https://www2.example.com",
+ "",
+ "Set-Cookie: test-cookie"},
+
+ {"wss://www.example.com",
+ "ws://www2.example.com",
+ "",
+ "Set-Cookie: test-cookie"},
+
+ {"wss://www.example.com",
+ "wss://www2.example.com",
+ "",
+ "Set-Cookie: test-cookie"},
+};
+
+INSTANTIATE_TEST_CASE_P(WebSocketStreamServerSetCookieTest,
+ WebSocketStreamServerSetCookieTest,
+ ValuesIn(kServerSetCookieParameters));
+
+} // namespace
+} // namespace net