ACME-755 Clear FB cookies by removing cookies from the .facebook.com domain

master
Gilbert Gonzales 2013-07-26 18:49:31 -07:00
parent 0254b74abf
commit 7b56020d66
3 changed files with 32 additions and 2 deletions

View File

@ -87,6 +87,16 @@ std::string LLPluginCookieStore::Cookie::getKey() const
return result;
}
std::string LLPluginCookieStore::Cookie::getDomain() const
{
std::string result;
if(mDomainEnd > mDomainStart)
{
result += mCookie.substr(mDomainStart, mDomainEnd - mDomainStart);
}
return result;
}
bool LLPluginCookieStore::Cookie::parse(const std::string &host)
{
bool first_field = true;
@ -662,3 +672,19 @@ void LLPluginCookieStore::removeCookie(const std::string &key)
}
}
void LLPluginCookieStore::removeCookiesByDomain(const std::string &domain)
{
cookie_map_t::iterator iter = mCookies.begin();
while(iter != mCookies.end())
{
if(iter->second->getDomain() == domain)
{
delete iter->second;
iter = mCookies.erase(iter);
}
else
{
++iter;
}
}
}

View File

@ -67,6 +67,8 @@ public:
// quote or unquote a string as per the definition of 'quoted-string' in rfc2616
static std::string quoteString(const std::string &s);
static std::string unquoteString(const std::string &s);
void removeCookiesByDomain(const std::string &domain);
private:
@ -79,6 +81,7 @@ private:
// Construct a string from the cookie that uniquely represents it, to be used as a key in a std::map.
std::string getKey() const;
std::string getDomain() const;
const std::string &getCookie() const { return mCookie; };
bool isSessionCookie() const { return mDate.isNull(); };

View File

@ -39,6 +39,7 @@
#include "llresmgr.h" // LLLocale
#include "llsdserialize.h"
#include "llloadingindicator.h"
#include "llplugincookiestore.h"
#include "llslurl.h"
#include "lltrans.h"
#include "llsnapshotlivepreview.h"
@ -759,8 +760,8 @@ void LLSocialAccountPanel::onConnect()
{
LLFacebookConnect::instance().checkConnectionToFacebook(true);
//Clears browser cookies so that the user must enter their FB creds when connecting/re-connecting
LLViewerMedia::clearAllCookies();
//Clear only the facebook browser cookies so that the facebook login screen appears
LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com");
}
void LLSocialAccountPanel::onDisconnect()