Bug 1437057 - Expose the origin of a cookie to JS, r=mayhemer

Differential Revision: https://phabricator.services.mozilla.com/D67589

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Andrea Marchesini 2020-03-24 16:47:57 +00:00
Родитель 1de24ce2ba
Коммит bd961ae216
2 изменённых файлов: 39 добавлений и 22 удалений

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

@ -5734,7 +5734,7 @@ void Document::GetCookie(nsAString& aCookie, ErrorResult& rv) {
}
}
void Document::SetCookie(const nsAString& aCookie, ErrorResult& rv) {
void Document::SetCookie(const nsAString& aCookie, ErrorResult& aRv) {
if (mDisableCookieAccess) {
return;
}
@ -5742,7 +5742,7 @@ void Document::SetCookie(const nsAString& aCookie, ErrorResult& rv) {
// If the document's sandboxed origin flag is set, access to write cookies
// is prohibited.
if (mSandboxFlags & SANDBOXED_ORIGIN) {
rv.Throw(NS_ERROR_DOM_SECURITY_ERR);
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return;
}
@ -5761,31 +5761,49 @@ void Document::SetCookie(const nsAString& aCookie, ErrorResult& rv) {
return;
}
if (!mDocumentURI) {
return;
}
// The code for getting the URI matches Navigator::CookieEnabled
nsCOMPtr<nsIURI> principalURI;
NodePrincipal()->GetURI(getter_AddRefs(principalURI));
if (!principalURI) {
// Document's principal is not a content or null (may be system), so
// can't set cookies
return;
}
nsCOMPtr<nsIChannel> channel(mChannel);
if (!channel) {
channel = CreateDummyChannelForCookies(principalURI);
if (!channel) {
return;
}
}
// not having a cookie service isn't an error
nsCOMPtr<nsICookieService> service =
do_GetService(NS_COOKIESERVICE_CONTRACTID);
if (service && mDocumentURI) {
// The code for getting the URI matches Navigator::CookieEnabled
nsCOMPtr<nsIURI> principalURI;
NodePrincipal()->GetURI(getter_AddRefs(principalURI));
if (!service) {
return;
}
if (!principalURI) {
// Document's principal is not a content or null (may be system), so
// can't set cookies
NS_ConvertUTF16toUTF8 cookie(aCookie);
nsresult rv = service->SetCookieString(principalURI, cookie, channel);
return;
}
// No warning messages here.
if (NS_FAILED(rv)) {
return;
}
nsCOMPtr<nsIChannel> channel(mChannel);
if (!channel) {
channel = CreateDummyChannelForCookies(principalURI);
if (!channel) {
return;
}
}
NS_ConvertUTF16toUTF8 cookie(aCookie);
service->SetCookieString(principalURI, cookie, channel);
nsCOMPtr<nsIObserverService> observerService =
mozilla::services::GetObserverService();
if (observerService) {
observerService->NotifyObservers(ToSupports(this), "document-set-cookie",
nsString(aCookie).get());
}
}

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

@ -2125,7 +2125,6 @@ HttpBaseChannel::GetResponseVersion(uint32_t* major, uint32_t* minor) {
void HttpBaseChannel::NotifySetCookie(const nsACString& aCookie) {
nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
if (obs) {
nsAutoString cookie;
obs->NotifyObservers(static_cast<nsIChannel*>(this),
"http-on-response-set-cookie",
NS_ConvertASCIItoUTF16(aCookie).get());