summaryrefslogtreecommitdiffstats
path: root/net/base/cookie_monster_unittest.cc
Commit message (Collapse)AuthorAgeFilesLines
* Reland r42473. Add a delegate to CookieMonster and broadcast notifications ↵jochen@chromium.org2010-03-251-38/+146
| | | | | | | | | | | | | | about changes to cookies. This change will allow implementing the experimental cookie extension API, specifically the cookies.onChaned event BUG=none TEST=net_unittests TBR=jochen@ Review URL: http://codereview.chromium.org/1287001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42586 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 42473 - Add a delegate to CookieMonster and broadcast notifications ↵dhollowa@chromium.org2010-03-241-146/+38
| | | | | | | | | | | | | | | | about changes to cookies. This change will allow implementing the experimental cookie extension API, specifically the cookies.onChanged event BUG=38398 TEST=net_unittests Review URL: http://codereview.chromium.org/1023004 TBR=jochen@chromium.org Review URL: http://codereview.chromium.org/1256003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42478 0039d316-1c4b-4281-b951-d872f2087c98
* Add a delegate to CookieMonster and broadcast notifications about changes to ↵jochen@chromium.org2010-03-241-38/+146
| | | | | | | | | | | | | cookies. This change will allow implementing the experimental cookie extension API, specifically the cookies.onChanged event BUG=38398 TEST=net_unittests Review URL: http://codereview.chromium.org/1023004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42473 0039d316-1c4b-4281-b951-d872f2087c98
* Recover from inconsistent cookie database.eroman@chromium.org2010-02-121-2/+134
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In particular, if the database has multiple cookies defined for the same (host, cookie name, cookie path), we will delete all but the most recently created cookie. This step happens right after loading the cookie database. I don't expect this to have any real impact on startup performance, since the cookie database is small, and compared to the cost of reading the DB from disk, should be cheap. This CL also includes two other related changes: (1) Added a histogram "Net.NumDuplicateCookiesInDb" that measures how common the need to remove duplicates is. (2) If the in-memory store is ever found to contain duplicates after initializion, fail hard (crash). The effect of this change will be users that had a bad database will get it fixed, and will no longer be sending duplicate cookies to servers. ----------------------- Background: ----------------------- Ok, so why does the corruption happen in the first place? From what I can tell, the problem stems from how the interface between CookieMonster and the PersistentCookieStore is defined. Notably: * It implements overwrites as "delete" + "insert" operations. * It doesn't define the behavior when a "delete" or "insert" operation fails. The steps that CookieMonster() runs through to overwrite a cookie is: (a) Find the existing cookie, |old_cookie|, in the in-memory store. (b) Delete |old_cookie| from the in-memory store. (c) Ask the persistent cookie backing store to delete |old_cookie| (keyed by its creation time) (d) Insert |new_cookie| into the in-memory store. (e) Ask the persistent backing store to insert |new_cookie|. This ordering assumes that no failures can happen during steps (c) and (e). However in actuality, SQLitePersistentCookieStore swallows any errors it encounters writing to the DB, and does not attempt retries. Here is one sequence of steps that could lead to your database getting hosed: (1) Your cookie database becomes temporarily unwritable (maybe your home directory is network mounted and your kerberose ticket just expired). (2) The browser gets a set-cookie to overwrite an existing cookie (perhaps a ping-back from gmail, which happen often). Clearly steps (c) and (e) will now fail, since the database is offline. So the in-memory store will get changed, but the on-disk one won't. (3) Now your cookie database becomes writable again (maybe you renewed the ticket). (4) Another cookie update is received. This time, the update will cause us to insert a duplicate into the cookie database. This happens because in step (c) the on-disk database is asked to delete the previous (at least according to the in-memory store) cookie. Well, the on-disk DB never wrote that value, so this has no effect, and the actual previous value remains. Next we insert the new value, kaboom. A next step will be to re-work the PersistentCookieStore interface so SQLitePersistentCookieStore isn't as fragile to errors while overwriting. BUG=17855 TEST=CookieMonsterTest.DontImportDuplicateCookies Review URL: http://codereview.chromium.org/602029 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38880 0039d316-1c4b-4281-b951-d872f2087c98
* Revert the revert... This has the cumulative effect of relanding 38694.eroman@chromium.org2010-02-111-40/+219
| | | | | | | | | | | | | | | | The chrome frame failure appears to be unrelated. Add some tests to CookieMonster for overwriting persistent cookies, and checking that the PersistentCookieStore interface is exercised correctly. Review URL: http://codereview.chromium.org/600040 TBR=eroman@chromium.org Review URL: http://codereview.chromium.org/596048 TBR=eroman@chromium.org Review URL: http://codereview.chromium.org/604012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38728 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 38694 - For some reason this seems to be hanging chrome frame tests, ↵eroman@chromium.org2010-02-101-219/+40
| | | | | | | | | | | | | even though this should be a strictly no-op change... Add some tests to CookieMonster for overwriting persistent cookies, and checking that the PersistentCookieStore interface is exercised correctly. Review URL: http://codereview.chromium.org/600040 TBR=eroman@chromium.org Review URL: http://codereview.chromium.org/596048 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38707 0039d316-1c4b-4281-b951-d872f2087c98
* Add some tests to CookieMonster for overwriting persistent cookies, and ↵eroman@chromium.org2010-02-101-40/+219
| | | | | | | | checking that the PersistentCookieStore interface is exercised correctly. Review URL: http://codereview.chromium.org/600040 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38694 0039d316-1c4b-4281-b951-d872f2087c98
* Add path filtering into the GetAllCookiesForURL.pfeldman@chromium.org2010-02-041-12/+60
| | | | | | Review URL: http://codereview.chromium.org/573011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38112 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 38001 and 38002.darin@chromium.org2010-02-031-3/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Modify CookiePolicy to work asynchronously This change will enable us to prompt the user before setting a cookie. While we only need to prompt before setting, we actually need to make both CanSetCookie and CanGetCookies asynchronous. This is necessary in order to preserve FIFO ordering since the value returned by GetCookies depends on the changes made to the cookie DB by SetCookie. This change also includes some simplification of CookieStore. Instead of N virtual functions, I distilled it down to only 4. The remaining functions are instead expressed in terms of those. While studying all the places where we currently use CookiePolicy, I found that some of them were not appropriate. After discussing with Amit, I decided to remove the policy checks in URLRequestAutomationJob. See the comments in the code regarding this. I changed the signature of CookieMonster::GetRawCookies to GetAllCookiesForURL to better match GetAllCookies. Related to this change webkit/glue/webcookie.h grows a constructor that takes a CanonicalCookie to help clean up some code. On the Chrome side, ChromeURLRequestContext now has a ChromeCookiePolicy object. That object is threadsafe ref counted because it is passed between the UI and IO threads. It is responsible for implementing the queuing logic described above. It will also in the future trigger the Chrome UI code to actually show the setcookie prompt. Please review the state machinery changes in URLRequestHttpJob carefully. R=eroman BUG=34331 TEST=no tests yet for prompting. Review URL: http://codereview.chromium.org/564045 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38028 0039d316-1c4b-4281-b951-d872f2087c98
* Back out trunk r37998.mark@chromium.org2010-02-031-4/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | Modify CookiePolicy to work asynchronously This change will enable us to prompt the user before setting a cookie. While we only need to prompt before setting, we actually need to make both CanSetCookie and CanGetCookies asynchronous. This is necessary in order to preserve FIFO ordering since the value returned by GetCookies depends on the changes made to the cookie DB by SetCookie. This change also includes some simplification of CookieStore. Instead of N virtual functions, I distilled it down to only 4. The remaining functions are instead expressed in terms of those. While studying all the places where we currently use CookiePolicy, I found that some of them were not appropriate. After discussing with Amit, I decided to remove the policy checks in URLRequestAutomationJob. See the comments in the code regarding this. I changed the signature of CookieMonster::GetRawCookies to GetAllCookiesForURL to better match GetAllCookies. I also filed a bug about making it even closer in functionality. Related to this change webkit/glue/webcookie.h grows a constructor that takes a CanonicalCookie to help clean up some code. On the Chrome side, ChromeURLRequestContext now has a ChromeCookiePolicy object. That object is threadsafe ref counted because it is passed between the UI and IO threads. It is responsible for implementing the queuing logic described above. It will also in the future trigger the Chrome UI code to actually show the setcookie prompt. Please review the state machinery changes in URLRequestHttpJob carefully. R=eroman BUG=34331 TEST=no tests yet for prompting. Review URL: http://codereview.chromium.org/567015 TBR=darin@chromium.org Review URL: http://codereview.chromium.org/562037 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38002 0039d316-1c4b-4281-b951-d872f2087c98
* Modify CookiePolicy to work asynchronouslydarin@chromium.org2010-02-031-3/+4
| | | | | | | | | | | | | | | | | | | | | This change will enable us to prompt the user before setting a cookie. While we only need to prompt before setting, we actually need to make both CanSetCookie and CanGetCookies asynchronous. This is necessary in order to preserve FIFO ordering since the value returned by GetCookies depends on the changes made to the cookie DB by SetCookie. This change also includes some simplification of CookieStore. Instead of N virtual functions, I distilled it down to only 4. The remaining functions are instead expressed in terms of those. While studying all the places where we currently use CookiePolicy, I found that some of them were not appropriate. After discussing with Amit, I decided to remove the policy checks in URLRequestAutomationJob. See the comments in the code regarding this. I changed the signature of CookieMonster::GetRawCookies to GetAllCookiesForURL to better match GetAllCookies. I also filed a bug about making it even closer in functionality. Related to this change webkit/glue/webcookie.h grows a constructor that takes a CanonicalCookie to help clean up some code. On the Chrome side, ChromeURLRequestContext now has a ChromeCookiePolicy object. That object is thread-safe ref counted because it is passed between the UI and IO threads. It is responsible for implementing the queuing logic described above. It will also in the future trigger the Chrome UI code to actually show the set-cookie prompt. Please review the state machinery changes in URLRequestHttpJob carefully. R=eroman BUG=34331 TEST=no tests yet for prompting. Review URL: http://codereview.chromium.org/567015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@37998 0039d316-1c4b-4281-b951-d872f2087c98
* DevTools: CookieMonster::GetRawCookies should return keys as well as cookies.pfeldman@chromium.org2010-02-031-8/+49
| | | | | | Review URL: http://codereview.chromium.org/565035 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@37978 0039d316-1c4b-4281-b951-d872f2087c98
* landing the issue 482008 for dmuiroshima@chromium.org2009-12-101-1/+1
| | | | | | | | | | | original cl: http://codereview.chromium.org/482008 BUG=29578 TEST=Run valgrind test Review URL: http://codereview.chromium.org/491028 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@34306 0039d316-1c4b-4281-b951-d872f2087c98
* Re-apply DevTools: Support delete cookie by name.pfeldman@chromium.org2009-10-301-0/+41
| | | | | | | | TBR=yurys Review URL: http://codereview.chromium.org/348021 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30583 0039d316-1c4b-4281-b951-d872f2087c98
* Reverting 30578.pfeldman@chromium.org2009-10-301-40/+0
| | | | | | | TBR=yurys Review URL: http://codereview.chromium.org/342057 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30580 0039d316-1c4b-4281-b951-d872f2087c98
* DevTools: Allow deleting cookies.pfeldman@chromium.org2009-10-301-0/+40
| | | | | | Review URL: http://codereview.chromium.org/350001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30578 0039d316-1c4b-4281-b951-d872f2087c98
* Missed review comment. Minor change.vandebo@chromium.org2009-10-281-2/+2
| | | | | | | | BUG=24687 TEST=unit tests still pass git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30387 0039d316-1c4b-4281-b951-d872f2087c98
* Change update threshold in CookieMonster for testing from 1s to 20ms to ↵vandebo@chromium.org2009-10-281-6/+6
| | | | | | | | | | | speedup test. BUG=24687 TEST=unit tests still pass Review URL: http://codereview.chromium.org/345012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30385 0039d316-1c4b-4281-b951-d872f2087c98
* This CL changes the CookieStore obect to be a refcounted object to get a ↵ananta@chromium.org2009-09-051-247/+252
| | | | | | | | | | | | better handle on its lifetime as there are cases where this object is handed out to URLRequestContext instances which outlive the URLRequestContext object which created it. Partial fix for http://code.google.com/p/chromium/issues/detail?id=15289 Bug=15289 Review URL: http://codereview.chromium.org/197023 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25558 0039d316-1c4b-4281-b951-d872f2087c98
* Convert internal time format to Windows 1601 epoch on Linux & Mac.brettw@chromium.org2009-08-261-0/+11
| | | | | | | | | | | Although we represent time internally starting from 1601, there are still things like time explosion that will not work before the year 1900. This limitation is the same as it was previously. BUG=14734 Review URL: http://codereview.chromium.org/173296 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24417 0039d316-1c4b-4281-b951-d872f2087c98
* Navigation and cookies for Automationamit@chromium.org2009-07-281-2/+2
| | | | | | | | | | | | | Give Automation better visibility and control over navigations. Also, make it possible for automation to implement a dummy cookie store to go with dummy request serving over automation. BUG=none TEST=none Review URL: http://codereview.chromium.org/159189 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21836 0039d316-1c4b-4281-b951-d872f2087c98
* Increase cookie limit to 3000. This matches Firefox 3.5 and Firefox ↵pkasting@chromium.org2009-06-031-4/+4
| | | | | | | | trunk.BUG=8850 Review URL: http://codereview.chromium.org/118011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17501 0039d316-1c4b-4281-b951-d872f2087c98
* Add a separate cookie store that's used for extensions.mpcomplete@google.com2009-05-141-0/+17
| | | | | | | Modify CookieMonster to support overriding the "cookieable schemes". Review URL: http://codereview.chromium.org/115204 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16083 0039d316-1c4b-4281-b951-d872f2087c98
* NO CODE CHANGEdeanm@chromium.org2009-03-111-1/+0
| | | | | | | | | Normalize end of file newlines in net/. All files end in a single newline. Review URL: http://codereview.chromium.org/43079 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11442 0039d316-1c4b-4281-b951-d872f2087c98
* Fixes CRLF and trailing white spaces.maruel@chromium.org2009-03-051-1/+1
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10982 0039d316-1c4b-4281-b951-d872f2087c98
* Support domain=IPADDR if it matches the url ip address exactly.deanm@chromium.org2009-01-231-0/+6
| | | | | | | | | | | This doesn't do anything special to handle ipv6, dotless ip address, etc. BUG=3699 Review URL: http://codereview.chromium.org/18657 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8551 0039d316-1c4b-4281-b951-d872f2087c98
* CookieMonster quote parsing changes and tests.deanm@chromium.org2009-01-091-14/+68
| | | | | | | | | | | | | | | | | This fixes one bug where a cookie like: A="BBB" ; Would be "BBB"; in all other browser, but "BBB" ; in Chrome. Additionally it fixes creating unintentional (but harmless) empty attributes. We had previously tried to match Firefox, but after long discussions we decided it makes more sense to match Internet Explorer and Safari. This means not explicitly handling quoted-string as proposed in the newer RFCs. Before: A="B;C"; -> A="B;C"; After: A="B;C"; -> A="B; Review URL: http://codereview.chromium.org/17045 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@7810 0039d316-1c4b-4281-b951-d872f2087c98
* Enforce httponly on cookies coming from the renderer. This prevents ↵deanm@chromium.org2008-11-191-6/+27
| | | | | | | | | javascript from setting a new httponly cookie, and more importantly from overwriting httponly cookies. Patch from Marius Schilder. Review URL: http://codereview.chromium.org/11275 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@5700 0039d316-1c4b-4281-b951-d872f2087c98
* Try to fix Mac and Linux compiles.pkasting@chromium.org2008-11-011-3/+5
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@4357 0039d316-1c4b-4281-b951-d872f2087c98
* Expire cookies by last access date, rather than creation date.pkasting@chromium.org2008-11-011-5/+38
| | | | | | | BUG=2906 Review URL: http://codereview.chromium.org/8753 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@4354 0039d316-1c4b-4281-b951-d872f2087c98
* Fix "expected, actual" order in cookie monster unittest (which was mostly ↵pkasting@chromium.org2008-10-281-110/+110
| | | | | | | | | "actual, expected"). This is a by-product of my in-progress cookie fixes. Review URL: http://codereview.chromium.org/8852 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@4106 0039d316-1c4b-4281-b951-d872f2087c98
* Move Time, TimeDelta and TimeTicks into namespace base.dsh@google.com2008-10-271-0/+3
| | | | | | Review URL: http://codereview.chromium.org/7995 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@4022 0039d316-1c4b-4281-b951-d872f2087c98
* Use a more compact license header in source files.license.bot2008-08-241-28/+4
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1287 0039d316-1c4b-4281-b951-d872f2087c98
* Port cookie_monster, net_util, and registry_controlled_domain to POSIXish ↵mmentovai@google.com2008-08-211-7/+13
| | | | | | platforms git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1164 0039d316-1c4b-4281-b951-d872f2087c98
* Back out r1154 due to test failuresmmentovai@google.com2008-08-211-13/+7
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1156 0039d316-1c4b-4281-b951-d872f2087c98
* Port cookie_monster, net_util, and registry_controlled_domain to POSIXish ↵mmentovai@google.com2008-08-211-7/+13
| | | | | | platforms git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1154 0039d316-1c4b-4281-b951-d872f2087c98
* Cleanup some old unused code from the cookie monster unittest.deanm@google.com2008-08-011-19/+0
| | | | | | TBR=maruel git-svn-id: svn://svn.chromium.org/chrome/trunk/src@237 0039d316-1c4b-4281-b951-d872f2087c98
* Move more net classes into the net namespace. Also remove the net_util ↵darin@google.com2008-07-311-109/+110
| | | | | | | | namespace in favor of the net namespace. This is a purely mechanical change. There should be no logic changes. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@192 0039d316-1c4b-4281-b951-d872f2087c98
* Add net to the repository.initial.commit2008-07-261-0/+849
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14 0039d316-1c4b-4281-b951-d872f2087c98