Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(604)

Unified Diff: chrome/browser/subresource_filter/subresource_filter_browsertest.cc

Issue 2714573002: Enable websocket filtering via SubresourceFilter (Closed)
Patch Set: sync to #455176 Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..a31489eb968af42b49d733345c5e23f8c424b24d 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"
@@ -255,8 +258,8 @@ class SubresourceFilterBrowserTestImpl : public InProcessBrowserTest {
ASSERT_TRUE(embedded_test_server()->Start());
}
- GURL GetTestUrl(const std::string& path) {
- return embedded_test_server()->base_url().Resolve(path);
+ GURL GetTestUrl(const std::string& relative_url) {
+ return embedded_test_server()->base_url().Resolve(relative_url);
}
void ConfigureAsPhishingURL(const GURL& url) {
@@ -373,6 +376,49 @@ 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);
+ }
+
+ void CreateWebSocketAndExpectResult(const GURL& url,
+ bool expect_connection_success) {
+ bool websocket_connection_succeeded = false;
+ EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
+ browser()->tab_strip_model()->GetActiveWebContents(),
+ base::StringPrintf("connectWebSocket('%s');", url.spec().c_str()),
+ &websocket_connection_succeeded));
+ EXPECT_EQ(expect_connection_success, websocket_connection_succeeded);
+ }
+
+ private:
+ std::unique_ptr<net::SpawnedTestServer> websocket_test_server_;
+};
+
// Tests -----------------------------------------------------------------------
IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest, MainFrameActivation) {
@@ -646,6 +692,52 @@ IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest,
std::vector<const char*>{"b", "d"}, {false, true});
}
+IN_PROC_BROWSER_TEST_P(SubresourceFilterWebSocketBrowserTest, BlockWebSocket) {
+ 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);
+ CreateWebSocketAndExpectResult(websocket_url,
+ false /* expect_connection_success */);
+}
+
+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);
+
+ CreateWebSocketAndExpectResult(websocket_url,
+ true /* expect_connection_success */);
+}
+
+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);
+
+ CreateWebSocketAndExpectResult(websocket_url,
+ true /* expect_connection_success */);
+}
+
+INSTANTIATE_TEST_CASE_P(
+ /* no prefix */,
+ SubresourceFilterWebSocketBrowserTest,
+ ::testing::Values(WebSocketCreationPolicy::IN_WORKER,
+ WebSocketCreationPolicy::IN_MAIN_FRAME));
+
// Tests checking how histograms are recorded. ---------------------------------
namespace {
« no previous file with comments | « chrome/browser/subresource_filter/OWNERS ('k') | chrome/test/data/subresource_filter/page_with_websocket.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698