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

Side by Side Diff: ios/net/cookies/cookie_store_ios.mm

Issue 1616443003: Add FlushStore to CookieStore interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cookie_monster3
Patch Set: fix old comment Created 4 years, 11 months 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 | « ios/net/cookies/cookie_store_ios.h ('k') | ios/net/cookies/cookie_store_ios_unittest.mm » ('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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 #include "ios/net/cookies/cookie_store_ios.h" 5 #include "ios/net/cookies/cookie_store_ios.h"
6 6
7 #import <Foundation/Foundation.h> 7 #import <Foundation/Foundation.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 CookieStoreIOS* CookieStoreIOS::CreateCookieStore( 314 CookieStoreIOS* CookieStoreIOS::CreateCookieStore(
315 NSHTTPCookieStorage* cookie_storage) { 315 NSHTTPCookieStorage* cookie_storage) {
316 DCHECK(cookie_storage); 316 DCHECK(cookie_storage);
317 // TODO(huey): Update this when CrNet supports multiple cookie jars. 317 // TODO(huey): Update this when CrNet supports multiple cookie jars.
318 [cookie_storage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; 318 [cookie_storage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
319 319
320 // Create a cookie store with no persistent store backing. Then, populate 320 // Create a cookie store with no persistent store backing. Then, populate
321 // it from the system's cookie jar. 321 // it from the system's cookie jar.
322 CookieStoreIOS* cookie_store = new CookieStoreIOS(nullptr, cookie_storage); 322 CookieStoreIOS* cookie_store = new CookieStoreIOS(nullptr, cookie_storage);
323 cookie_store->synchronization_state_ = SYNCHRONIZED; 323 cookie_store->synchronization_state_ = SYNCHRONIZED;
324 cookie_store->Flush(base::Closure()); 324 cookie_store->FlushStore(base::Closure());
325 return cookie_store; 325 return cookie_store;
326 } 326 }
327 327
328 // static 328 // static
329 void CookieStoreIOS::SwitchSynchronizedStore(CookieStoreIOS* old_store, 329 void CookieStoreIOS::SwitchSynchronizedStore(CookieStoreIOS* old_store,
330 CookieStoreIOS* new_store) { 330 CookieStoreIOS* new_store) {
331 DCHECK(new_store); 331 DCHECK(new_store);
332 DCHECK_NE(new_store, old_store); 332 DCHECK_NE(new_store, old_store);
333 if (old_store) 333 if (old_store)
334 old_store->SetSynchronizedWithSystemStore(false); 334 old_store->SetSynchronizedWithSystemStore(false);
335 new_store->SetSynchronizedWithSystemStore(true); 335 new_store->SetSynchronizedWithSystemStore(true);
336 } 336 }
337 337
338 // static 338 // static
339 void CookieStoreIOS::NotifySystemCookiesChanged() { 339 void CookieStoreIOS::NotifySystemCookiesChanged() {
340 NotificationTrampoline::GetInstance()->NotifyCookiesChanged(); 340 NotificationTrampoline::GetInstance()->NotifyCookiesChanged();
341 } 341 }
342 342
343 void CookieStoreIOS::Flush(const base::Closure& closure) {
344 DCHECK(thread_checker_.CalledOnValidThread());
345
346 if (SystemCookiesAllowed()) {
347 // If cookies are disabled, the system store is empty, and the cookies are
348 // stashed on disk. Do not delete the cookies on the disk in this case.
349 WriteToCookieMonster([system_store_ cookies]);
350 }
351 cookie_monster_->FlushStore(closure);
352 flush_closure_.Cancel();
353 }
354
355 void CookieStoreIOS::UnSynchronize() { 343 void CookieStoreIOS::UnSynchronize() {
356 SetSynchronizedWithSystemStore(false); 344 SetSynchronizedWithSystemStore(false);
357 } 345 }
358 346
359 void CookieStoreIOS::SetMetricsEnabled() { 347 void CookieStoreIOS::SetMetricsEnabled() {
360 static CookieStoreIOS* g_cookie_store_with_metrics = nullptr; 348 static CookieStoreIOS* g_cookie_store_with_metrics = nullptr;
361 DCHECK(!g_cookie_store_with_metrics || g_cookie_store_with_metrics == this) 349 DCHECK(!g_cookie_store_with_metrics || g_cookie_store_with_metrics == this)
362 << "Only one cookie store may use metrics."; 350 << "Only one cookie store may use metrics.";
363 g_cookie_store_with_metrics = this; 351 g_cookie_store_with_metrics = this;
364 metrics_enabled_ = true; 352 metrics_enabled_ = true;
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
609 base::Bind(&CookieStoreIOS::DeleteSessionCookiesAsync, this, 597 base::Bind(&CookieStoreIOS::DeleteSessionCookiesAsync, this,
610 WrapDeleteCallback(callback))); 598 WrapDeleteCallback(callback)));
611 break; 599 break;
612 case SYNCHRONIZED: 600 case SYNCHRONIZED:
613 CookieFilterFunction filter = base::Bind(&IsCookieSessionCookie); 601 CookieFilterFunction filter = base::Bind(&IsCookieSessionCookie);
614 DeleteCookiesWithFilter(filter, callback); 602 DeleteCookiesWithFilter(filter, callback);
615 break; 603 break;
616 } 604 }
617 } 605 }
618 606
607 void CookieStoreIOS::FlushStore(const base::Closure& closure) {
608 DCHECK(thread_checker_.CalledOnValidThread());
609
610 if (SystemCookiesAllowed()) {
611 // If cookies are disabled, the system store is empty, and the cookies are
612 // stashed on disk. Do not delete the cookies on the disk in this case.
613 WriteToCookieMonster([system_store_ cookies]);
614 }
615 cookie_monster_->FlushStore(closure);
616 flush_closure_.Cancel();
617 }
618
619 #pragma mark - 619 #pragma mark -
620 #pragma mark Protected methods 620 #pragma mark Protected methods
621 621
622 CookieStoreIOS::~CookieStoreIOS() { 622 CookieStoreIOS::~CookieStoreIOS() {
623 NotificationTrampoline::GetInstance()->RemoveObserver(this); 623 NotificationTrampoline::GetInstance()->RemoveObserver(this);
624 STLDeleteContainerPairSecondPointers(hook_map_.begin(), hook_map_.end()); 624 STLDeleteContainerPairSecondPointers(hook_map_.begin(), hook_map_.end());
625 } 625 }
626 626
627 #pragma mark - 627 #pragma mark -
628 #pragma mark Private methods 628 #pragma mark Private methods
(...skipping 22 matching lines...) Expand all
651 [system_store_ cookieAcceptPolicy]; 651 [system_store_ cookieAcceptPolicy];
652 if (policy == NSHTTPCookieAcceptPolicyAlways) { 652 if (policy == NSHTTPCookieAcceptPolicyAlways) {
653 // If cookies are disabled, the system cookie store should be empty. 653 // If cookies are disabled, the system cookie store should be empty.
654 DCHECK(![[system_store_ cookies] count]); 654 DCHECK(![[system_store_ cookies] count]);
655 DCHECK(synchronization_state_ != SYNCHRONIZING); 655 DCHECK(synchronization_state_ != SYNCHRONIZING);
656 synchronization_state_ = SYNCHRONIZING; 656 synchronization_state_ = SYNCHRONIZING;
657 cookie_monster_->GetAllCookiesAsync( 657 cookie_monster_->GetAllCookiesAsync(
658 base::Bind(&CookieStoreIOS::AddCookiesToSystemStore, this)); 658 base::Bind(&CookieStoreIOS::AddCookiesToSystemStore, this));
659 } else { 659 } else {
660 DCHECK_EQ(NSHTTPCookieAcceptPolicyNever, policy); 660 DCHECK_EQ(NSHTTPCookieAcceptPolicyNever, policy);
661 // Flush() does not write the cookies to disk when they are disabled. 661 // FlushStore() does not write the cookies to disk when they are disabled.
662 // Explicitly copy them. 662 // Explicitly copy them.
663 WriteToCookieMonster([system_store_ cookies]); 663 WriteToCookieMonster([system_store_ cookies]);
664 Flush(base::Closure()); 664 FlushStore(base::Closure());
665 ClearSystemStore(); 665 ClearSystemStore();
666 if (synchronization_state_ == SYNCHRONIZING) { 666 if (synchronization_state_ == SYNCHRONIZING) {
667 // If synchronization was in progress, abort it and leave the cookie store 667 // If synchronization was in progress, abort it and leave the cookie store
668 // empty. 668 // empty.
669 // Temporarily toggle the synchronization state so that pending tasks are 669 // Temporarily toggle the synchronization state so that pending tasks are
670 // redirected to cookie_monster_ and can complete normally. 670 // redirected to cookie_monster_ and can complete normally.
671 synchronization_state_ = NOT_SYNCHRONIZED; 671 synchronization_state_ = NOT_SYNCHRONIZED;
672 RunAllPendingTasks(); 672 RunAllPendingTasks();
673 synchronization_state_ = SYNCHRONIZED; 673 synchronization_state_ = SYNCHRONIZED;
674 } 674 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 // cookies are re-enabled. 706 // cookies are re-enabled.
707 if (policy == NSHTTPCookieAcceptPolicyAlways) { 707 if (policy == NSHTTPCookieAcceptPolicyAlways) {
708 if (synchronized) { 708 if (synchronized) {
709 synchronization_state_ = SYNCHRONIZING; 709 synchronization_state_ = SYNCHRONIZING;
710 ClearSystemStore(); 710 ClearSystemStore();
711 cookie_monster_->GetAllCookiesAsync( 711 cookie_monster_->GetAllCookiesAsync(
712 base::Bind(&CookieStoreIOS::AddCookiesToSystemStore, this)); 712 base::Bind(&CookieStoreIOS::AddCookiesToSystemStore, this));
713 return; 713 return;
714 } else { 714 } else {
715 // Copy the cookies from the global store to |cookie_monster_|. 715 // Copy the cookies from the global store to |cookie_monster_|.
716 Flush(base::Closure()); 716 FlushStore(base::Closure());
717 } 717 }
718 } 718 }
719 synchronization_state_ = synchronized ? SYNCHRONIZED : NOT_SYNCHRONIZED; 719 synchronization_state_ = synchronized ? SYNCHRONIZED : NOT_SYNCHRONIZED;
720 720
721 if (synchronization_state_ == NOT_SYNCHRONIZED) { 721 if (synchronization_state_ == NOT_SYNCHRONIZED) {
722 // If there are pending tasks, then it means that the synchronization is 722 // If there are pending tasks, then it means that the synchronization is
723 // being canceled. All pending tasks can be sent to cookie_monster_. 723 // being canceled. All pending tasks can be sent to cookie_monster_.
724 RunAllPendingTasks(); 724 RunAllPendingTasks();
725 } 725 }
726 } 726 }
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 &added_cookies)) { 839 &added_cookies)) {
840 RunCallbacksForCookies(key.first, key.second, removed_cookies, true); 840 RunCallbacksForCookies(key.first, key.second, removed_cookies, true);
841 RunCallbacksForCookies(key.first, key.second, added_cookies, false); 841 RunCallbacksForCookies(key.first, key.second, added_cookies, false);
842 } 842 }
843 } 843 }
844 844
845 // Do not schedule a flush if one is already scheduled. 845 // Do not schedule a flush if one is already scheduled.
846 if (!flush_closure_.IsCancelled()) 846 if (!flush_closure_.IsCancelled())
847 return; 847 return;
848 848
849 flush_closure_.Reset(base::Bind(&CookieStoreIOS::Flush, 849 flush_closure_.Reset(base::Bind(&CookieStoreIOS::FlushStore,
850 base::Unretained(this), base::Closure())); 850 base::Unretained(this), base::Closure()));
851 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( 851 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
852 FROM_HERE, flush_closure_.callback(), flush_delay_); 852 FROM_HERE, flush_closure_.callback(), flush_delay_);
853 } 853 }
854 854
855 scoped_ptr<net::CookieStore::CookieChangedSubscription> 855 scoped_ptr<net::CookieStore::CookieChangedSubscription>
856 CookieStoreIOS::AddCallbackForCookie(const GURL& gurl, 856 CookieStoreIOS::AddCallbackForCookie(const GURL& gurl,
857 const std::string& name, 857 const std::string& name,
858 const CookieChangedCallback& callback) { 858 const CookieChangedCallback& callback) {
859 DCHECK(thread_checker_.CalledOnValidThread()); 859 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1001 DCHECK(thread_checker_.CalledOnValidThread()); 1001 DCHECK(thread_checker_.CalledOnValidThread());
1002 return base::Bind(&CookieStoreIOS::UpdateCachesAfterDelete, this, callback); 1002 return base::Bind(&CookieStoreIOS::UpdateCachesAfterDelete, this, callback);
1003 } 1003 }
1004 1004
1005 base::Closure CookieStoreIOS::WrapClosure(const base::Closure& callback) { 1005 base::Closure CookieStoreIOS::WrapClosure(const base::Closure& callback) {
1006 DCHECK(thread_checker_.CalledOnValidThread()); 1006 DCHECK(thread_checker_.CalledOnValidThread());
1007 return base::Bind(&CookieStoreIOS::UpdateCachesAfterClosure, this, callback); 1007 return base::Bind(&CookieStoreIOS::UpdateCachesAfterClosure, this, callback);
1008 } 1008 }
1009 1009
1010 } // namespace net 1010 } // namespace net
OLDNEW
« no previous file with comments | « ios/net/cookies/cookie_store_ios.h ('k') | ios/net/cookies/cookie_store_ios_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698