fune/netwerk/protocol/http/TrackingDummyChannel.cpp
Dorel Luca 3ef1df6038 Backed out 5 changesets (bug 1533074) for eslint failure
Backed out changeset 36c6a7178a5c (bug 1533074)
Backed out changeset 7e6a8fadff5b (bug 1533074)
Backed out changeset 2a0494fed543 (bug 1533074)
Backed out changeset 38470d2dd98c (bug 1533074)
Backed out changeset af4e03d1f5c8 (bug 1533074)
2019-03-14 09:14:15 +02:00

617 lines
16 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set sw=2 ts=8 et tw=80 : */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "TrackingDummyChannel.h"
#include "mozilla/AntiTrackingCommon.h"
#include "mozilla/net/TrackingDummyChannelChild.h"
#include "mozilla/dom/ContentChild.h"
#include "mozilla/Preferences.h"
#include "nsIChannel.h"
#include "nsIURI.h"
#include "nsProxyRelease.h"
namespace mozilla {
namespace net {
/* static */ TrackingDummyChannel::StorageAllowedState
TrackingDummyChannel::StorageAllowed(
nsIChannel* aChannel, const std::function<void(bool)>& aCallback) {
MOZ_ASSERT(!XRE_IsParentProcess());
nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(aChannel);
if (!httpChannel) {
// Any non-http channel is allowed.
return eStorageGranted;
}
if (!nsContentUtils::IsNonSubresourceRequest(aChannel)) {
// If this is a sub-resource, we don't need to check if the channel is
// annotated as tracker because:
// - if the SW doesn't respond, or it sends us back to the network, the
// channel will be annotated on the parent process.
// - if the SW answers, the content is taken from the cache, which is
// considered trusted.
return eStorageGranted;
}
nsCOMPtr<nsIURI> uri;
aChannel->GetURI(getter_AddRefs(uri));
if (StaticPrefs::privacy_trackingprotection_annotate_channels()) {
ContentChild* cc = static_cast<ContentChild*>(gNeckoChild->Manager());
if (cc->IsShuttingDown()) {
return eStorageDenied;
}
if (!TrackingDummyChannelChild::Create(httpChannel, uri, aCallback)) {
return eStorageDenied;
}
return eAsyncNeeded;
}
if (AntiTrackingCommon::IsFirstPartyStorageAccessGrantedFor(httpChannel, uri,
nullptr)) {
return eStorageGranted;
}
return eStorageDenied;
}
NS_IMPL_ADDREF(TrackingDummyChannel)
NS_IMPL_RELEASE(TrackingDummyChannel)
NS_INTERFACE_MAP_BEGIN(TrackingDummyChannel)
NS_INTERFACE_MAP_ENTRY(nsIRequest)
NS_INTERFACE_MAP_ENTRY(nsIChannel)
NS_INTERFACE_MAP_ENTRY(nsIHttpChannelInternal)
NS_INTERFACE_MAP_ENTRY_CONCRETE(TrackingDummyChannel)
NS_INTERFACE_MAP_END
TrackingDummyChannel::TrackingDummyChannel(nsIURI* aURI, nsIURI* aTopWindowURI,
nsresult aTopWindowURIResult,
nsILoadInfo* aLoadInfo)
: mTopWindowURI(aTopWindowURI),
mTopWindowURIResult(aTopWindowURIResult),
mIsTrackingResource(false) {
MOZ_ASSERT(XRE_IsParentProcess());
SetOriginalURI(aURI);
SetLoadInfo(aLoadInfo);
}
TrackingDummyChannel::~TrackingDummyChannel() {
NS_ReleaseOnMainThreadSystemGroup("TrackingDummyChannel::mLoadInfo",
mLoadInfo.forget());
NS_ReleaseOnMainThreadSystemGroup("TrackingDummyChannel::mURI",
mURI.forget());
NS_ReleaseOnMainThreadSystemGroup("TrackingDummyChannel::mTopWindowURI",
mTopWindowURI.forget());
}
bool TrackingDummyChannel::IsTrackingResource() const {
return mIsTrackingResource;
}
void TrackingDummyChannel::SetIsTrackingResource() {
mIsTrackingResource = true;
}
//-----------------------------------------------------------------------------
// TrackingDummyChannel::nsIChannel
//-----------------------------------------------------------------------------
NS_IMETHODIMP
TrackingDummyChannel::GetOriginalURI(nsIURI** aOriginalURI) {
NS_IF_ADDREF(*aOriginalURI = mURI);
return NS_OK;
}
NS_IMETHODIMP
TrackingDummyChannel::SetOriginalURI(nsIURI* aOriginalURI) {
mURI = aOriginalURI;
return NS_OK;
}
NS_IMETHODIMP
TrackingDummyChannel::GetURI(nsIURI** aURI) {
NS_IF_ADDREF(*aURI = mURI);
return NS_OK;
}
NS_IMETHODIMP
TrackingDummyChannel::GetOwner(nsISupports** aOwner) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetOwner(nsISupports* aOwner) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetNotificationCallbacks(
nsIInterfaceRequestor** aNotificationCallbacks) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetNotificationCallbacks(
nsIInterfaceRequestor* aNotificationCallbacks) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetSecurityInfo(nsISupports** aSecurityInfo) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetContentType(nsACString& aContentType) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetContentType(const nsACString& aContentType) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetContentCharset(nsACString& aContentCharset) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetContentCharset(const nsACString& aContentCharset) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetContentLength(int64_t* aContentLength) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetContentLength(int64_t aContentLength) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::Open(nsIInputStream** aStream) {
nsCOMPtr<nsIStreamListener> listener;
nsresult rv =
nsContentSecurityManager::doContentSecurityCheck(this, listener);
NS_ENSURE_SUCCESS(rv, rv);
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::AsyncOpen(nsIStreamListener* aListener) {
nsCOMPtr<nsIStreamListener> listener = aListener;
nsresult rv =
nsContentSecurityManager::doContentSecurityCheck(this, listener);
NS_ENSURE_SUCCESS(rv, rv);
return AsyncOpen(listener);
}
NS_IMETHODIMP
TrackingDummyChannel::GetContentDisposition(uint32_t* aContentDisposition) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetContentDisposition(uint32_t aContentDisposition) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetContentDispositionFilename(
nsAString& aContentDispositionFilename) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetContentDispositionFilename(
const nsAString& aContentDispositionFilename) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetContentDispositionHeader(
nsACString& aContentDispositionHeader) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetLoadInfo(nsILoadInfo** aLoadInfo) {
NS_IF_ADDREF(*aLoadInfo = mLoadInfo);
return NS_OK;
}
NS_IMETHODIMP
TrackingDummyChannel::SetLoadInfo(nsILoadInfo* aLoadInfo) {
mLoadInfo = aLoadInfo;
return NS_OK;
}
//-----------------------------------------------------------------------------
// TrackingDummyChannel::nsIRequest
//-----------------------------------------------------------------------------
NS_IMETHODIMP
TrackingDummyChannel::GetName(nsACString& aName) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::IsPending(bool* aRetval) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetStatus(nsresult* aStatus) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::Cancel(nsresult aStatus) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::Suspend() { return NS_ERROR_NOT_IMPLEMENTED; }
NS_IMETHODIMP
TrackingDummyChannel::Resume() { return NS_ERROR_NOT_IMPLEMENTED; }
NS_IMETHODIMP
TrackingDummyChannel::GetLoadGroup(nsILoadGroup** aLoadGroup) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetLoadGroup(nsILoadGroup* aLoadGroup) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetLoadFlags(nsLoadFlags* aLoadFlags) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetLoadFlags(nsLoadFlags aLoadFlags) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetIsDocument(bool* aIsDocument) {
return NS_ERROR_NOT_IMPLEMENTED;
}
//-----------------------------------------------------------------------------
// TrackingDummyChannel::nsIHttpChannelInternal
//-----------------------------------------------------------------------------
NS_IMETHODIMP
TrackingDummyChannel::GetDocumentURI(nsIURI** aDocumentURI) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetDocumentURI(nsIURI* aDocumentURI) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetRequestVersion(uint32_t* aMajor, uint32_t* aMinor) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetResponseVersion(uint32_t* aMajor, uint32_t* aMinor) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::TakeAllSecurityMessages(
nsCOMArray<nsISecurityConsoleMessage>& aMessages) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetCookie(const char* aCookieHeader) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetupFallbackChannel(const char* aFallbackKey) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetThirdPartyFlags(uint32_t* aThirdPartyFlags) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetThirdPartyFlags(uint32_t aThirdPartyFlags) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetForceAllowThirdPartyCookie(
bool* aForceAllowThirdPartyCookie) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetForceAllowThirdPartyCookie(
bool aForceAllowThirdPartyCookie) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetCanceled(bool* aCanceled) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetChannelIsForDownload(bool* aChannlIsForDownload) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetChannelIsForDownload(bool aChannlIsForDownload) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetLocalAddress(nsACString& aLocalAddress) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetLocalPort(int32_t* aLocalPort) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetRemoteAddress(nsACString& aRemoteAddress) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetRemotePort(int32_t* aRemotePort) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetCacheKeysRedirectChain(
nsTArray<nsCString>* aCacheKeys) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::HTTPUpgrade(const nsACString& aProtocolName,
nsIHttpUpgradeListener* aListener) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetOnlyConnect(bool* aOnlyConnect) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetConnectOnly() { return NS_ERROR_NOT_IMPLEMENTED; }
NS_IMETHODIMP
TrackingDummyChannel::GetAllowSpdy(bool* aAllowSpdy) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetAllowSpdy(bool aAllowSpdy) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetResponseTimeoutEnabled(bool* aResponseTimeoutEnabled) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetResponseTimeoutEnabled(bool aResponseTimeoutEnabled) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetInitialRwin(uint32_t* aInitialRwin) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetInitialRwin(uint32_t aInitialRwin) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetApiRedirectToURI(nsIURI** aApiRedirectToURI) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetAllowAltSvc(bool* aAllowAltSvc) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetAllowAltSvc(bool aAllowAltSvc) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetBeConservative(bool* aBeConservative) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetBeConservative(bool aBeConservative) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetTrr(bool* aTrr) { return NS_ERROR_NOT_IMPLEMENTED; }
NS_IMETHODIMP
TrackingDummyChannel::SetTrr(bool aTrr) { return NS_ERROR_NOT_IMPLEMENTED; }
NS_IMETHODIMP
TrackingDummyChannel::GetTlsFlags(uint32_t* aTlsFlags) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetTlsFlags(uint32_t aTlsFlags) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetLastModifiedTime(PRTime* aLastModifiedTime) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetCorsIncludeCredentials(bool* aCorsIncludeCredentials) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetCorsIncludeCredentials(bool aCorsIncludeCredentials) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetCorsMode(uint32_t* aCorsMode) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetCorsMode(uint32_t aCorsMode) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetRedirectMode(uint32_t* aRedirectMode) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetRedirectMode(uint32_t aRedirectMode) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetFetchCacheMode(uint32_t* aFetchCacheMode) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetFetchCacheMode(uint32_t aFetchCacheMode) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetTopWindowURI(nsIURI** aTopWindowURI) {
nsCOMPtr<nsIURI> topWindowURI = mTopWindowURI;
topWindowURI.forget(aTopWindowURI);
return mTopWindowURIResult;
}
NS_IMETHODIMP
TrackingDummyChannel::SetTopWindowURIIfUnknown(nsIURI* aTopWindowURI) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetTopWindowPrincipal(nsIPrincipal* aTopWindowPrincipal) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetProxyURI(nsIURI** aProxyURI) {
return NS_ERROR_NOT_IMPLEMENTED;
}
void TrackingDummyChannel::SetCorsPreflightParameters(
const nsTArray<nsCString>& aUnsafeHeaders) {}
void TrackingDummyChannel::SetAltDataForChild(bool aIsForChild) {}
NS_IMETHODIMP
TrackingDummyChannel::GetBlockAuthPrompt(bool* aBlockAuthPrompt) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetBlockAuthPrompt(bool aBlockAuthPrompt) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetIntegrityMetadata(nsAString& aIntegrityMetadata) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetIntegrityMetadata(
const nsAString& aIntegrityMetadata) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetConnectionInfoHashKey(
nsACString& aConnectionInfoHashKey) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetLastRedirectFlags(uint32_t* aLastRedirectFlags) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetLastRedirectFlags(uint32_t aLastRedirectFlags) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::GetNavigationStartTimeStamp(
TimeStamp* aNavigationStartTimeStamp) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::SetNavigationStartTimeStamp(
TimeStamp aNavigationStartTimeStamp) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TrackingDummyChannel::CancelByChannelClassifier(nsresult aErrorCode) {
return NS_ERROR_NOT_IMPLEMENTED;
}
void TrackingDummyChannel::SetIPv4Disabled() {}
void TrackingDummyChannel::SetIPv6Disabled() {}
} // namespace net
} // namespace mozilla