Don't impose WebSockets limit on Extensions.

This commit is contained in:
Aleksey Khoroshilov
2022-03-15 14:45:19 +07:00
parent 0c08e62f93
commit d653a78a43
2 changed files with 37 additions and 1 deletions
@@ -15,12 +15,19 @@
#include "content/public/test/browser_test.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/content_mock_cert_verifier.h"
#include "extensions/buildflags/buildflags.h"
#include "net/dns/mock_host_resolver.h"
#include "net/test/spawned_test_server/spawned_test_server.h"
#include "net/test/test_data_directory.h"
#include "third_party/blink/public/common/features.h"
#include "url/gurl.h"
#if BUILDFLAG(ENABLE_EXTENSIONS)
#include "chrome/browser/extensions/chrome_test_extension_loader.h"
#include "extensions/common/extension.h"
#include "extensions/test/test_extension_dir.h"
#endif // BUILDFLAG(ENABLE_EXTENSIONS)
namespace {
const int kWebSocketsPoolLimit = 10;
@@ -302,6 +309,31 @@ IN_PROC_BROWSER_TEST_F(WebSocketsPoolLimitBrowserTest,
OpenWebSockets(a_com_rfh, kWsOpenInSwScript, kWebSocketsPoolLimit + 5);
}
#if BUILDFLAG(ENABLE_EXTENSIONS)
IN_PROC_BROWSER_TEST_F(WebSocketsPoolLimitBrowserTest,
PoolIsNotLimitedForExtensions) {
extensions::TestExtensionDir test_extension_dir;
test_extension_dir.WriteManifest(R"({
"name": "Test",
"manifest_version": 2,
"version": "0.1",
"permissions": ["webRequest", "webRequestBlocking", "*://a.com/*"],
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
})");
test_extension_dir.WriteFile(FILE_PATH_LITERAL("empty.html"), "");
extensions::ChromeTestExtensionLoader extension_loader(browser()->profile());
scoped_refptr<const extensions::Extension> extension =
extension_loader.LoadExtension(test_extension_dir.UnpackedPath());
const GURL url = extension->GetResourceURL("/empty.html");
auto* extension_rfh = ui_test_utils::NavigateToURLWithDisposition(
browser(), url, WindowOpenDisposition::NEW_FOREGROUND_TAB,
ui_test_utils::BROWSER_TEST_WAIT_FOR_LOAD_STOP);
ASSERT_TRUE(extension_rfh);
OpenWebSockets(extension_rfh, kWsOpenScript, kWebSocketsPoolLimit + 5);
}
#endif // BUILDFLAG(ENABLE_EXTENSIONS)
class WebSocketsPoolLimitDisabledBrowserTest
: public WebSocketsPoolLimitBrowserTest {
public:
@@ -6,6 +6,7 @@
#include "third_party/blink/renderer/modules/websockets/websocket_channel_impl.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/common/scheme_registry.h"
#include "third_party/blink/public/platform/web_content_settings_client.h"
#define WebSocketChannelImpl WebSocketChannelImpl_ChromiumImpl
@@ -39,7 +40,10 @@ bool WebSocketChannelImpl::ShouldDisallowConnection(const KURL& url) {
if (base::FeatureList::IsEnabled(blink::features::kRestrictWebSocketsPool)) {
if (blink::WebContentSettingsClient* settings =
brave::GetContentSettingsClientFor(execution_context_)) {
if (settings->GetBraveFarblingLevel() != BraveFarblingLevel::OFF) {
const bool is_extension = CommonSchemeRegistry::IsExtensionScheme(
execution_context_->GetSecurityOrigin()->Protocol().Ascii());
if (!is_extension &&
settings->GetBraveFarblingLevel() != BraveFarblingLevel::OFF) {
websocket_in_use_tracker_ =
ResourcePoolLimiter::GetInstance().IssueResourceInUseTracker(
execution_context_,