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

Unified Diff: webkit/quota/usage_tracker.cc

Issue 10827298: Quota UsageTracker ASAN fix (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/quota/usage_tracker.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/quota/usage_tracker.cc
diff --git a/webkit/quota/usage_tracker.cc b/webkit/quota/usage_tracker.cc
index 0b22e7060adb21defc8549e06340fa0616d62b87..fefe81308bd4c565afec7625aba22efc6ec89c11 100644
--- a/webkit/quota/usage_tracker.cc
+++ b/webkit/quota/usage_tracker.cc
@@ -36,14 +36,19 @@ class ClientUsageTracker::GatherUsageTaskBase : public QuotaTask {
weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
DCHECK(tracker_);
DCHECK(client_);
- client_tracker_ = tracker_->GetClientTracker(client_->id());
- DCHECK(client_tracker_);
+ client_tracker_ = base::AsWeakPtr(
+ tracker_->GetClientTracker(client_->id()));
+ DCHECK(client_tracker_.get());
}
virtual ~GatherUsageTaskBase() {}
// Get total usage for the given |origins|.
void GetUsageForOrigins(const std::set<GURL>& origins, StorageType type) {
DCHECK(original_task_runner()->BelongsToCurrentThread());
+ if (!client_tracker()) {
+ DeleteSoon();
+ return;
+ }
// We do not get usage for origins for which we have valid usage cache.
std::vector<GURL> origins_to_gather;
std::set<GURL> cached_origins;
@@ -87,13 +92,17 @@ class ClientUsageTracker::GatherUsageTaskBase : public QuotaTask {
}
UsageTracker* tracker() const { return tracker_; }
- ClientUsageTracker* client_tracker() const { return client_tracker_; }
+ ClientUsageTracker* client_tracker() const { return client_tracker_.get(); }
private:
void DidGetUsage(int64 usage) {
+ if (!client_tracker()) {
+ DeleteSoon();
+ return;
+ }
+
DCHECK(original_task_runner()->BelongsToCurrentThread());
DCHECK(!pending_origins_.empty());
- DCHECK(client_tracker_);
// Defend against confusing inputs from QuotaClients.
DCHECK_GE(usage, 0);
@@ -121,7 +130,7 @@ class ClientUsageTracker::GatherUsageTaskBase : public QuotaTask {
QuotaClient* client_;
UsageTracker* tracker_;
- ClientUsageTracker* client_tracker_;
+ base::WeakPtr<ClientUsageTracker> client_tracker_;
std::deque<GURL> pending_origins_;
std::map<GURL, int64> origin_usage_map_;
base::WeakPtrFactory<GatherUsageTaskBase> weak_factory_;
« no previous file with comments | « webkit/quota/usage_tracker.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698