1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 * ImageCacheKey is the key type for the image cache (see imgLoader.h).
10 #ifndef mozilla_image_src_ImageCacheKey_h
11 #define mozilla_image_src_ImageCacheKey_h
13 #include "mozilla/BasePrincipal.h"
14 #include "mozilla/Maybe.h"
15 #include "mozilla/RefPtr.h"
16 #include "PLDHashTable.h"
22 enum CORSMode
: uint8_t;
27 * An ImageLib cache entry key.
29 * We key the cache on the initial URI (before any redirects), with some
30 * canonicalization applied. See ComputeHash() for the details.
31 * Controlled documents do not share their cache entries with
32 * non-controlled documents, or other controlled documents.
34 class ImageCacheKey final
{
36 ImageCacheKey(nsIURI
*, CORSMode
, const OriginAttributes
&, dom::Document
*);
38 ImageCacheKey(const ImageCacheKey
& aOther
);
39 ImageCacheKey(ImageCacheKey
&& aOther
);
41 bool operator==(const ImageCacheKey
& aOther
) const;
42 PLDHashNumber
Hash() const {
43 if (MOZ_UNLIKELY(mHash
.isNothing())) {
49 /// A weak pointer to the URI.
50 nsIURI
* URI() const { return mURI
; }
52 CORSMode
GetCORSMode() const { return mCORSMode
; }
54 const OriginAttributes
& OriginAttributesRef() const {
55 return mOriginAttributes
;
58 const nsCString
& IsolationKeyRef() const { return mIsolationKey
; }
60 /// A token indicating which service worker controlled document this entry
61 /// belongs to, if any.
62 void* ControlledDocument() const { return mControlledDocument
; }
65 // For ServiceWorker we need to use the document as
66 // token for the key. All those exceptions are handled by this method.
67 static void* GetSpecialCaseDocumentToken(dom::Document
* aDocument
);
69 // For anti-tracking we need to use an isolation key. It can be the suffix of
70 // the PatitionedPrincipal (see StoragePrincipalHelper.h) or the top-level
71 // document's base domain. This is handled by this method.
72 static nsCString
GetIsolationKey(dom::Document
* aDocument
, nsIURI
* aURI
);
74 void EnsureHash() const;
76 nsCOMPtr
<nsIURI
> mURI
;
77 const OriginAttributes mOriginAttributes
;
78 void* mControlledDocument
;
79 nsCString mIsolationKey
;
80 mutable Maybe
<PLDHashNumber
> mHash
;
81 const CORSMode mCORSMode
;
85 } // namespace mozilla
87 #endif // mozilla_image_src_ImageCacheKey_h