mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 00:05:36 +00:00
Bug 1392411
Part 1 - Report stacks to net monitor when creating web sockets, r=bzbarsky.
--HG-- extra : histedit_source : 19a30fceb5c8073551265398287aaa8fb226a228
This commit is contained in:
parent
f828f39c0f
commit
9e70cb8a66
@ -18,6 +18,7 @@
|
|||||||
#include "mozilla/dom/nsCSPContext.h"
|
#include "mozilla/dom/nsCSPContext.h"
|
||||||
#include "mozilla/dom/nsCSPUtils.h"
|
#include "mozilla/dom/nsCSPUtils.h"
|
||||||
#include "mozilla/dom/ScriptSettings.h"
|
#include "mozilla/dom/ScriptSettings.h"
|
||||||
|
#include "mozilla/dom/SerializedStackHolder.h"
|
||||||
#include "mozilla/dom/WorkerPrivate.h"
|
#include "mozilla/dom/WorkerPrivate.h"
|
||||||
#include "mozilla/dom/WorkerRef.h"
|
#include "mozilla/dom/WorkerRef.h"
|
||||||
#include "mozilla/dom/WorkerRunnable.h"
|
#include "mozilla/dom/WorkerRunnable.h"
|
||||||
@ -124,7 +125,8 @@ class WebSocketImpl final : public nsIInterfaceRequestor,
|
|||||||
|
|
||||||
nsresult AsyncOpen(nsIPrincipal* aPrincipal, uint64_t aInnerWindowID,
|
nsresult AsyncOpen(nsIPrincipal* aPrincipal, uint64_t aInnerWindowID,
|
||||||
nsITransportProvider* aTransportProvider,
|
nsITransportProvider* aTransportProvider,
|
||||||
const nsACString& aNegotiatedExtensions);
|
const nsACString& aNegotiatedExtensions,
|
||||||
|
UniquePtr<SerializedStackHolder> aOriginStack);
|
||||||
|
|
||||||
nsresult ParseURL(const nsAString& aURL);
|
nsresult ParseURL(const nsAString& aURL);
|
||||||
nsresult InitializeConnection(nsIPrincipal* aPrincipal,
|
nsresult InitializeConnection(nsIPrincipal* aPrincipal,
|
||||||
@ -1119,11 +1121,13 @@ class ConnectRunnable final : public WebSocketMainThreadRunnable {
|
|||||||
|
|
||||||
class AsyncOpenRunnable final : public WebSocketMainThreadRunnable {
|
class AsyncOpenRunnable final : public WebSocketMainThreadRunnable {
|
||||||
public:
|
public:
|
||||||
explicit AsyncOpenRunnable(WebSocketImpl* aImpl)
|
explicit AsyncOpenRunnable(WebSocketImpl* aImpl,
|
||||||
|
UniquePtr<SerializedStackHolder> aOriginStack)
|
||||||
: WebSocketMainThreadRunnable(
|
: WebSocketMainThreadRunnable(
|
||||||
aImpl->mWorkerRef->Private(),
|
aImpl->mWorkerRef->Private(),
|
||||||
NS_LITERAL_CSTRING("WebSocket :: AsyncOpen")),
|
NS_LITERAL_CSTRING("WebSocket :: AsyncOpen")),
|
||||||
mImpl(aImpl),
|
mImpl(aImpl),
|
||||||
|
mOriginStack(std::move(aOriginStack)),
|
||||||
mErrorCode(NS_OK) {
|
mErrorCode(NS_OK) {
|
||||||
MOZ_ASSERT(mWorkerPrivate);
|
MOZ_ASSERT(mWorkerPrivate);
|
||||||
mWorkerPrivate->AssertIsOnWorkerThread();
|
mWorkerPrivate->AssertIsOnWorkerThread();
|
||||||
@ -1159,7 +1163,8 @@ class AsyncOpenRunnable final : public WebSocketMainThreadRunnable {
|
|||||||
windowID = topInner->WindowID();
|
windowID = topInner->WindowID();
|
||||||
}
|
}
|
||||||
|
|
||||||
mErrorCode = mImpl->AsyncOpen(principal, windowID, nullptr, EmptyCString());
|
mErrorCode = mImpl->AsyncOpen(principal, windowID, nullptr, EmptyCString(),
|
||||||
|
std::move(mOriginStack));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1168,7 +1173,7 @@ class AsyncOpenRunnable final : public WebSocketMainThreadRunnable {
|
|||||||
MOZ_ASSERT(aTopLevelWorkerPrivate && !aTopLevelWorkerPrivate->GetWindow());
|
MOZ_ASSERT(aTopLevelWorkerPrivate && !aTopLevelWorkerPrivate->GetWindow());
|
||||||
|
|
||||||
mErrorCode = mImpl->AsyncOpen(aTopLevelWorkerPrivate->GetPrincipal(), 0,
|
mErrorCode = mImpl->AsyncOpen(aTopLevelWorkerPrivate->GetPrincipal(), 0,
|
||||||
nullptr, EmptyCString());
|
nullptr, EmptyCString(), nullptr);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1176,6 +1181,8 @@ class AsyncOpenRunnable final : public WebSocketMainThreadRunnable {
|
|||||||
// Raw pointer. This worker runs synchronously.
|
// Raw pointer. This worker runs synchronously.
|
||||||
WebSocketImpl* mImpl;
|
WebSocketImpl* mImpl;
|
||||||
|
|
||||||
|
UniquePtr<SerializedStackHolder> mOriginStack;
|
||||||
|
|
||||||
nsresult mErrorCode;
|
nsresult mErrorCode;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1355,6 +1362,9 @@ already_AddRefed<WebSocket> WebSocket::ConstructorCommon(
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UniquePtr<SerializedStackHolder> stack =
|
||||||
|
GetCurrentStackForNetMonitor(aGlobal.Context());
|
||||||
|
|
||||||
if (NS_IsMainThread()) {
|
if (NS_IsMainThread()) {
|
||||||
MOZ_ASSERT(principal);
|
MOZ_ASSERT(principal);
|
||||||
|
|
||||||
@ -1373,12 +1383,13 @@ already_AddRefed<WebSocket> WebSocket::ConstructorCommon(
|
|||||||
}
|
}
|
||||||
|
|
||||||
aRv = webSocket->mImpl->AsyncOpen(principal, windowID, aTransportProvider,
|
aRv = webSocket->mImpl->AsyncOpen(principal, windowID, aTransportProvider,
|
||||||
aNegotiatedExtensions);
|
aNegotiatedExtensions, std::move(stack));
|
||||||
} else {
|
} else {
|
||||||
MOZ_ASSERT(!aTransportProvider && aNegotiatedExtensions.IsEmpty(),
|
MOZ_ASSERT(!aTransportProvider && aNegotiatedExtensions.IsEmpty(),
|
||||||
"not yet implemented");
|
"not yet implemented");
|
||||||
|
|
||||||
RefPtr<AsyncOpenRunnable> runnable =
|
RefPtr<AsyncOpenRunnable> runnable =
|
||||||
new AsyncOpenRunnable(webSocket->mImpl);
|
new AsyncOpenRunnable(webSocket->mImpl, std::move(stack));
|
||||||
runnable->Dispatch(Canceling, aRv);
|
runnable->Dispatch(Canceling, aRv);
|
||||||
if (NS_WARN_IF(aRv.Failed())) {
|
if (NS_WARN_IF(aRv.Failed())) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@ -1632,7 +1643,8 @@ nsresult WebSocketImpl::Init(JSContext* aCx, nsIPrincipal* aLoadingPrincipal,
|
|||||||
nsresult WebSocketImpl::AsyncOpen(nsIPrincipal* aPrincipal,
|
nsresult WebSocketImpl::AsyncOpen(nsIPrincipal* aPrincipal,
|
||||||
uint64_t aInnerWindowID,
|
uint64_t aInnerWindowID,
|
||||||
nsITransportProvider* aTransportProvider,
|
nsITransportProvider* aTransportProvider,
|
||||||
const nsACString& aNegotiatedExtensions) {
|
const nsACString& aNegotiatedExtensions,
|
||||||
|
UniquePtr<SerializedStackHolder> aOriginStack) {
|
||||||
MOZ_ASSERT(NS_IsMainThread(), "Not running on main thread");
|
MOZ_ASSERT(NS_IsMainThread(), "Not running on main thread");
|
||||||
MOZ_ASSERT_IF(!aTransportProvider, aNegotiatedExtensions.IsEmpty());
|
MOZ_ASSERT_IF(!aTransportProvider, aNegotiatedExtensions.IsEmpty());
|
||||||
|
|
||||||
@ -1659,6 +1671,8 @@ nsresult WebSocketImpl::AsyncOpen(nsIPrincipal* aPrincipal,
|
|||||||
return NS_ERROR_CONTENT_BLOCKED;
|
return NS_ERROR_CONTENT_BLOCKED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NotifyNetworkMonitorAlternateStack(mChannel, std::move(aOriginStack));
|
||||||
|
|
||||||
mInnerWindowID = aInnerWindowID;
|
mInnerWindowID = aInnerWindowID;
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
Loading…
Reference in New Issue
Block a user