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

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

Issue 10709006: Show apps protecting local data in chrome://settings/cookies. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: argh Created 8 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
« no previous file with comments | « chrome/browser/cookies_tree_model.h ('k') | chrome/browser/cookies_tree_model_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/cookies_tree_model.h" 5 #include "chrome/browser/cookies_tree_model.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/memory/linked_ptr.h" 12 #include "base/memory/linked_ptr.h"
13 #include "base/string_util.h" 13 #include "base/string_util.h"
14 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
15 #include "chrome/browser/browsing_data_cookie_helper.h" 15 #include "chrome/browser/browsing_data_cookie_helper.h"
16 #include "chrome/browser/browsing_data_server_bound_cert_helper.h" 16 #include "chrome/browser/browsing_data_server_bound_cert_helper.h"
17 #include "chrome/browser/content_settings/cookie_settings.h" 17 #include "chrome/browser/content_settings/cookie_settings.h"
18 #include "chrome/browser/extensions/extension_service.h" 18 #include "chrome/browser/extensions/extension_service.h"
19 #include "chrome/browser/extensions/extension_special_storage_policy.h"
19 #include "content/public/common/url_constants.h" 20 #include "content/public/common/url_constants.h"
20 #include "grit/generated_resources.h" 21 #include "grit/generated_resources.h"
21 #include "grit/theme_resources.h" 22 #include "grit/theme_resources.h"
22 #include "grit/ui_resources.h" 23 #include "grit/ui_resources.h"
23 #include "net/base/registry_controlled_domain.h" 24 #include "net/base/registry_controlled_domain.h"
24 #include "net/cookies/cookie_monster.h" 25 #include "net/cookies/cookie_monster.h"
25 #include "net/url_request/url_request_context.h" 26 #include "net/url_request/url_request_context.h"
26 #include "ui/base/l10n/l10n_util.h" 27 #include "ui/base/l10n/l10n_util.h"
27 #include "ui/base/resource/resource_bundle.h" 28 #include "ui/base/resource/resource_bundle.h"
28 #include "ui/gfx/image/image_skia.h" 29 #include "ui/gfx/image/image_skia.h"
29 30
30 namespace { 31 namespace {
31 32
32 struct NodeTitleComparator { 33 struct NodeTitleComparator {
33 bool operator()(const CookieTreeNode* lhs, const CookieTreeNode* rhs) { 34 bool operator()(const CookieTreeNode* lhs, const CookieTreeNode* rhs) {
34 return lhs->GetTitle() < rhs->GetTitle(); 35 return lhs->GetTitle() < rhs->GetTitle();
35 } 36 }
36 }; 37 };
37 38
38 // Comparison functor, for use in CookieTreeRootNode. 39 // Comparison functor, for use in CookieTreeRootNode.
39 struct OriginNodeComparator { 40 struct HostNodeComparator {
40 bool operator()(const CookieTreeNode* lhs, const CookieTreeNode* rhs) { 41 bool operator()(const CookieTreeNode* lhs, const CookieTreeNode* rhs) {
41 // This comparator is only meant to compare CookieTreeOriginNode types. Make 42 // This comparator is only meant to compare CookieTreeHostNode types. Make
42 // sure we check this, as the static cast below is dangerous if we get the 43 // sure we check this, as the static cast below is dangerous if we get the
43 // wrong object type. 44 // wrong object type.
44 CHECK_EQ(lhs->GetDetailedInfo().node_type, 45 CHECK_EQ(CookieTreeNode::DetailedInfo::TYPE_HOST,
45 CookieTreeNode::DetailedInfo::TYPE_ORIGIN); 46 lhs->GetDetailedInfo().node_type);
46 CHECK_EQ(rhs->GetDetailedInfo().node_type, 47 CHECK_EQ(CookieTreeNode::DetailedInfo::TYPE_HOST,
47 CookieTreeNode::DetailedInfo::TYPE_ORIGIN); 48 rhs->GetDetailedInfo().node_type);
48 49
49 const CookieTreeOriginNode* ltn = 50 const CookieTreeHostNode* ltn =
50 static_cast<const CookieTreeOriginNode*>(lhs); 51 static_cast<const CookieTreeHostNode*>(lhs);
51 const CookieTreeOriginNode* rtn = 52 const CookieTreeHostNode* rtn =
52 static_cast<const CookieTreeOriginNode*>(rhs); 53 static_cast<const CookieTreeHostNode*>(rhs);
53 54
54 if (ltn->app_id() != rtn->app_id()) { 55 if (ltn->app_id() != rtn->app_id()) {
55 return (ltn->app_name() < rtn->app_name()); 56 return (ltn->app_name() < rtn->app_name());
56 } 57 }
57 58
58 // We want to order by registry controlled domain, so we would get 59 // We want to order by registry controlled domain, so we would get
59 // google.com, ad.google.com, www.google.com, 60 // google.com, ad.google.com, www.google.com,
60 // microsoft.com, ad.microsoft.com. CanonicalizeHost transforms the origins 61 // microsoft.com, ad.microsoft.com. CanonicalizeHost transforms the origins
61 // into a form like google.com.www so that string comparisons work. 62 // into a form like google.com.www so that string comparisons work.
62 return (CanonicalizeHost(ltn->GetHost()) < 63 return (ltn->canonicalized_host() <
63 CanonicalizeHost(rtn->GetHost())); 64 rtn->canonicalized_host());
65 }
66 };
67
68 std::string CanonicalizeHost(const GURL& url) {
69 // The canonicalized representation makes the registry controlled domain
70 // come first, and then adds subdomains in reverse order, e.g.
71 // 1.mail.google.com would become google.com.mail.1, and then a standard
72 // string comparison works to order hosts by registry controlled domain
73 // first. Leading dots are ignored, ".google.com" is the same as
74 // "google.com".
75
76 if (url.SchemeIsFile()) {
77 return std::string(chrome::kFileScheme) +
78 content::kStandardSchemeSeparator;
64 } 79 }
65 80
66 static std::string CanonicalizeHost(const std::string& host) { 81 std::string host = url.host();
67 // The canonicalized representation makes the registry controlled domain 82 std::string retval = net::RegistryControlledDomainService::
68 // come first, and then adds subdomains in reverse order, e.g. 83 GetDomainAndRegistry(host);
69 // 1.mail.google.com would become google.com.mail.1, and then a standard 84 if (!retval.length()) // Is an IP address or other special origin.
70 // string comparison works to order hosts by registry controlled domain 85 return host;
71 // first. Leading dots are ignored, ".google.com" is the same as
72 // "google.com".
73 86
74 std::string retval = net::RegistryControlledDomainService:: 87 std::string::size_type position = host.rfind(retval);
75 GetDomainAndRegistry(host);
76 if (!retval.length()) // Is an IP address or other special origin.
77 return host;
78 88
79 std::string::size_type position = host.rfind(retval); 89 // The host may be the registry controlled domain, in which case fail fast.
90 if (position == 0 || position == std::string::npos)
91 return host;
80 92
81 // The host may be the registry controlled domain, in which case fail fast. 93 // If host is www.google.com, retval will contain google.com at this point.
82 if (position == 0 || position == std::string::npos) 94 // Start operating to the left of the registry controlled domain, e.g. in
83 return host; 95 // the www.google.com example, start at index 3.
96 --position;
84 97
85 // If host is www.google.com, retval will contain google.com at this point. 98 // If position == 0, that means it's a dot; this will be ignored to treat
86 // Start operating to the left of the registry controlled domain, e.g. in 99 // ".google.com" the same as "google.com".
87 // the www.google.com example, start at index 3. 100 while (position > 0) {
88 --position; 101 retval += std::string(".");
102 // Copy up to the next dot. host[position] is a dot so start after it.
103 std::string::size_type next_dot = host.rfind(".", position - 1);
104 if (next_dot == std::string::npos) {
105 retval += host.substr(0, position);
106 break;
107 }
108 retval += host.substr(next_dot + 1, position - (next_dot + 1));
109 position = next_dot;
110 }
111 return retval;
112 }
89 113
90 // If position == 0, that means it's a dot; this will be ignored to treat 114 bool TypeIsProtected(CookieTreeNode::DetailedInfo::NodeType type) {
91 // ".google.com" the same as "google.com". 115 switch (type) {
92 while (position > 0) { 116 case CookieTreeNode::DetailedInfo::TYPE_COOKIE:
93 retval += std::string("."); 117 return false;
94 // Copy up to the next dot. host[position] is a dot so start after it. 118 case CookieTreeNode::DetailedInfo::TYPE_DATABASE:
95 std::string::size_type next_dot = host.rfind(".", position - 1); 119 return true;
96 if (next_dot == std::string::npos) { 120 case CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE:
97 retval += host.substr(0, position); 121 return true;
98 break; 122 case CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE:
99 } 123 return true;
100 retval += host.substr(next_dot + 1, position - (next_dot + 1)); 124 case CookieTreeNode::DetailedInfo::TYPE_APPCACHE:
101 position = next_dot; 125 return true;
102 } 126 case CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB:
103 return retval; 127 return true;
128 case CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM:
129 return true;
130 case CookieTreeNode::DetailedInfo::TYPE_QUOTA:
131 return true;
132 case CookieTreeNode::DetailedInfo::TYPE_SERVER_BOUND_CERT:
133 return false;
134 default:
135 break;
104 } 136 }
105 }; 137 return false;
138 }
106 139
107 // This function returns the local data container associated with a leaf tree 140 // This function returns the local data container associated with a leaf tree
108 // node. The app node is assumed to be 3 levels above the leaf because of the 141 // node. The app node is assumed to be 3 levels above the leaf because of the
109 // following structure: 142 // following structure:
110 // root -> origin -> storage type -> leaf node 143 // root -> origin -> storage type -> leaf node
111 LocalDataContainer* GetLocalDataContainerForNode(CookieTreeNode* node) { 144 LocalDataContainer* GetLocalDataContainerForNode(CookieTreeNode* node) {
112 CookieTreeOriginNode* origin = static_cast<CookieTreeOriginNode*>( 145 CookieTreeHostNode* host = static_cast<CookieTreeHostNode*>(
113 node->parent()->parent()); 146 node->parent()->parent());
114 CHECK_EQ(origin->GetDetailedInfo().node_type, 147 CHECK_EQ(host->GetDetailedInfo().node_type,
115 CookieTreeNode::DetailedInfo::TYPE_ORIGIN); 148 CookieTreeNode::DetailedInfo::TYPE_HOST);
116 return node->GetModel()->GetLocalDataContainer(origin->app_id()); 149 return node->GetModel()->GetLocalDataContainer(host->app_id());
117 } 150 }
118 151
152 } // namespace
119 153
120 } // namespace 154 CookieTreeNode::DetailedInfo::DetailedInfo()
155 : node_type(TYPE_NONE),
156 cookie(NULL),
157 database_info(NULL),
158 local_storage_info(NULL),
159 session_storage_info(NULL),
160 appcache_info(NULL),
161 indexed_db_info(NULL),
162 file_system_info(NULL),
163 quota_info(NULL),
164 server_bound_cert(NULL) {}
165
166 CookieTreeNode::DetailedInfo::~DetailedInfo() {}
167
168 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::Init(
169 NodeType type) {
170 DCHECK_EQ(TYPE_NONE, node_type);
171 node_type = type;
172 return *this;
173 }
174
175 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitHost(
176 const std::string& app_id,
177 const std::string& app_name) {
178 Init(TYPE_HOST);
179 this->app_name = app_name;
180 this->app_id = app_id;
181 return *this;
182 }
183
184 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitCookie(
185 const net::CookieMonster::CanonicalCookie* cookie) {
186 Init(TYPE_COOKIE);
187 this->cookie = cookie;
188 return *this;
189 }
190
191 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitDatabase(
192 const BrowsingDataDatabaseHelper::DatabaseInfo* database_info) {
193 Init(TYPE_DATABASE);
194 this->database_info = database_info;
195 origin = GURL(database_info->origin);
196 return *this;
197 }
198
199 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitLocalStorage(
200 const BrowsingDataLocalStorageHelper::LocalStorageInfo*
201 local_storage_info) {
202 Init(TYPE_LOCAL_STORAGE);
203 this->local_storage_info = local_storage_info;
204 origin = local_storage_info->origin_url;
205 return *this;
206 }
207
208 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitSessionStorage(
209 const BrowsingDataLocalStorageHelper::LocalStorageInfo*
210 session_storage_info) {
211 Init(TYPE_SESSION_STORAGE);
212 this->session_storage_info = session_storage_info;
213 origin = session_storage_info->origin_url;
214 return *this;
215 }
216
217 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitAppCache(
218 const GURL& origin,
219 const appcache::AppCacheInfo* appcache_info) {
220 Init(TYPE_APPCACHE);
221 this->appcache_info = appcache_info;
222 this->origin = origin;
223 return *this;
224 }
225
226 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitIndexedDB(
227 const BrowsingDataIndexedDBHelper::IndexedDBInfo* indexed_db_info) {
228 Init(TYPE_INDEXED_DB);
229 this->indexed_db_info = indexed_db_info;
230 this->origin = indexed_db_info->origin;
231 return *this;
232 }
233
234 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitFileSystem(
235 const BrowsingDataFileSystemHelper::FileSystemInfo* file_system_info) {
236 Init(TYPE_FILE_SYSTEM);
237 this->file_system_info = file_system_info;
238 this->origin = file_system_info->origin;
239 return *this;
240 }
241
242 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitQuota(
243 const BrowsingDataQuotaHelper::QuotaInfo* quota_info) {
244 Init(TYPE_QUOTA);
245 this->quota_info = quota_info;
246 return *this;
247 }
248
249 CookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitServerBoundCert(
250 const net::ServerBoundCertStore::ServerBoundCert* server_bound_cert) {
251 Init(TYPE_SERVER_BOUND_CERT);
252 this->server_bound_cert = server_bound_cert;
253 return *this;
254 }
121 255
122 /////////////////////////////////////////////////////////////////////////////// 256 ///////////////////////////////////////////////////////////////////////////////
123 // CookieTreeNode, public: 257 // CookieTreeNode, public:
124 258
125 void CookieTreeNode::DeleteStoredObjects() { 259 void CookieTreeNode::DeleteStoredObjects() {
126 std::for_each(children().begin(), 260 std::for_each(children().begin(),
127 children().end(), 261 children().end(),
128 std::mem_fun(&CookieTreeNode::DeleteStoredObjects)); 262 std::mem_fun(&CookieTreeNode::DeleteStoredObjects));
129 } 263 }
130 264
(...skipping 16 matching lines...) Expand all
147 CookieTreeCookieNode::~CookieTreeCookieNode() {} 281 CookieTreeCookieNode::~CookieTreeCookieNode() {}
148 282
149 void CookieTreeCookieNode::DeleteStoredObjects() { 283 void CookieTreeCookieNode::DeleteStoredObjects() {
150 LocalDataContainer* container = GetLocalDataContainerForNode(this); 284 LocalDataContainer* container = GetLocalDataContainerForNode(this);
151 CHECK(container); 285 CHECK(container);
152 container->cookie_helper_->DeleteCookie(*cookie_); 286 container->cookie_helper_->DeleteCookie(*cookie_);
153 container->cookie_list_.erase(cookie_); 287 container->cookie_list_.erase(cookie_);
154 } 288 }
155 289
156 CookieTreeNode::DetailedInfo CookieTreeCookieNode::GetDetailedInfo() const { 290 CookieTreeNode::DetailedInfo CookieTreeCookieNode::GetDetailedInfo() const {
157 return DetailedInfo(parent()->parent()->GetTitle()).InitCookie(&*cookie_); 291 return DetailedInfo().InitCookie(&*cookie_);
158 } 292 }
159 293
160 /////////////////////////////////////////////////////////////////////////////// 294 ///////////////////////////////////////////////////////////////////////////////
161 // CookieTreeAppCacheNode, public: 295 // CookieTreeAppCacheNode, public:
162 296
163 CookieTreeAppCacheNode::CookieTreeAppCacheNode( 297 CookieTreeAppCacheNode::CookieTreeAppCacheNode(
164 const GURL& origin_url, 298 const GURL& origin_url,
165 std::list<appcache::AppCacheInfo>::iterator appcache_info) 299 std::list<appcache::AppCacheInfo>::iterator appcache_info)
166 : CookieTreeNode(UTF8ToUTF16(appcache_info->manifest_url.spec())), 300 : CookieTreeNode(UTF8ToUTF16(appcache_info->manifest_url.spec())),
167 origin_url_(origin_url), 301 origin_url_(origin_url),
168 appcache_info_(appcache_info) { 302 appcache_info_(appcache_info) {
169 } 303 }
170 304
171 CookieTreeAppCacheNode::~CookieTreeAppCacheNode() { 305 CookieTreeAppCacheNode::~CookieTreeAppCacheNode() {
172 } 306 }
173 307
174 void CookieTreeAppCacheNode::DeleteStoredObjects() { 308 void CookieTreeAppCacheNode::DeleteStoredObjects() {
175 LocalDataContainer* container = GetLocalDataContainerForNode(this); 309 LocalDataContainer* container = GetLocalDataContainerForNode(this);
176 310
177 if (container) { 311 if (container) {
178 DCHECK(container->appcache_helper_); 312 DCHECK(container->appcache_helper_);
179 container->appcache_helper_->DeleteAppCacheGroup( 313 container->appcache_helper_->DeleteAppCacheGroup(
180 appcache_info_->manifest_url); 314 appcache_info_->manifest_url);
181 container->appcache_info_[origin_url_].erase(appcache_info_); 315 container->appcache_info_[origin_url_].erase(appcache_info_);
182 } 316 }
183 } 317 }
184 318
185 CookieTreeNode::DetailedInfo CookieTreeAppCacheNode::GetDetailedInfo() const { 319 CookieTreeNode::DetailedInfo CookieTreeAppCacheNode::GetDetailedInfo() const {
186 return DetailedInfo(parent()->parent()->GetTitle()).InitAppCache( 320 return DetailedInfo().InitAppCache(origin_url_, &*appcache_info_);
187 &*appcache_info_);
188 } 321 }
189 322
190 /////////////////////////////////////////////////////////////////////////////// 323 ///////////////////////////////////////////////////////////////////////////////
191 // CookieTreeDatabaseNode, public: 324 // CookieTreeDatabaseNode, public:
192 325
193 CookieTreeDatabaseNode::CookieTreeDatabaseNode( 326 CookieTreeDatabaseNode::CookieTreeDatabaseNode(
194 std::list<BrowsingDataDatabaseHelper::DatabaseInfo>::iterator database_info) 327 std::list<BrowsingDataDatabaseHelper::DatabaseInfo>::iterator database_info)
195 : CookieTreeNode(database_info->database_name.empty() ? 328 : CookieTreeNode(database_info->database_name.empty() ?
196 l10n_util::GetStringUTF16(IDS_COOKIES_WEB_DATABASE_UNNAMED_NAME) : 329 l10n_util::GetStringUTF16(IDS_COOKIES_WEB_DATABASE_UNNAMED_NAME) :
197 UTF8ToUTF16(database_info->database_name)), 330 UTF8ToUTF16(database_info->database_name)),
198 database_info_(database_info) { 331 database_info_(database_info) {
199 } 332 }
200 333
201 CookieTreeDatabaseNode::~CookieTreeDatabaseNode() {} 334 CookieTreeDatabaseNode::~CookieTreeDatabaseNode() {}
202 335
203 void CookieTreeDatabaseNode::DeleteStoredObjects() { 336 void CookieTreeDatabaseNode::DeleteStoredObjects() {
204 LocalDataContainer* container = GetLocalDataContainerForNode(this); 337 LocalDataContainer* container = GetLocalDataContainerForNode(this);
205 338
206 if (container) { 339 if (container) {
207 container->database_helper_->DeleteDatabase( 340 container->database_helper_->DeleteDatabase(
208 database_info_->origin_identifier, database_info_->database_name); 341 database_info_->origin_identifier, database_info_->database_name);
209 container->database_info_list_.erase(database_info_); 342 container->database_info_list_.erase(database_info_);
210 } 343 }
211 } 344 }
212 345
213 CookieTreeNode::DetailedInfo CookieTreeDatabaseNode::GetDetailedInfo() const { 346 CookieTreeNode::DetailedInfo CookieTreeDatabaseNode::GetDetailedInfo() const {
214 return DetailedInfo(parent()->parent()->GetTitle()).InitDatabase( 347 return DetailedInfo().InitDatabase(&*database_info_);
215 &*database_info_);
216 } 348 }
217 349
218 /////////////////////////////////////////////////////////////////////////////// 350 ///////////////////////////////////////////////////////////////////////////////
219 // CookieTreeLocalStorageNode, public: 351 // CookieTreeLocalStorageNode, public:
220 352
221 CookieTreeLocalStorageNode::CookieTreeLocalStorageNode( 353 CookieTreeLocalStorageNode::CookieTreeLocalStorageNode(
222 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator 354 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator
223 local_storage_info) 355 local_storage_info)
224 : CookieTreeNode(UTF8ToUTF16(local_storage_info->origin_url.spec())), 356 : CookieTreeNode(UTF8ToUTF16(local_storage_info->origin_url.spec())),
225 local_storage_info_(local_storage_info) { 357 local_storage_info_(local_storage_info) {
226 } 358 }
227 359
228 CookieTreeLocalStorageNode::~CookieTreeLocalStorageNode() {} 360 CookieTreeLocalStorageNode::~CookieTreeLocalStorageNode() {}
229 361
230 void CookieTreeLocalStorageNode::DeleteStoredObjects() { 362 void CookieTreeLocalStorageNode::DeleteStoredObjects() {
231 LocalDataContainer* container = GetLocalDataContainerForNode(this); 363 LocalDataContainer* container = GetLocalDataContainerForNode(this);
232 364
233 if (container) { 365 if (container) {
234 container->local_storage_helper_->DeleteOrigin( 366 container->local_storage_helper_->DeleteOrigin(
235 local_storage_info_->origin_url); 367 local_storage_info_->origin_url);
236 container->local_storage_info_list_.erase(local_storage_info_); 368 container->local_storage_info_list_.erase(local_storage_info_);
237 } 369 }
238 } 370 }
239 371
240 CookieTreeNode::DetailedInfo 372 CookieTreeNode::DetailedInfo
241 CookieTreeLocalStorageNode::GetDetailedInfo() const { 373 CookieTreeLocalStorageNode::GetDetailedInfo() const {
242 return DetailedInfo(parent()->parent()->GetTitle()).InitLocalStorage( 374 return DetailedInfo().InitLocalStorage(
243 &*local_storage_info_); 375 &*local_storage_info_);
244 } 376 }
245 377
246 /////////////////////////////////////////////////////////////////////////////// 378 ///////////////////////////////////////////////////////////////////////////////
247 // CookieTreeSessionStorageNode, public: 379 // CookieTreeSessionStorageNode, public:
248 380
249 CookieTreeSessionStorageNode::CookieTreeSessionStorageNode( 381 CookieTreeSessionStorageNode::CookieTreeSessionStorageNode(
250 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator 382 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator
251 session_storage_info) 383 session_storage_info)
252 : CookieTreeNode(UTF8ToUTF16(session_storage_info->origin_url.spec())), 384 : CookieTreeNode(UTF8ToUTF16(session_storage_info->origin_url.spec())),
253 session_storage_info_(session_storage_info) { 385 session_storage_info_(session_storage_info) {
254 } 386 }
255 387
256 CookieTreeSessionStorageNode::~CookieTreeSessionStorageNode() {} 388 CookieTreeSessionStorageNode::~CookieTreeSessionStorageNode() {}
257 389
258 void CookieTreeSessionStorageNode::DeleteStoredObjects() { 390 void CookieTreeSessionStorageNode::DeleteStoredObjects() {
259 LocalDataContainer* container = GetLocalDataContainerForNode(this); 391 LocalDataContainer* container = GetLocalDataContainerForNode(this);
260 392
261 if (container) { 393 if (container) {
262 container->session_storage_info_list_.erase(session_storage_info_); 394 container->session_storage_info_list_.erase(session_storage_info_);
263 } 395 }
264 } 396 }
265 397
266 CookieTreeNode::DetailedInfo 398 CookieTreeNode::DetailedInfo
267 CookieTreeSessionStorageNode::GetDetailedInfo() const { 399 CookieTreeSessionStorageNode::GetDetailedInfo() const {
268 return DetailedInfo(parent()->parent()->GetTitle()).InitSessionStorage( 400 return DetailedInfo().InitSessionStorage(&*session_storage_info_);
269 &*session_storage_info_);
270 } 401 }
271 402
272 /////////////////////////////////////////////////////////////////////////////// 403 ///////////////////////////////////////////////////////////////////////////////
273 // CookieTreeIndexedDBNode, public: 404 // CookieTreeIndexedDBNode, public:
274 405
275 CookieTreeIndexedDBNode::CookieTreeIndexedDBNode( 406 CookieTreeIndexedDBNode::CookieTreeIndexedDBNode(
276 std::list<BrowsingDataIndexedDBHelper::IndexedDBInfo>::iterator 407 std::list<BrowsingDataIndexedDBHelper::IndexedDBInfo>::iterator
277 indexed_db_info) 408 indexed_db_info)
278 : CookieTreeNode(UTF8ToUTF16( 409 : CookieTreeNode(UTF8ToUTF16(
279 indexed_db_info->origin.spec())), 410 indexed_db_info->origin.spec())),
280 indexed_db_info_(indexed_db_info) { 411 indexed_db_info_(indexed_db_info) {
281 } 412 }
282 413
283 CookieTreeIndexedDBNode::~CookieTreeIndexedDBNode() {} 414 CookieTreeIndexedDBNode::~CookieTreeIndexedDBNode() {}
284 415
285 void CookieTreeIndexedDBNode::DeleteStoredObjects() { 416 void CookieTreeIndexedDBNode::DeleteStoredObjects() {
286 LocalDataContainer* container = GetLocalDataContainerForNode(this); 417 LocalDataContainer* container = GetLocalDataContainerForNode(this);
287 418
288 if (container) { 419 if (container) {
289 container->indexed_db_helper_->DeleteIndexedDB( 420 container->indexed_db_helper_->DeleteIndexedDB(
290 indexed_db_info_->origin); 421 indexed_db_info_->origin);
291 container->indexed_db_info_list_.erase(indexed_db_info_); 422 container->indexed_db_info_list_.erase(indexed_db_info_);
292 } 423 }
293 } 424 }
294 425
295 CookieTreeNode::DetailedInfo CookieTreeIndexedDBNode::GetDetailedInfo() const { 426 CookieTreeNode::DetailedInfo CookieTreeIndexedDBNode::GetDetailedInfo() const {
296 return DetailedInfo(parent()->parent()->GetTitle()).InitIndexedDB( 427 return DetailedInfo().InitIndexedDB(&*indexed_db_info_);
297 &*indexed_db_info_);
298 } 428 }
299 429
300 /////////////////////////////////////////////////////////////////////////////// 430 ///////////////////////////////////////////////////////////////////////////////
301 // CookieTreeFileSystemNode, public: 431 // CookieTreeFileSystemNode, public:
302 432
303 CookieTreeFileSystemNode::CookieTreeFileSystemNode( 433 CookieTreeFileSystemNode::CookieTreeFileSystemNode(
304 std::list<BrowsingDataFileSystemHelper::FileSystemInfo>::iterator 434 std::list<BrowsingDataFileSystemHelper::FileSystemInfo>::iterator
305 file_system_info) 435 file_system_info)
306 : CookieTreeNode(UTF8ToUTF16( 436 : CookieTreeNode(UTF8ToUTF16(
307 file_system_info->origin.spec())), 437 file_system_info->origin.spec())),
308 file_system_info_(file_system_info) { 438 file_system_info_(file_system_info) {
309 } 439 }
310 440
311 CookieTreeFileSystemNode::~CookieTreeFileSystemNode() {} 441 CookieTreeFileSystemNode::~CookieTreeFileSystemNode() {}
312 442
313 void CookieTreeFileSystemNode::DeleteStoredObjects() { 443 void CookieTreeFileSystemNode::DeleteStoredObjects() {
314 LocalDataContainer* container = GetLocalDataContainerForNode(this); 444 LocalDataContainer* container = GetLocalDataContainerForNode(this);
315 445
316 if (container) { 446 if (container) {
317 container->file_system_helper_->DeleteFileSystemOrigin( 447 container->file_system_helper_->DeleteFileSystemOrigin(
318 file_system_info_->origin); 448 file_system_info_->origin);
319 container->file_system_info_list_.erase(file_system_info_); 449 container->file_system_info_list_.erase(file_system_info_);
320 } 450 }
321 } 451 }
322 452
323 CookieTreeNode::DetailedInfo CookieTreeFileSystemNode::GetDetailedInfo() const { 453 CookieTreeNode::DetailedInfo CookieTreeFileSystemNode::GetDetailedInfo() const {
324 return DetailedInfo(parent()->parent()->GetTitle()).InitFileSystem( 454 return DetailedInfo().InitFileSystem(&*file_system_info_);
325 &*file_system_info_);
326 } 455 }
327 456
328 /////////////////////////////////////////////////////////////////////////////// 457 ///////////////////////////////////////////////////////////////////////////////
329 // CookieTreeQuotaNode, public: 458 // CookieTreeQuotaNode, public:
330 459
331 CookieTreeQuotaNode::CookieTreeQuotaNode( 460 CookieTreeQuotaNode::CookieTreeQuotaNode(
332 std::list<BrowsingDataQuotaHelper::QuotaInfo>::iterator quota_info) 461 std::list<BrowsingDataQuotaHelper::QuotaInfo>::iterator quota_info)
333 : CookieTreeNode(UTF8ToUTF16(quota_info->host)), 462 : CookieTreeNode(UTF8ToUTF16(quota_info->host)),
334 quota_info_(quota_info) { 463 quota_info_(quota_info) {
335 } 464 }
336 465
337 CookieTreeQuotaNode::~CookieTreeQuotaNode() {} 466 CookieTreeQuotaNode::~CookieTreeQuotaNode() {}
338 467
339 void CookieTreeQuotaNode::DeleteStoredObjects() { 468 void CookieTreeQuotaNode::DeleteStoredObjects() {
340 // Calling this function may cause unexpected over-quota state of origin. 469 // Calling this function may cause unexpected over-quota state of origin.
341 // However, it'll caused no problem, just prevent usage growth of the origin. 470 // However, it'll caused no problem, just prevent usage growth of the origin.
342 CookieTreeOriginNode* app = static_cast<CookieTreeOriginNode*>(parent()); 471 CookieTreeHostNode* app = static_cast<CookieTreeHostNode*>(parent());
343 LocalDataContainer* container = GetModel()->GetLocalDataContainer( 472 LocalDataContainer* container = GetModel()->GetLocalDataContainer(
344 app->app_id()); 473 app->app_id());
345 474
346 if (container) { 475 if (container) {
347 container->quota_helper_->RevokeHostQuota(quota_info_->host); 476 container->quota_helper_->RevokeHostQuota(quota_info_->host);
348 container->quota_info_list_.erase(quota_info_); 477 container->quota_info_list_.erase(quota_info_);
349 } 478 }
350 } 479 }
351 480
352 CookieTreeNode::DetailedInfo CookieTreeQuotaNode::GetDetailedInfo() const { 481 CookieTreeNode::DetailedInfo CookieTreeQuotaNode::GetDetailedInfo() const {
353 return DetailedInfo(parent()->parent()->GetTitle()).InitQuota( 482 return DetailedInfo().InitQuota(&*quota_info_);
354 &*quota_info_);
355 } 483 }
356 484
357 /////////////////////////////////////////////////////////////////////////////// 485 ///////////////////////////////////////////////////////////////////////////////
358 // CookieTreeServerBoundCertNode, public: 486 // CookieTreeServerBoundCertNode, public:
359 487
360 CookieTreeServerBoundCertNode::CookieTreeServerBoundCertNode( 488 CookieTreeServerBoundCertNode::CookieTreeServerBoundCertNode(
361 net::ServerBoundCertStore::ServerBoundCertList::iterator cert) 489 net::ServerBoundCertStore::ServerBoundCertList::iterator cert)
362 : CookieTreeNode(ASCIIToUTF16(cert->server_identifier())), 490 : CookieTreeNode(ASCIIToUTF16(cert->server_identifier())),
363 server_bound_cert_(cert) { 491 server_bound_cert_(cert) {
364 } 492 }
365 493
366 CookieTreeServerBoundCertNode::~CookieTreeServerBoundCertNode() {} 494 CookieTreeServerBoundCertNode::~CookieTreeServerBoundCertNode() {}
367 495
368 void CookieTreeServerBoundCertNode::DeleteStoredObjects() { 496 void CookieTreeServerBoundCertNode::DeleteStoredObjects() {
369 LocalDataContainer* container = GetLocalDataContainerForNode(this); 497 LocalDataContainer* container = GetLocalDataContainerForNode(this);
370 498
371 if (container) { 499 if (container) {
372 container->server_bound_cert_helper_->DeleteServerBoundCert( 500 container->server_bound_cert_helper_->DeleteServerBoundCert(
373 server_bound_cert_->server_identifier()); 501 server_bound_cert_->server_identifier());
374 container->server_bound_cert_list_.erase(server_bound_cert_); 502 container->server_bound_cert_list_.erase(server_bound_cert_);
375 } 503 }
376 } 504 }
377 505
378 CookieTreeNode::DetailedInfo 506 CookieTreeNode::DetailedInfo
379 CookieTreeServerBoundCertNode::GetDetailedInfo() const { 507 CookieTreeServerBoundCertNode::GetDetailedInfo() const {
380 return DetailedInfo(parent()->parent()->GetTitle()).InitServerBoundCert( 508 return DetailedInfo().InitServerBoundCert(&*server_bound_cert_);
381 &*server_bound_cert_);
382 } 509 }
383 510
384 /////////////////////////////////////////////////////////////////////////////// 511 ///////////////////////////////////////////////////////////////////////////////
385 // CookieTreeRootNode, public: 512 // CookieTreeRootNode, public:
386 513
387 CookieTreeRootNode::CookieTreeRootNode(CookiesTreeModel* model) 514 CookieTreeRootNode::CookieTreeRootNode(CookiesTreeModel* model)
388 : model_(model) { 515 : model_(model) {
389 } 516 }
390 517
391 CookieTreeRootNode::~CookieTreeRootNode() {} 518 CookieTreeRootNode::~CookieTreeRootNode() {}
392 519
393 CookieTreeOriginNode* CookieTreeRootNode::GetOrCreateOriginNode( 520 CookieTreeHostNode* CookieTreeRootNode::GetOrCreateHostNode(
394 const GURL& url, 521 const GURL& url,
395 const std::string& app_id, 522 const std::string& app_id,
396 const std::string& app_name) { 523 const std::string& app_name) {
397 CookieTreeOriginNode origin_node(url, app_id, app_name); 524 scoped_ptr<CookieTreeHostNode> host_node(
525 new CookieTreeHostNode(url, app_id, app_name));
398 526
399 // First see if there is an existing match. 527 // First see if there is an existing match.
400 std::vector<CookieTreeNode*>::iterator origin_node_iterator = 528 std::vector<CookieTreeNode*>::iterator host_node_iterator =
401 std::lower_bound(children().begin(), children().end(), &origin_node, 529 std::lower_bound(children().begin(), children().end(), host_node.get(),
402 OriginNodeComparator()); 530 HostNodeComparator());
403 if (origin_node_iterator != children().end() && 531 if (host_node_iterator != children().end() &&
404 CookieTreeOriginNode::TitleForUrl(url, app_id, app_name) == 532 CookieTreeHostNode::TitleForUrl(url, app_id, app_name) ==
405 (*origin_node_iterator)->GetTitle()) 533 (*host_node_iterator)->GetTitle())
406 return static_cast<CookieTreeOriginNode*>(*origin_node_iterator); 534 return static_cast<CookieTreeHostNode*>(*host_node_iterator);
407 // Node doesn't exist, create a new one and insert it into the (ordered) 535 // Node doesn't exist, insert the new one into the (ordered) children.
408 // children.
409 CookieTreeOriginNode* retval = new CookieTreeOriginNode(url, app_id,
410 app_name);
411 DCHECK(model_); 536 DCHECK(model_);
412 model_->Add(this, retval, (origin_node_iterator - children().begin())); 537 model_->Add(this, host_node.get(),
413 return retval; 538 (host_node_iterator - children().begin()));
539 return host_node.release();
414 } 540 }
415 541
416 CookiesTreeModel* CookieTreeRootNode::GetModel() const { 542 CookiesTreeModel* CookieTreeRootNode::GetModel() const {
417 return model_; 543 return model_;
418 } 544 }
419 545
420 CookieTreeNode::DetailedInfo CookieTreeRootNode::GetDetailedInfo() const { 546 CookieTreeNode::DetailedInfo CookieTreeRootNode::GetDetailedInfo() const {
421 return DetailedInfo(string16()).Init(DetailedInfo::TYPE_ROOT); 547 return DetailedInfo().Init(DetailedInfo::TYPE_ROOT);
422 } 548 }
423 549
424 /////////////////////////////////////////////////////////////////////////////// 550 ///////////////////////////////////////////////////////////////////////////////
425 // CookieTreeOriginNode, public: 551 // CookieTreeHostNode, public:
426 552
427 // static 553 // static
428 string16 CookieTreeOriginNode::TitleForUrl( 554 string16 CookieTreeHostNode::TitleForUrl(
429 const GURL& url, 555 const GURL& url,
430 const std::string& app_id, 556 const std::string& app_id,
431 const std::string& app_name) { 557 const std::string& app_name) {
432 std::string title; 558 std::string title;
433 const std::string file_origin_node_name( 559 const std::string file_origin_node_name(
434 std::string(chrome::kFileScheme) + content::kStandardSchemeSeparator); 560 std::string(chrome::kFileScheme) + content::kStandardSchemeSeparator);
435 // Only prepend the app name, if the app id is not an empty string. 561 // Only prepend the app name, if the app id is not an empty string.
436 if (!app_id.empty()) { 562 if (!app_id.empty()) {
437 title = app_name; 563 title = app_name;
438 title.append(", "); 564 title.append(", ");
439 } 565 }
440 title.append(url.SchemeIsFile() ? file_origin_node_name : url.host()); 566 title.append(url.SchemeIsFile() ? file_origin_node_name : url.host());
441 return UTF8ToUTF16(title); 567 return UTF8ToUTF16(title);
442 } 568 }
443 569
444 CookieTreeOriginNode::CookieTreeOriginNode(const GURL& url, 570 CookieTreeHostNode::CookieTreeHostNode(const GURL& url,
445 const std::string& app_id, 571 const std::string& app_id,
446 const std::string& name) 572 const std::string& name)
447 : CookieTreeNode(TitleForUrl(url, app_id, name)), 573 : CookieTreeNode(TitleForUrl(url, app_id, name)),
448 cookies_child_(NULL), 574 cookies_child_(NULL),
449 databases_child_(NULL), 575 databases_child_(NULL),
450 local_storages_child_(NULL), 576 local_storages_child_(NULL),
451 session_storages_child_(NULL), 577 session_storages_child_(NULL),
452 appcaches_child_(NULL), 578 appcaches_child_(NULL),
453 indexed_dbs_child_(NULL), 579 indexed_dbs_child_(NULL),
454 file_systems_child_(NULL), 580 file_systems_child_(NULL),
455 quota_child_(NULL), 581 quota_child_(NULL),
456 server_bound_certs_child_(NULL), 582 server_bound_certs_child_(NULL),
457 app_id_(app_id), 583 app_id_(app_id),
458 app_name_(name), 584 app_name_(name),
459 url_(url) {} 585 url_(url),
586 canonicalized_host_(CanonicalizeHost(url)) {}
460 587
461 CookieTreeOriginNode::~CookieTreeOriginNode() {} 588 CookieTreeHostNode::~CookieTreeHostNode() {}
462 589
463 const std::string CookieTreeOriginNode::GetHost() const { 590 const std::string CookieTreeHostNode::GetHost() const {
464 const std::string file_origin_node_name( 591 const std::string file_origin_node_name(
465 std::string(chrome::kFileScheme) + content::kStandardSchemeSeparator); 592 std::string(chrome::kFileScheme) + content::kStandardSchemeSeparator);
466 return url_.SchemeIsFile() ? file_origin_node_name : url_.host(); 593 return url_.SchemeIsFile() ? file_origin_node_name : url_.host();
467 } 594 }
468 595
469 CookieTreeNode::DetailedInfo CookieTreeOriginNode::GetDetailedInfo() const { 596 CookieTreeNode::DetailedInfo CookieTreeHostNode::GetDetailedInfo() const {
470 return DetailedInfo(GetTitle()).InitOrigin(app_id_, app_name_); 597 return DetailedInfo().InitHost(app_id_, app_name_);
471 } 598 }
472 599
473 CookieTreeCookiesNode* CookieTreeOriginNode::GetOrCreateCookiesNode() { 600 CookieTreeCookiesNode* CookieTreeHostNode::GetOrCreateCookiesNode() {
474 if (cookies_child_) 601 if (cookies_child_)
475 return cookies_child_; 602 return cookies_child_;
476 cookies_child_ = new CookieTreeCookiesNode; 603 cookies_child_ = new CookieTreeCookiesNode;
477 AddChildSortedByTitle(cookies_child_); 604 AddChildSortedByTitle(cookies_child_);
478 return cookies_child_; 605 return cookies_child_;
479 } 606 }
480 607
481 CookieTreeDatabasesNode* CookieTreeOriginNode::GetOrCreateDatabasesNode() { 608 CookieTreeDatabasesNode* CookieTreeHostNode::GetOrCreateDatabasesNode() {
482 if (databases_child_) 609 if (databases_child_)
483 return databases_child_; 610 return databases_child_;
484 databases_child_ = new CookieTreeDatabasesNode; 611 databases_child_ = new CookieTreeDatabasesNode;
485 AddChildSortedByTitle(databases_child_); 612 AddChildSortedByTitle(databases_child_);
486 return databases_child_; 613 return databases_child_;
487 } 614 }
488 615
489 CookieTreeLocalStoragesNode* 616 CookieTreeLocalStoragesNode*
490 CookieTreeOriginNode::GetOrCreateLocalStoragesNode() { 617 CookieTreeHostNode::GetOrCreateLocalStoragesNode() {
491 if (local_storages_child_) 618 if (local_storages_child_)
492 return local_storages_child_; 619 return local_storages_child_;
493 local_storages_child_ = new CookieTreeLocalStoragesNode; 620 local_storages_child_ = new CookieTreeLocalStoragesNode;
494 AddChildSortedByTitle(local_storages_child_); 621 AddChildSortedByTitle(local_storages_child_);
495 return local_storages_child_; 622 return local_storages_child_;
496 } 623 }
497 624
498 CookieTreeSessionStoragesNode* 625 CookieTreeSessionStoragesNode*
499 CookieTreeOriginNode::GetOrCreateSessionStoragesNode() { 626 CookieTreeHostNode::GetOrCreateSessionStoragesNode() {
500 if (session_storages_child_) 627 if (session_storages_child_)
501 return session_storages_child_; 628 return session_storages_child_;
502 session_storages_child_ = new CookieTreeSessionStoragesNode; 629 session_storages_child_ = new CookieTreeSessionStoragesNode;
503 AddChildSortedByTitle(session_storages_child_); 630 AddChildSortedByTitle(session_storages_child_);
504 return session_storages_child_; 631 return session_storages_child_;
505 } 632 }
506 633
507 CookieTreeAppCachesNode* CookieTreeOriginNode::GetOrCreateAppCachesNode() { 634 CookieTreeAppCachesNode* CookieTreeHostNode::GetOrCreateAppCachesNode() {
508 if (appcaches_child_) 635 if (appcaches_child_)
509 return appcaches_child_; 636 return appcaches_child_;
510 appcaches_child_ = new CookieTreeAppCachesNode; 637 appcaches_child_ = new CookieTreeAppCachesNode;
511 AddChildSortedByTitle(appcaches_child_); 638 AddChildSortedByTitle(appcaches_child_);
512 return appcaches_child_; 639 return appcaches_child_;
513 } 640 }
514 641
515 CookieTreeIndexedDBsNode* CookieTreeOriginNode::GetOrCreateIndexedDBsNode() { 642 CookieTreeIndexedDBsNode* CookieTreeHostNode::GetOrCreateIndexedDBsNode() {
516 if (indexed_dbs_child_) 643 if (indexed_dbs_child_)
517 return indexed_dbs_child_; 644 return indexed_dbs_child_;
518 indexed_dbs_child_ = new CookieTreeIndexedDBsNode; 645 indexed_dbs_child_ = new CookieTreeIndexedDBsNode;
519 AddChildSortedByTitle(indexed_dbs_child_); 646 AddChildSortedByTitle(indexed_dbs_child_);
520 return indexed_dbs_child_; 647 return indexed_dbs_child_;
521 } 648 }
522 649
523 CookieTreeFileSystemsNode* CookieTreeOriginNode::GetOrCreateFileSystemsNode() { 650 CookieTreeFileSystemsNode* CookieTreeHostNode::GetOrCreateFileSystemsNode() {
524 if (file_systems_child_) 651 if (file_systems_child_)
525 return file_systems_child_; 652 return file_systems_child_;
526 file_systems_child_ = new CookieTreeFileSystemsNode; 653 file_systems_child_ = new CookieTreeFileSystemsNode;
527 AddChildSortedByTitle(file_systems_child_); 654 AddChildSortedByTitle(file_systems_child_);
528 return file_systems_child_; 655 return file_systems_child_;
529 } 656 }
530 657
531 CookieTreeQuotaNode* CookieTreeOriginNode::UpdateOrCreateQuotaNode( 658 CookieTreeQuotaNode* CookieTreeHostNode::UpdateOrCreateQuotaNode(
532 std::list<BrowsingDataQuotaHelper::QuotaInfo>::iterator quota_info) { 659 std::list<BrowsingDataQuotaHelper::QuotaInfo>::iterator quota_info) {
533 if (quota_child_) 660 if (quota_child_)
534 return quota_child_; 661 return quota_child_;
535 quota_child_ = new CookieTreeQuotaNode(quota_info); 662 quota_child_ = new CookieTreeQuotaNode(quota_info);
536 AddChildSortedByTitle(quota_child_); 663 AddChildSortedByTitle(quota_child_);
537 return quota_child_; 664 return quota_child_;
538 } 665 }
539 666
540 CookieTreeServerBoundCertsNode* 667 CookieTreeServerBoundCertsNode*
541 CookieTreeOriginNode::GetOrCreateServerBoundCertsNode() { 668 CookieTreeHostNode::GetOrCreateServerBoundCertsNode() {
542 if (server_bound_certs_child_) 669 if (server_bound_certs_child_)
543 return server_bound_certs_child_; 670 return server_bound_certs_child_;
544 server_bound_certs_child_ = new CookieTreeServerBoundCertsNode; 671 server_bound_certs_child_ = new CookieTreeServerBoundCertsNode;
545 AddChildSortedByTitle(server_bound_certs_child_); 672 AddChildSortedByTitle(server_bound_certs_child_);
546 return server_bound_certs_child_; 673 return server_bound_certs_child_;
547 } 674 }
548 675
549 void CookieTreeOriginNode::CreateContentException( 676 void CookieTreeHostNode::CreateContentException(
550 CookieSettings* cookie_settings, ContentSetting setting) const { 677 CookieSettings* cookie_settings, ContentSetting setting) const {
551 DCHECK(setting == CONTENT_SETTING_ALLOW || 678 DCHECK(setting == CONTENT_SETTING_ALLOW ||
552 setting == CONTENT_SETTING_BLOCK || 679 setting == CONTENT_SETTING_BLOCK ||
553 setting == CONTENT_SETTING_SESSION_ONLY); 680 setting == CONTENT_SETTING_SESSION_ONLY);
554 if (CanCreateContentException()) { 681 if (CanCreateContentException()) {
555 cookie_settings->ResetCookieSetting( 682 cookie_settings->ResetCookieSetting(
556 ContentSettingsPattern::FromURLNoWildcard(url_), 683 ContentSettingsPattern::FromURLNoWildcard(url_),
557 ContentSettingsPattern::Wildcard()); 684 ContentSettingsPattern::Wildcard());
558 cookie_settings->SetCookieSetting( 685 cookie_settings->SetCookieSetting(
559 ContentSettingsPattern::FromURL(url_), 686 ContentSettingsPattern::FromURL(url_),
560 ContentSettingsPattern::Wildcard(), setting); 687 ContentSettingsPattern::Wildcard(), setting);
561 } 688 }
562 } 689 }
563 690
564 bool CookieTreeOriginNode::CanCreateContentException() const { 691 bool CookieTreeHostNode::CanCreateContentException() const {
565 return !url_.SchemeIsFile(); 692 return !url_.SchemeIsFile();
566 } 693 }
567 694
568 /////////////////////////////////////////////////////////////////////////////// 695 ///////////////////////////////////////////////////////////////////////////////
569 // CookieTreeCookiesNode, public: 696 // CookieTreeCookiesNode, public:
570 697
571 CookieTreeCookiesNode::CookieTreeCookiesNode() 698 CookieTreeCookiesNode::CookieTreeCookiesNode()
572 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_COOKIES)) { 699 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_COOKIES)) {
573 } 700 }
574 701
575 CookieTreeCookiesNode::~CookieTreeCookiesNode() { 702 CookieTreeCookiesNode::~CookieTreeCookiesNode() {
576 } 703 }
577 704
578 CookieTreeNode::DetailedInfo CookieTreeCookiesNode::GetDetailedInfo() const { 705 CookieTreeNode::DetailedInfo CookieTreeCookiesNode::GetDetailedInfo() const {
579 return DetailedInfo(parent()->GetTitle()).Init(DetailedInfo::TYPE_COOKIES); 706 return DetailedInfo().Init(DetailedInfo::TYPE_COOKIES);
580 } 707 }
581 708
582 /////////////////////////////////////////////////////////////////////////////// 709 ///////////////////////////////////////////////////////////////////////////////
583 // CookieTreeAppCachesNode, public: 710 // CookieTreeAppCachesNode, public:
584 711
585 CookieTreeAppCachesNode::CookieTreeAppCachesNode() 712 CookieTreeAppCachesNode::CookieTreeAppCachesNode()
586 : CookieTreeNode(l10n_util::GetStringUTF16( 713 : CookieTreeNode(l10n_util::GetStringUTF16(
587 IDS_COOKIES_APPLICATION_CACHES)) { 714 IDS_COOKIES_APPLICATION_CACHES)) {
588 } 715 }
589 716
590 CookieTreeAppCachesNode::~CookieTreeAppCachesNode() {} 717 CookieTreeAppCachesNode::~CookieTreeAppCachesNode() {}
591 718
592 CookieTreeNode::DetailedInfo CookieTreeAppCachesNode::GetDetailedInfo() const { 719 CookieTreeNode::DetailedInfo CookieTreeAppCachesNode::GetDetailedInfo() const {
593 return DetailedInfo(parent()->GetTitle()).Init(DetailedInfo::TYPE_APPCACHES); 720 return DetailedInfo().Init(DetailedInfo::TYPE_APPCACHES);
594 } 721 }
595 722
596 /////////////////////////////////////////////////////////////////////////////// 723 ///////////////////////////////////////////////////////////////////////////////
597 // CookieTreeDatabasesNode, public: 724 // CookieTreeDatabasesNode, public:
598 725
599 CookieTreeDatabasesNode::CookieTreeDatabasesNode() 726 CookieTreeDatabasesNode::CookieTreeDatabasesNode()
600 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_WEB_DATABASES)) { 727 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_WEB_DATABASES)) {
601 } 728 }
602 729
603 CookieTreeDatabasesNode::~CookieTreeDatabasesNode() {} 730 CookieTreeDatabasesNode::~CookieTreeDatabasesNode() {}
604 731
605 CookieTreeNode::DetailedInfo CookieTreeDatabasesNode::GetDetailedInfo() const { 732 CookieTreeNode::DetailedInfo CookieTreeDatabasesNode::GetDetailedInfo() const {
606 return DetailedInfo(parent()->GetTitle()).Init(DetailedInfo::TYPE_DATABASES); 733 return DetailedInfo().Init(DetailedInfo::TYPE_DATABASES);
607 } 734 }
608 735
609 /////////////////////////////////////////////////////////////////////////////// 736 ///////////////////////////////////////////////////////////////////////////////
610 // CookieTreeLocalStoragesNode, public: 737 // CookieTreeLocalStoragesNode, public:
611 738
612 CookieTreeLocalStoragesNode::CookieTreeLocalStoragesNode() 739 CookieTreeLocalStoragesNode::CookieTreeLocalStoragesNode()
613 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_LOCAL_STORAGE)) { 740 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_LOCAL_STORAGE)) {
614 } 741 }
615 742
616 CookieTreeLocalStoragesNode::~CookieTreeLocalStoragesNode() {} 743 CookieTreeLocalStoragesNode::~CookieTreeLocalStoragesNode() {}
617 744
618 CookieTreeNode::DetailedInfo 745 CookieTreeNode::DetailedInfo
619 CookieTreeLocalStoragesNode::GetDetailedInfo() const { 746 CookieTreeLocalStoragesNode::GetDetailedInfo() const {
620 return DetailedInfo(parent()->GetTitle()).Init( 747 return DetailedInfo().Init(DetailedInfo::TYPE_LOCAL_STORAGES);
621 DetailedInfo::TYPE_LOCAL_STORAGES);
622 } 748 }
623 749
624 /////////////////////////////////////////////////////////////////////////////// 750 ///////////////////////////////////////////////////////////////////////////////
625 // CookieTreeSessionStoragesNode, public: 751 // CookieTreeSessionStoragesNode, public:
626 752
627 CookieTreeSessionStoragesNode::CookieTreeSessionStoragesNode() 753 CookieTreeSessionStoragesNode::CookieTreeSessionStoragesNode()
628 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_SESSION_STORAGE)) { 754 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_SESSION_STORAGE)) {
629 } 755 }
630 756
631 CookieTreeSessionStoragesNode::~CookieTreeSessionStoragesNode() {} 757 CookieTreeSessionStoragesNode::~CookieTreeSessionStoragesNode() {}
632 758
633 CookieTreeNode::DetailedInfo 759 CookieTreeNode::DetailedInfo
634 CookieTreeSessionStoragesNode::GetDetailedInfo() const { 760 CookieTreeSessionStoragesNode::GetDetailedInfo() const {
635 return DetailedInfo(parent()->GetTitle()).Init( 761 return DetailedInfo().Init(DetailedInfo::TYPE_SESSION_STORAGES);
636 DetailedInfo::TYPE_SESSION_STORAGES);
637 } 762 }
638 763
639 /////////////////////////////////////////////////////////////////////////////// 764 ///////////////////////////////////////////////////////////////////////////////
640 // CookieTreeIndexedDBsNode, public: 765 // CookieTreeIndexedDBsNode, public:
641 766
642 CookieTreeIndexedDBsNode::CookieTreeIndexedDBsNode() 767 CookieTreeIndexedDBsNode::CookieTreeIndexedDBsNode()
643 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_INDEXED_DBS)) { 768 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_INDEXED_DBS)) {
644 } 769 }
645 770
646 CookieTreeIndexedDBsNode::~CookieTreeIndexedDBsNode() {} 771 CookieTreeIndexedDBsNode::~CookieTreeIndexedDBsNode() {}
647 772
648 CookieTreeNode::DetailedInfo 773 CookieTreeNode::DetailedInfo
649 CookieTreeIndexedDBsNode::GetDetailedInfo() const { 774 CookieTreeIndexedDBsNode::GetDetailedInfo() const {
650 return DetailedInfo(parent()->GetTitle()).Init( 775 return DetailedInfo().Init(DetailedInfo::TYPE_INDEXED_DBS);
651 DetailedInfo::TYPE_INDEXED_DBS);
652 } 776 }
653 777
654 /////////////////////////////////////////////////////////////////////////////// 778 ///////////////////////////////////////////////////////////////////////////////
655 // CookieTreeFileSystemsNode, public: 779 // CookieTreeFileSystemsNode, public:
656 780
657 CookieTreeFileSystemsNode::CookieTreeFileSystemsNode() 781 CookieTreeFileSystemsNode::CookieTreeFileSystemsNode()
658 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_FILE_SYSTEMS)) { 782 : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_FILE_SYSTEMS)) {
659 } 783 }
660 784
661 CookieTreeFileSystemsNode::~CookieTreeFileSystemsNode() {} 785 CookieTreeFileSystemsNode::~CookieTreeFileSystemsNode() {}
662 786
663 CookieTreeNode::DetailedInfo 787 CookieTreeNode::DetailedInfo
664 CookieTreeFileSystemsNode::GetDetailedInfo() const { 788 CookieTreeFileSystemsNode::GetDetailedInfo() const {
665 return DetailedInfo(parent()->GetTitle()).Init( 789 return DetailedInfo().Init(DetailedInfo::TYPE_FILE_SYSTEMS);
666 DetailedInfo::TYPE_FILE_SYSTEMS);
667 } 790 }
668 791
669 /////////////////////////////////////////////////////////////////////////////// 792 ///////////////////////////////////////////////////////////////////////////////
670 // CookieTreeServerBoundCertsNode, public: 793 // CookieTreeServerBoundCertsNode, public:
671 794
672 CookieTreeServerBoundCertsNode::CookieTreeServerBoundCertsNode() 795 CookieTreeServerBoundCertsNode::CookieTreeServerBoundCertsNode()
673 : CookieTreeNode( 796 : CookieTreeNode(
674 l10n_util::GetStringUTF16(IDS_COOKIES_SERVER_BOUND_CERTS)) { 797 l10n_util::GetStringUTF16(IDS_COOKIES_SERVER_BOUND_CERTS)) {
675 } 798 }
676 799
677 CookieTreeServerBoundCertsNode::~CookieTreeServerBoundCertsNode() {} 800 CookieTreeServerBoundCertsNode::~CookieTreeServerBoundCertsNode() {}
678 801
679 CookieTreeNode::DetailedInfo 802 CookieTreeNode::DetailedInfo
680 CookieTreeServerBoundCertsNode::GetDetailedInfo() const { 803 CookieTreeServerBoundCertsNode::GetDetailedInfo() const {
681 return DetailedInfo(parent()->GetTitle()).Init( 804 return DetailedInfo().Init(DetailedInfo::TYPE_SERVER_BOUND_CERTS);
682 DetailedInfo::TYPE_SERVER_BOUND_CERTS);
683 } 805 }
684 806
685 void CookieTreeNode::AddChildSortedByTitle(CookieTreeNode* new_child) { 807 void CookieTreeNode::AddChildSortedByTitle(CookieTreeNode* new_child) {
686 DCHECK(new_child); 808 DCHECK(new_child);
687 std::vector<CookieTreeNode*>::iterator iter = 809 std::vector<CookieTreeNode*>::iterator iter =
688 std::lower_bound(children().begin(), children().end(), new_child, 810 std::lower_bound(children().begin(), children().end(), new_child,
689 NodeTitleComparator()); 811 NodeTitleComparator());
690 GetModel()->Add(this, new_child, iter - children().begin()); 812 GetModel()->Add(this, new_child, iter - children().begin());
691 } 813 }
692 814
(...skipping 13 matching lines...) Expand all
706 828
707 void CookiesTreeModel::ScopedBatchUpdateNotifier::StartBatchUpdate() { 829 void CookiesTreeModel::ScopedBatchUpdateNotifier::StartBatchUpdate() {
708 if (!batch_in_progress_) { 830 if (!batch_in_progress_) {
709 model_->NotifyObserverBeginBatch(); 831 model_->NotifyObserverBeginBatch();
710 batch_in_progress_ = true; 832 batch_in_progress_ = true;
711 } 833 }
712 } 834 }
713 835
714 /////////////////////////////////////////////////////////////////////////////// 836 ///////////////////////////////////////////////////////////////////////////////
715 // CookiesTreeModel, public: 837 // CookiesTreeModel, public:
716 CookiesTreeModel::CookiesTreeModel(const ContainerMap& apps_map, 838 CookiesTreeModel::CookiesTreeModel(
717 bool group_by_cookie_source) 839 const ContainerMap& apps_map,
840 ExtensionSpecialStoragePolicy* special_storage_policy,
841 bool group_by_cookie_source)
718 : ALLOW_THIS_IN_INITIALIZER_LIST(ui::TreeNodeModel<CookieTreeNode>( 842 : ALLOW_THIS_IN_INITIALIZER_LIST(ui::TreeNodeModel<CookieTreeNode>(
719 new CookieTreeRootNode(this))), 843 new CookieTreeRootNode(this))),
720 app_data_map_(apps_map), 844 app_data_map_(apps_map),
845 special_storage_policy_(special_storage_policy),
721 group_by_cookie_source_(group_by_cookie_source), 846 group_by_cookie_source_(group_by_cookie_source),
722 batch_update_(0) { 847 batch_update_(0) {
723 for (ContainerMap::const_iterator it = apps_map.begin(); 848 for (ContainerMap::const_iterator it = apps_map.begin();
724 it != apps_map.end(); ++it) { 849 it != apps_map.end(); ++it) {
725 it->second->Init(this); 850 it->second->Init(this);
726 } 851 }
727 } 852 }
728 853
729 CookiesTreeModel::~CookiesTreeModel() { 854 CookiesTreeModel::~CookiesTreeModel() {
730 STLDeleteValues(&app_data_map_); 855 STLDeleteValues(&app_data_map_);
(...skipping 13 matching lines...) Expand all
744 icons->push_back(*ResourceBundle::GetSharedInstance().GetImageSkiaNamed( 869 icons->push_back(*ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
745 IDR_COOKIE_STORAGE_ICON)); 870 IDR_COOKIE_STORAGE_ICON));
746 } 871 }
747 872
748 // Returns the index of the icon to use for |node|. Return -1 to use the 873 // Returns the index of the icon to use for |node|. Return -1 to use the
749 // default icon. The index is relative to the list of icons returned from 874 // default icon. The index is relative to the list of icons returned from
750 // GetIcons. 875 // GetIcons.
751 int CookiesTreeModel::GetIconIndex(ui::TreeModelNode* node) { 876 int CookiesTreeModel::GetIconIndex(ui::TreeModelNode* node) {
752 CookieTreeNode* ct_node = static_cast<CookieTreeNode*>(node); 877 CookieTreeNode* ct_node = static_cast<CookieTreeNode*>(node);
753 switch (ct_node->GetDetailedInfo().node_type) { 878 switch (ct_node->GetDetailedInfo().node_type) {
754 case CookieTreeNode::DetailedInfo::TYPE_ORIGIN: 879 case CookieTreeNode::DetailedInfo::TYPE_HOST:
755 return ORIGIN; 880 return ORIGIN;
756 case CookieTreeNode::DetailedInfo::TYPE_COOKIE: 881 case CookieTreeNode::DetailedInfo::TYPE_COOKIE:
757 return COOKIE; 882 return COOKIE;
758 case CookieTreeNode::DetailedInfo::TYPE_DATABASE: 883 case CookieTreeNode::DetailedInfo::TYPE_DATABASE:
759 return DATABASE; 884 return DATABASE;
760 case CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE: 885 case CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE:
761 return DATABASE; // close enough 886 return DATABASE; // close enough
762 case CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE: 887 case CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE:
763 return DATABASE; // ditto 888 return DATABASE; // ditto
764 case CookieTreeNode::DetailedInfo::TYPE_APPCACHE: 889 case CookieTreeNode::DetailedInfo::TYPE_APPCACHE:
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
815 PopulateLocalStorageInfoWithFilter(container, &notifier, filter); 940 PopulateLocalStorageInfoWithFilter(container, &notifier, filter);
816 PopulateSessionStorageInfoWithFilter(container, &notifier, filter); 941 PopulateSessionStorageInfoWithFilter(container, &notifier, filter);
817 PopulateAppCacheInfoWithFilter(container, &notifier, filter); 942 PopulateAppCacheInfoWithFilter(container, &notifier, filter);
818 PopulateIndexedDBInfoWithFilter(container, &notifier, filter); 943 PopulateIndexedDBInfoWithFilter(container, &notifier, filter);
819 PopulateFileSystemInfoWithFilter(container, &notifier, filter); 944 PopulateFileSystemInfoWithFilter(container, &notifier, filter);
820 PopulateQuotaInfoWithFilter(container, &notifier, filter); 945 PopulateQuotaInfoWithFilter(container, &notifier, filter);
821 PopulateServerBoundCertInfoWithFilter(container, &notifier, filter); 946 PopulateServerBoundCertInfoWithFilter(container, &notifier, filter);
822 } 947 }
823 } 948 }
824 949
950 const ExtensionSet* CookiesTreeModel::ExtensionsProtectingNode(
951 const CookieTreeNode& cookie_node) {
952 if (!special_storage_policy_)
953 return NULL;
954
955 CookieTreeNode::DetailedInfo info = cookie_node.GetDetailedInfo();
956
957 if (!TypeIsProtected(info.node_type))
958 return NULL;
959
960 DCHECK(!info.origin.is_empty());
961 return special_storage_policy_->ExtensionsProtectingOrigin(info.origin);
962 }
963
825 void CookiesTreeModel::AddCookiesTreeObserver(Observer* observer) { 964 void CookiesTreeModel::AddCookiesTreeObserver(Observer* observer) {
826 cookies_observer_list_.AddObserver(observer); 965 cookies_observer_list_.AddObserver(observer);
827 // Call super so that TreeNodeModel can notify, too. 966 // Call super so that TreeNodeModel can notify, too.
828 ui::TreeNodeModel<CookieTreeNode>::AddObserver(observer); 967 ui::TreeNodeModel<CookieTreeNode>::AddObserver(observer);
829 } 968 }
830 969
831 void CookiesTreeModel::RemoveCookiesTreeObserver(Observer* observer) { 970 void CookiesTreeModel::RemoveCookiesTreeObserver(Observer* observer) {
832 cookies_observer_list_.RemoveObserver(observer); 971 cookies_observer_list_.RemoveObserver(observer);
833 // Call super so that TreeNodeModel doesn't have dead pointers. 972 // Call super so that TreeNodeModel doesn't have dead pointers.
834 ui::TreeNodeModel<CookieTreeNode>::RemoveObserver(observer); 973 ui::TreeNodeModel<CookieTreeNode>::RemoveObserver(observer);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
888 using appcache::AppCacheInfo; 1027 using appcache::AppCacheInfo;
889 typedef std::map<GURL, std::list<AppCacheInfo> > InfoByOrigin; 1028 typedef std::map<GURL, std::list<AppCacheInfo> > InfoByOrigin;
890 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1029 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
891 1030
892 if (container->appcache_info_.empty()) 1031 if (container->appcache_info_.empty())
893 return; 1032 return;
894 1033
895 notifier->StartBatchUpdate(); 1034 notifier->StartBatchUpdate();
896 for (InfoByOrigin::iterator origin = container->appcache_info_.begin(); 1035 for (InfoByOrigin::iterator origin = container->appcache_info_.begin();
897 origin != container->appcache_info_.end(); ++origin) { 1036 origin != container->appcache_info_.end(); ++origin) {
898 string16 origin_node_name = UTF8ToUTF16(origin->first.host()); 1037 string16 host_node_name = UTF8ToUTF16(origin->first.host());
899 if (filter.empty() || 1038 if (filter.empty() ||
900 (origin_node_name.find(filter) != string16::npos)) { 1039 (host_node_name.find(filter) != string16::npos)) {
901 CookieTreeOriginNode* origin_node = 1040 CookieTreeHostNode* host_node =
902 root->GetOrCreateOriginNode(origin->first, container->app_id(), 1041 root->GetOrCreateHostNode(origin->first, container->app_id(),
903 container->app_name()); 1042 container->app_name());
904 CookieTreeAppCachesNode* appcaches_node = 1043 CookieTreeAppCachesNode* appcaches_node =
905 origin_node->GetOrCreateAppCachesNode(); 1044 host_node->GetOrCreateAppCachesNode();
906 1045
907 for (std::list<AppCacheInfo>::iterator info = origin->second.begin(); 1046 for (std::list<AppCacheInfo>::iterator info = origin->second.begin();
908 info != origin->second.end(); ++info) { 1047 info != origin->second.end(); ++info) {
909 appcaches_node->AddAppCacheNode( 1048 appcaches_node->AddAppCacheNode(
910 new CookieTreeAppCacheNode(origin->first, info)); 1049 new CookieTreeAppCacheNode(origin->first, info));
911 } 1050 }
912 } 1051 }
913 } 1052 }
914 } 1053 }
915 1054
(...skipping 12 matching lines...) Expand all
928 if (domain.length() > 1 && domain[0] == '.') 1067 if (domain.length() > 1 && domain[0] == '.')
929 domain = domain.substr(1); 1068 domain = domain.substr(1);
930 1069
931 // We treat secure cookies just the same as normal ones. 1070 // We treat secure cookies just the same as normal ones.
932 source_string = std::string(chrome::kHttpScheme) + 1071 source_string = std::string(chrome::kHttpScheme) +
933 content::kStandardSchemeSeparator + domain + "/"; 1072 content::kStandardSchemeSeparator + domain + "/";
934 } 1073 }
935 1074
936 GURL source(source_string); 1075 GURL source(source_string);
937 if (!filter.size() || 1076 if (!filter.size() ||
938 (CookieTreeOriginNode::TitleForUrl(source, container->app_id(), 1077 (CookieTreeHostNode::TitleForUrl(source, container->app_id(),
939 container->app_name()).find(filter) != string16::npos)) { 1078 container->app_name()).find(filter) != string16::npos)) {
940 CookieTreeOriginNode* origin_node = 1079 CookieTreeHostNode* host_node =
941 root->GetOrCreateOriginNode(source, container->app_id(), 1080 root->GetOrCreateHostNode(source, container->app_id(),
942 container->app_name()); 1081 container->app_name());
943 CookieTreeCookiesNode* cookies_node = 1082 CookieTreeCookiesNode* cookies_node =
944 origin_node->GetOrCreateCookiesNode(); 1083 host_node->GetOrCreateCookiesNode();
945 CookieTreeCookieNode* new_cookie = new CookieTreeCookieNode(it); 1084 CookieTreeCookieNode* new_cookie = new CookieTreeCookieNode(it);
946 cookies_node->AddCookieNode(new_cookie); 1085 cookies_node->AddCookieNode(new_cookie);
947 } 1086 }
948 } 1087 }
949 } 1088 }
950 1089
951 void CookiesTreeModel::PopulateDatabaseInfoWithFilter( 1090 void CookiesTreeModel::PopulateDatabaseInfoWithFilter(
952 LocalDataContainer* container, 1091 LocalDataContainer* container,
953 ScopedBatchUpdateNotifier* notifier, 1092 ScopedBatchUpdateNotifier* notifier,
954 const string16& filter) { 1093 const string16& filter) {
955 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1094 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
956 1095
957 if (container->database_info_list_.empty()) 1096 if (container->database_info_list_.empty())
958 return; 1097 return;
959 1098
960 notifier->StartBatchUpdate(); 1099 notifier->StartBatchUpdate();
961 for (DatabaseInfoList::iterator database_info = 1100 for (DatabaseInfoList::iterator database_info =
962 container->database_info_list_.begin(); 1101 container->database_info_list_.begin();
963 database_info != container->database_info_list_.end(); 1102 database_info != container->database_info_list_.end();
964 ++database_info) { 1103 ++database_info) {
965 GURL origin(database_info->origin); 1104 GURL origin(database_info->origin);
966 1105
967 if (!filter.size() || 1106 if (!filter.size() ||
968 (CookieTreeOriginNode::TitleForUrl(origin, container->app_id(), 1107 (CookieTreeHostNode::TitleForUrl(origin, container->app_id(),
969 container->app_name()).find(filter) != string16::npos)) { 1108 container->app_name()).find(filter) != string16::npos)) {
970 CookieTreeOriginNode* origin_node = 1109 CookieTreeHostNode* host_node =
971 root->GetOrCreateOriginNode(origin, container->app_id(), 1110 root->GetOrCreateHostNode(origin, container->app_id(),
972 container->app_name()); 1111 container->app_name());
973 CookieTreeDatabasesNode* databases_node = 1112 CookieTreeDatabasesNode* databases_node =
974 origin_node->GetOrCreateDatabasesNode(); 1113 host_node->GetOrCreateDatabasesNode();
975 databases_node->AddDatabaseNode( 1114 databases_node->AddDatabaseNode(
976 new CookieTreeDatabaseNode(database_info)); 1115 new CookieTreeDatabaseNode(database_info));
977 } 1116 }
978 } 1117 }
979 } 1118 }
980 1119
981 void CookiesTreeModel::PopulateLocalStorageInfoWithFilter( 1120 void CookiesTreeModel::PopulateLocalStorageInfoWithFilter(
982 LocalDataContainer* container, 1121 LocalDataContainer* container,
983 ScopedBatchUpdateNotifier* notifier, 1122 ScopedBatchUpdateNotifier* notifier,
984 const string16& filter) { 1123 const string16& filter) {
985 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1124 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
986 1125
987 if (container->local_storage_info_list_.empty()) 1126 if (container->local_storage_info_list_.empty())
988 return; 1127 return;
989 1128
990 notifier->StartBatchUpdate(); 1129 notifier->StartBatchUpdate();
991 for (LocalStorageInfoList::iterator local_storage_info = 1130 for (LocalStorageInfoList::iterator local_storage_info =
992 container->local_storage_info_list_.begin(); 1131 container->local_storage_info_list_.begin();
993 local_storage_info != container->local_storage_info_list_.end(); 1132 local_storage_info != container->local_storage_info_list_.end();
994 ++local_storage_info) { 1133 ++local_storage_info) {
995 const GURL& origin(local_storage_info->origin_url); 1134 const GURL& origin(local_storage_info->origin_url);
996 1135
997 if (!filter.size() || 1136 if (!filter.size() ||
998 (CookieTreeOriginNode::TitleForUrl(origin, container->app_id(), 1137 (CookieTreeHostNode::TitleForUrl(origin, container->app_id(),
999 container->app_name()).find(filter) != std::string::npos)) { 1138 container->app_name()).find(filter) != std::string::npos)) {
1000 CookieTreeOriginNode* origin_node = 1139 CookieTreeHostNode* host_node =
1001 root->GetOrCreateOriginNode(origin, container->app_id(), 1140 root->GetOrCreateHostNode(origin, container->app_id(),
1002 container->app_name()); 1141 container->app_name());
1003 CookieTreeLocalStoragesNode* local_storages_node = 1142 CookieTreeLocalStoragesNode* local_storages_node =
1004 origin_node->GetOrCreateLocalStoragesNode(); 1143 host_node->GetOrCreateLocalStoragesNode();
1005 local_storages_node->AddLocalStorageNode( 1144 local_storages_node->AddLocalStorageNode(
1006 new CookieTreeLocalStorageNode(local_storage_info)); 1145 new CookieTreeLocalStorageNode(local_storage_info));
1007 } 1146 }
1008 } 1147 }
1009 } 1148 }
1010 1149
1011 void CookiesTreeModel::PopulateSessionStorageInfoWithFilter( 1150 void CookiesTreeModel::PopulateSessionStorageInfoWithFilter(
1012 LocalDataContainer* container, 1151 LocalDataContainer* container,
1013 ScopedBatchUpdateNotifier* notifier, 1152 ScopedBatchUpdateNotifier* notifier,
1014 const string16& filter) { 1153 const string16& filter) {
1015 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1154 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
1016 1155
1017 if (container->session_storage_info_list_.empty()) 1156 if (container->session_storage_info_list_.empty())
1018 return; 1157 return;
1019 1158
1020 notifier->StartBatchUpdate(); 1159 notifier->StartBatchUpdate();
1021 for (LocalStorageInfoList::iterator session_storage_info = 1160 for (LocalStorageInfoList::iterator session_storage_info =
1022 container->session_storage_info_list_.begin(); 1161 container->session_storage_info_list_.begin();
1023 session_storage_info != container->session_storage_info_list_.end(); 1162 session_storage_info != container->session_storage_info_list_.end();
1024 ++session_storage_info) { 1163 ++session_storage_info) {
1025 const GURL& origin = session_storage_info->origin_url; 1164 const GURL& origin = session_storage_info->origin_url;
1026 1165
1027 if (!filter.size() || 1166 if (!filter.size() ||
1028 (CookieTreeOriginNode::TitleForUrl(origin, container->app_id(), 1167 (CookieTreeHostNode::TitleForUrl(origin, container->app_id(),
1029 container->app_name()).find(filter) != string16::npos)) { 1168 container->app_name()).find(filter) != string16::npos)) {
1030 CookieTreeOriginNode* origin_node = 1169 CookieTreeHostNode* host_node =
1031 root->GetOrCreateOriginNode(origin, container->app_id(), 1170 root->GetOrCreateHostNode(origin, container->app_id(),
1032 container->app_name()); 1171 container->app_name());
1033 CookieTreeSessionStoragesNode* session_storages_node = 1172 CookieTreeSessionStoragesNode* session_storages_node =
1034 origin_node->GetOrCreateSessionStoragesNode(); 1173 host_node->GetOrCreateSessionStoragesNode();
1035 session_storages_node->AddSessionStorageNode( 1174 session_storages_node->AddSessionStorageNode(
1036 new CookieTreeSessionStorageNode(session_storage_info)); 1175 new CookieTreeSessionStorageNode(session_storage_info));
1037 } 1176 }
1038 } 1177 }
1039 } 1178 }
1040 1179
1041 void CookiesTreeModel::PopulateIndexedDBInfoWithFilter( 1180 void CookiesTreeModel::PopulateIndexedDBInfoWithFilter(
1042 LocalDataContainer* container, 1181 LocalDataContainer* container,
1043 ScopedBatchUpdateNotifier* notifier, 1182 ScopedBatchUpdateNotifier* notifier,
1044 const string16& filter) { 1183 const string16& filter) {
1045 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1184 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
1046 1185
1047 if (container->indexed_db_info_list_.empty()) 1186 if (container->indexed_db_info_list_.empty())
1048 return; 1187 return;
1049 1188
1050 notifier->StartBatchUpdate(); 1189 notifier->StartBatchUpdate();
1051 for (IndexedDBInfoList::iterator indexed_db_info = 1190 for (IndexedDBInfoList::iterator indexed_db_info =
1052 container->indexed_db_info_list_.begin(); 1191 container->indexed_db_info_list_.begin();
1053 indexed_db_info != container->indexed_db_info_list_.end(); 1192 indexed_db_info != container->indexed_db_info_list_.end();
1054 ++indexed_db_info) { 1193 ++indexed_db_info) {
1055 const GURL& origin = indexed_db_info->origin; 1194 const GURL& origin = indexed_db_info->origin;
1056 1195
1057 if (!filter.size() || 1196 if (!filter.size() ||
1058 (CookieTreeOriginNode::TitleForUrl(origin, container->app_id(), 1197 (CookieTreeHostNode::TitleForUrl(origin, container->app_id(),
1059 container->app_name()).find(filter) != string16::npos)) { 1198 container->app_name()).find(filter) != string16::npos)) {
1060 CookieTreeOriginNode* origin_node = 1199 CookieTreeHostNode* host_node =
1061 root->GetOrCreateOriginNode(origin, container->app_id(), 1200 root->GetOrCreateHostNode(origin, container->app_id(),
1062 container->app_name()); 1201 container->app_name());
1063 CookieTreeIndexedDBsNode* indexed_dbs_node = 1202 CookieTreeIndexedDBsNode* indexed_dbs_node =
1064 origin_node->GetOrCreateIndexedDBsNode(); 1203 host_node->GetOrCreateIndexedDBsNode();
1065 indexed_dbs_node->AddIndexedDBNode( 1204 indexed_dbs_node->AddIndexedDBNode(
1066 new CookieTreeIndexedDBNode(indexed_db_info)); 1205 new CookieTreeIndexedDBNode(indexed_db_info));
1067 } 1206 }
1068 } 1207 }
1069 } 1208 }
1070 1209
1071 void CookiesTreeModel::PopulateServerBoundCertInfoWithFilter( 1210 void CookiesTreeModel::PopulateServerBoundCertInfoWithFilter(
1072 LocalDataContainer* container, 1211 LocalDataContainer* container,
1073 ScopedBatchUpdateNotifier* notifier, 1212 ScopedBatchUpdateNotifier* notifier,
1074 const string16& filter) { 1213 const string16& filter) {
1075 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1214 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
1076 1215
1077 if (container->server_bound_cert_list_.empty()) 1216 if (container->server_bound_cert_list_.empty())
1078 return; 1217 return;
1079 1218
1080 notifier->StartBatchUpdate(); 1219 notifier->StartBatchUpdate();
1081 for (ServerBoundCertList::iterator cert_info = 1220 for (ServerBoundCertList::iterator cert_info =
1082 container->server_bound_cert_list_.begin(); 1221 container->server_bound_cert_list_.begin();
1083 cert_info != container->server_bound_cert_list_.end(); 1222 cert_info != container->server_bound_cert_list_.end();
1084 ++cert_info) { 1223 ++cert_info) {
1085 GURL origin(cert_info->server_identifier()); 1224 GURL origin(cert_info->server_identifier());
1086 if (!origin.is_valid()) { 1225 if (!origin.is_valid()) {
1087 // Domain Bound Cert. Make a valid URL to satisfy the 1226 // Domain Bound Cert. Make a valid URL to satisfy the
1088 // CookieTreeRootNode::GetOrCreateOriginNode interface. 1227 // CookieTreeRootNode::GetOrCreateHostNode interface.
1089 origin = GURL(std::string(chrome::kHttpsScheme) + 1228 origin = GURL(std::string(chrome::kHttpsScheme) +
1090 content::kStandardSchemeSeparator + 1229 content::kStandardSchemeSeparator +
1091 cert_info->server_identifier() + "/"); 1230 cert_info->server_identifier() + "/");
1092 } 1231 }
1093 string16 title = CookieTreeOriginNode::TitleForUrl(origin, 1232 string16 title = CookieTreeHostNode::TitleForUrl(origin,
1094 container->app_id(), 1233 container->app_id(),
1095 container->app_name()); 1234 container->app_name());
1096 1235
1097 if (!filter.size() || title.find(filter) != string16::npos) { 1236 if (!filter.size() || title.find(filter) != string16::npos) {
1098 CookieTreeOriginNode* origin_node = 1237 CookieTreeHostNode* host_node =
1099 root->GetOrCreateOriginNode(origin, container->app_id(), 1238 root->GetOrCreateHostNode(origin, container->app_id(),
1100 container->app_name()); 1239 container->app_name());
1101 CookieTreeServerBoundCertsNode* server_bound_certs_node = 1240 CookieTreeServerBoundCertsNode* server_bound_certs_node =
1102 origin_node->GetOrCreateServerBoundCertsNode(); 1241 host_node->GetOrCreateServerBoundCertsNode();
1103 server_bound_certs_node->AddServerBoundCertNode( 1242 server_bound_certs_node->AddServerBoundCertNode(
1104 new CookieTreeServerBoundCertNode(cert_info)); 1243 new CookieTreeServerBoundCertNode(cert_info));
1105 } 1244 }
1106 } 1245 }
1107 } 1246 }
1108 1247
1109 void CookiesTreeModel::PopulateFileSystemInfoWithFilter( 1248 void CookiesTreeModel::PopulateFileSystemInfoWithFilter(
1110 LocalDataContainer* container, 1249 LocalDataContainer* container,
1111 ScopedBatchUpdateNotifier* notifier, 1250 ScopedBatchUpdateNotifier* notifier,
1112 const string16& filter) { 1251 const string16& filter) {
1113 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1252 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
1114 1253
1115 if (container->file_system_info_list_.empty()) 1254 if (container->file_system_info_list_.empty())
1116 return; 1255 return;
1117 1256
1118 notifier->StartBatchUpdate(); 1257 notifier->StartBatchUpdate();
1119 for (FileSystemInfoList::iterator file_system_info = 1258 for (FileSystemInfoList::iterator file_system_info =
1120 container->file_system_info_list_.begin(); 1259 container->file_system_info_list_.begin();
1121 file_system_info != container->file_system_info_list_.end(); 1260 file_system_info != container->file_system_info_list_.end();
1122 ++file_system_info) { 1261 ++file_system_info) {
1123 GURL origin(file_system_info->origin); 1262 GURL origin(file_system_info->origin);
1124 1263
1125 if (!filter.size() || 1264 if (!filter.size() ||
1126 (CookieTreeOriginNode::TitleForUrl(origin, container->app_id(), 1265 (CookieTreeHostNode::TitleForUrl(origin, container->app_id(),
1127 container->app_name()).find(filter) != string16::npos)) { 1266 container->app_name()).find(filter) != string16::npos)) {
1128 CookieTreeOriginNode* origin_node = 1267 CookieTreeHostNode* host_node =
1129 root->GetOrCreateOriginNode(origin, container->app_id(), 1268 root->GetOrCreateHostNode(origin, container->app_id(),
1130 container->app_name()); 1269 container->app_name());
1131 CookieTreeFileSystemsNode* file_systems_node = 1270 CookieTreeFileSystemsNode* file_systems_node =
1132 origin_node->GetOrCreateFileSystemsNode(); 1271 host_node->GetOrCreateFileSystemsNode();
1133 file_systems_node->AddFileSystemNode( 1272 file_systems_node->AddFileSystemNode(
1134 new CookieTreeFileSystemNode(file_system_info)); 1273 new CookieTreeFileSystemNode(file_system_info));
1135 } 1274 }
1136 } 1275 }
1137 } 1276 }
1138 1277
1139 void CookiesTreeModel::PopulateQuotaInfoWithFilter( 1278 void CookiesTreeModel::PopulateQuotaInfoWithFilter(
1140 LocalDataContainer* container, 1279 LocalDataContainer* container,
1141 ScopedBatchUpdateNotifier* notifier, 1280 ScopedBatchUpdateNotifier* notifier,
1142 const string16& filter) { 1281 const string16& filter) {
1143 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1282 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
1144 1283
1145 if (container->quota_info_list_.empty()) 1284 if (container->quota_info_list_.empty())
1146 return; 1285 return;
1147 1286
1148 notifier->StartBatchUpdate(); 1287 notifier->StartBatchUpdate();
1149 for (QuotaInfoList::iterator quota_info = container->quota_info_list_.begin(); 1288 for (QuotaInfoList::iterator quota_info = container->quota_info_list_.begin();
1150 quota_info != container->quota_info_list_.end(); 1289 quota_info != container->quota_info_list_.end();
1151 ++quota_info) { 1290 ++quota_info) {
1152 if (!filter.size() || 1291 if (!filter.size() ||
1153 (UTF8ToUTF16(quota_info->host).find(filter) != string16::npos)) { 1292 (UTF8ToUTF16(quota_info->host).find(filter) != string16::npos)) {
1154 CookieTreeOriginNode* origin_node = 1293 CookieTreeHostNode* host_node =
1155 root->GetOrCreateOriginNode(GURL("http://" + quota_info->host), 1294 root->GetOrCreateHostNode(GURL("http://" + quota_info->host),
1156 container->app_id(), 1295 container->app_id(),
1157 container->app_name()); 1296 container->app_name());
1158 origin_node->UpdateOrCreateQuotaNode(quota_info); 1297 host_node->UpdateOrCreateQuotaNode(quota_info);
1159 } 1298 }
1160 } 1299 }
1161 } 1300 }
1162 1301
1163 void CookiesTreeModel::NotifyObserverBeginBatch() { 1302 void CookiesTreeModel::NotifyObserverBeginBatch() {
1164 // Only notify the model once if we're batching in a nested manner. 1303 // Only notify the model once if we're batching in a nested manner.
1165 if (batch_update_++ == 0) { 1304 if (batch_update_++ == 0) {
1166 FOR_EACH_OBSERVER(Observer, 1305 FOR_EACH_OBSERVER(Observer,
1167 cookies_observer_list_, 1306 cookies_observer_list_,
1168 TreeModelBeginBatch(this)); 1307 TreeModelBeginBatch(this));
1169 } 1308 }
1170 } 1309 }
1171 1310
1172 void CookiesTreeModel::NotifyObserverEndBatch() { 1311 void CookiesTreeModel::NotifyObserverEndBatch() {
1173 // Only notify the observers if this is the outermost call to EndBatch() if 1312 // Only notify the observers if this is the outermost call to EndBatch() if
1174 // called in a nested manner. 1313 // called in a nested manner.
1175 if (--batch_update_ == 0) { 1314 if (--batch_update_ == 0) {
1176 FOR_EACH_OBSERVER(Observer, 1315 FOR_EACH_OBSERVER(Observer,
1177 cookies_observer_list_, 1316 cookies_observer_list_,
1178 TreeModelEndBatch(this)); 1317 TreeModelEndBatch(this));
1179 } 1318 }
1180 } 1319 }
1181 1320
1182 LocalDataContainer* CookiesTreeModel::GetLocalDataContainer( 1321 LocalDataContainer* CookiesTreeModel::GetLocalDataContainer(
1183 const std::string& app_id) { 1322 const std::string& app_id) {
1184 LocalDataContainer* container = app_data_map_[app_id]; 1323 LocalDataContainer* container = app_data_map_[app_id];
1185 return container; 1324 return container;
1186 } 1325 }
OLDNEW
« no previous file with comments | « chrome/browser/cookies_tree_model.h ('k') | chrome/browser/cookies_tree_model_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698