/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */
bool ImageCacheKey::operator==(const ImageCacheKey& aOther) const { // Don't share the image cache between a controlled document and anything // else. if (mControlledDocument != aOther.mControlledDocument) { returnfalse;
} // Don't share the image cache between two top-level documents of different // base domains. if (!mIsolationKey.Equals(aOther.mIsolationKey,
nsCaseInsensitiveCStringComparator)) { returnfalse;
} // The origin attributes always have to match. if (mOriginAttributes != aOther.mOriginAttributes) { returnfalse;
}
if (mCORSMode != aOther.mCORSMode) { returnfalse;
} // Don't share the image cache between two different appTypes if (mAppType != aOther.mAppType) { returnfalse;
}
/* static */ void* ImageCacheKey::GetSpecialCaseDocumentToken(Document* aDocument) { // Cookie-averse documents can never have storage granted to them. Since they // may not have inner windows, they would require special handling below, so // just bail out early here. if (!aDocument || aDocument->IsCookieAverse()) { return nullptr;
}
// For controlled documents, we cast the pointer into a void* to avoid // dereferencing it (since we only use it for comparisons).
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance(); if (swm && aDocument->GetController().isSome()) { return aDocument;
}
// Network-state isolation if (StaticPrefs::privacy_partition_network_state()) {
OriginAttributes oa;
StoragePrincipalHelper::GetOriginAttributesForNetworkState(aDocument, oa);
nsAutoCString suffix;
oa.CreateSuffix(suffix);
return std::move(suffix);
}
// If the window is 3rd party resource, let's see if first-party storage // access is granted for this image. if (AntiTrackingUtils::IsThirdPartyWindow(aDocument->GetInnerWindow(),
nullptr)) {
uint32_t rejectedReason = 0;
Unused << rejectedReason; return ShouldAllowAccessFor(aDocument->GetInnerWindow(), aURI, true,
&rejectedReason)
? ""_ns
: aDocument->GetBaseDomain();
}
// Another scenario is if this image is a 3rd party resource loaded by a // first party context. In this case, we should check if the nsIChannel has // been marked as tracking resource, but we don't have the channel yet at // this point. The best approach here is to be conservative: if we are sure // that the permission is granted, let's return 0. Otherwise, let's make a // unique image cache per the top-level document eTLD+1. if (!ApproximateAllowAccessForWithoutChannel(aDocument->GetInnerWindow(),
aURI)) { // If we are here, the image is a 3rd-party resource loaded by a first-party // context. We can just use the document's base domain as the key because it // should be the same as the top-level document's base domain. return aDocument
->GetBaseDomain(); // because we don't have anything better!
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.