mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-08 08:48:39 +09:00
Implement "cookie-averse document objects".
See: https://html.spec.whatwg.org/multipage/dom.html#cookie-averse-document-object This resolves #196.
This commit is contained in:
parent
4923ad3b10
commit
3df0152d88
3 changed files with 43 additions and 0 deletions
|
|
@ -305,6 +305,11 @@ nsContentSink::ProcessHeaderData(nsIAtom* aHeader, const nsAString& aValue,
|
|||
mDocument->SetHeaderData(aHeader, aValue);
|
||||
|
||||
if (aHeader == nsGkAtoms::setcookie) {
|
||||
// Don't allow setting cookies in cookie-averse documents.
|
||||
if (mDocument->IsCookieAverse()) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// Note: Necko already handles cookies set via the channel. We can't just
|
||||
// call SetCookie on the channel because we want to do some security checks
|
||||
// here.
|
||||
|
|
|
|||
|
|
@ -1923,6 +1923,34 @@ public:
|
|||
return mMarkedCCGeneration;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether this document is cookie-averse. See
|
||||
* https://html.spec.whatwg.org/multipage/dom.html#cookie-averse-document-object
|
||||
*/
|
||||
bool IsCookieAverse() const
|
||||
{
|
||||
// If we are a document that "has no browsing context."
|
||||
if (!GetInnerWindow()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// If we are a document "whose URL's scheme is not a network scheme."
|
||||
// NB: Explicitly allow file: URIs to store cookies.
|
||||
nsCOMPtr<nsIURI> codebaseURI;
|
||||
NodePrincipal()->GetURI(getter_AddRefs(codebaseURI));
|
||||
|
||||
if (!codebaseURI) {
|
||||
return true;
|
||||
}
|
||||
|
||||
nsAutoCString scheme;
|
||||
codebaseURI->GetScheme(scheme);
|
||||
return !scheme.EqualsLiteral("http") &&
|
||||
!scheme.EqualsLiteral("https") &&
|
||||
!scheme.EqualsLiteral("ftp") &&
|
||||
!scheme.EqualsLiteral("file");
|
||||
}
|
||||
|
||||
bool IsLoadedAsData()
|
||||
{
|
||||
return mLoadedAsData;
|
||||
|
|
|
|||
|
|
@ -1255,6 +1255,11 @@ nsHTMLDocument::GetCookie(nsAString& aCookie, ErrorResult& rv)
|
|||
rv.Throw(NS_ERROR_DOM_SECURITY_ERR);
|
||||
return;
|
||||
}
|
||||
|
||||
// If the document is a cookie-averse document, return an empty string.
|
||||
if (IsCookieAverse()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// not having a cookie service isn't an error
|
||||
nsCOMPtr<nsICookieService> service = do_GetService(NS_COOKIESERVICE_CONTRACTID);
|
||||
|
|
@ -1310,6 +1315,11 @@ nsHTMLDocument::SetCookie(const nsAString& aCookie, ErrorResult& rv)
|
|||
return;
|
||||
}
|
||||
|
||||
// If the document is a cookie-averse document, do nothing.
|
||||
if (IsCookieAverse()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// not having a cookie service isn't an error
|
||||
nsCOMPtr<nsICookieService> service = do_GetService(NS_COOKIESERVICE_CONTRACTID);
|
||||
if (service && mDocumentURI) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue