Chromium Code Reviews| Index: net/base/cookie_monster.cc |
| =================================================================== |
| --- net/base/cookie_monster.cc (revision 100935) |
| +++ net/base/cookie_monster.cc (working copy) |
| @@ -993,7 +993,7 @@ |
| expiration_time, secure, http_only, |
| callback); |
| - DoCookieTask(task); |
| + DoCookieTask(task, url); |
| } |
| void CookieMonster::GetAllCookiesAsync(const GetCookieListCallback& callback) { |
| @@ -1011,7 +1011,7 @@ |
| scoped_refptr<GetAllCookiesForURLWithOptionsTask> task = |
| new GetAllCookiesForURLWithOptionsTask(this, url, options, callback); |
| - DoCookieTask(task); |
| + DoCookieTask(task, url); |
| } |
| void CookieMonster::GetAllCookiesForURLAsync( |
| @@ -1021,7 +1021,7 @@ |
| scoped_refptr<GetAllCookiesForURLWithOptionsTask> task = |
| new GetAllCookiesForURLWithOptionsTask(this, url, options, callback); |
| - DoCookieTask(task); |
| + DoCookieTask(task, url); |
| } |
| void CookieMonster::DeleteAllAsync(const DeleteCallback& callback) { |
| @@ -1046,7 +1046,7 @@ |
| scoped_refptr<DeleteAllForHostTask> task = |
| new DeleteAllForHostTask(this, url, callback); |
| - DoCookieTask(task); |
| + DoCookieTask(task, url); |
| } |
| void CookieMonster::DeleteCanonicalCookieAsync( |
| @@ -1066,7 +1066,7 @@ |
| scoped_refptr<SetCookieWithOptionsTask> task = |
| new SetCookieWithOptionsTask(this, url, cookie_line, options, callback); |
| - DoCookieTask(task); |
| + DoCookieTask(task, url); |
| } |
| void CookieMonster::GetCookiesWithOptionsAsync( |
| @@ -1076,7 +1076,7 @@ |
| scoped_refptr<GetCookiesWithOptionsTask> task = |
| new GetCookiesWithOptionsTask(this, url, options, callback); |
| - DoCookieTask(task); |
| + DoCookieTask(task, url); |
| } |
| void CookieMonster::GetCookiesWithInfoAsync( |
| @@ -1086,7 +1086,7 @@ |
| scoped_refptr<GetCookiesWithInfoTask> task = |
| new GetCookiesWithInfoTask(this, url, options, callback); |
| - DoCookieTask(task); |
| + DoCookieTask(task, url); |
| } |
| void CookieMonster::DeleteCookieAsync(const GURL& url, |
| @@ -1095,7 +1095,7 @@ |
| scoped_refptr<DeleteCookieTask> task = |
| new DeleteCookieTask(this, url, cookie_name, callback); |
| - DoCookieTask(task); |
| + DoCookieTask(task, url); |
| } |
| void CookieMonster::DoCookieTask( |
| @@ -1113,6 +1113,32 @@ |
| task_item->Run(); |
| } |
| +void CookieMonster::DoCookieTask( |
| + const scoped_refptr<CookieMonsterTask>& task_item, |
| + const GURL& url) { |
| + InitIfNecessary(); |
| + |
| + { |
| + base::AutoLock autolock(lock_); |
| + // If cookies for the requested domain key (eTLD+1) have been loaded from DB |
| + // then run the task, otherwise load from DB. |
| + if (!loaded_) { |
| + // Check if the domain key has been loaded. |
| + std::string key(GetEffectiveDomain(url.scheme(), url.host())); |
| + if (keys_loaded_.find(key) == keys_loaded_.end()) { |
| + store_->LoadCookiesForKey(key, |
| + base::Bind(&CookieMonster::OnKeyLoaded, this, |
| + base::Bind(&CookieMonsterTask::Run, task_item.get()), |
| + key)); |
| + return; |
| + } |
| + } |
| + } |
| + |
| + |
|
erikwright (departed)
2011/09/15 20:56:27
Remove extra blank.
guohui
2011/09/16 18:21:09
Done.
|
| + task_item->Run(); |
| +} |
| + |
| bool CookieMonster::SetCookieWithDetails( |
| const GURL& url, const std::string& name, const std::string& value, |
| const std::string& domain, const std::string& path, |
| @@ -1470,6 +1496,14 @@ |
| InvokeQueue(); |
| } |
| +void CookieMonster::OnKeyLoaded( |
| + const base::Closure& request_task, const std::string& key, |
| + const std::vector<CanonicalCookie*>& cookies) { |
|
erikwright (departed)
2011/09/15 20:56:27
It seems you require lock_ in order to access keys
guohui
2011/09/16 18:21:09
Done.
|
| + StoreLoadedCookies(cookies); |
| + keys_loaded_.insert(key); |
| + request_task.Run(); |
| +} |
| + |
| void CookieMonster::StoreLoadedCookies( |
| const std::vector<CanonicalCookie*>& cookies) { |
| // Initialize the store and sync in any saved persistent cookies. We don't |