Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(214)

Side by Side Diff: net/cookies/cookie_monster.cc

Issue 683113005: Update from chromium https://crrev.com/302282 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/cookies/cookie_monster.h ('k') | net/cookies/cookie_monster_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Portions of this code based on Mozilla: 5 // Portions of this code based on Mozilla:
6 // (netwerk/cookie/src/nsCookieService.cpp) 6 // (netwerk/cookie/src/nsCookieService.cpp)
7 /* ***** BEGIN LICENSE BLOCK ***** 7 /* ***** BEGIN LICENSE BLOCK *****
8 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 8 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
9 * 9 *
10 * The contents of this file are subject to the Mozilla Public License Version 10 * The contents of this file are subject to the Mozilla Public License Version
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 // and a value of AAAA. When it sends the cookie back, it will send AAAA, 300 // and a value of AAAA. When it sends the cookie back, it will send AAAA,
301 // so we need to avoid sending =AAAA for a blank token value. 301 // so we need to avoid sending =AAAA for a blank token value.
302 if (!(*it)->Name().empty()) 302 if (!(*it)->Name().empty())
303 cookie_line += (*it)->Name() + "="; 303 cookie_line += (*it)->Name() + "=";
304 cookie_line += (*it)->Value(); 304 cookie_line += (*it)->Value();
305 } 305 }
306 return cookie_line; 306 return cookie_line;
307 } 307 }
308 308
309 void RunAsync(scoped_refptr<base::TaskRunner> proxy, 309 void RunAsync(scoped_refptr<base::TaskRunner> proxy,
310 const CookieStore::CookieChangedCallback& callback) { 310 const CookieStore::CookieChangedCallback& callback,
311 proxy->PostTask(FROM_HERE, callback); 311 const CanonicalCookie& cookie,
312 bool removed) {
313 proxy->PostTask(FROM_HERE, base::Bind(callback, cookie, removed));
312 } 314 }
313 315
314 } // namespace 316 } // namespace
315 317
316 CookieMonster::CookieMonster(PersistentCookieStore* store, 318 CookieMonster::CookieMonster(PersistentCookieStore* store,
317 CookieMonsterDelegate* delegate) 319 CookieMonsterDelegate* delegate)
318 : initialized_(false), 320 : initialized_(false),
319 loaded_(store == NULL), 321 loaded_(store == NULL),
320 store_(store), 322 store_(store),
321 last_access_threshold_( 323 last_access_threshold_(
(...skipping 1453 matching lines...) Expand 10 before | Expand all | Expand 10 after
1775 1777
1776 if ((cc->IsPersistent() || persist_session_cookies_) && store_.get() && 1778 if ((cc->IsPersistent() || persist_session_cookies_) && store_.get() &&
1777 sync_to_store) 1779 sync_to_store)
1778 store_->AddCookie(*cc); 1780 store_->AddCookie(*cc);
1779 CookieMap::iterator inserted = 1781 CookieMap::iterator inserted =
1780 cookies_.insert(CookieMap::value_type(key, cc)); 1782 cookies_.insert(CookieMap::value_type(key, cc));
1781 if (delegate_.get()) { 1783 if (delegate_.get()) {
1782 delegate_->OnCookieChanged( 1784 delegate_->OnCookieChanged(
1783 *cc, false, CookieMonsterDelegate::CHANGE_COOKIE_EXPLICIT); 1785 *cc, false, CookieMonsterDelegate::CHANGE_COOKIE_EXPLICIT);
1784 } 1786 }
1787 RunCallbacks(*cc, false);
1785 1788
1786 return inserted; 1789 return inserted;
1787 } 1790 }
1788 1791
1789 bool CookieMonster::SetCookieWithCreationTimeAndOptions( 1792 bool CookieMonster::SetCookieWithCreationTimeAndOptions(
1790 const GURL& url, 1793 const GURL& url,
1791 const std::string& cookie_line, 1794 const std::string& cookie_line,
1792 const Time& creation_time_or_null, 1795 const Time& creation_time_or_null,
1793 const CookieOptions& options) { 1796 const CookieOptions& options) {
1794 lock_.AssertAcquired(); 1797 lock_.AssertAcquired();
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1831 if (!already_expired || keep_expired_cookies_) { 1834 if (!already_expired || keep_expired_cookies_) {
1832 // See InitializeHistograms() for details. 1835 // See InitializeHistograms() for details.
1833 if ((*cc)->IsPersistent()) { 1836 if ((*cc)->IsPersistent()) {
1834 histogram_expiration_duration_minutes_->Add( 1837 histogram_expiration_duration_minutes_->Add(
1835 ((*cc)->ExpiryDate() - creation_time).InMinutes()); 1838 ((*cc)->ExpiryDate() - creation_time).InMinutes());
1836 } 1839 }
1837 1840
1838 { 1841 {
1839 CanonicalCookie cookie = *(cc->get()); 1842 CanonicalCookie cookie = *(cc->get());
1840 InternalInsertCookie(key, cc->release(), true); 1843 InternalInsertCookie(key, cc->release(), true);
1841 RunCallbacks(cookie);
1842 } 1844 }
1843 } else { 1845 } else {
1844 VLOG(kVlogSetCookies) << "SetCookie() not storing already expired cookie."; 1846 VLOG(kVlogSetCookies) << "SetCookie() not storing already expired cookie.";
1845 } 1847 }
1846 1848
1847 // We assume that hopefully setting a cookie will be less common than 1849 // We assume that hopefully setting a cookie will be less common than
1848 // querying a cookie. Since setting a cookie can put us over our limits, 1850 // querying a cookie. Since setting a cookie can put us over our limits,
1849 // make sure that we garbage collect... We can also make the assumption that 1851 // make sure that we garbage collect... We can also make the assumption that
1850 // if a cookie was set, in the common case it will be used soon after, 1852 // if a cookie was set, in the common case it will be used soon after,
1851 // and we will purge the expired cookies in GetCookies(). 1853 // and we will purge the expired cookies in GetCookies().
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1896 1898
1897 if ((cc->IsPersistent() || persist_session_cookies_) && store_.get() && 1899 if ((cc->IsPersistent() || persist_session_cookies_) && store_.get() &&
1898 sync_to_store) 1900 sync_to_store)
1899 store_->DeleteCookie(*cc); 1901 store_->DeleteCookie(*cc);
1900 if (delegate_.get()) { 1902 if (delegate_.get()) {
1901 ChangeCausePair mapping = ChangeCauseMapping[deletion_cause]; 1903 ChangeCausePair mapping = ChangeCauseMapping[deletion_cause];
1902 1904
1903 if (mapping.notify) 1905 if (mapping.notify)
1904 delegate_->OnCookieChanged(*cc, true, mapping.cause); 1906 delegate_->OnCookieChanged(*cc, true, mapping.cause);
1905 } 1907 }
1908 RunCallbacks(*cc, true);
1906 cookies_.erase(it); 1909 cookies_.erase(it);
1907 RunCallbacks(*cc);
1908 delete cc; 1910 delete cc;
1909 } 1911 }
1910 1912
1911 // Domain expiry behavior is unchanged by key/expiry scheme (the 1913 // Domain expiry behavior is unchanged by key/expiry scheme (the
1912 // meaning of the key is different, but that's not visible to this routine). 1914 // meaning of the key is different, but that's not visible to this routine).
1913 int CookieMonster::GarbageCollect(const Time& current, 1915 int CookieMonster::GarbageCollect(const Time& current,
1914 const std::string& key) { 1916 const std::string& key) {
1915 lock_.AssertAcquired(); 1917 lock_.AssertAcquired();
1916 1918
1917 int num_deleted = 0; 1919 int num_deleted = 0;
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after
2314 2316
2315 scoped_ptr<CookieStore::CookieChangedSubscription> 2317 scoped_ptr<CookieStore::CookieChangedSubscription>
2316 CookieMonster::AddCallbackForCookie( 2318 CookieMonster::AddCallbackForCookie(
2317 const GURL& gurl, 2319 const GURL& gurl,
2318 const std::string& name, 2320 const std::string& name,
2319 const CookieChangedCallback& callback) { 2321 const CookieChangedCallback& callback) {
2320 base::AutoLock autolock(lock_); 2322 base::AutoLock autolock(lock_);
2321 std::pair<GURL, std::string> key(gurl, name); 2323 std::pair<GURL, std::string> key(gurl, name);
2322 if (hook_map_.count(key) == 0) 2324 if (hook_map_.count(key) == 0)
2323 hook_map_[key] = make_linked_ptr(new CookieChangedCallbackList()); 2325 hook_map_[key] = make_linked_ptr(new CookieChangedCallbackList());
2324 return hook_map_[key]->Add(base::Bind( 2326 return hook_map_[key]->Add(
2325 &RunAsync, base::MessageLoopProxy::current(), callback)); 2327 base::Bind(&RunAsync, base::MessageLoopProxy::current(), callback));
2326 } 2328 }
2327 2329
2328 void CookieMonster::RunCallbacks(const CanonicalCookie& cookie) { 2330 void CookieMonster::RunCallbacks(const CanonicalCookie& cookie, bool removed) {
2329 lock_.AssertAcquired(); 2331 lock_.AssertAcquired();
2330 CookieOptions opts; 2332 CookieOptions opts;
2331 opts.set_include_httponly(); 2333 opts.set_include_httponly();
2332 // Note that the callbacks in hook_map_ are wrapped with MakeAsync(), so they 2334 // Note that the callbacks in hook_map_ are wrapped with MakeAsync(), so they
2333 // are guaranteed to not take long - they just post a RunAsync task back to 2335 // are guaranteed to not take long - they just post a RunAsync task back to
2334 // the appropriate thread's message loop and return. It is important that this 2336 // the appropriate thread's message loop and return. It is important that this
2335 // method not run user-supplied callbacks directly, since the CookieMonster 2337 // method not run user-supplied callbacks directly, since the CookieMonster
2336 // lock is held and it is easy to accidentally introduce deadlocks. 2338 // lock is held and it is easy to accidentally introduce deadlocks.
2337 for (CookieChangedHookMap::iterator it = hook_map_.begin(); 2339 for (CookieChangedHookMap::iterator it = hook_map_.begin();
2338 it != hook_map_.end(); ++it) { 2340 it != hook_map_.end(); ++it) {
2339 std::pair<GURL, std::string> key = it->first; 2341 std::pair<GURL, std::string> key = it->first;
2340 if (cookie.IncludeForRequestURL(key.first, opts) && 2342 if (cookie.IncludeForRequestURL(key.first, opts) &&
2341 cookie.Name() == key.second) { 2343 cookie.Name() == key.second) {
2342 it->second->Notify(); 2344 it->second->Notify(cookie, removed);
2343 } 2345 }
2344 } 2346 }
2345 } 2347 }
2346 2348
2347 } // namespace net 2349 } // namespace net
OLDNEW
« no previous file with comments | « net/cookies/cookie_monster.h ('k') | net/cookies/cookie_monster_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698