mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-15 14:25:52 +00:00
Bug 970246 - Create an http-on-response-set-cookie notification to tell when cookies are created via SET-COOKIE response header. r=honzab
This commit is contained in:
parent
4608e9dce3
commit
1511ede395
@ -26,6 +26,7 @@
|
|||||||
#include "nsICookieService.h"
|
#include "nsICookieService.h"
|
||||||
#include "nsIStreamConverterService.h"
|
#include "nsIStreamConverterService.h"
|
||||||
#include "nsCRT.h"
|
#include "nsCRT.h"
|
||||||
|
#include "nsIObserverService.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
@ -1313,6 +1314,33 @@ HttpBaseChannel::GetResponseVersion(uint32_t *major, uint32_t *minor)
|
|||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
class CookieNotifierRunnable : public nsRunnable
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CookieNotifierRunnable(HttpBaseChannel* aChannel, char const * aCookie)
|
||||||
|
: mChannel(aChannel), mCookie(aCookie)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
NS_IMETHOD Run()
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
|
||||||
|
if (obs) {
|
||||||
|
obs->NotifyObservers(static_cast<nsIChannel*>(mChannel.get()),
|
||||||
|
"http-on-response-set-cookie",
|
||||||
|
mCookie.get());
|
||||||
|
}
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
nsRefPtr<HttpBaseChannel> mChannel;
|
||||||
|
NS_ConvertASCIItoUTF16 mCookie;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
HttpBaseChannel::SetCookie(const char *aCookieHeader)
|
HttpBaseChannel::SetCookie(const char *aCookieHeader)
|
||||||
{
|
{
|
||||||
@ -1326,9 +1354,15 @@ HttpBaseChannel::SetCookie(const char *aCookieHeader)
|
|||||||
nsICookieService *cs = gHttpHandler->GetCookieService();
|
nsICookieService *cs = gHttpHandler->GetCookieService();
|
||||||
NS_ENSURE_TRUE(cs, NS_ERROR_FAILURE);
|
NS_ENSURE_TRUE(cs, NS_ERROR_FAILURE);
|
||||||
|
|
||||||
return cs->SetCookieStringFromHttp(mURI, nullptr, nullptr, aCookieHeader,
|
nsresult rv =
|
||||||
mResponseHead->PeekHeader(nsHttp::Date),
|
cs->SetCookieStringFromHttp(mURI, nullptr, nullptr, aCookieHeader,
|
||||||
this);
|
mResponseHead->PeekHeader(nsHttp::Date), this);
|
||||||
|
if (NS_SUCCEEDED(rv)) {
|
||||||
|
nsRefPtr<CookieNotifierRunnable> r =
|
||||||
|
new CookieNotifierRunnable(this, aCookieHeader);
|
||||||
|
NS_DispatchToMainThread(r);
|
||||||
|
}
|
||||||
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
|
Loading…
Reference in New Issue
Block a user