Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
void CookieMap::updateTime(Cookie* cookie, double newTime)
{
    cookie->setLastAccessed(newTime);

    if (cookie == m_oldestCookie)
        updateOldestCookie();
}
Exemplo n.º 3
0
Cookie* CookieMap::removeOldestCookie()
{
    String key = m_oldestCookie->name() + m_oldestCookie->path();

    Cookie* result = m_cookieMap.take(key);

    updateOldestCookie();

    return result;
}
Exemplo n.º 4
0
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;
}
Exemplo n.º 5
0
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;
}