Option network websocket disable

master
Fedor 2019-03-12 20:07:47 +03:00
parent bfa5bc3fcb
commit 6cc9f5845f
3 changed files with 19 additions and 1 deletions

View File

@ -960,6 +960,11 @@ WebSocket::Constructor(const GlobalObject& aGlobal,
const nsAString& aUrl, const nsAString& aUrl,
ErrorResult& aRv) ErrorResult& aRv)
{ {
if (!PrefEnabled()) {
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return nullptr;
}
Sequence<nsString> protocols; Sequence<nsString> protocols;
return WebSocket::ConstructorCommon(aGlobal, aUrl, protocols, nullptr, return WebSocket::ConstructorCommon(aGlobal, aUrl, protocols, nullptr,
EmptyCString(), aRv); EmptyCString(), aRv);
@ -1483,6 +1488,11 @@ WebSocketImpl::Init(JSContext* aCx,
AssertIsOnMainThread(); AssertIsOnMainThread();
MOZ_ASSERT(aPrincipal); MOZ_ASSERT(aPrincipal);
if (!WebSocket::PrefEnabled()) {
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return;
}
mService = WebSocketEventService::GetOrCreate(); mService = WebSocketEventService::GetOrCreate();
// We need to keep the implementation alive in case the init disconnects it // We need to keep the implementation alive in case the init disconnects it
@ -2054,6 +2064,11 @@ WebSocket::CreateAndDispatchCloseEvent(bool aWasClean,
return DispatchDOMEvent(nullptr, event, nullptr, nullptr); return DispatchDOMEvent(nullptr, event, nullptr, nullptr);
} }
bool
WebSocket::PrefEnabled()
{
return Preferences::GetBool("network.websocket.enabled", true);
}
nsresult nsresult
WebSocketImpl::ParseURL(const nsAString& aURL) WebSocketImpl::ParseURL(const nsAString& aURL)
{ {

View File

@ -63,7 +63,7 @@ public:
public: // static helpers: public: // static helpers:
// Determine if preferences allow WebSocket // Determine if preferences allow WebSocket
static bool PrefEnabled(JSContext* aCx = nullptr, JSObject* aGlobal = nullptr); static bool PrefEnabled();
public: // WebIDL interface: public: // WebIDL interface:

View File

@ -1646,6 +1646,9 @@ pref("network.sts.max_time_for_events_between_two_polls", 100);
pref("network.sts.max_time_for_pr_close_during_shutdown", 5000); pref("network.sts.max_time_for_pr_close_during_shutdown", 5000);
// </http> // </http>
// <ws>: WebSocket
pref("network.websocket.enabled", true);
// 2147483647 == PR_INT32_MAX == ~2 GB // 2147483647 == PR_INT32_MAX == ~2 GB
pref("network.websocket.max-message-size", 2147483647); pref("network.websocket.max-message-size", 2147483647);