String CookieManager::cookiesForSessionWithPrivateModeCookies(const URL& url, CookieFilter filter) { Vector<RefPtr<ParsedCookie> > cookies; getRawCookies(url, cookies, filter, false); getRawCookies(url, cookies, filter, true); // cookies for private browsing mode return getCookieString(cookies); }
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); } } }
String CookieManager::getCookie(const KURL& url, CookieFilter filter) const { if (!m_syncedWithDatabase && !m_privateMode) { LOG_ERROR("CookieManager is calling getCookies before database values are loaded."); return String(); } Vector<ParsedCookie*> rawCookies; rawCookies.reserveInitialCapacity(s_maxCookieCountPerHost); // Retrieve cookies related to this url getRawCookies(rawCookies, url, filter); CookieLog("CookieManager - there are %d cookies in raw cookies\n", rawCookies.size()); // Generate the cookie header string using the retrieved cookies StringBuilder cookieStringBuilder; cookieStringBuilder.reserveCapacity(512); size_t cookieSize = rawCookies.size(); for (size_t i = 0; i < cookieSize; i++) { cookieStringBuilder.append(rawCookies[i]->toNameValuePair()); if (i != cookieSize-1) cookieStringBuilder.append("; "); } CookieLog("CookieManager - cookieString is - %s\n", cookieStringBuilder.toString().utf8().data()); return cookieStringBuilder.toString(); }
String CookieManager::cookiesForSession(const URL& url, CookieFilter filter) { Vector<RefPtr<ParsedCookie> > cookies; getRawCookies(url, cookies, filter); return getCookieString(cookies); }
String CookieManager::getCookie(const KURL& url, CookieFilter filter) const { // If the database hasn't been sync-ed at this point, force a sync load if (!m_syncedWithDatabase && !m_privateMode) m_cookieBackingStore->openAndLoadDatabaseSynchronously(cookieJar()); Vector<RefPtr<ParsedCookie> > rawCookies; rawCookies.reserveInitialCapacity(s_maxCookieCountPerHost); // Retrieve cookies related to this url getRawCookies(rawCookies, url, filter); CookieLog("CookieManager - there are %d cookies in raw cookies\n", rawCookies.size()); // Generate the cookie header string using the retrieved cookies StringBuilder cookieStringBuilder; cookieStringBuilder.reserveCapacity(512); size_t cookieSize = rawCookies.size(); for (size_t i = 0; i < cookieSize; i++) { cookieStringBuilder.append(rawCookies[i]->toNameValuePair()); if (i != cookieSize-1) cookieStringBuilder.append("; "); } CookieLog("CookieManager - cookieString is - %s\n", cookieStringBuilder.toString().utf8().data()); return cookieStringBuilder.toString(); }
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); } } }
void InspectorPageAgent::getCookies(ErrorString*, RefPtr<InspectorArray>* cookies, WTF::String* cookiesString) { // If we can get raw cookies. ListHashSet<Cookie> rawCookiesList; // If we can't get raw cookies - fall back to String representation String stringCookiesList; // Return value to getRawCookies should be the same for every call because // the return value is platform/network backend specific, and the call will // always return the same true/false value. bool rawCookiesImplemented = false; for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext(mainFrame())) { Document* document = frame->document(); Vector<CachedResource*> allResources = cachedResourcesForFrame(frame); for (Vector<CachedResource*>::const_iterator it = allResources.begin(); it != allResources.end(); ++it) { Vector<Cookie> docCookiesList; rawCookiesImplemented = getRawCookies(document, KURL(ParsedURLString, (*it)->url()), docCookiesList); if (!rawCookiesImplemented) { // FIXME: We need duplication checking for the String representation of cookies. ExceptionCode ec = 0; stringCookiesList += document->cookie(ec); // Exceptions are thrown by cookie() in sandboxed frames. That won't happen here // because "document" is the document of the main frame of the page. ASSERT(!ec); } else { int cookiesSize = docCookiesList.size(); for (int i = 0; i < cookiesSize; i++) { if (!rawCookiesList.contains(docCookiesList[i])) rawCookiesList.add(docCookiesList[i]); } } } } if (rawCookiesImplemented) *cookies = buildArrayForCookies(rawCookiesList); else *cookiesString = stringCookiesList; }
void InspectorPageAgent::getCookies(ErrorString*, RefPtr<TypeBuilder::Array<TypeBuilder::Page::Cookie> >& cookies) { ListHashSet<Cookie> rawCookiesList; for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext(mainFrame())) { if (!frame->isLocalFrame()) continue; Document* document = toLocalFrame(frame)->document(); Vector<KURL> allURLs = allResourcesURLsForFrame(toLocalFrame(frame)); for (Vector<KURL>::const_iterator it = allURLs.begin(); it != allURLs.end(); ++it) { Vector<Cookie> docCookiesList; getRawCookies(document, *it, docCookiesList); int cookiesSize = docCookiesList.size(); for (int i = 0; i < cookiesSize; i++) { if (!rawCookiesList.contains(docCookiesList[i])) rawCookiesList.add(docCookiesList[i]); } } } cookies = buildArrayForCookies(rawCookiesList); }