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

Side by Side Diff: chrome/browser/browsing_data_remover.cc

Issue 7210006: AppCaches which belong to hosted apps are not protected from deletion (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Test beautification. Created 9 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/browsing_data_remover.h" 5 #include "chrome/browser/browsing_data_remover.h"
6 6
7 #include <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 9
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 base::Time delete_begin, 60 base::Time delete_begin,
61 base::Time delete_end) 61 base::Time delete_end)
62 : profile_(profile), 62 : profile_(profile),
63 special_storage_policy_(profile->GetExtensionSpecialStoragePolicy()), 63 special_storage_policy_(profile->GetExtensionSpecialStoragePolicy()),
64 delete_begin_(delete_begin), 64 delete_begin_(delete_begin),
65 delete_end_(delete_end), 65 delete_end_(delete_end),
66 ALLOW_THIS_IN_INITIALIZER_LIST(database_cleared_callback_( 66 ALLOW_THIS_IN_INITIALIZER_LIST(database_cleared_callback_(
67 this, &BrowsingDataRemover::OnClearedDatabases)), 67 this, &BrowsingDataRemover::OnClearedDatabases)),
68 ALLOW_THIS_IN_INITIALIZER_LIST(cache_callback_( 68 ALLOW_THIS_IN_INITIALIZER_LIST(cache_callback_(
69 this, &BrowsingDataRemover::DoClearCache)), 69 this, &BrowsingDataRemover::DoClearCache)),
70 ALLOW_THIS_IN_INITIALIZER_LIST(appcache_got_info_callback_( 70 ALLOW_THIS_IN_INITIALIZER_LIST(appcache_cleared_callback_(
71 this, &BrowsingDataRemover::OnGotAppCacheInfo)), 71 this, &BrowsingDataRemover::OnClearedAppCache)),
72 ALLOW_THIS_IN_INITIALIZER_LIST(appcache_deleted_callback_(
73 this, &BrowsingDataRemover::OnAppCacheDeleted)),
74 appcaches_to_be_deleted_count_(0),
75 next_cache_state_(STATE_NONE), 72 next_cache_state_(STATE_NONE),
76 cache_(NULL), 73 cache_(NULL),
77 main_context_getter_(profile->GetRequestContext()), 74 main_context_getter_(profile->GetRequestContext()),
78 media_context_getter_(profile->GetRequestContextForMedia()), 75 media_context_getter_(profile->GetRequestContextForMedia()),
79 waiting_for_clear_databases_(false), 76 waiting_for_clear_databases_(false),
80 waiting_for_clear_history_(false), 77 waiting_for_clear_history_(false),
81 waiting_for_clear_networking_history_(false), 78 waiting_for_clear_networking_history_(false),
82 waiting_for_clear_cache_(false), 79 waiting_for_clear_cache_(false),
83 waiting_for_clear_appcache_(false), 80 waiting_for_clear_appcache_(false),
84 waiting_for_clear_gears_data_(false), 81 waiting_for_clear_gears_data_(false),
85 waiting_for_clear_file_systems_(false) { 82 waiting_for_clear_file_systems_(false) {
86 DCHECK(profile); 83 DCHECK(profile);
87 } 84 }
88 85
89 BrowsingDataRemover::BrowsingDataRemover(Profile* profile, 86 BrowsingDataRemover::BrowsingDataRemover(Profile* profile,
90 TimePeriod time_period, 87 TimePeriod time_period,
91 base::Time delete_end) 88 base::Time delete_end)
92 : profile_(profile), 89 : profile_(profile),
93 special_storage_policy_(profile->GetExtensionSpecialStoragePolicy()), 90 special_storage_policy_(profile->GetExtensionSpecialStoragePolicy()),
94 delete_begin_(CalculateBeginDeleteTime(time_period)), 91 delete_begin_(CalculateBeginDeleteTime(time_period)),
95 delete_end_(delete_end), 92 delete_end_(delete_end),
96 ALLOW_THIS_IN_INITIALIZER_LIST(database_cleared_callback_( 93 ALLOW_THIS_IN_INITIALIZER_LIST(database_cleared_callback_(
97 this, &BrowsingDataRemover::OnClearedDatabases)), 94 this, &BrowsingDataRemover::OnClearedDatabases)),
98 ALLOW_THIS_IN_INITIALIZER_LIST(cache_callback_( 95 ALLOW_THIS_IN_INITIALIZER_LIST(cache_callback_(
99 this, &BrowsingDataRemover::DoClearCache)), 96 this, &BrowsingDataRemover::DoClearCache)),
100 ALLOW_THIS_IN_INITIALIZER_LIST(appcache_got_info_callback_( 97 ALLOW_THIS_IN_INITIALIZER_LIST(appcache_cleared_callback_(
101 this, &BrowsingDataRemover::OnGotAppCacheInfo)), 98 this, &BrowsingDataRemover::OnClearedAppCache)),
102 ALLOW_THIS_IN_INITIALIZER_LIST(appcache_deleted_callback_(
103 this, &BrowsingDataRemover::OnAppCacheDeleted)),
104 appcaches_to_be_deleted_count_(0),
105 next_cache_state_(STATE_NONE), 99 next_cache_state_(STATE_NONE),
106 cache_(NULL), 100 cache_(NULL),
107 main_context_getter_(profile->GetRequestContext()), 101 main_context_getter_(profile->GetRequestContext()),
108 media_context_getter_(profile->GetRequestContextForMedia()), 102 media_context_getter_(profile->GetRequestContextForMedia()),
109 waiting_for_clear_databases_(false), 103 waiting_for_clear_databases_(false),
110 waiting_for_clear_history_(false), 104 waiting_for_clear_history_(false),
111 waiting_for_clear_networking_history_(false), 105 waiting_for_clear_networking_history_(false),
112 waiting_for_clear_cache_(false), 106 waiting_for_clear_cache_(false),
113 waiting_for_clear_appcache_(false), 107 waiting_for_clear_appcache_(false),
114 waiting_for_clear_lso_data_(false), 108 waiting_for_clear_lso_data_(false),
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 501
508 void BrowsingDataRemover::ClearDatabasesOnFILEThread() { 502 void BrowsingDataRemover::ClearDatabasesOnFILEThread() {
509 // This function should be called on the FILE thread. 503 // This function should be called on the FILE thread.
510 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 504 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
511 int rv = database_tracker_->DeleteDataModifiedSince( 505 int rv = database_tracker_->DeleteDataModifiedSince(
512 delete_begin_, &database_cleared_callback_); 506 delete_begin_, &database_cleared_callback_);
513 if (rv != net::ERR_IO_PENDING) 507 if (rv != net::ERR_IO_PENDING)
514 OnClearedDatabases(rv); 508 OnClearedDatabases(rv);
515 } 509 }
516 510
517 void BrowsingDataRemover::OnClearedAppCache() { 511 void BrowsingDataRemover::OnClearedAppCache(int rv) {
518 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 512 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
519 bool result = BrowserThread::PostTask( 513 bool result = BrowserThread::PostTask(
520 BrowserThread::UI, FROM_HERE, 514 BrowserThread::UI, FROM_HERE,
521 NewRunnableMethod(this, &BrowsingDataRemover::OnClearedAppCache)); 515 NewRunnableMethod(this, &BrowsingDataRemover::OnClearedAppCache, rv));
522 DCHECK(result); 516 DCHECK(result);
523 return; 517 return;
524 } 518 }
525 waiting_for_clear_appcache_ = false; 519 waiting_for_clear_appcache_ = false;
526 NotifyAndDeleteIfDone(); 520 NotifyAndDeleteIfDone();
527 } 521 }
528 522
529 void BrowsingDataRemover::ClearAppCacheOnIOThread() { 523 void BrowsingDataRemover::ClearAppCacheOnIOThread() {
530 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 524 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
531 DCHECK(waiting_for_clear_appcache_); 525 DCHECK(waiting_for_clear_appcache_);
532 appcache_info_ = new appcache::AppCacheInfoCollection; 526 appcache_service_->ClearAppCache(&appcache_cleared_callback_);
michaeln 2011/07/14 00:42:34 The code in this CL isn't looking at the delete_be
marja(google) 2011/07/14 10:31:59 Ah, indeed, that's a bug. Thanks for pointing it o
michaeln 2011/07/14 22:53:16 ...
533 appcache_service_->GetAllAppCacheInfo( 527 // Continues in OnClearedAppCache.
534 appcache_info_, &appcache_got_info_callback_);
535 // continues in OnGotAppCacheInfo.
536 }
537
538 void BrowsingDataRemover::OnGotAppCacheInfo(int rv) {
539 using appcache::AppCacheInfoVector;
540 typedef std::map<GURL, AppCacheInfoVector> InfoByOrigin;
541
542 for (InfoByOrigin::const_iterator origin =
543 appcache_info_->infos_by_origin.begin();
544 origin != appcache_info_->infos_by_origin.end(); ++origin) {
545 if (special_storage_policy_->IsStorageProtected(origin->first))
546 continue;
547 for (AppCacheInfoVector::const_iterator info = origin->second.begin();
548 info != origin->second.end(); ++info) {
549 if (info->creation_time > delete_begin_) {
550 ++appcaches_to_be_deleted_count_;
551 appcache_service_->DeleteAppCacheGroup(
552 info->manifest_url, &appcache_deleted_callback_);
553 }
554 }
555 }
556
557 if (!appcaches_to_be_deleted_count_)
558 OnClearedAppCache();
559 // else continues in OnAppCacheDeleted
560 }
561
562 void BrowsingDataRemover::OnAppCacheDeleted(int rv) {
563 --appcaches_to_be_deleted_count_;
564 if (!appcaches_to_be_deleted_count_)
565 OnClearedAppCache();
566 } 528 }
567 529
568 void BrowsingDataRemover::ClearFileSystemsOnFILEThread() { 530 void BrowsingDataRemover::ClearFileSystemsOnFILEThread() {
569 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 531 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
570 DCHECK(waiting_for_clear_file_systems_); 532 DCHECK(waiting_for_clear_file_systems_);
571 scoped_refptr<fileapi::FileSystemContext> 533 scoped_refptr<fileapi::FileSystemContext>
572 fs_context(profile_->GetFileSystemContext()); 534 fs_context(profile_->GetFileSystemContext());
573 scoped_ptr<fileapi::SandboxMountPointProvider::OriginEnumerator> 535 scoped_ptr<fileapi::SandboxMountPointProvider::OriginEnumerator>
574 origin_enumerator(fs_context->path_manager()->sandbox_provider()-> 536 origin_enumerator(fs_context->path_manager()->sandbox_provider()->
575 CreateOriginEnumerator()); 537 CreateOriginEnumerator());
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
626 588
627 ClearGearsData(profile_dir); 589 ClearGearsData(profile_dir);
628 OnClearedGearsData(); 590 OnClearedGearsData();
629 } 591 }
630 592
631 void BrowsingDataRemover::OnWaitableEventSignaled( 593 void BrowsingDataRemover::OnWaitableEventSignaled(
632 base::WaitableEvent* waitable_event) { 594 base::WaitableEvent* waitable_event) {
633 waiting_for_clear_lso_data_ = false; 595 waiting_for_clear_lso_data_ = false;
634 NotifyAndDeleteIfDone(); 596 NotifyAndDeleteIfDone();
635 } 597 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698