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) { if (mDisableCookieAccess) {
return; 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 // If the document's sandboxed origin flag is set, access to write cookies
// is prohibited. // is prohibited.
if (mSandboxFlags & SANDBOXED_ORIGIN) { if (mSandboxFlags & SANDBOXED_ORIGIN) {
rv.Throw(NS_ERROR_DOM_SECURITY_ERR); aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return; return;
} }
@ -5761,10 +5761,10 @@ void Document::SetCookie(const nsAString& aCookie, ErrorResult& rv) {
return; return;
} }
// not having a cookie service isn't an error if (!mDocumentURI) {
nsCOMPtr<nsICookieService> service = return;
do_GetService(NS_COOKIESERVICE_CONTRACTID); }
if (service && mDocumentURI) {
// The code for getting the URI matches Navigator::CookieEnabled // The code for getting the URI matches Navigator::CookieEnabled
nsCOMPtr<nsIURI> principalURI; nsCOMPtr<nsIURI> principalURI;
NodePrincipal()->GetURI(getter_AddRefs(principalURI)); NodePrincipal()->GetURI(getter_AddRefs(principalURI));
@ -5784,8 +5784,26 @@ void Document::SetCookie(const nsAString& aCookie, ErrorResult& rv) {
} }
} }
// not having a cookie service isn't an error
nsCOMPtr<nsICookieService> service =
do_GetService(NS_COOKIESERVICE_CONTRACTID);
if (!service) {
return;
}
NS_ConvertUTF16toUTF8 cookie(aCookie); NS_ConvertUTF16toUTF8 cookie(aCookie);
service->SetCookieString(principalURI, cookie, channel); nsresult rv = service->SetCookieString(principalURI, cookie, channel);
// No warning messages here.
if (NS_FAILED(rv)) {
return;
}
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) { void HttpBaseChannel::NotifySetCookie(const nsACString& aCookie) {
nsCOMPtr<nsIObserverService> obs = services::GetObserverService(); nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
if (obs) { if (obs) {
nsAutoString cookie;
obs->NotifyObservers(static_cast<nsIChannel*>(this), obs->NotifyObservers(static_cast<nsIChannel*>(this),
"http-on-response-set-cookie", "http-on-response-set-cookie",
NS_ConvertASCIItoUTF16(aCookie).get()); NS_ConvertASCIItoUTF16(aCookie).get());