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

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

Issue 7387007: Adding usage and quota entry to chrome://settings/cookies. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased to trunk + 7533013, omitted Got*StorageOrigins. Created 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/browsing_data_quota_helper_impl.h"
6
7 #include <map>
8 #include <set>
9
10 #include "base/logging.h"
11 #include "chrome/browser/profiles/profile.h"
12 #include "webkit/quota/quota_manager.h"
13
14 // static
15 BrowsingDataQuotaHelper* BrowsingDataQuotaHelper::Create(Profile* profile) {
16 return new BrowsingDataQuotaHelperImpl(
17 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI),
18 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO),
19 profile->GetQuotaManager());
20 }
21
22 BrowsingDataQuotaHelperImpl::BrowsingDataQuotaHelperImpl(
23 base::MessageLoopProxy* ui_thread,
24 base::MessageLoopProxy* io_thread,
25 quota::QuotaManager* quota_manager)
26 : BrowsingDataQuotaHelper(io_thread),
27 quota_manager_(quota_manager),
28 is_fetching_(false),
29 ui_thread_(ui_thread),
30 io_thread_(io_thread),
31 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
32 DCHECK(quota_manager);
33 }
34
35 BrowsingDataQuotaHelperImpl::~BrowsingDataQuotaHelperImpl() {}
36
37 void BrowsingDataQuotaHelperImpl::StartFetching(FetchResultCallback* callback) {
38 DCHECK(callback);
39 DCHECK(!callback_.get());
40 DCHECK(!is_fetching_);
41 callback_.reset(callback);
42 quota_info_.clear();
43 is_fetching_ = true;
44
45 FetchQuotaInfo();
46 }
47
48 void BrowsingDataQuotaHelperImpl::CancelNotification() {
49 callback_.reset();
50 }
51
52 void BrowsingDataQuotaHelperImpl::FetchQuotaInfo() {
53 if (!io_thread_->BelongsToCurrentThread()) {
54 io_thread_->PostTask(
55 FROM_HERE,
56 NewRunnableMethod(
57 this,
58 &BrowsingDataQuotaHelperImpl::FetchQuotaInfo));
59 return;
60 }
61
62 quota_manager_->GetOriginsModifiedSince(
63 quota::kStorageTypeTemporary,
64 base::Time(),
65 callback_factory_.NewCallback(
66 &BrowsingDataQuotaHelperImpl::GotOrigins));
67 }
68
69 void BrowsingDataQuotaHelperImpl::GotOrigins(
70 const std::set<GURL>& origins, quota::StorageType type) {
71 for (std::set<GURL>::const_iterator itr = origins.begin();
72 itr != origins.end();
73 ++itr)
74 pending_hosts_.insert(std::make_pair(itr->host(), type));
75
76 DCHECK(type == quota::kStorageTypeTemporary ||
77 type == quota::kStorageTypePersistent);
78
79 if (type == quota::kStorageTypeTemporary) {
80 quota_manager_->GetOriginsModifiedSince(
81 quota::kStorageTypePersistent,
82 base::Time(),
83 callback_factory_.NewCallback(
84 &BrowsingDataQuotaHelperImpl::GotOrigins));
85 } else { // type == quota::kStorageTypePersistent
kinuko 2011/08/03 06:20:35 nit: mind moving this comment to the next line?
tzik 2011/08/03 06:52:04 Done.
86 ProcessPendingHosts();
87 }
88 }
89
90 void BrowsingDataQuotaHelperImpl::ProcessPendingHosts() {
91 if (pending_hosts_.empty()) {
92 OnComplete();
93 return;
94 }
95
96 PendingHosts::iterator itr = pending_hosts_.begin();
97 std::string host = itr->first;
98 quota::StorageType type = itr->second;
99 pending_hosts_.erase(itr);
100 GetHostUsage(host, type);
101 }
102
103 void BrowsingDataQuotaHelperImpl::GetHostUsage(const std::string& host,
104 quota::StorageType type) {
105 DCHECK(quota_manager_.get());
106 quota_manager_->GetHostUsage(
107 host, type,
108 callback_factory_.NewCallback(
109 &BrowsingDataQuotaHelperImpl::GotHostUsage));
110 }
111
112 void BrowsingDataQuotaHelperImpl::GotHostUsage(const std::string& host,
113 quota::StorageType type,
114 int64 usage) {
115 switch (type) {
116 case quota::kStorageTypeTemporary:
117 quota_info_[host].temporary_usage = usage;
118 break;
119 case quota::kStorageTypePersistent:
120 quota_info_[host].persistent_usage = usage;
121 break;
122 default:
123 NOTREACHED();
124 }
125 ProcessPendingHosts();
126 }
127
128 void BrowsingDataQuotaHelperImpl::OnComplete() {
129 // Check if CancelNotification was called
130 if (!callback_.get())
131 return;
132
133 if (!ui_thread_->BelongsToCurrentThread()) {
134 ui_thread_->PostTask(
135 FROM_HERE,
136 NewRunnableMethod(
137 this,
138 &BrowsingDataQuotaHelperImpl::OnComplete));
139 return;
140 }
141
142 is_fetching_ = false;
143
144 QuotaInfoList result;
145 result.reserve(quota_info_.size());
146
147 for (std::map<std::string, QuotaInfo>::iterator itr = quota_info_.begin();
148 itr != quota_info_.end();
149 ++itr) {
150 QuotaInfo* info = &itr->second;
151 // Skip unused entries
152 if (info->temporary_usage <= 0 &&
153 info->persistent_usage <= 0)
154 continue;
155
156 info->host = itr->first;
157 result.push_back(*info);
158 }
159
160 callback_->Run(result);
161 callback_.reset();
162 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698