本文整理汇总了C++中ParsedCookie类的典型用法代码示例。如果您正苦于以下问题:C++ ParsedCookie类的具体用法?C++ ParsedCookie怎么用?C++ ParsedCookie使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ParsedCookie类的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: void
void CookieManager::removeCookieWithName(const KURL& url, const String& cookieName)
{
// Dispatch the message because the database cookies are not loaded in memory yet.
if (!m_syncedWithDatabase && !m_privateMode) {
typedef void (WebCore::CookieManager::*FunctionType)(const KURL&, const String&);
BlackBerry::Platform::webKitThreadMessageClient()->dispatchMessage(
BlackBerry::Platform::createMethodCallMessage<FunctionType, CookieManager, const KURL, const String>(
&CookieManager::removeCookieWithName, this, url, cookieName));
return;
}
// We get all cookies from all domains that domain matches the request domain
// and delete any cookies with the specified name that path matches the request path
Vector<ParsedCookie*> results;
getRawCookies(results, url, WithHttpOnlyCookies);
// Delete the cookies that path matches the request path
for (size_t i = 0; i < results.size(); i++) {
ParsedCookie* cookie = results[i];
if (!equalIgnoringCase(cookie->name(), cookieName))
continue;
if (url.path().startsWith(cookie->path(), false)) {
cookie->forceExpire();
checkAndTreatCookie(cookie, RemoveFromBackingStore);
}
}
}
示例2: ASSERT_UNUSED
void CookieManager::cookieLimitCleanUp(Timer<CookieManager>* timer)
{
ASSERT_UNUSED(timer, timer == &m_limitTimer);
CookieLimitLog("CookieManager - Starting cookie clean up");
size_t numberOfCookiesOverLimit = (m_count > s_globalMaxCookieCount) ? m_count - s_globalMaxCookieCount : 0;
size_t amountToDelete = s_cookiesToDeleteWhenLimitReached + numberOfCookiesOverLimit;
CookieLimitLog("CookieManager - Excess: %d Amount to Delete: %d", numberOfCookiesOverLimit, amountToDelete);
// Call the database to delete 'amountToDelete' of cookies
Vector<ParsedCookie*> cookiesToDelete;
cookiesToDelete.reserveInitialCapacity(amountToDelete);
CookieLimitLog("CookieManager - Calling database to clean up");
m_cookieBackingStore->getCookiesFromDatabase(cookiesToDelete, amountToDelete);
// Cookies are ordered in ASC order by lastAccessed
for (size_t i = 0; i < amountToDelete; ++i) {
// Expire them and call checkandtreat to delete them from memory and database
ParsedCookie* newCookie = cookiesToDelete[i];
CookieLimitLog("CookieManager - Expire cookie: %s and delete", newCookie->toString().utf8().data());
newCookie->forceExpire();
checkAndTreatCookie(newCookie, RemoveFromBackingStore);
}
CookieLimitLog("CookieManager - Cookie clean up complete.");
}
示例3: CookieLog
void CookieManager::update(CookieMap* targetMap, ParsedCookie* newCookie, BackingStoreRemovalPolicy postToBackingStore)
{
// If old cookie is non-session and new one is, we have to delete it from backingstore
// If new cookie is non-session and old one is, we have to add it to backingstore
// If both sessions are non-session, then we update it in the backingstore
CookieLog("CookieManager - updating new cookie - %s.\n", newCookie->toString().utf8().data());
ParsedCookie* oldCookie = targetMap->updateCookie(newCookie);
ASSERT(oldCookie);
if (postToBackingStore == RemoveFromBackingStore) {
bool newIsSession = newCookie->isSession();
bool oldIsSession = oldCookie->isSession();
if (!newIsSession && !oldIsSession)
m_cookieBackingStore->update(newCookie);
else if (newIsSession && !oldIsSession) {
// Must manually decrease the counter because it was not counted when
// the cookie was removed in cookieMap.
removedCookie();
m_cookieBackingStore->remove(oldCookie);
} else if (!newIsSession && oldIsSession) {
// Must manually increase the counter because it was not counted when
// the cookie was added in cookieMap.
addedCookie();
m_cookieBackingStore->insert(newCookie);
}
}
delete oldCookie;
}
示例4: getRawCookies
void CookieManager::removeCookieWithName(const KURL& url, const String& cookieName)
{
// We get all cookies from all domains that domain matches the request domain
// and delete any cookies with the specified name that path matches the request path
Vector<ParsedCookie*> results;
getRawCookies(results, url, WithHttpOnlyCookies);
// Delete the cookies that path matches the request path
for (size_t i = 0; i < results.size(); i++) {
ParsedCookie* cookie = results[i];
if (!equalIgnoringCase(cookie->name(), cookieName))
continue;
if (url.path().startsWith(cookie->path(), false)) {
cookie->forceExpire();
checkAndTreatCookie(cookie, RemoveFromBackingStore);
}
}
}
示例5: cookieBackingStore
void CookieManager::getBackingStoreCookies()
{
Vector<ParsedCookie*> cookies = cookieBackingStore().getAllCookies();
for (size_t i = 0; i < cookies.size(); ++i) {
ParsedCookie* newCookie = cookies[i];
if (newCookie->hasExpired()) {
cookieBackingStore().remove(newCookie);
delete newCookie;
} else {
CookieMap* curMap = m_managerMap.get(newCookie->domain());
if (!curMap) {
curMap = new CookieMap();
m_managerMap.add(newCookie->domain(), curMap);
}
// Use the straightforward add
curMap->add(newCookie);
m_count++;
}
}
}
示例6: addCookieToMap
void CookieManager::addCookieToMap(CookieMap* targetMap, ParsedCookie* candidateCookie, BackingStoreRemovalPolicy postToBackingStore)
{
ParsedCookie* oldestCookie = 0;
// Check if we have not reached the per cookie domain limit.
// If that is not true, we check if the global limit has been reached if backingstore mode is on
// Two points:
// 1) We only do a global check if backingstore mode is on because the global cookie limit only
// counts session cookies that are saved in the database. If the user goes over the limit
// when they are in private mode, we know that the total cookie limit will be under the limit
// once the user goes back to normal mode (memory deleted and reloaded from the database)
// 2) We use else if for this statement because if we remove a cookie in the 1st statement
// then it means the global count will never exceed the limit
CookieLimitLog("CookieManager - local count: %d global count: %d", targetMap->count(), m_count);
if (targetMap->count() >= s_maxCookieCountPerHost) {
CookieLog("CookieManager - deleting oldest cookie from this map due to domain count.\n");
oldestCookie = targetMap->removeOldestCookie();
} else if (m_count >= s_globalMaxCookieCount && (postToBackingStore != DoNotRemoveFromBackingStore)) {
CookieLimitLog("CookieManager - Global limit reached, initiate cookie limit clean up.");
initiateCookieLimitCleanUp();
}
CookieLog("CookieManager - adding new cookie - %s.\n", candidateCookie->toString().utf8().data());
targetMap->addCookie(candidateCookie);
// Only add non session cookie to the backing store.
if (postToBackingStore == RemoveFromBackingStore) {
if (oldestCookie && !oldestCookie->isSession()) {
CookieLog("CookieManager - oldestCookie exists, deleting it from backingstore and destructing.\n");
m_cookieBackingStore->remove(oldestCookie);
}
if (!candidateCookie->isSession())
m_cookieBackingStore->insert(candidateCookie);
}
if (oldestCookie)
delete oldestCookie;
}
示例7: httpsPrefix
String CookieManager::getCookie(const KURL& url, HttpOnlyCookieFiltering filter)
{
bool isConnectionSecure = false;
static String httpsPrefix("https:");
if (url.string().startsWith(httpsPrefix, false))
isConnectionSecure = true;
// The max size is the number of cookie per host multiplied by the maximum length of a cookie. We add 1 for the final '\0'.
static const size_t cookiesMaxLength = s_maxCookieLength * s_maxCookieCountPerHost + 1;
Vector<UChar> cookiePairs;
cookiePairs.reserveInitialCapacity(cookiesMaxLength);
for (HashMap<String, CookieMap*>::iterator it = m_managerMap.begin(); it != m_managerMap.end(); ++it) {
// Handle sub-domain by only looking at the end of the host.
if (it->first.endsWith(url.host()) || (it->first.startsWith(".", false) && ("." + url.host()).endsWith(it->first, false))) {
// Get CookieMap to check for expired cookies.
Vector<ParsedCookie*> cookies = it->second->getCookies();
for (size_t i = 0; i < cookies.size(); ++i) {
ParsedCookie* cookie = cookies[i];
// Get the cookies filtering out the secure cookies on an unsecure connection and HttpOnly cookies if requested.
if (url.path().startsWith(cookie->path(), false) && (isConnectionSecure || !cookie->isSecure()) && (filter == WithHttpOnlyCookies || !cookie->isHttpOnly())) {
String nameValuePair = cookie->toNameValuePair();
append(cookiePairs, nameValuePair);
}
}
}
}
// Per construction of our cookies, we should not grow our vector.
ASSERT(cookiePairs.capacity() == cookiesMaxLength);
// Append the final '\0'.
static const String nullTerminator("\0");
append(cookiePairs, nullTerminator);
return String::adopt(cookiePairs);
}
示例8: ParsedCookie
// The cookie String passed into this method will only contian the name value pairs as well as other related cookie
// attributes such as max-age and domain. Set-Cookie should never be part of this string.
ParsedCookie* CookieParser::parseOneCookie(const String& cookie, unsigned start, unsigned end, double curTime)
{
ParsedCookie* res = new ParsedCookie(curTime);
if (!res)
LOG_AND_DELETE("Out of memory");
res->setProtocol(m_defaultCookieURL.protocol());
// Parse [NAME "="] VALUE
unsigned tokenEnd = start; // Token end contains the position of the '=' or the end of a token
unsigned pairEnd = start; // Pair end contains always the position of the ';'
// find the *first* ';' and the '=' (if they exist)
bool quoteFound = false;
bool foundEqual = false;
while (pairEnd < end && (cookie[pairEnd] != ';' || quoteFound)) {
if (tokenEnd == start && cookie[pairEnd] == '=') {
tokenEnd = pairEnd;
foundEqual = true;
}
if (cookie[pairEnd] == '"')
quoteFound = !quoteFound;
pairEnd++;
}
unsigned tokenStart = start;
bool hasName = false; // This is a hack to avoid changing too much in this
// brutally brittle code.
if (tokenEnd != start) {
// There is a '=' so parse the NAME
unsigned nameEnd = tokenEnd;
// The tokenEnd is the position of the '=' so the nameEnd is one less
nameEnd--;
// Remove lightweight spaces.
while (nameEnd && isLightweightSpace(cookie[nameEnd]))
nameEnd--;
while (tokenStart < nameEnd && isLightweightSpace(cookie[tokenStart]))
tokenStart++;
if (nameEnd + 1 <= tokenStart)
LOG_AND_DELETE("Empty name. Rejecting the cookie");
String name = cookie.substring(tokenStart, nameEnd + 1 - start);
res->setName(name);
hasName = true;
}
// Now parse the VALUE
tokenStart = tokenEnd + 1;
if (!hasName)
--tokenStart;
// Skip lightweight spaces in our token
while (tokenStart < pairEnd && isLightweightSpace(cookie[tokenStart]))
tokenStart++;
tokenEnd = pairEnd;
while (tokenEnd > tokenStart && isLightweightSpace(cookie[tokenEnd - 1]))
tokenEnd--;
String value;
if (tokenEnd == tokenStart) {
// Firefox accepts empty value so we will do the same
value = String();
} else
value = cookie.substring(tokenStart, tokenEnd - tokenStart);
if (hasName)
res->setValue(value);
else if (foundEqual) {
delete res;
return 0;
} else
res->setName(value); // No NAME=VALUE, only NAME
while (pairEnd < end) {
// Switch to the next pair as pairEnd is on the ';' and fast-forward any lightweight spaces.
pairEnd++;
while (pairEnd < end && isLightweightSpace(cookie[pairEnd]))
pairEnd++;
tokenStart = pairEnd;
tokenEnd = tokenStart; // initialize token end to catch first '='
while (pairEnd < end && cookie[pairEnd] != ';') {
if (tokenEnd == tokenStart && cookie[pairEnd] == '=')
tokenEnd = pairEnd;
pairEnd++;
}
// FIXME : should we skip lightweight spaces here ?
unsigned length = tokenEnd - tokenStart;
//.........这里部分代码省略.........
示例9: ASSERT
void CookieDatabaseBackingStore::invokeSendChangesToDatabase()
{
ASSERT(isCurrentThread());
if (!m_db.isOpen()) {
LOG_ERROR("Timer Fired, but database is closed.");
return;
}
Vector<CookieAction> changedCookies;
{
MutexLocker lock(m_mutex);
changedCookies.swap(m_changedCookies);
ASSERT(m_changedCookies.isEmpty());
}
if (changedCookies.isEmpty()) {
CookieLog("CookieBackingStore - Timer fired, but no cookies in changelist");
return;
}
CookieLog("CookieBackingStore - Timer fired, sending changes to database. We have %d changes", changedCookies.size());
SQLiteTransaction transaction(m_db, false);
transaction.begin();
// Iterate through every element in the change list to make calls
// If error occurs, ignore it and continue to the next statement
size_t sizeOfChange = changedCookies.size();
for (size_t i = 0; i < sizeOfChange; i++) {
SQLiteStatement* m_statement;
const ParsedCookie cookie = changedCookies[i].first;
UpdateParameter action = changedCookies[i].second;
if (action == Delete) {
m_statement = m_deleteStatement;
CookieLog("CookieBackingStore - deleting cookie %s.", cookie.toString().utf8().data());
// Binds all the values
if (m_statement->bindText(1, cookie.name()) || m_statement->bindText(2, cookie.domain())
|| m_statement->bindText(3, cookie.path()) || m_statement->bindText(4, cookie.protocol())) {
LOG_ERROR("Cannot bind cookie data to delete");
LOG_ERROR("SQLite Error Message: %s", m_db.lastErrorMsg());
ASSERT_NOT_REACHED();
continue;
}
} else {
if (action == Update) {
CookieLog("CookieBackingStore - updating cookie %s.", cookie.toString().utf8().data());
m_statement = m_updateStatement;
} else {
CookieLog("CookieBackingStore - inserting cookie %s.", cookie.toString().utf8().data());
m_statement = m_insertStatement;
}
// Binds all the values
if (m_statement->bindText(1, cookie.name()) || m_statement->bindText(2, cookie.value())
|| m_statement->bindText(3, cookie.domain()) || m_statement->bindText(4, cookie.path())
|| m_statement->bindDouble(5, cookie.expiry()) || m_statement->bindDouble(6, cookie.lastAccessed())
|| m_statement->bindInt64(7, cookie.isSecure()) || m_statement->bindInt64(8, cookie.isHttpOnly())
|| m_statement->bindDouble(9, cookie.creationTime()) || m_statement->bindText(10, cookie.protocol())) {
LOG_ERROR("Cannot bind cookie data to save");
LOG_ERROR("SQLite Error Message: %s", m_db.lastErrorMsg());
ASSERT_NOT_REACHED();
continue;
}
}
int rc = m_statement->step();
m_statement->reset();
if (rc != SQLResultOk && rc != SQLResultDone) {
LOG_ERROR("Cannot make call to the database");
LOG_ERROR("SQLite Error Message: %s", m_db.lastErrorMsg());
ASSERT_NOT_REACHED();
continue;
}
}
transaction.commit();
CookieLog("CookieBackingStore - transaction complete");
}
示例10: ParsedCookie
// Parse the string without "Set-Cookie" according to Firefox grammar (loosely RFC 2109 compliant)
// see netwerk/cookie/src/nsCookieService.cpp comment for it
ParsedCookie* CookieParser::parseOneCookie(const String& cookie, unsigned start, unsigned end, double curTime)
{
ParsedCookie* res = new ParsedCookie(curTime);
if (!res) {
LOG_ERROR("Out of memory");
return 0;
}
// Parse [NAME "="] VALUE
unsigned tokenEnd = start; // Token end contains the position of the '=' or the end of a token
unsigned pairEnd = start; // Pair end contains always the position of the ';'
// find the *first* ';' and the '=' (if they exist)
// FIXME : should handle quoted string
while (pairEnd < end && cookie[pairEnd] != ';') {
if (tokenEnd == start && cookie[pairEnd] == '=')
tokenEnd = pairEnd;
pairEnd++;
}
unsigned tokenStart = start;
if (tokenEnd != start) {
// There is a '=' so parse the NAME
unsigned nameEnd = tokenEnd;
// Remove lightweight spaces.
while (nameEnd && isLightweightSpace(cookie[nameEnd]))
nameEnd--;
while (tokenStart < nameEnd && isLightweightSpace(cookie[tokenStart]))
tokenStart++;
if (nameEnd == tokenStart) {
LOG_ERROR("Empty name. Rejecting the cookie");
delete res;
return 0;
}
String name = cookie.substring(tokenStart, nameEnd - start);
res->setName(name);
}
// Now parse the VALUE
tokenStart = tokenEnd + 1;
// Skip lightweight spaces in our token
while (tokenStart < pairEnd && isLightweightSpace(cookie[tokenStart]))
tokenStart++;
tokenEnd = pairEnd;
while (tokenEnd > tokenStart && isLightweightSpace(cookie[tokenEnd]))
tokenEnd--;
String value;
if (tokenEnd == tokenStart) {
// Firefox accepts empty value so we will do the same
value = String();
} else
value = cookie.substring(tokenStart, tokenEnd - tokenStart);
res->setValue(value);
while (pairEnd < end) {
// Switch to the next pair as pairEnd is on the ';' and fast-forward any lightweight spaces.
pairEnd++;
while (pairEnd < end && isLightweightSpace(cookie[pairEnd]))
pairEnd++;
tokenStart = pairEnd;
tokenEnd = tokenStart; // initiliasize token end to catch first '='
while (pairEnd < end && cookie[pairEnd] != ';') {
if (tokenEnd == tokenStart && cookie[pairEnd] == '=')
tokenEnd = pairEnd;
pairEnd++;
}
// FIXME : should we skip lightweight spaces here ?
unsigned length = tokenEnd - tokenStart;
unsigned tokenStartSvg = tokenStart;
String parsedValue;
if (tokenStart != tokenEnd) {
// There is an equal sign so remove lightweight spaces in VALUE
tokenStart = tokenEnd + 1;
while (tokenStart < pairEnd && isLightweightSpace(cookie[tokenStart]))
tokenStart++;
tokenEnd = pairEnd;
while (tokenEnd > tokenStart && isLightweightSpace(cookie[tokenEnd]))
tokenEnd--;
parsedValue = cookie.substring(tokenStart, tokenEnd - tokenStart);
} else {
//.........这里部分代码省略.........
示例11: LOG_ERROR
void CookieManager::getRawCookies(Vector<ParsedCookie*> &stackOfCookies, const KURL& requestURL, CookieFilter filter) const
{
if (!m_syncedWithDatabase && !m_privateMode) {
LOG_ERROR("CookieManager is calling getRawCookies before database values are loaded.");
return;
}
CookieLog("CookieManager - getRawCookies - processing url with domain - %s & protocol: %s & path: %s\n", requestURL.host().utf8().data(), requestURL.protocol().utf8().data(), requestURL.path().utf8().data());
const bool invalidScheme = shouldIgnoreScheme(requestURL.protocol());
const bool specialCaseForWebWorks = invalidScheme && m_shouldDumpAllCookies;
const bool isConnectionSecure = requestURL.protocolIs("https") || requestURL.protocolIs("wss") || specialCaseForWebWorks;
Vector<ParsedCookie*> cookieCandidates;
Vector<CookieMap*> protocolsToSearch;
// Special Case: If a server sets a "secure" cookie over a non-secure channel and tries to access the cookie
// over a secure channel, it will not succeed because the secure protocol isn't mapped to the insecure protocol yet.
// Set the map to the non-secure version, so it'll search the mapping for a secure cookie.
CookieMap* targetMap = m_managerMap.get(requestURL.protocol());
if (!targetMap && isConnectionSecure) {
CookieLog("CookieManager - special case: secure protocol are not linked yet.");
if (requestURL.protocolIs("https"))
targetMap = m_managerMap.get("http");
else if (requestURL.protocolIs("wss"))
targetMap = m_managerMap.get("ws");
}
// Decide which scheme tree we should look at.
// Return on invalid schemes. cookies are currently disabled on file and local.
// We only want to enable them for WebWorks that enabled a special flag.
if (specialCaseForWebWorks)
copyValuesToVector(m_managerMap, protocolsToSearch);
else if (invalidScheme)
return;
else {
protocolsToSearch.append(targetMap);
// FIXME: this is a hack for webworks apps; RFC 6265 says "Cookies do not provide isolation by scheme"
// so we should not be checking protocols at all. See PR 135595
if (m_shouldDumpAllCookies) {
protocolsToSearch.append(m_managerMap.get("file"));
protocolsToSearch.append(m_managerMap.get("local"));
}
}
Vector<String> delimitedHost;
// IP addresses are stored in a particular format (due to ipv6). Reduce the ip address so we can match
// it with the one in memory.
string canonicalIP = BlackBerry::Platform::getCanonicalIPFormat(requestURL.host().utf8().data());
if (!canonicalIP.empty())
delimitedHost.append(String(canonicalIP.c_str()));
else
requestURL.host().lower().split(".", true, delimitedHost);
// Go through all the protocol trees that we need to search for
// and get all cookies that are valid for this domain
for (size_t k = 0; k < protocolsToSearch.size(); k++) {
CookieMap* currentMap = protocolsToSearch[k];
// if no cookies exist for this protocol, break right away
if (!currentMap)
continue;
CookieLog("CookieManager - looking at protocol map %s \n", currentMap->getName().utf8().data());
// Special case for local and files - because WebApps expect to get ALL cookies from the backing-store on local protocol
if (specialCaseForWebWorks) {
CookieLog("CookieManager - special case find in protocol map - %s\n", currentMap->getName().utf8().data());
currentMap->getAllChildCookies(&cookieCandidates);
} else {
// Get cookies from the null domain map
currentMap->getAllCookies(&cookieCandidates);
// Get cookies from the valid domain maps
int i = delimitedHost.size() - 1;
while (i >= 0) {
CookieLog("CookieManager - finding %s in currentmap\n", delimitedHost[i].utf8().data());
currentMap = currentMap->getSubdomainMap(delimitedHost[i]);
// if this subdomain/domain does not exist in our mapping then we simply exit
if (!currentMap) {
CookieLog("CookieManager - cannot find next map exiting the while loop.\n");
break;
}
CookieLog("CookieManager - found the map, grabbing cookies from this map\n");
currentMap->getAllCookies(&cookieCandidates);
i--;
}
}
}
CookieLog("CookieManager - there are %d cookies in candidate\n", cookieCandidates.size());
for (size_t i = 0; i < cookieCandidates.size(); ++i) {
ParsedCookie* cookie = cookieCandidates[i];
// According to the path-matches rules in RFC6265, section 5.1.4,
// we should add a '/' at the end of cookie-path for comparison if the cookie-path is not end with '/'.
String path = cookie->path();
CookieLog("CookieManager - comparing cookie path %s (len %d) to request path %s (len %d)", path.utf8().data(), path.length(), requestURL.path().utf8().data(), path.length());
//.........这里部分代码省略.........