summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormichaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-13 23:59:05 +0000
committermichaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-13 23:59:05 +0000
commit4fc6cb64e5ac6afe4aeb9c247b95c97fb785e9b2 (patch)
tree683c464e7abe1c2d2b4bf3ba53feec7dd07c1d8e
parent4287a3dba847dce805997314fcd560a5dadc1738 (diff)
downloadchromium_src-4fc6cb64e5ac6afe4aeb9c247b95c97fb785e9b2.zip
chromium_src-4fc6cb64e5ac6afe4aeb9c247b95c97fb785e9b2.tar.gz
chromium_src-4fc6cb64e5ac6afe4aeb9c247b95c97fb785e9b2.tar.bz2
Fix Crash in DeleteTask<quota::QuotaTask>::Run
BUG=85901 TEST=manual Review URL: http://codereview.chromium.org/7147004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@88924 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--webkit/quota/usage_tracker.cc12
1 files changed, 8 insertions, 4 deletions
diff --git a/webkit/quota/usage_tracker.cc b/webkit/quota/usage_tracker.cc
index 33d5e23..ff08e19 100644
--- a/webkit/quota/usage_tracker.cc
+++ b/webkit/quota/usage_tracker.cc
@@ -40,19 +40,23 @@ class ClientUsageTracker::GatherUsageTaskBase : public QuotaTask {
// We do not get usage for origins for which we have valid usage cache.
client_tracker()->DetermineOriginsToGetUsage(origins, &origins_to_process);
if (origins_to_process.empty()) {
- // Nothing to be done.
CallCompleted();
DeleteSoon();
+ return;
}
+
+ // First, fully populate the pending queue because GetOriginUsage may call
+ // the completion callback immediately.
for (std::set<GURL>::const_iterator iter = origins_to_process.begin();
- iter != origins_to_process.end();
- iter++) {
+ iter != origins_to_process.end(); iter++)
pending_origins_.push_back(*iter);
+
+ for (std::set<GURL>::const_iterator iter = origins_to_process.begin();
+ iter != origins_to_process.end(); iter++)
client_->GetOriginUsage(
*iter,
tracker_->type(),
callback_factory_.NewCallback(&GatherUsageTaskBase::DidGetUsage));
- }
}
bool IsOriginDone(const GURL& origin) const {