| 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_;
|
|
|