Bug 1737829: Populate an RFP bit from Channel to Connection via Caps r=necko-reviewers,kershaw

Differential Revision: https://phabricator.services.mozilla.com/D144583
This commit is contained in:
Tom Ritter 2022-07-15 20:39:23 +00:00
Родитель c55fc9ce83
Коммит a199ab6a52
5 изменённых файлов: 19 добавлений и 8 удалений

Просмотреть файл

@ -218,7 +218,8 @@ Http2ConnectTransaction::Http2ConnectTransaction(
trans->RequestHead()->Exit();
}
DebugOnly<nsresult> rv = nsHttpConnection::MakeConnectString(
trans, mRequestHead, mConnectString, mIsWebsocket);
trans, mRequestHead, mConnectString, mIsWebsocket,
mCaps & NS_HTTP_USE_RFP);
MOZ_ASSERT(NS_SUCCEEDED(rv));
mDrivingTransaction = trans;
}

Просмотреть файл

@ -146,6 +146,10 @@ extern const nsCString kHttp3Versions[];
#define NS_HTTP_DISALLOW_ECH (1 << 25)
// Used to indicate that an HTTP Connection should obey Resist Fingerprinting
// and set the User-Agent accordingly.
#define NS_HTTP_USE_RFP (1 << 26)
#define NS_HTTP_TRR_FLAGS_FROM_MODE(x) ((static_cast<uint32_t>(x) & 3) << 19)
#define NS_HTTP_TRR_MODE_FROM_FLAGS(x) \

Просмотреть файл

@ -1134,6 +1134,10 @@ nsresult nsHttpChannel::SetupTransaction() {
mCaps |= NS_HTTP_LOAD_ANONYMOUS_CONNECT_ALLOW_CLIENT_CERT;
}
if (nsContentUtils::ShouldResistFingerprinting(this)) {
mCaps |= NS_HTTP_USE_RFP;
}
// Use the URI path if not proxying (transparent proxying such as proxy
// CONNECT does not count here). Also figure out what HTTP version to use.
nsAutoCString buf, path;

Просмотреть файл

@ -1824,7 +1824,8 @@ void nsHttpConnection::SetInSpdyTunnel(bool arg) {
// static
nsresult nsHttpConnection::MakeConnectString(nsAHttpTransaction* trans,
nsHttpRequestHead* request,
nsACString& result, bool h2ws) {
nsACString& result, bool h2ws,
bool aShouldResistFingerprinting) {
result.Truncate();
if (!trans->ConnectionInfo()) {
return NS_ERROR_NOT_INITIALIZED;
@ -1850,7 +1851,8 @@ nsresult nsHttpConnection::MakeConnectString(nsAHttpTransaction* trans,
} else {
request->SetRequestURI(result);
}
rv = request->SetHeader(nsHttp::User_Agent, gHttpHandler->UserAgent());
rv = request->SetHeader(nsHttp::User_Agent,
gHttpHandler->UserAgent(aShouldResistFingerprinting));
MOZ_ASSERT(NS_SUCCEEDED(rv));
// a CONNECT is always persistent
@ -2451,7 +2453,8 @@ nsresult nsHttpConnection::SetupProxyConnectStream() {
nsAutoCString buf;
nsHttpRequestHead request;
nsresult rv = MakeConnectString(mTransaction, &request, buf, false);
nsresult rv = MakeConnectString(mTransaction, &request, buf, false,
mTransactionCaps & NS_HTTP_USE_RFP);
if (NS_FAILED(rv)) {
return rv;
}

Просмотреть файл

@ -191,10 +191,9 @@ class nsHttpConnection final : public HttpConnectionBase,
bool IsForWebSocket() { return mForWebSocket; }
// The following functions are related to setting up a tunnel.
[[nodiscard]] static nsresult MakeConnectString(nsAHttpTransaction* trans,
nsHttpRequestHead* request,
nsACString& result,
bool h2ws);
[[nodiscard]] static nsresult MakeConnectString(
nsAHttpTransaction* trans, nsHttpRequestHead* request, nsACString& result,
bool h2ws, bool aShouldResistFingerprinting);
[[nodiscard]] static nsresult ReadFromStream(nsIInputStream*, void*,
const char*, uint32_t, uint32_t,
uint32_t*);