Chromium Code Reviews| Index: chrome/browser/subresource_filter/subresource_filter_browsertest.cc |
| diff --git a/chrome/browser/subresource_filter/subresource_filter_browsertest.cc b/chrome/browser/subresource_filter/subresource_filter_browsertest.cc |
| index 38c6a7f5f14a83b040cca42d4bc314c139f9f659..fea307d2d16f04bbfc06edb868acb47e5b67c90b 100644 |
| --- a/chrome/browser/subresource_filter/subresource_filter_browsertest.cc |
| +++ b/chrome/browser/subresource_filter/subresource_filter_browsertest.cc |
| @@ -14,6 +14,7 @@ |
| #include "base/macros.h" |
| #include "base/path_service.h" |
| #include "base/strings/string_piece.h" |
| +#include "base/strings/stringprintf.h" |
| #include "base/test/histogram_tester.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/metrics/subprocess_metrics_provider.h" |
| @@ -47,6 +48,8 @@ |
| #include "content/public/test/test_utils.h" |
| #include "net/dns/mock_host_resolver.h" |
| #include "net/test/embedded_test_server/embedded_test_server.h" |
| +#include "net/test/spawned_test_server/spawned_test_server.h" |
| +#include "net/test/test_data_directory.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| @@ -373,6 +376,39 @@ class SubresourceFilterWhitelistSiteOnReloadBrowserTest |
| : SubresourceFilterBrowserTestImpl(false, true) {} |
| }; |
| +enum WebSocketCreationPolicy { |
| + IN_MAIN_FRAME, |
| + IN_WORKER, |
| +}; |
| +class SubresourceFilterWebSocketBrowserTest |
| + : public SubresourceFilterBrowserTestImpl, |
| + public ::testing::WithParamInterface<WebSocketCreationPolicy> { |
| + public: |
| + SubresourceFilterWebSocketBrowserTest() |
| + : SubresourceFilterBrowserTestImpl(false, false) {} |
| + |
| + void SetUpOnMainThread() override { |
| + SubresourceFilterBrowserTestImpl::SetUpOnMainThread(); |
| + websocket_test_server_ = base::MakeUnique<net::SpawnedTestServer>( |
| + net::SpawnedTestServer::TYPE_WS, net::SpawnedTestServer::kLocalhost, |
| + net::GetWebSocketTestDataDirectory()); |
| + ASSERT_TRUE(websocket_test_server_->Start()); |
| + } |
| + |
| + net::SpawnedTestServer* websocket_test_server() { |
| + return websocket_test_server_.get(); |
| + } |
| + |
| + GURL GetWebSocketUrl(const std::string& path) { |
| + GURL::Replacements replacements; |
| + replacements.SetSchemeStr("ws"); |
| + return websocket_test_server_->GetURL(path).ReplaceComponents(replacements); |
| + } |
| + |
| + private: |
| + std::unique_ptr<net::SpawnedTestServer> websocket_test_server_; |
| +}; |
| + |
| // Tests ----------------------------------------------------------------------- |
| IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest, MainFrameActivation) { |
| @@ -646,6 +682,68 @@ IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest, |
| std::vector<const char*>{"b", "d"}, {false, true}); |
| } |
| +IN_PROC_BROWSER_TEST_P(SubresourceFilterWebSocketBrowserTest, BlockWebSocket) { |
|
engedy
2017/03/06 14:12:46
Have you considered implementing some of these (al
Charlie Harrison
2017/03/06 14:48:23
Yeah I have a layout test in the follow up CL.
|
| + GURL url(GetTestUrl( |
| + base::StringPrintf("subresource_filter/page_with_websocket.html?%s", |
| + GetParam() == IN_WORKER ? "inWorker" : ""))); |
| + GURL websocket_url(GetWebSocketUrl("echo-with-no-extension")); |
| + ConfigureAsPhishingURL(url); |
| + ASSERT_NO_FATAL_FAILURE( |
| + SetRulesetToDisallowURLsWithPathSuffix("echo-with-no-extension")); |
| + ui_test_utils::NavigateToURL(browser(), url); |
| + |
| + bool websocket_connection_succeeded = false; |
| + EXPECT_TRUE(content::ExecuteScriptAndExtractBool( |
|
engedy
2017/03/06 16:31:01
nit: To avoid repeating this, let's make this a he
Charlie Harrison
2017/03/06 19:22:11
Done.
|
| + browser()->tab_strip_model()->GetActiveWebContents(), |
| + base::StringPrintf("connectWebSocket('%s');", |
| + websocket_url.spec().c_str()), |
| + &websocket_connection_succeeded)); |
| + EXPECT_FALSE(websocket_connection_succeeded); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_P(SubresourceFilterWebSocketBrowserTest, |
| + DoNotBlockWebSocketNoActivatedFrame) { |
| + GURL url(GetTestUrl( |
| + base::StringPrintf("subresource_filter/page_with_websocket.html?%s", |
| + GetParam() == IN_WORKER ? "inWorker" : ""))); |
| + GURL websocket_url(GetWebSocketUrl("echo-with-no-extension")); |
| + ASSERT_NO_FATAL_FAILURE( |
| + SetRulesetToDisallowURLsWithPathSuffix("echo-with-no-extension")); |
| + ui_test_utils::NavigateToURL(browser(), url); |
| + |
| + bool websocket_connection_succeeded = false; |
| + EXPECT_TRUE(content::ExecuteScriptAndExtractBool( |
| + browser()->tab_strip_model()->GetActiveWebContents(), |
| + base::StringPrintf("connectWebSocket('%s');", |
| + websocket_url.spec().c_str()), |
| + &websocket_connection_succeeded)); |
| + EXPECT_TRUE(websocket_connection_succeeded); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_P(SubresourceFilterWebSocketBrowserTest, |
| + DoNotBlockWebSocketInActivatedFrameWithNoRule) { |
| + GURL url(GetTestUrl( |
| + base::StringPrintf("subresource_filter/page_with_websocket.html?%s", |
| + GetParam() == IN_WORKER ? "inWorker" : ""))); |
| + GURL websocket_url(GetWebSocketUrl("echo-with-no-extension")); |
| + ConfigureAsPhishingURL(url); |
| + ui_test_utils::NavigateToURL(browser(), url); |
| + |
| + bool websocket_connection_succeeded = false; |
| + EXPECT_TRUE(content::ExecuteScriptAndExtractBool( |
| + browser()->tab_strip_model()->GetActiveWebContents(), |
| + base::StringPrintf("connectWebSocket('%s');", |
| + websocket_url.spec().c_str()), |
| + &websocket_connection_succeeded)); |
| + EXPECT_TRUE(websocket_connection_succeeded); |
| +} |
| + |
| +INSTANTIATE_TEST_CASE_P( |
| + /* no prefix */, |
| + SubresourceFilterWebSocketBrowserTest, |
| + ::testing::Values(WebSocketCreationPolicy::IN_WORKER, |
| + WebSocketCreationPolicy::IN_MAIN_FRAME)); |
| + |
| // Tests checking how histograms are recorded. --------------------------------- |
| namespace { |