bool CookieMap::addOrReplaceCookie(PassRefPtr<ParsedCookie> prpCandidateCookie, RefPtr<ParsedCookie>& replacedCookie, CookieFilter filter) { RefPtr<ParsedCookie> candidateCookie = prpCandidateCookie; CookieLog("CookieMap - Attempting to add cookie - %s", cookie->name().utf8().data()); size_t cookieCount = m_cookieVector.size(); for (size_t i = 0; i < cookieCount; i++) { if (m_cookieVector[i]->name() == candidateCookie->name() && m_cookieVector[i]->path() == candidateCookie->path()) { if (filter == NoHttpOnlyCookie && m_cookieVector[i]->isHttpOnly()) return false; replacedCookie = m_cookieVector[i]; m_cookieVector[i] = candidateCookie; if (replacedCookie == m_oldestCookie) updateOldestCookie(); return true; } } m_cookieVector.append(candidateCookie); if (!candidateCookie->isSession()) cookieManager().addedCookie(); if (!m_oldestCookie || m_oldestCookie->lastAccessed() > candidateCookie->lastAccessed()) m_oldestCookie = candidateCookie; return true; }
void CookieMap::updateTime(Cookie* cookie, double newTime) { cookie->setLastAccessed(newTime); if (cookie == m_oldestCookie) updateOldestCookie(); }
Cookie* CookieMap::removeOldestCookie() { String key = m_oldestCookie->name() + m_oldestCookie->path(); Cookie* result = m_cookieMap.take(key); updateOldestCookie(); return result; }
void CookieMap::remove(const Cookie* cookie) { String key = cookie->name() + cookie->path(); // Find a previous entry for deletion Cookie* prevCookie = m_cookieMap.take(key); if (prevCookie == m_oldestCookie) updateOldestCookie(); ASSERT(prevCookie); delete prevCookie; }
PassRefPtr<ParsedCookie> CookieMap::removeCookieAtIndex(int position, const PassRefPtr<ParsedCookie> cookie) { ASSERT(0 <= position && static_cast<unsigned>(position) < m_cookieVector.size()); RefPtr<ParsedCookie> prevCookie = m_cookieVector[position]; m_cookieVector.remove(position); if (prevCookie == m_oldestCookie) updateOldestCookie(); else if (prevCookie != cookie) { // The cookie we used to search is force expired, we must do the same // to the cookie in memory too. if (cookie->isForceExpired()) prevCookie->forceExpire(); } if (!prevCookie->isSession()) cookieManager().removedCookie(); return prevCookie; }