mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-23 12:51:06 +00:00
Bug 1816918 - pass ClientInfo via IPC while creating webtransport session. r=necko-reviewers,jesup
Differential Revision: https://phabricator.services.mozilla.com/D173115
This commit is contained in:
parent
cf3b888238
commit
3497e2d7c9
@ -147,6 +147,7 @@ inline const char* NS_CP_ContentTypeName(nsContentPolicyType contentType) {
|
||||
CASE_RETURN(TYPE_INTERNAL_WORKER_STATIC_MODULE);
|
||||
CASE_RETURN(TYPE_PROXIED_WEBRTC_MEDIA);
|
||||
CASE_RETURN(TYPE_WEB_IDENTITY);
|
||||
CASE_RETURN(TYPE_WEB_TRANSPORT);
|
||||
CASE_RETURN(TYPE_END);
|
||||
case nsIContentPolicy::TYPE_INVALID:
|
||||
break;
|
||||
|
@ -438,13 +438,18 @@ interface nsIContentPolicy : nsISupports
|
||||
*/
|
||||
TYPE_INTERNAL_WORKER_STATIC_MODULE = 58,
|
||||
|
||||
/**
|
||||
* Indicates Webtransport request
|
||||
*/
|
||||
TYPE_WEB_TRANSPORT = 59,
|
||||
|
||||
/**
|
||||
* Used to indicate the end of this list, not a content policy. If you want
|
||||
* to add a new content policy type, place it before this sentinel value
|
||||
* TYPE_END, have it use TYPE_END's current value, and increment TYPE_END by
|
||||
* one. (TYPE_END should always have the highest numerical value.)
|
||||
*/
|
||||
TYPE_END = 59,
|
||||
TYPE_END = 60,
|
||||
|
||||
|
||||
/* When adding new content types, please update
|
||||
|
3
dom/cache/DBSchema.cpp
vendored
3
dom/cache/DBSchema.cpp
vendored
@ -344,7 +344,8 @@ static_assert(
|
||||
nsIContentPolicy::TYPE_UA_FONT == 55 &&
|
||||
nsIContentPolicy::TYPE_WEB_IDENTITY == 57 &&
|
||||
nsIContentPolicy::TYPE_INTERNAL_WORKER_STATIC_MODULE == 58 &&
|
||||
nsIContentPolicy::TYPE_END == 59,
|
||||
nsIContentPolicy::TYPE_WEB_TRANSPORT == 59 &&
|
||||
nsIContentPolicy::TYPE_END == 60,
|
||||
"nsContentPolicyType values are as expected");
|
||||
|
||||
namespace {
|
||||
|
@ -347,6 +347,8 @@ RequestDestination InternalRequest::MapContentPolicyTypeToRequestDestination(
|
||||
return RequestDestination::_empty;
|
||||
case nsIContentPolicy::TYPE_WEB_IDENTITY:
|
||||
return RequestDestination::_empty;
|
||||
case nsIContentPolicy::TYPE_WEB_TRANSPORT:
|
||||
return RequestDestination::_empty;
|
||||
case nsIContentPolicy::TYPE_INVALID:
|
||||
case nsIContentPolicy::TYPE_END:
|
||||
break;
|
||||
|
@ -109,6 +109,8 @@ nsCString MapInternalContentPolicyTypeToDest(nsContentPolicyType aType) {
|
||||
return "empty"_ns;
|
||||
case nsIContentPolicy::TYPE_WEB_IDENTITY:
|
||||
return "webidentity"_ns;
|
||||
case nsIContentPolicy::TYPE_WEB_TRANSPORT:
|
||||
return "webtransport"_ns;
|
||||
case nsIContentPolicy::TYPE_END:
|
||||
case nsIContentPolicy::TYPE_INVALID:
|
||||
break;
|
||||
|
@ -323,6 +323,7 @@ CSPDirective CSP_ContentTypeToDirective(nsContentPolicyType aType) {
|
||||
case nsIContentPolicy::TYPE_INTERNAL_EVENTSOURCE:
|
||||
case nsIContentPolicy::TYPE_INTERNAL_FETCH_PRELOAD:
|
||||
case nsIContentPolicy::TYPE_WEB_IDENTITY:
|
||||
case nsIContentPolicy::TYPE_WEB_TRANSPORT:
|
||||
return nsIContentSecurityPolicy::CONNECT_SRC_DIRECTIVE;
|
||||
|
||||
case nsIContentPolicy::TYPE_OBJECT:
|
||||
|
@ -244,6 +244,7 @@ void WebTransport::Init(const GlobalObject& aGlobal, const nsAString& aURL,
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal = mGlobal->PrincipalOrNull();
|
||||
IPCClientInfo ipcClientInfo(mGlobal->GetClientInfo().ref().ToIPC());
|
||||
// Create a new IPC connection
|
||||
Endpoint<PWebTransportParent> parentEndpoint;
|
||||
Endpoint<PWebTransportChild> childEndpoint;
|
||||
@ -321,7 +322,7 @@ void WebTransport::Init(const GlobalObject& aGlobal, const nsAString& aURL,
|
||||
|
||||
// https://w3c.github.io/webtransport/#webtransport-constructor Spec 5.2
|
||||
backgroundChild
|
||||
->SendCreateWebTransportParent(aURL, principal, dedicated,
|
||||
->SendCreateWebTransportParent(aURL, principal, ipcClientInfo, dedicated,
|
||||
requireUnreliable,
|
||||
(uint32_t)congestionControl,
|
||||
// XXX serverCertHashes,
|
||||
|
@ -32,7 +32,8 @@ WebTransportParent::~WebTransportParent() {
|
||||
}
|
||||
|
||||
void WebTransportParent::Create(
|
||||
const nsAString& aURL, nsIPrincipal* aPrincipal, const bool& aDedicated,
|
||||
const nsAString& aURL, nsIPrincipal* aPrincipal,
|
||||
const IPCClientInfo& aClientInfo, const bool& aDedicated,
|
||||
const bool& aRequireUnreliable, const uint32_t& aCongestionControl,
|
||||
// Sequence<WebTransportHash>* aServerCertHashes,
|
||||
Endpoint<PWebTransportParent>&& aParentEndpoint,
|
||||
@ -88,10 +89,12 @@ void WebTransportParent::Create(
|
||||
"WebTransport AsyncConnect",
|
||||
[self = RefPtr{this}, uri = std::move(uri),
|
||||
principal = RefPtr{aPrincipal},
|
||||
flags = nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_SEC_CONTEXT_IS_NULL] {
|
||||
flags = nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_SEC_CONTEXT_IS_NULL,
|
||||
aClientInfo] {
|
||||
LOG(("WebTransport %p AsyncConnect", self.get()));
|
||||
if (NS_FAILED(self->mWebTransport->AsyncConnect(uri, principal, flags,
|
||||
self))) {
|
||||
if (NS_FAILED(self->mWebTransport->AsyncConnectWithClient(
|
||||
uri, principal, flags, self,
|
||||
mozilla::Some(ClientInfo(aClientInfo))))) {
|
||||
LOG(("AsyncConnect failure; we should get OnSessionClosed"));
|
||||
}
|
||||
});
|
||||
|
@ -8,6 +8,7 @@
|
||||
#define DOM_WEBTRANSPORT_PARENT_WEBTRANSPORTPARENT_H_
|
||||
|
||||
#include "ErrorList.h"
|
||||
#include "mozilla/dom/ClientIPCTypes.h"
|
||||
#include "mozilla/dom/FlippedOnce.h"
|
||||
#include "mozilla/dom/PWebTransportParent.h"
|
||||
#include "mozilla/ipc/Endpoint.h"
|
||||
@ -31,7 +32,8 @@ class WebTransportParent : public PWebTransportParent,
|
||||
NS_DECL_WEBTRANSPORTSESSIONEVENTLISTENER
|
||||
|
||||
void Create(const nsAString& aURL, nsIPrincipal* aPrincipal,
|
||||
const bool& aDedicated, const bool& aRequireUnreliable,
|
||||
const IPCClientInfo& aClientInfo, const bool& aDedicated,
|
||||
const bool& aRequireUnreliable,
|
||||
const uint32_t& aCongestionControl,
|
||||
// Sequence<WebTransportHash>* aServerCertHashes,
|
||||
Endpoint<PWebTransportParent>&& aParentEndpoint,
|
||||
|
@ -490,7 +490,8 @@ mozilla::ipc::IPCResult BackgroundParentImpl::RecvCreateFileSystemManagerParent(
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult BackgroundParentImpl::RecvCreateWebTransportParent(
|
||||
const nsAString& aURL, nsIPrincipal* aPrincipal, const bool& aDedicated,
|
||||
const nsAString& aURL, nsIPrincipal* aPrincipal,
|
||||
const IPCClientInfo& aClientInfo, const bool& aDedicated,
|
||||
const bool& aRequireUnreliable, const uint32_t& aCongestionControl,
|
||||
// Sequence<WebTransportHash>* aServerCertHashes,
|
||||
Endpoint<PWebTransportParent>&& aParentEndpoint,
|
||||
@ -500,9 +501,10 @@ mozilla::ipc::IPCResult BackgroundParentImpl::RecvCreateWebTransportParent(
|
||||
|
||||
RefPtr<mozilla::dom::WebTransportParent> webt =
|
||||
new mozilla::dom::WebTransportParent();
|
||||
webt->Create(
|
||||
aURL, aPrincipal, aDedicated, aRequireUnreliable, aCongestionControl,
|
||||
/*aServerCertHashes, */ std::move(aParentEndpoint), std::move(aResolver));
|
||||
webt->Create(aURL, aPrincipal, aClientInfo, aDedicated, aRequireUnreliable,
|
||||
aCongestionControl,
|
||||
/*aServerCertHashes, */ std::move(aParentEndpoint),
|
||||
std::move(aResolver));
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
|
@ -136,7 +136,8 @@ class BackgroundParentImpl : public PBackgroundParent {
|
||||
CreateFileSystemManagerParentResolver&& aResolver) override;
|
||||
|
||||
mozilla::ipc::IPCResult RecvCreateWebTransportParent(
|
||||
const nsAString& aURL, nsIPrincipal* aPrincipal, const bool& aDedicated,
|
||||
const nsAString& aURL, nsIPrincipal* aPrincipal,
|
||||
const IPCClientInfo& aClientInfo, const bool& aDedicated,
|
||||
const bool& aRequireUnreliable, const uint32_t& aCongestionControl,
|
||||
// Sequence<WebTransportHash>* aServerCertHashes,
|
||||
Endpoint<PWebTransportParent>&& aParentEndpoint,
|
||||
|
@ -55,6 +55,7 @@ include protocol PWebSocketConnection;
|
||||
include protocol PWebTransport;
|
||||
include protocol PFetch;
|
||||
|
||||
include ClientIPCTypes;
|
||||
include DOMTypes;
|
||||
include IPCBlob;
|
||||
include IPCServiceWorkerDescriptor;
|
||||
@ -195,6 +196,7 @@ parent:
|
||||
async CreateWebTransportParent(
|
||||
nsString aURL,
|
||||
nullable nsIPrincipal aPrincipal,
|
||||
IPCClientInfo aClientInfo,
|
||||
bool aDedicated,
|
||||
bool aRequireUnreliable,
|
||||
uint32_t aCongestionControl,
|
||||
|
@ -61,6 +61,14 @@ WebTransportSessionProxy::~WebTransportSessionProxy() {
|
||||
nsresult WebTransportSessionProxy::AsyncConnect(
|
||||
nsIURI* aURI, nsIPrincipal* aPrincipal, uint32_t aSecurityFlags,
|
||||
WebTransportSessionEventListener* aListener) {
|
||||
return AsyncConnectWithClient(aURI, aPrincipal, aSecurityFlags, aListener,
|
||||
Maybe<dom::ClientInfo>());
|
||||
}
|
||||
|
||||
nsresult WebTransportSessionProxy::AsyncConnectWithClient(
|
||||
nsIURI* aURI, nsIPrincipal* aPrincipal, uint32_t aSecurityFlags,
|
||||
WebTransportSessionEventListener* aListener,
|
||||
const Maybe<dom::ClientInfo>& aClientInfo) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
LOG(("WebTransportSessionProxy::AsyncConnect"));
|
||||
@ -80,12 +88,24 @@ nsresult WebTransportSessionProxy::AsyncConnect(
|
||||
nsLoadFlags loadFlags = nsIRequest::LOAD_NORMAL |
|
||||
nsIRequest::LOAD_BYPASS_CACHE |
|
||||
nsIRequest::INHIBIT_CACHING;
|
||||
nsresult rv = NS_NewChannel(getter_AddRefs(mChannel), aURI, aPrincipal, flags,
|
||||
nsContentPolicyType::TYPE_OTHER,
|
||||
/* aCookieJarSettings */ nullptr,
|
||||
/* aPerformanceStorage */ nullptr,
|
||||
/* aLoadGroup */ nullptr,
|
||||
/* aCallbacks */ this, loadFlags);
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
|
||||
if (aClientInfo.isSome()) {
|
||||
rv = NS_NewChannel(getter_AddRefs(mChannel), aURI, aPrincipal,
|
||||
aClientInfo.ref(), Maybe<dom::ServiceWorkerDescriptor>(),
|
||||
flags, nsContentPolicyType::TYPE_WEB_TRANSPORT,
|
||||
/* aCookieJarSettings */ nullptr,
|
||||
/* aPerformanceStorage */ nullptr,
|
||||
/* aLoadGroup */ nullptr,
|
||||
/* aCallbacks */ this, loadFlags);
|
||||
} else {
|
||||
rv = NS_NewChannel(getter_AddRefs(mChannel), aURI, aPrincipal, flags,
|
||||
nsContentPolicyType::TYPE_WEB_TRANSPORT,
|
||||
/* aCookieJarSettings */ nullptr,
|
||||
/* aPerformanceStorage */ nullptr,
|
||||
/* aLoadGroup */ nullptr,
|
||||
/* aCallbacks */ this, loadFlags);
|
||||
}
|
||||
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
|
@ -14,6 +14,9 @@ interface nsIWebTransportSendStream;
|
||||
interface nsIWebTransportReceiveStream;
|
||||
|
||||
%{C++
|
||||
namespace mozilla::dom {
|
||||
class ClientInfo;
|
||||
}
|
||||
namespace mozilla::net {
|
||||
class Http3WebTransportSession;
|
||||
class Http3WebTransportStream;
|
||||
@ -23,6 +26,7 @@ class Http3WebTransportStream;
|
||||
[ptr] native Http3WebTransportSessionPtr(mozilla::net::Http3WebTransportSession);
|
||||
[ptr] native Http3WebTransportStreamPtr(mozilla::net::Http3WebTransportStream);
|
||||
native Datagram(nsTArray<uint8_t>&&);
|
||||
[ref] native const_MaybeClientInfoRef(const mozilla::Maybe<mozilla::dom::ClientInfo>);
|
||||
|
||||
[builtinclass, scriptable, uuid(c20d6e77-8cb1-4838-a88d-fff826080aa3)]
|
||||
interface nsIWebTransport : nsISupports {
|
||||
@ -36,6 +40,13 @@ interface nsIWebTransport : nsISupports {
|
||||
in nsIPrincipal aLoadingPrincipal,
|
||||
in unsigned long aSecurityFlags,
|
||||
in WebTransportSessionEventListener aListener);
|
||||
|
||||
void asyncConnectWithClient(in nsIURI aURI,
|
||||
in nsIPrincipal aLoadingPrincipal,
|
||||
in unsigned long aSecurityFlags,
|
||||
in WebTransportSessionEventListener aListener,
|
||||
in const_MaybeClientInfoRef aClientInfo);
|
||||
|
||||
// Asynchronously get states.
|
||||
void getStats();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user