14ee2ad04344446e610172a0e73949212923014dfSebastian Redl// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// Use of this source code is governed by a BSD-style license that can be 32cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// found in the LICENSE file. 42cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 52cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "chrome/browser/browsing_data/cookies_tree_model.h" 62cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 72cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include <algorithm> 82cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include <functional> 92cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include <map> 10a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl#include <vector> 112cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 122cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "base/bind.h" 132cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "base/memory/linked_ptr.h" 147faa2ec03a7ef120ac165bb45b6c70a8b20c9f1cSebastian Redl#include "base/strings/string_util.h" 150eca89e9890db4d8336ce762a5b359a1d58ca02bArgyrios Kyrtzidis#include "base/strings/utf_string_conversions.h" 162cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "chrome/browser/browsing_data/browsing_data_channel_id_helper.h" 172cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "chrome/browser/browsing_data/browsing_data_cookie_helper.h" 182cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "chrome/browser/browsing_data/browsing_data_flash_lso_helper.h" 1989eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis#include "chrome/browser/content_settings/cookie_settings.h" 2055fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth#include "chrome/grit/generated_resources.h" 210b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor#include "content/public/common/url_constants.h" 227a1fad38256eb4c5129359be85ba1ea1678eb5c9John McCall#include "grit/theme_resources.h" 232cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "net/base/registry_controlled_domains/registry_controlled_domain.h" 24a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall#include "net/cookies/canonical_cookie.h" 2514f79002e58556798e86168c63e48d533287eda5Douglas Gregor#include "net/url_request/url_request_context.h" 2610e286aa8d39fb51a21412850265d9dae74613eeChris Lattner#include "ui/base/l10n/l10n_util.h" 273251ceb90b3fec68e86d6dcfa58836e20a7205c3Douglas Gregor#include "ui/base/resource/resource_bundle.h" 2814f79002e58556798e86168c63e48d533287eda5Douglas Gregor#include "ui/gfx/image/image_skia.h" 29bd94500d3aa60092fb0f1e90f53fb0d03fa502a8Douglas Gregor#include "ui/resources/grit/ui_resources.h" 302bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor 3157016dda61498294120b1a881d9e6606337b29d9Douglas Gregor#if defined(ENABLE_EXTENSIONS) 32ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor#include "chrome/browser/extensions/extension_special_storage_policy.h" 330a0d2b179085a52c10402feebeb6db8b4d96a140Douglas Gregor#include "extensions/common/extension_set.h" 3455fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth#endif 3555fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth 3655fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruthnamespace { 3755fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth 3855fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruthstruct NodeTitleComparator { 3955fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth bool operator()(const CookieTreeNode* lhs, const CookieTreeNode* rhs) { 4055fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth return lhs->GetTitle() < rhs->GetTitle(); 4155fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth } 4255fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth}; 4317fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor 4417fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor// Comparison functor, for use in CookieTreeRootNode. 452596e429a61602312bdd149786045b8a90cd2d10Daniel Dunbarstruct HostNodeComparator { 462cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor bool operator()(const CookieTreeNode* lhs, const CookieTreeNode* rhs) { 47fbfd180495e7800975c6d9bdc6d24e706ef70e34Michael J. Spencer // This comparator is only meant to compare CookieTreeHostNode types. Make 4814f79002e58556798e86168c63e48d533287eda5Douglas Gregor // sure we check this, as the static cast below is dangerous if we get the 4903013fa9a0bf1ef4b907f5fec006c8f4000fdd21Michael J. Spencer // wrong object type. 50f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor CHECK_EQ(CookieTreeNode::DetailedInfo::TYPE_HOST, 513c304bd9ec2b4611572d4cbae9e1727bbecb5dc9Chris Lattner lhs->GetDetailedInfo().node_type); 52cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor CHECK_EQ(CookieTreeNode::DetailedInfo::TYPE_HOST, 53f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor rhs->GetDetailedInfo().node_type); 542cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 558538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl const CookieTreeHostNode* ltn = 562cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor static_cast<const CookieTreeHostNode*>(lhs); 57ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl const CookieTreeHostNode* rtn = 585f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner static_cast<const CookieTreeHostNode*>(rhs); 595f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner 605f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner // We want to order by registry controlled domain, so we would get 616e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer // google.com, ad.google.com, www.google.com, 62ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl // microsoft.com, ad.microsoft.com. CanonicalizeHost transforms the origins 636e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer // into a form like google.com.www so that string comparisons work. 646e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer return (ltn->canonicalized_host() < 655f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner rtn->canonicalized_host()); 665f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner } 676e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer}; 68ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl 69ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redlstd::string CanonicalizeHost(const GURL& url) { 702cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor // The canonicalized representation makes the registry controlled domain 712cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor // come first, and then adds subdomains in reverse order, e.g. 722cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor // 1.mail.google.com would become google.com.mail.1, and then a standard 7312b1c7615d4f9a2edc544be499f895f16ac100edChris Lattner // string comparison works to order hosts by registry controlled domain 742cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor // first. Leading dots are ignored, ".google.com" is the same as 753397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl // "google.com". 76a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl 7789eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis if (url.SchemeIsFile()) { 782cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor return std::string(url::kFileScheme) + 792cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor url::kStandardSchemeSeparator; 802cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 818538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 822cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::string host = url.host(); 8389eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis std::string retval = 848538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl net::registry_controlled_domains::GetDomainAndRegistry( 852cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor host, 862cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); 872cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor if (!retval.length()) // Is an IP address or other special origin. 882cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor return host; 892cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 902cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::string::size_type position = host.rfind(retval); 912cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 922cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor // The host may be the registry controlled domain, in which case fail fast. 932cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor if (position == 0 || position == std::string::npos) 942cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor return host; 952cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 963397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl // If host is www.google.com, retval will contain google.com at this point. 97b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie // Start operating to the left of the registry controlled domain, e.g. in 982cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor // the www.google.com example, start at index 3. 992cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor --position; 1003397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 1012cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor // If position == 0, that means it's a dot; this will be ignored to treat 1028538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl // ".google.com" the same as "google.com". 1032cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor while (position > 0) { 1042cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor retval += std::string("."); 1053397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl // Copy up to the next dot. host[position] is a dot so start after it. 1062cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::string::size_type next_dot = host.rfind(".", position - 1); 1078538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl if (next_dot == std::string::npos) { 1082cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor retval += host.substr(0, position); 1092cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor break; 1103397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl } 1111eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump retval += host.substr(next_dot + 1, position - (next_dot + 1)); 1128538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl position = next_dot; 1132cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 1142cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor return retval; 1153397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl} 116df1550fc59b51681d37225934fe4e3acac321621Richard Smith 117df1550fc59b51681d37225934fe4e3acac321621Richard Smith#if defined(ENABLE_EXTENSIONS) 1188538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redlbool TypeIsProtected(CookieTreeNode::DetailedInfo::NodeType type) { 1192cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor switch (type) { 1202cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor case CookieTreeNode::DetailedInfo::TYPE_COOKIE: 1213397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl return false; 122df1550fc59b51681d37225934fe4e3acac321621Richard Smith case CookieTreeNode::DetailedInfo::TYPE_DATABASE: 1238538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl return true; 1242cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor case CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE: 1252cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor return true; 1263397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl case CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE: 1271eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return true; 1281eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump case CookieTreeNode::DetailedInfo::TYPE_APPCACHE: 1298538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl return true; 1302cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor case CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB: 1312cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor return true; 1323397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl case CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM: 1332cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor return true; 1342cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor case CookieTreeNode::DetailedInfo::TYPE_QUOTA: 1350953e767ff7817f97b3ab20896b229891eeff45bJohn McCall return false; 1362cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor case CookieTreeNode::DetailedInfo::TYPE_CHANNEL_ID: 1372cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor return false; 1383397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl case CookieTreeNode::DetailedInfo::TYPE_SERVICE_WORKER: 1392cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor return true; 1402cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor case CookieTreeNode::DetailedInfo::TYPE_FLASH_LSO: 1418538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl return false; 1422cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor default: 1432cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor break; 1443397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl } 1452cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor return false; 1468538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl} 1472cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#endif 1482cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1493397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl// This function returns the local data container associated with a leaf tree 1502cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// node. The app node is assumed to be 3 levels above the leaf because of the 1517e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor// following structure: 1527e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor// root -> origin -> storage type -> leaf node 153c9490c000f515c29f200a1215328d8ab9a0f3818Douglas GregorLocalDataContainer* GetLocalDataContainerForNode(CookieTreeNode* node) { 1548538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl CookieTreeHostNode* host = static_cast<CookieTreeHostNode*>( 1552cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor node->parent()->parent()); 1562cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor CHECK_EQ(host->GetDetailedInfo().node_type, 1573397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl CookieTreeNode::DetailedInfo::TYPE_HOST); 1582cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor return node->GetModel()->data_container(); 1592cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor} 160e86d78cf4754a6aef2cf9a33d847aa15338e276fBob Wilson 1618538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl} // namespace 1622cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1632cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorCookieTreeNode::DetailedInfo::DetailedInfo() 1643397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl : node_type(TYPE_NONE), 1652cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor cookie(NULL), 1668538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl database_info(NULL), 1672cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor local_storage_info(NULL), 1682cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor session_storage_info(NULL), 1693397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl appcache_info(NULL), 1702cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor indexed_db_info(NULL), 171264ba48dc98f3f843935a485d5b086f7e0fdc4f1Rafael Espindola file_system_info(NULL), 172264ba48dc98f3f843935a485d5b086f7e0fdc4f1Rafael Espindola quota_info(NULL), 173a49218e17bcbb1acde0245773173e2c0c42f4f19Eli Friedman channel_id(NULL), 174425ef72306d4ff6b3698b744353e5f0e56b4b884Rafael Espindola service_worker_info(NULL) { 175ab8bbf4ebd3e3e6eab913cb044772a62b7581941Douglas Gregor} 176264ba48dc98f3f843935a485d5b086f7e0fdc4f1Rafael Espindola 177f85e193739c953358c865005855253af4f68a497John McCallCookieTreeNode::DetailedInfo::~DetailedInfo() {} 1782cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1792cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorCookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::Init( 1803397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl NodeType type) { 1812cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor DCHECK_EQ(TYPE_NONE, node_type); 1828538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl node_type = type; 1832cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor return *this; 1842cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor} 1853397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 1862cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorCookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitHost() { 1872cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor Init(TYPE_HOST); 1882cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor return *this; 1892cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor} 1902cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 191eefb3d5b49c844347f212073a7e975b8118fe8e9Richard SmithCookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitCookie( 1922cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor const net::CanonicalCookie* cookie) { 193c938c1668b4fd12af154e965dd935a89e4801a70Douglas Gregor Init(TYPE_COOKIE); 19460618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian Redl this->cookie = cookie; 19560618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian Redl return *this; 19660618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian Redl} 19760618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian Redl 19860618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian RedlCookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitDatabase( 19960618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian Redl const BrowsingDataDatabaseHelper::DatabaseInfo* database_info) { 20060618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian Redl Init(TYPE_DATABASE); 2017bb698aa054de4c0e0aa23973b2c62dac9611262Richard Smith this->database_info = database_info; 2027bb698aa054de4c0e0aa23973b2c62dac9611262Richard Smith origin = database_info->identifier.ToOrigin(); 2037bb698aa054de4c0e0aa23973b2c62dac9611262Richard Smith return *this; 204b9d0b76e42fd2d4cdfd135220302458d03ad09feRichard Smith} 205b9d0b76e42fd2d4cdfd135220302458d03ad09feRichard Smith 20660618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian RedlCookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitLocalStorage( 2078538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl const BrowsingDataLocalStorageHelper::LocalStorageInfo* 2082cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor local_storage_info) { 2092cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor Init(TYPE_LOCAL_STORAGE); 2103397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl this->local_storage_info = local_storage_info; 211ed97649e9574b9d854fa4d6109c9333ae0993554John McCall origin = local_storage_info->origin_url; 2128538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl return *this; 213ed97649e9574b9d854fa4d6109c9333ae0993554John McCall} 214ed97649e9574b9d854fa4d6109c9333ae0993554John McCall 2153397c5570369f19b2d6c52e898f708d75ceede1fSebastian RedlCookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitSessionStorage( 2162cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor const BrowsingDataLocalStorageHelper::LocalStorageInfo* 2179763e221e16026ddf487d2564ed349d2c874a1a1Argyrios Kyrtzidis session_storage_info) { 2189763e221e16026ddf487d2564ed349d2c874a1a1Argyrios Kyrtzidis Init(TYPE_SESSION_STORAGE); 2198538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl this->session_storage_info = session_storage_info; 2202cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor origin = session_storage_info->origin_url; 2212cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor return *this; 2223397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl} 223c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor 2248538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian RedlCookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitAppCache( 2252cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor const GURL& origin, 2262cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor const content::AppCacheInfo* appcache_info) { 2273397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl Init(TYPE_APPCACHE); 2282cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor this->appcache_info = appcache_info; 2298538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl this->origin = origin; 2302cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor return *this; 2312cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor} 2323397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 233f8af98286022f72157d84951b48fde5fb369ab29Douglas GregorCookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitIndexedDB( 234395b475a4474f1c7574d927ad142ca0c7997cbcaAnders Carlsson const content::IndexedDBInfo* indexed_db_info) { 2358538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Init(TYPE_INDEXED_DB); 236395b475a4474f1c7574d927ad142ca0c7997cbcaAnders Carlsson this->indexed_db_info = indexed_db_info; 237395b475a4474f1c7574d927ad142ca0c7997cbcaAnders Carlsson this->origin = indexed_db_info->origin_; 238ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt return *this; 239ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt} 240ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt 241ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean HuntCookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitFileSystem( 242ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt const BrowsingDataFileSystemHelper::FileSystemInfo* file_system_info) { 243ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt Init(TYPE_FILE_SYSTEM); 244ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt this->file_system_info = file_system_info; 24534b41d939a1328f484511c6002ba2456db879a29Richard Smith this->origin = file_system_info->origin; 24634b41d939a1328f484511c6002ba2456db879a29Richard Smith return *this; 24734b41d939a1328f484511c6002ba2456db879a29Richard Smith} 24834b41d939a1328f484511c6002ba2456db879a29Richard Smith 24934b41d939a1328f484511c6002ba2456db879a29Richard SmithCookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitQuota( 2503397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl const BrowsingDataQuotaHelper::QuotaInfo* quota_info) { 251be191100e034b23a3e13053757a57b7f5068c24aArgyrios Kyrtzidis Init(TYPE_QUOTA); 25256ca8a9c0fabd65418e9b2fd85140f4ed7d3c187Douglas Gregor this->quota_info = quota_info; 2531eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return *this; 2542cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor} 2552cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 2562cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorCookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitChannelID( 2573397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl const net::ChannelIDStore::ChannelID* channel_id) { 2582cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor Init(TYPE_CHANNEL_ID); 2598538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl this->channel_id = channel_id; 2602cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor return *this; 2612cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor} 2623397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 2632cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorCookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitServiceWorker( 2648538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl const content::ServiceWorkerUsageInfo* service_worker_info) { 2652cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor Init(TYPE_SERVICE_WORKER); 2662cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor this->service_worker_info = service_worker_info; 2679d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall this->origin = service_worker_info->origin; 2689d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall return *this; 2699d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall} 2709d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall 2719d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCallCookieTreeNode::DetailedInfo& CookieTreeNode::DetailedInfo::InitFlashLSO( 2729d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall const std::string& flash_lso_domain) { 2739d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall Init(TYPE_FLASH_LSO); 2741eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump this->flash_lso_domain = flash_lso_domain; 2753397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl return *this; 27649a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall} 27749a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall 27849a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall/////////////////////////////////////////////////////////////////////////////// 2798538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl// CookieTreeNode, public: 28049a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall 28149a832bd499d6f61c23655f1fac99f0dd229756eJohn McCallvoid CookieTreeNode::DeleteStoredObjects() { 28249a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall std::for_each(children().begin(), 283c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor children().end(), 284c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor std::mem_fun(&CookieTreeNode::DeleteStoredObjects)); 285c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor} 286c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor 287c3069d618f4661d923cb1b5c4525b082fce73b04Douglas GregorCookiesTreeModel* CookieTreeNode::GetModel() const { 288c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor if (parent()) 289c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor return parent()->GetModel(); 290c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor else 2913397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl return NULL; 2922cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor} 293be191100e034b23a3e13053757a57b7f5068c24aArgyrios Kyrtzidis 29490b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis/////////////////////////////////////////////////////////////////////////////// 29590b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis// CookieTreeCookieNode, public: 29690b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis 29790b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios KyrtzidisCookieTreeCookieNode::CookieTreeCookieNode( 29890b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis std::list<net::CanonicalCookie>::iterator cookie) 2993e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith : CookieTreeNode(base::UTF8ToUTF16(cookie->Name())), 3003e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith cookie_(cookie) { 3019763e221e16026ddf487d2564ed349d2c874a1a1Argyrios Kyrtzidis} 3029763e221e16026ddf487d2564ed349d2c874a1a1Argyrios Kyrtzidis 3038538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian RedlCookieTreeCookieNode::~CookieTreeCookieNode() {} 30490b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis 30590b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidisvoid CookieTreeCookieNode::DeleteStoredObjects() { 30690b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis LocalDataContainer* container = GetLocalDataContainerForNode(this); 3073397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl container->cookie_helper_->DeleteCookie(*cookie_); 308ae8b17f1d5d303af53db5a4f4a375ea6b9356566Argyrios Kyrtzidis container->cookie_list_.erase(cookie_); 309ae8b17f1d5d303af53db5a4f4a375ea6b9356566Argyrios Kyrtzidis} 310ae8b17f1d5d303af53db5a4f4a375ea6b9356566Argyrios Kyrtzidis 3118538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian RedlCookieTreeNode::DetailedInfo CookieTreeCookieNode::GetDetailedInfo() const { 31290b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis return DetailedInfo().InitCookie(&*cookie_); 31390b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis} 31490b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis 3153397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl/////////////////////////////////////////////////////////////////////////////// 31690b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis// CookieTreeAppCacheNode, public: 31790b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis 318b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David BlaikieCookieTreeAppCacheNode::CookieTreeAppCacheNode( 31990b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis const GURL& origin_url, 32090b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis std::list<content::AppCacheInfo>::iterator appcache_info) 32190b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis : CookieTreeNode(base::UTF8ToUTF16(appcache_info->manifest_url.spec())), 3223397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl origin_url_(origin_url), 32390b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis appcache_info_(appcache_info) { 32490b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis} 32590b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis 3264fb86f8c4585e53c21c847ad3de9e3b2de123cd9Chandler CarruthCookieTreeAppCacheNode::~CookieTreeAppCacheNode() { 3278538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl} 32890b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis 32990b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidisvoid CookieTreeAppCacheNode::DeleteStoredObjects() { 33090b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis LocalDataContainer* container = GetLocalDataContainerForNode(this); 3313397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 3328dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis if (container) { 3338dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis DCHECK(container->appcache_helper_.get()); 3348dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis container->appcache_helper_ 335f48d45e3e36c132bdee3373beec4e8b19ae3f9c4Argyrios Kyrtzidis ->DeleteAppCacheGroup(appcache_info_->manifest_url); 336f48d45e3e36c132bdee3373beec4e8b19ae3f9c4Argyrios Kyrtzidis container->appcache_info_[origin_url_].erase(appcache_info_); 337f48d45e3e36c132bdee3373beec4e8b19ae3f9c4Argyrios Kyrtzidis } 3388538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl} 33990b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis 34090b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios KyrtzidisCookieTreeNode::DetailedInfo CookieTreeAppCacheNode::GetDetailedInfo() const { 34190b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis return DetailedInfo().InitAppCache(origin_url_, &*appcache_info_); 3423397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl} 34390b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis 3443acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis/////////////////////////////////////////////////////////////////////////////// 3453acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis// CookieTreeDatabaseNode, public: 3463acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis 3473acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios KyrtzidisCookieTreeDatabaseNode::CookieTreeDatabaseNode( 3483acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis std::list<BrowsingDataDatabaseHelper::DatabaseInfo>::iterator database_info) 3493acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis : CookieTreeNode(database_info->database_name.empty() ? 3503acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis l10n_util::GetStringUTF16(IDS_COOKIES_WEB_DATABASE_UNNAMED_NAME) : 3518538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl base::UTF8ToUTF16(database_info->database_name)), 3522cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor database_info_(database_info) { 3532cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor} 3547536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor 3557536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas GregorCookieTreeDatabaseNode::~CookieTreeDatabaseNode() {} 356cded4f649cd4b7ba7d461c25c6482ef52b8d3a2aDouglas Gregor 357cded4f649cd4b7ba7d461c25c6482ef52b8d3a2aDouglas Gregorvoid CookieTreeDatabaseNode::DeleteStoredObjects() { 358cded4f649cd4b7ba7d461c25c6482ef52b8d3a2aDouglas Gregor LocalDataContainer* container = GetLocalDataContainerForNode(this); 359cded4f649cd4b7ba7d461c25c6482ef52b8d3a2aDouglas Gregor 3607536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor if (container) { 3617536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor container->database_helper_->DeleteDatabase( 3627536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor database_info_->identifier.ToString(), database_info_->database_name); 363075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara container->database_info_list_.erase(database_info_); 364075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara } 365075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara} 366075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara 367075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo BagnaraCookieTreeNode::DetailedInfo CookieTreeDatabaseNode::GetDetailedInfo() const { 3683397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl return DetailedInfo().InitDatabase(&*database_info_); 369465d41b92b2c862f3062c412a0538db65c6a2661Abramo Bagnara} 3703acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis 3713acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis/////////////////////////////////////////////////////////////////////////////// 3728538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl// CookieTreeLocalStorageNode, public: 3732cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 3742cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorCookieTreeLocalStorageNode::CookieTreeLocalStorageNode( 3753397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator 376a8e0b978d63c52e39c002fbf014ce553374fedcfDouglas Gregor local_storage_info) 37731f17ecbef57b5679c017c375db330546b7b5145John McCall : CookieTreeNode(base::UTF8ToUTF16(local_storage_info->origin_url.spec())), 3788538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl local_storage_info_(local_storage_info) { 3793cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall} 3803cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall 3813397c5570369f19b2d6c52e898f708d75ceede1fSebastian RedlCookieTreeLocalStorageNode::~CookieTreeLocalStorageNode() {} 38256ca8a9c0fabd65418e9b2fd85140f4ed7d3c187Douglas Gregor 3838538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redlvoid CookieTreeLocalStorageNode::DeleteStoredObjects() { 384c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall LocalDataContainer* container = GetLocalDataContainerForNode(this); 385c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall 3863397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl if (container) { 387c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall container->local_storage_helper_->DeleteOrigin( 3882cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor local_storage_info_->origin_url); 389c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall container->local_storage_info_list_.erase(local_storage_info_); 390446ee4eb4fc4c705a59365252df7a5c253daafa1Steve Naroff } 391446ee4eb4fc4c705a59365252df7a5c253daafa1Steve Naroff} 3928538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 3932cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorCookieTreeNode::DetailedInfo 3942cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorCookieTreeLocalStorageNode::GetDetailedInfo() const { 395d1b3c2dd5bc1f3103bee6137957aa7c5f8f2f0bcSteve Naroff return DetailedInfo().InitLocalStorage( 3963397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl &*local_storage_info_); 3971eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump} 3988538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 3992cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor/////////////////////////////////////////////////////////////////////////////// 4002cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// CookieTreeSessionStorageNode, public: 401b001de7458d17c17e6d8b8034c7cfcefd3b70c00Eli Friedman 402b001de7458d17c17e6d8b8034c7cfcefd3b70c00Eli FriedmanCookieTreeSessionStorageNode::CookieTreeSessionStorageNode( 403b001de7458d17c17e6d8b8034c7cfcefd3b70c00Eli Friedman std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::iterator 404b001de7458d17c17e6d8b8034c7cfcefd3b70c00Eli Friedman session_storage_info) 405b001de7458d17c17e6d8b8034c7cfcefd3b70c00Eli Friedman : CookieTreeNode( 406b001de7458d17c17e6d8b8034c7cfcefd3b70c00Eli Friedman base::UTF8ToUTF16(session_storage_info->origin_url.spec())), 407a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall session_storage_info_(session_storage_info) { 408a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall} 409a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall 410a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian RedlCookieTreeSessionStorageNode::~CookieTreeSessionStorageNode() {} 41189eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis 412a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCallvoid CookieTreeSessionStorageNode::DeleteStoredObjects() { 413a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall LocalDataContainer* container = GetLocalDataContainerForNode(this); 41489eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis 415a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall if (container) { 416a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall // TODO(rsesek): There's no easy way to get the namespace_id for a session 41751bd803fbdade51d674598ed45da3d54190a656cJohn McCall // storage, nor is there an easy way to clear session storage just by 418a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall // origin. This is probably okay since session storage is not persistent. 41951bd803fbdade51d674598ed45da3d54190a656cJohn McCall // http://crbug.com/168996 420a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall container->session_storage_info_list_.erase(session_storage_info_); 421a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall } 42251bd803fbdade51d674598ed45da3d54190a656cJohn McCall} 42351bd803fbdade51d674598ed45da3d54190a656cJohn McCall 424a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCallCookieTreeNode::DetailedInfo 425a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCallCookieTreeSessionStorageNode::GetDetailedInfo() const { 426a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall return DetailedInfo().InitSessionStorage(&*session_storage_info_); 427a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall} 42851bd803fbdade51d674598ed45da3d54190a656cJohn McCall 42951bd803fbdade51d674598ed45da3d54190a656cJohn McCall/////////////////////////////////////////////////////////////////////////////// 43051bd803fbdade51d674598ed45da3d54190a656cJohn McCall// CookieTreeIndexedDBNode, public: 43151bd803fbdade51d674598ed45da3d54190a656cJohn McCall 432ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas GregorCookieTreeIndexedDBNode::CookieTreeIndexedDBNode( 433ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor std::list<content::IndexedDBInfo>::iterator 434ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor indexed_db_info) 435ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor : CookieTreeNode(base::UTF8ToUTF16( 436ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor indexed_db_info->origin_.spec())), 437ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor indexed_db_info_(indexed_db_info) { 438ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor} 43951bd803fbdade51d674598ed45da3d54190a656cJohn McCall 44051bd803fbdade51d674598ed45da3d54190a656cJohn McCallCookieTreeIndexedDBNode::~CookieTreeIndexedDBNode() {} 44151bd803fbdade51d674598ed45da3d54190a656cJohn McCall 44251bd803fbdade51d674598ed45da3d54190a656cJohn McCallvoid CookieTreeIndexedDBNode::DeleteStoredObjects() { 44351bd803fbdade51d674598ed45da3d54190a656cJohn McCall LocalDataContainer* container = GetLocalDataContainerForNode(this); 44451bd803fbdade51d674598ed45da3d54190a656cJohn McCall 44551bd803fbdade51d674598ed45da3d54190a656cJohn McCall if (container) { 44651bd803fbdade51d674598ed45da3d54190a656cJohn McCall container->indexed_db_helper_->DeleteIndexedDB( 44751bd803fbdade51d674598ed45da3d54190a656cJohn McCall indexed_db_info_->origin_); 44851bd803fbdade51d674598ed45da3d54190a656cJohn McCall container->indexed_db_info_list_.erase(indexed_db_info_); 44951bd803fbdade51d674598ed45da3d54190a656cJohn McCall } 45051bd803fbdade51d674598ed45da3d54190a656cJohn McCall} 45151bd803fbdade51d674598ed45da3d54190a656cJohn McCall 45251bd803fbdade51d674598ed45da3d54190a656cJohn McCallCookieTreeNode::DetailedInfo CookieTreeIndexedDBNode::GetDetailedInfo() const { 45351bd803fbdade51d674598ed45da3d54190a656cJohn McCall return DetailedInfo().InitIndexedDB(&*indexed_db_info_); 45451bd803fbdade51d674598ed45da3d54190a656cJohn McCall} 45551bd803fbdade51d674598ed45da3d54190a656cJohn McCall 45651bd803fbdade51d674598ed45da3d54190a656cJohn McCall/////////////////////////////////////////////////////////////////////////////// 457b6ab6c1ca733fda2302a1c5066bdfc6218c89e41Abramo Bagnara// CookieTreeFileSystemNode, public: 45851bd803fbdade51d674598ed45da3d54190a656cJohn McCall 45951bd803fbdade51d674598ed45da3d54190a656cJohn McCallCookieTreeFileSystemNode::CookieTreeFileSystemNode( 46051bd803fbdade51d674598ed45da3d54190a656cJohn McCall std::list<BrowsingDataFileSystemHelper::FileSystemInfo>::iterator 46151bd803fbdade51d674598ed45da3d54190a656cJohn McCall file_system_info) 46251bd803fbdade51d674598ed45da3d54190a656cJohn McCall : CookieTreeNode(base::UTF8ToUTF16( 46351bd803fbdade51d674598ed45da3d54190a656cJohn McCall file_system_info->origin.spec())), 46451bd803fbdade51d674598ed45da3d54190a656cJohn McCall file_system_info_(file_system_info) { 46551bd803fbdade51d674598ed45da3d54190a656cJohn McCall} 46651bd803fbdade51d674598ed45da3d54190a656cJohn McCall 46751bd803fbdade51d674598ed45da3d54190a656cJohn McCallCookieTreeFileSystemNode::~CookieTreeFileSystemNode() {} 46851bd803fbdade51d674598ed45da3d54190a656cJohn McCall 46951bd803fbdade51d674598ed45da3d54190a656cJohn McCallvoid CookieTreeFileSystemNode::DeleteStoredObjects() { 47051bd803fbdade51d674598ed45da3d54190a656cJohn McCall LocalDataContainer* container = GetLocalDataContainerForNode(this); 47151bd803fbdade51d674598ed45da3d54190a656cJohn McCall 47251bd803fbdade51d674598ed45da3d54190a656cJohn McCall if (container) { 47351bd803fbdade51d674598ed45da3d54190a656cJohn McCall container->file_system_helper_->DeleteFileSystemOrigin( 47451bd803fbdade51d674598ed45da3d54190a656cJohn McCall file_system_info_->origin); 47551bd803fbdade51d674598ed45da3d54190a656cJohn McCall container->file_system_info_list_.erase(file_system_info_); 47651bd803fbdade51d674598ed45da3d54190a656cJohn McCall } 47751bd803fbdade51d674598ed45da3d54190a656cJohn McCall} 47851bd803fbdade51d674598ed45da3d54190a656cJohn McCall 47951bd803fbdade51d674598ed45da3d54190a656cJohn McCallCookieTreeNode::DetailedInfo CookieTreeFileSystemNode::GetDetailedInfo() const { 48051bd803fbdade51d674598ed45da3d54190a656cJohn McCall return DetailedInfo().InitFileSystem(&*file_system_info_); 48151bd803fbdade51d674598ed45da3d54190a656cJohn McCall} 48251bd803fbdade51d674598ed45da3d54190a656cJohn McCall 48351bd803fbdade51d674598ed45da3d54190a656cJohn McCall/////////////////////////////////////////////////////////////////////////////// 48451bd803fbdade51d674598ed45da3d54190a656cJohn McCall// CookieTreeQuotaNode, public: 48551bd803fbdade51d674598ed45da3d54190a656cJohn McCall 48651bd803fbdade51d674598ed45da3d54190a656cJohn McCallCookieTreeQuotaNode::CookieTreeQuotaNode( 48751bd803fbdade51d674598ed45da3d54190a656cJohn McCall std::list<BrowsingDataQuotaHelper::QuotaInfo>::iterator quota_info) 48851bd803fbdade51d674598ed45da3d54190a656cJohn McCall : CookieTreeNode(base::UTF8ToUTF16(quota_info->host)), 48951bd803fbdade51d674598ed45da3d54190a656cJohn McCall quota_info_(quota_info) { 490796aa443ab5ed036f42ef33fed629e1b4b34871bAbramo Bagnara} 49159c0a818a79be850f7ae8fdafd57a1710e5b809aAbramo Bagnara 49259c0a818a79be850f7ae8fdafd57a1710e5b809aAbramo BagnaraCookieTreeQuotaNode::~CookieTreeQuotaNode() {} 493796aa443ab5ed036f42ef33fed629e1b4b34871bAbramo Bagnara 49451bd803fbdade51d674598ed45da3d54190a656cJohn McCallvoid CookieTreeQuotaNode::DeleteStoredObjects() { 49551bd803fbdade51d674598ed45da3d54190a656cJohn McCall // Calling this function may cause unexpected over-quota state of origin. 49651bd803fbdade51d674598ed45da3d54190a656cJohn McCall // However, it'll caused no problem, just prevent usage growth of the origin. 49751bd803fbdade51d674598ed45da3d54190a656cJohn McCall LocalDataContainer* container = GetModel()->data_container(); 49851bd803fbdade51d674598ed45da3d54190a656cJohn McCall 49951bd803fbdade51d674598ed45da3d54190a656cJohn McCall if (container) { 50051bd803fbdade51d674598ed45da3d54190a656cJohn McCall container->quota_helper_->RevokeHostQuota(quota_info_->host); 50151bd803fbdade51d674598ed45da3d54190a656cJohn McCall container->quota_info_list_.erase(quota_info_); 50251bd803fbdade51d674598ed45da3d54190a656cJohn McCall } 503ed97649e9574b9d854fa4d6109c9333ae0993554John McCall} 504ed97649e9574b9d854fa4d6109c9333ae0993554John McCall 505ed97649e9574b9d854fa4d6109c9333ae0993554John McCallCookieTreeNode::DetailedInfo CookieTreeQuotaNode::GetDetailedInfo() const { 50651bd803fbdade51d674598ed45da3d54190a656cJohn McCall return DetailedInfo().InitQuota(&*quota_info_); 50751bd803fbdade51d674598ed45da3d54190a656cJohn McCall} 50851bd803fbdade51d674598ed45da3d54190a656cJohn McCall 50951bd803fbdade51d674598ed45da3d54190a656cJohn McCall/////////////////////////////////////////////////////////////////////////////// 510cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall// CookieTreeChannelIDNode, public: 511cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall 512cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCallCookieTreeChannelIDNode::CookieTreeChannelIDNode( 51351bd803fbdade51d674598ed45da3d54190a656cJohn McCall net::ChannelIDStore::ChannelIDList::iterator channel_id) 51451bd803fbdade51d674598ed45da3d54190a656cJohn McCall : CookieTreeNode(base::ASCIIToUTF16(channel_id->server_identifier())), 515cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall channel_id_(channel_id) { 516cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall} 517cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall 518cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCallCookieTreeChannelIDNode::~CookieTreeChannelIDNode() {} 51951bd803fbdade51d674598ed45da3d54190a656cJohn McCall 52051bd803fbdade51d674598ed45da3d54190a656cJohn McCallvoid CookieTreeChannelIDNode::DeleteStoredObjects() { 52151bd803fbdade51d674598ed45da3d54190a656cJohn McCall LocalDataContainer* container = GetLocalDataContainerForNode(this); 522a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall 523ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt if (container) { 524ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt container->channel_id_helper_->DeleteChannelID( 525ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt channel_id_->server_identifier()); 526ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt container->channel_id_list_.erase(channel_id_); 527ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt } 528ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt} 52934b41d939a1328f484511c6002ba2456db879a29Richard Smith 53034b41d939a1328f484511c6002ba2456db879a29Richard SmithCookieTreeNode::DetailedInfo 53134b41d939a1328f484511c6002ba2456db879a29Richard SmithCookieTreeChannelIDNode::GetDetailedInfo() const { 53251bd803fbdade51d674598ed45da3d54190a656cJohn McCall return DetailedInfo().InitChannelID(&*channel_id_); 53351bd803fbdade51d674598ed45da3d54190a656cJohn McCall} 534a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall 53551bd803fbdade51d674598ed45da3d54190a656cJohn McCall/////////////////////////////////////////////////////////////////////////////// 53651bd803fbdade51d674598ed45da3d54190a656cJohn McCall// CookieTreeServiceWorkerNode, public: 537a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall 5389d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCallCookieTreeServiceWorkerNode::CookieTreeServiceWorkerNode( 5399d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall std::list<content::ServiceWorkerUsageInfo>::iterator service_worker_info) 5409d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall : CookieTreeNode(base::UTF8ToUTF16(service_worker_info->origin.spec())), 5419d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall service_worker_info_(service_worker_info) { 5429d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall} 5439d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall 5449d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCallCookieTreeServiceWorkerNode::~CookieTreeServiceWorkerNode() { 5459d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall} 5469d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall 5479d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCallvoid CookieTreeServiceWorkerNode::DeleteStoredObjects() { 5489d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall LocalDataContainer* container = GetLocalDataContainerForNode(this); 5499d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall 5509d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall if (container) { 5519d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall container->service_worker_helper_->DeleteServiceWorkers( 5529d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall service_worker_info_->origin); 55351bd803fbdade51d674598ed45da3d54190a656cJohn McCall container->service_worker_info_list_.erase(service_worker_info_); 55451bd803fbdade51d674598ed45da3d54190a656cJohn McCall } 555a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall} 55649a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall 55749a832bd499d6f61c23655f1fac99f0dd229756eJohn McCallCookieTreeNode::DetailedInfo CookieTreeServiceWorkerNode::GetDetailedInfo() 55849a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall const { 55949a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall return DetailedInfo().InitServiceWorker(&*service_worker_info_); 560c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor} 561c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor 562c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor/////////////////////////////////////////////////////////////////////////////// 563c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor// CookieTreeRootNode, public: 56451bd803fbdade51d674598ed45da3d54190a656cJohn McCall 56551bd803fbdade51d674598ed45da3d54190a656cJohn McCallCookieTreeRootNode::CookieTreeRootNode(CookiesTreeModel* model) 56655d23c925b058be29b792008ddb7d68f6c4fa9a0Abramo Bagnara : model_(model) { 567833ca991c1bfc967f0995974ca86f66ba1f666b5John McCall} 568833ca991c1bfc967f0995974ca86f66ba1f666b5John McCall 569833ca991c1bfc967f0995974ca86f66ba1f666b5John McCallCookieTreeRootNode::~CookieTreeRootNode() {} 570833ca991c1bfc967f0995974ca86f66ba1f666b5John McCall 57144f8c37e378f716e8cbb600e3800f437cf58f9e5Argyrios KyrtzidisCookieTreeHostNode* CookieTreeRootNode::GetOrCreateHostNode( 57244f8c37e378f716e8cbb600e3800f437cf58f9e5Argyrios Kyrtzidis const GURL& url) { 573a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall scoped_ptr<CookieTreeHostNode> host_node( 574075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara new CookieTreeHostNode(url)); 575075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara 576075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara // First see if there is an existing match. 577075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara std::vector<CookieTreeNode*>::iterator host_node_iterator = 578465d41b92b2c862f3062c412a0538db65c6a2661Abramo Bagnara std::lower_bound(children().begin(), children().end(), host_node.get(), 57938a42916cb07fd368d9e2ae1e7915fa896f9ec06Abramo Bagnara HostNodeComparator()); 5809e876876afc13aa671cc11a17c19907c599b9ab9Douglas Gregor if (host_node_iterator != children().end() && 581a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall CookieTreeHostNode::TitleForUrl(url) == 5823cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall (*host_node_iterator)->GetTitle()) 5833cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall return static_cast<CookieTreeHostNode*>(*host_node_iterator); 5843cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall // Node doesn't exist, insert the new one into the (ordered) children. 5854714c12a1ab759156b78be8f109ea4c12213af57Douglas Gregor DCHECK(model_); 58638a42916cb07fd368d9e2ae1e7915fa896f9ec06Abramo Bagnara model_->Add(this, host_node.get(), 5872494dd024b392b8def58bf067cc94b51c214cf77Douglas Gregor (host_node_iterator - children().begin())); 58851bd803fbdade51d674598ed45da3d54190a656cJohn McCall return host_node.release(); 589a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall} 59033500955d731c73717af52088b7fc0e7a85681e7John McCall 59133500955d731c73717af52088b7fc0e7a85681e7John McCallCookiesTreeModel* CookieTreeRootNode::GetModel() const { 59255d23c925b058be29b792008ddb7d68f6c4fa9a0Abramo Bagnara return model_; 59394fdffa4a572fc14ac296f5f1aae9db3734c72f1Douglas Gregor} 59466581d41527628d4b37f7b05c288f77be7415d7dAbramo Bagnara 59555d23c925b058be29b792008ddb7d68f6c4fa9a0Abramo BagnaraCookieTreeNode::DetailedInfo CookieTreeRootNode::GetDetailedInfo() const { 59633500955d731c73717af52088b7fc0e7a85681e7John McCall return DetailedInfo().Init(DetailedInfo::TYPE_ROOT); 59733500955d731c73717af52088b7fc0e7a85681e7John McCall} 59833500955d731c73717af52088b7fc0e7a85681e7John McCall 59944f8c37e378f716e8cbb600e3800f437cf58f9e5Argyrios Kyrtzidis/////////////////////////////////////////////////////////////////////////////// 60044f8c37e378f716e8cbb600e3800f437cf58f9e5Argyrios Kyrtzidis// CookieTreeHostNode, public: 60133500955d731c73717af52088b7fc0e7a85681e7John McCall 6027536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor// static 6037536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregorbase::string16 CookieTreeHostNode::TitleForUrl(const GURL& url) { 6047536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor const std::string file_origin_node_name( 60551bd803fbdade51d674598ed45da3d54190a656cJohn McCall std::string(url::kFileScheme) + url::kStandardSchemeSeparator); 60651bd803fbdade51d674598ed45da3d54190a656cJohn McCall return base::UTF8ToUTF16(url.SchemeIsFile() ? file_origin_node_name 607c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall : url.host()); 608c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall} 609c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall 61054e14c4db764c0636160d26c5bbf491637c83a76John McCallCookieTreeHostNode::CookieTreeHostNode(const GURL& url) 61154e14c4db764c0636160d26c5bbf491637c83a76John McCall : CookieTreeNode(TitleForUrl(url)), 61254e14c4db764c0636160d26c5bbf491637c83a76John McCall cookies_child_(NULL), 61354e14c4db764c0636160d26c5bbf491637c83a76John McCall databases_child_(NULL), 614a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall local_storages_child_(NULL), 61551bd803fbdade51d674598ed45da3d54190a656cJohn McCall session_storages_child_(NULL), 61651bd803fbdade51d674598ed45da3d54190a656cJohn McCall appcaches_child_(NULL), 617a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall indexed_dbs_child_(NULL), 618b001de7458d17c17e6d8b8034c7cfcefd3b70c00Eli Friedman file_systems_child_(NULL), 619b001de7458d17c17e6d8b8034c7cfcefd3b70c00Eli Friedman quota_child_(NULL), 620b001de7458d17c17e6d8b8034c7cfcefd3b70c00Eli Friedman channel_ids_child_(NULL), 621b001de7458d17c17e6d8b8034c7cfcefd3b70c00Eli Friedman service_workers_child_(NULL), 622b001de7458d17c17e6d8b8034c7cfcefd3b70c00Eli Friedman flash_lso_child_(NULL), 623a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall url_(url), 6244dcf151a555ff51e4d643e8e6eeb80f121d11d1bChris Lattner canonicalized_host_(CanonicalizeHost(url)) { 625a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl} 6262cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 6272cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorCookieTreeHostNode::~CookieTreeHostNode() {} 628b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 629b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattnerconst std::string CookieTreeHostNode::GetHost() const { 63089eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis const std::string file_origin_node_name( 631b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner std::string(url::kFileScheme) + url::kStandardSchemeSeparator); 632b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner return url_.SchemeIsFile() ? file_origin_node_name : url_.host(); 633b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner} 634b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 635b145b1e9de866e79fb386e4a074dc0b41853acf3Chris LattnerCookieTreeNode::DetailedInfo CookieTreeHostNode::GetDetailedInfo() const { 636b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner return DetailedInfo().InitHost(); 637b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner} 638b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 639b145b1e9de866e79fb386e4a074dc0b41853acf3Chris LattnerCookieTreeCookiesNode* CookieTreeHostNode::GetOrCreateCookiesNode() { 640b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner if (cookies_child_) 641b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner return cookies_child_; 642b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner cookies_child_ = new CookieTreeCookiesNode; 643b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner AddChildSortedByTitle(cookies_child_); 644b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner return cookies_child_; 64589eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis} 646b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 647b145b1e9de866e79fb386e4a074dc0b41853acf3Chris LattnerCookieTreeDatabasesNode* CookieTreeHostNode::GetOrCreateDatabasesNode() { 648b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner if (databases_child_) 649b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner return databases_child_; 650b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner databases_child_ = new CookieTreeDatabasesNode; 6510558df2da807646e65d4fa290f4e92114af1a746Chris Lattner AddChildSortedByTitle(databases_child_); 6520558df2da807646e65d4fa290f4e92114af1a746Chris Lattner return databases_child_; 6530558df2da807646e65d4fa290f4e92114af1a746Chris Lattner} 65489eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis 6558538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian RedlCookieTreeLocalStoragesNode* 6560558df2da807646e65d4fa290f4e92114af1a746Chris Lattner CookieTreeHostNode::GetOrCreateLocalStoragesNode() { 6570558df2da807646e65d4fa290f4e92114af1a746Chris Lattner if (local_storages_child_) 6580558df2da807646e65d4fa290f4e92114af1a746Chris Lattner return local_storages_child_; 6590558df2da807646e65d4fa290f4e92114af1a746Chris Lattner local_storages_child_ = new CookieTreeLocalStoragesNode; 6600558df2da807646e65d4fa290f4e92114af1a746Chris Lattner AddChildSortedByTitle(local_storages_child_); 6610558df2da807646e65d4fa290f4e92114af1a746Chris Lattner return local_storages_child_; 6620558df2da807646e65d4fa290f4e92114af1a746Chris Lattner} 663534986f2b21e6050bf00163cd6423fd92155a6edRichard Smith 6640558df2da807646e65d4fa290f4e92114af1a746Chris LattnerCookieTreeSessionStoragesNode* 6650558df2da807646e65d4fa290f4e92114af1a746Chris Lattner CookieTreeHostNode::GetOrCreateSessionStoragesNode() { 6660558df2da807646e65d4fa290f4e92114af1a746Chris Lattner if (session_storages_child_) 6670558df2da807646e65d4fa290f4e92114af1a746Chris Lattner return session_storages_child_; 6680558df2da807646e65d4fa290f4e92114af1a746Chris Lattner session_storages_child_ = new CookieTreeSessionStoragesNode; 6690558df2da807646e65d4fa290f4e92114af1a746Chris Lattner AddChildSortedByTitle(session_storages_child_); 6700558df2da807646e65d4fa290f4e92114af1a746Chris Lattner return session_storages_child_; 6710558df2da807646e65d4fa290f4e92114af1a746Chris Lattner} 6720558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6730558df2da807646e65d4fa290f4e92114af1a746Chris LattnerCookieTreeAppCachesNode* CookieTreeHostNode::GetOrCreateAppCachesNode() { 6740558df2da807646e65d4fa290f4e92114af1a746Chris Lattner if (appcaches_child_) 675df5faf5e7ae6823d0af0b801c4ac26d47f2cee97Chad Rosier return appcaches_child_; 676cd518a0ebc7c0a6aa41d717c360462540ef80a76Chad Rosier appcaches_child_ = new CookieTreeAppCachesNode; 6770558df2da807646e65d4fa290f4e92114af1a746Chris Lattner AddChildSortedByTitle(appcaches_child_); 6780558df2da807646e65d4fa290f4e92114af1a746Chris Lattner return appcaches_child_; 6790558df2da807646e65d4fa290f4e92114af1a746Chris Lattner} 6800558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6810558df2da807646e65d4fa290f4e92114af1a746Chris LattnerCookieTreeIndexedDBsNode* CookieTreeHostNode::GetOrCreateIndexedDBsNode() { 6820558df2da807646e65d4fa290f4e92114af1a746Chris Lattner if (indexed_dbs_child_) 6830558df2da807646e65d4fa290f4e92114af1a746Chris Lattner return indexed_dbs_child_; 6840558df2da807646e65d4fa290f4e92114af1a746Chris Lattner indexed_dbs_child_ = new CookieTreeIndexedDBsNode; 6850558df2da807646e65d4fa290f4e92114af1a746Chris Lattner AddChildSortedByTitle(indexed_dbs_child_); 6860558df2da807646e65d4fa290f4e92114af1a746Chris Lattner return indexed_dbs_child_; 6870558df2da807646e65d4fa290f4e92114af1a746Chris Lattner} 6880558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6890558df2da807646e65d4fa290f4e92114af1a746Chris LattnerCookieTreeFileSystemsNode* CookieTreeHostNode::GetOrCreateFileSystemsNode() { 6900558df2da807646e65d4fa290f4e92114af1a746Chris Lattner if (file_systems_child_) 6910558df2da807646e65d4fa290f4e92114af1a746Chris Lattner return file_systems_child_; 6920558df2da807646e65d4fa290f4e92114af1a746Chris Lattner file_systems_child_ = new CookieTreeFileSystemsNode; 6930558df2da807646e65d4fa290f4e92114af1a746Chris Lattner AddChildSortedByTitle(file_systems_child_); 6940558df2da807646e65d4fa290f4e92114af1a746Chris Lattner return file_systems_child_; 6950558df2da807646e65d4fa290f4e92114af1a746Chris Lattner} 6960558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6970558df2da807646e65d4fa290f4e92114af1a746Chris LattnerCookieTreeQuotaNode* CookieTreeHostNode::UpdateOrCreateQuotaNode( 6980558df2da807646e65d4fa290f4e92114af1a746Chris Lattner std::list<BrowsingDataQuotaHelper::QuotaInfo>::iterator quota_info) { 6990558df2da807646e65d4fa290f4e92114af1a746Chris Lattner if (quota_child_) 7000558df2da807646e65d4fa290f4e92114af1a746Chris Lattner return quota_child_; 7010558df2da807646e65d4fa290f4e92114af1a746Chris Lattner quota_child_ = new CookieTreeQuotaNode(quota_info); 7020558df2da807646e65d4fa290f4e92114af1a746Chris Lattner AddChildSortedByTitle(quota_child_); 7030558df2da807646e65d4fa290f4e92114af1a746Chris Lattner return quota_child_; 7040558df2da807646e65d4fa290f4e92114af1a746Chris Lattner} 7050558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 7060558df2da807646e65d4fa290f4e92114af1a746Chris LattnerCookieTreeChannelIDsNode* 707f111d935722ed488144600cea5ed03a6b5069e8fPeter CollingbourneCookieTreeHostNode::GetOrCreateChannelIDsNode() { 7080558df2da807646e65d4fa290f4e92114af1a746Chris Lattner if (channel_ids_child_) 709eb382ec1507cf2c8c12d7443d0b67c076223aec6Patrick Beard return channel_ids_child_; 710ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek channel_ids_child_ = new CookieTreeChannelIDsNode; 711ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek AddChildSortedByTitle(channel_ids_child_); 7120558df2da807646e65d4fa290f4e92114af1a746Chris Lattner return channel_ids_child_; 7130558df2da807646e65d4fa290f4e92114af1a746Chris Lattner} 7140558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 7150558df2da807646e65d4fa290f4e92114af1a746Chris LattnerCookieTreeServiceWorkersNode* 7160558df2da807646e65d4fa290f4e92114af1a746Chris LattnerCookieTreeHostNode::GetOrCreateServiceWorkersNode() { 7170558df2da807646e65d4fa290f4e92114af1a746Chris Lattner if (service_workers_child_) 7180558df2da807646e65d4fa290f4e92114af1a746Chris Lattner return service_workers_child_; 7190558df2da807646e65d4fa290f4e92114af1a746Chris Lattner service_workers_child_ = new CookieTreeServiceWorkersNode; 7200558df2da807646e65d4fa290f4e92114af1a746Chris Lattner AddChildSortedByTitle(service_workers_child_); 7210558df2da807646e65d4fa290f4e92114af1a746Chris Lattner return service_workers_child_; 7220558df2da807646e65d4fa290f4e92114af1a746Chris Lattner} 7230558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 7240558df2da807646e65d4fa290f4e92114af1a746Chris LattnerCookieTreeFlashLSONode* CookieTreeHostNode::GetOrCreateFlashLSONode( 725ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek const std::string& domain) { 726eb7f96141f754150a92433286fa385910a22f494Sam Weinig DCHECK_EQ(GetHost(), domain); 727eb7f96141f754150a92433286fa385910a22f494Sam Weinig if (flash_lso_child_) 728eb7f96141f754150a92433286fa385910a22f494Sam Weinig return flash_lso_child_; 729eb7f96141f754150a92433286fa385910a22f494Sam Weinig flash_lso_child_ = new CookieTreeFlashLSONode(domain); 730eb7f96141f754150a92433286fa385910a22f494Sam Weinig AddChildSortedByTitle(flash_lso_child_); 731eb7f96141f754150a92433286fa385910a22f494Sam Weinig return flash_lso_child_; 732eb7f96141f754150a92433286fa385910a22f494Sam Weinig} 7339fcce65e7e1307b5b8da9be13e4092d6bb94dc1dRichard Smith 734eb7f96141f754150a92433286fa385910a22f494Sam Weinigvoid CookieTreeHostNode::CreateContentException( 735eb7f96141f754150a92433286fa385910a22f494Sam Weinig CookieSettings* cookie_settings, ContentSetting setting) const { 736b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor DCHECK(setting == CONTENT_SETTING_ALLOW || 737b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor setting == CONTENT_SETTING_BLOCK || 738b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor setting == CONTENT_SETTING_SESSION_ONLY); 739b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor if (CanCreateContentException()) { 740b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor cookie_settings->ResetCookieSetting( 741b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor ContentSettingsPattern::FromURLNoWildcard(url_), 742b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor ContentSettingsPattern::Wildcard()); 743b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor cookie_settings->SetCookieSetting( 744b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor ContentSettingsPattern::FromURL(url_), 745b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor ContentSettingsPattern::Wildcard(), setting); 746b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor } 747b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor} 748b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 749b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregorbool CookieTreeHostNode::CanCreateContentException() const { 750b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor return !url_.SchemeIsFile(); 751b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor} 752b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 753b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor/////////////////////////////////////////////////////////////////////////////// 754b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor// CookieTreeCookiesNode, public: 755b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 756b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas GregorCookieTreeCookiesNode::CookieTreeCookiesNode() 757b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_COOKIES)) { 758b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor} 759b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 760b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas GregorCookieTreeCookiesNode::~CookieTreeCookiesNode() { 761e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne} 7620558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 763b145b1e9de866e79fb386e4a074dc0b41853acf3Chris LattnerCookieTreeNode::DetailedInfo CookieTreeCookiesNode::GetDetailedInfo() const { 7641eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return DetailedInfo().Init(DetailedInfo::TYPE_COOKIES); 765a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl} 766b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 767b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner/////////////////////////////////////////////////////////////////////////////// 7681eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump// CookieTreeAppCachesNode, public: 7698538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 7708538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian RedlCookieTreeAppCachesNode::CookieTreeAppCachesNode() 7711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump : CookieTreeNode(l10n_util::GetStringUTF16( 7727ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor IDS_COOKIES_APPLICATION_CACHES)) { 7737ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor} 7747ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor 7757ae467f02b0f2ba3897ee03e0d011433789b5434Douglas GregorCookieTreeAppCachesNode::~CookieTreeAppCachesNode() {} 7767ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor 7777ae467f02b0f2ba3897ee03e0d011433789b5434Douglas GregorCookieTreeNode::DetailedInfo CookieTreeAppCachesNode::GetDetailedInfo() const { 77839c497b6d5e99acecbe03ee173249ee21933e855Douglas Gregor return DetailedInfo().Init(DetailedInfo::TYPE_APPCACHES); 7797ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor} 780992d91742129c1f77563df0b3d0a40b36fd13e3eArgyrios Kyrtzidis 781a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor/////////////////////////////////////////////////////////////////////////////// 7825f3d8224af99ad0d9107601c0c31b74693371cc1Douglas Gregor// CookieTreeDatabasesNode, public: 7831b2c3c0884e917ae5d59edde7d93b2af33c6a1b6Douglas Gregor 784bbf38319edd4eddc55ec273934e990d7e84991deDouglas GregorCookieTreeDatabasesNode::CookieTreeDatabasesNode() 785a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_WEB_DATABASES)) { 786a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor} 787c337fefd7317714d365a2acf4f1d2939bbcf8e3bDouglas Gregor 788c337fefd7317714d365a2acf4f1d2939bbcf8e3bDouglas GregorCookieTreeDatabasesNode::~CookieTreeDatabasesNode() {} 789c337fefd7317714d365a2acf4f1d2939bbcf8e3bDouglas Gregor 7907ae467f02b0f2ba3897ee03e0d011433789b5434Douglas GregorCookieTreeNode::DetailedInfo CookieTreeDatabasesNode::GetDetailedInfo() const { 7917ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor return DetailedInfo().Init(DetailedInfo::TYPE_DATABASES); 792b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner} 793b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 794b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner/////////////////////////////////////////////////////////////////////////////// 795b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner// CookieTreeLocalStoragesNode, public: 796b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 797b145b1e9de866e79fb386e4a074dc0b41853acf3Chris LattnerCookieTreeLocalStoragesNode::CookieTreeLocalStoragesNode() 798b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_LOCAL_STORAGE)) { 799b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner} 80049b96d1a382ae9f31456166f1a734d3f7f30b992Argyrios Kyrtzidis 8015ea6ef490547917426d5e2ed14c9f36521bbeacfRichard SmithCookieTreeLocalStoragesNode::~CookieTreeLocalStoragesNode() {} 802b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 803b145b1e9de866e79fb386e4a074dc0b41853acf3Chris LattnerCookieTreeNode::DetailedInfo 804b145b1e9de866e79fb386e4a074dc0b41853acf3Chris LattnerCookieTreeLocalStoragesNode::GetDetailedInfo() const { 8057f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor return DetailedInfo().Init(DetailedInfo::TYPE_LOCAL_STORAGES); 8067f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor} 807b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor 808e24692b30adbe8144597678a0e3354912e99c747Argyrios Kyrtzidis/////////////////////////////////////////////////////////////////////////////// 809320198303df7c16950d83ae79c3f702b84badcf7Fariborz Jahanian// CookieTreeSessionStoragesNode, public: 810b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 8112171bf1caba4d4b9eeb6a91efac4300b41f38b07Douglas GregorCookieTreeSessionStoragesNode::CookieTreeSessionStoragesNode() 812b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_SESSION_STORAGE)) { 813b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor} 814b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 815b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas GregorCookieTreeSessionStoragesNode::~CookieTreeSessionStoragesNode() {} 816b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 817b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas GregorCookieTreeNode::DetailedInfo 818b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas GregorCookieTreeSessionStoragesNode::GetDetailedInfo() const { 819b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor return DetailedInfo().Init(DetailedInfo::TYPE_SESSION_STORAGES); 820b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor} 82184bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne 822cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor/////////////////////////////////////////////////////////////////////////////// 82384bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne// CookieTreeIndexedDBsNode, public: 82484bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne 825ebcbe1d3dc7d4f0c1f540a632fa0684dd0a857d5Sean HuntCookieTreeIndexedDBsNode::CookieTreeIndexedDBsNode() 826d8bba9c15230d2b1b3893e272106aa79efc50251Douglas Gregor : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_INDEXED_DBS)) { 827837593fec8389eea3143920d7f2180b079b609e8Douglas Gregor} 828837593fec8389eea3143920d7f2180b079b609e8Douglas Gregor 829cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas GregorCookieTreeIndexedDBsNode::~CookieTreeIndexedDBsNode() {} 830a126651270acf17c434f60f86a3ab3687f87813aDouglas Gregor 831a126651270acf17c434f60f86a3ab3687f87813aDouglas GregorCookieTreeNode::DetailedInfo 8322171bf1caba4d4b9eeb6a91efac4300b41f38b07Douglas GregorCookieTreeIndexedDBsNode::GetDetailedInfo() const { 8332171bf1caba4d4b9eeb6a91efac4300b41f38b07Douglas Gregor return DetailedInfo().Init(DetailedInfo::TYPE_INDEXED_DBS); 834cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor} 835a8235d6c4093cd38dcf742909651f867de62e55bDouglas Gregor 836a8235d6c4093cd38dcf742909651f867de62e55bDouglas Gregor/////////////////////////////////////////////////////////////////////////////// 8372171bf1caba4d4b9eeb6a91efac4300b41f38b07Douglas Gregor// CookieTreeFileSystemsNode, public: 838b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 8392f4efd10c805cb779618c1a22a35eb07b5043c4eChris LattnerCookieTreeFileSystemsNode::CookieTreeFileSystemsNode() 840b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_FILE_SYSTEMS)) { 841b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner} 842b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 843f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler CarruthCookieTreeFileSystemsNode::~CookieTreeFileSystemsNode() {} 8441eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 845b145b1e9de866e79fb386e4a074dc0b41853acf3Chris LattnerCookieTreeNode::DetailedInfo 8462f4efd10c805cb779618c1a22a35eb07b5043c4eChris LattnerCookieTreeFileSystemsNode::GetDetailedInfo() const { 847b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner return DetailedInfo().Init(DetailedInfo::TYPE_FILE_SYSTEMS); 848b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner} 849b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 850b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor/////////////////////////////////////////////////////////////////////////////// 85161d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor// CookieTreeChannelIDsNode, public: 85261d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor 853b145b1e9de866e79fb386e4a074dc0b41853acf3Chris LattnerCookieTreeChannelIDsNode::CookieTreeChannelIDsNode() 854b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner : CookieTreeNode( 855b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner l10n_util::GetStringUTF16(IDS_COOKIES_CHANNEL_IDS)) { 856b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner} 857b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 858b145b1e9de866e79fb386e4a074dc0b41853acf3Chris LattnerCookieTreeChannelIDsNode::~CookieTreeChannelIDsNode() {} 859b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 860b145b1e9de866e79fb386e4a074dc0b41853acf3Chris LattnerCookieTreeNode::DetailedInfo 861b145b1e9de866e79fb386e4a074dc0b41853acf3Chris LattnerCookieTreeChannelIDsNode::GetDetailedInfo() const { 862b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner return DetailedInfo().Init(DetailedInfo::TYPE_CHANNEL_IDS); 863b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner} 864b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 865b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattnervoid CookieTreeNode::AddChildSortedByTitle(CookieTreeNode* new_child) { 866b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner DCHECK(new_child); 867b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner std::vector<CookieTreeNode*>::iterator iter = 868b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner std::lower_bound(children().begin(), children().end(), new_child, 869b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner NodeTitleComparator()); 870b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner GetModel()->Add(this, new_child, iter - children().begin()); 871b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner} 872b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 873a53d2cbe37e4be0d95b9d3e09f74eafae31fc940John McCall/////////////////////////////////////////////////////////////////////////////// 874d1b3c2dd5bc1f3103bee6137957aa7c5f8f2f0bcSteve Naroff// CookieTreeServiceWorkersNode, public: 875b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 876b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas GregorCookieTreeServiceWorkersNode::CookieTreeServiceWorkersNode() 877b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor : CookieTreeNode(l10n_util::GetStringUTF16(IDS_COOKIES_SERVICE_WORKERS)) { 878b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor} 879b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 880b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas GregorCookieTreeServiceWorkersNode::~CookieTreeServiceWorkersNode() { 881b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor} 882b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 883b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas GregorCookieTreeNode::DetailedInfo CookieTreeServiceWorkersNode::GetDetailedInfo() 884b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor const { 885b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor return DetailedInfo().Init(DetailedInfo::TYPE_SERVICE_WORKERS); 886b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor} 887b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 888b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor/////////////////////////////////////////////////////////////////////////////// 889b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor// CookieTreeFlashLSONode 890b001de7458d17c17e6d8b8034c7cfcefd3b70c00Eli FriedmanCookieTreeFlashLSONode::CookieTreeFlashLSONode( 8910ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner const std::string& domain) 8920ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner : domain_(domain) {} 8930ff8cda4442cff571aba1be91dd16f64a0bf16aaChris LattnerCookieTreeFlashLSONode::~CookieTreeFlashLSONode() {} 8940ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner 8950ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattnervoid CookieTreeFlashLSONode::DeleteStoredObjects() { 8960ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner // We are one level below the host node. 8970ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner CookieTreeHostNode* host = static_cast<CookieTreeHostNode*>(parent()); 8980ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner CHECK_EQ(host->GetDetailedInfo().node_type, 8990ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner CookieTreeNode::DetailedInfo::TYPE_HOST); 9000ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner LocalDataContainer* container = GetModel()->data_container(); 9010ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner container->flash_lso_helper_->DeleteFlashLSOsForSite(domain_); 9020ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner} 9030ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner 9040ff8cda4442cff571aba1be91dd16f64a0bf16aaChris LattnerCookieTreeNode::DetailedInfo CookieTreeFlashLSONode::GetDetailedInfo() const { 9050ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner return DetailedInfo().InitFlashLSO(domain_); 9060ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner} 907b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 908b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner/////////////////////////////////////////////////////////////////////////////// 9090ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner// ScopedBatchUpdateNotifier 910b145b1e9de866e79fb386e4a074dc0b41853acf3Chris LattnerCookiesTreeModel::ScopedBatchUpdateNotifier::ScopedBatchUpdateNotifier( 9110ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner CookiesTreeModel* model, CookieTreeNode* node) 9120ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner : model_(model), node_(node), batch_in_progress_(false) { 9130ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner} 9140ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner 915b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas GregorCookiesTreeModel::ScopedBatchUpdateNotifier::~ScopedBatchUpdateNotifier() { 916b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor if (batch_in_progress_) { 917b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor model_->NotifyObserverTreeNodeChanged(node_); 918b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor model_->NotifyObserverEndBatch(); 919b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor } 920b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor} 921b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 922b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregorvoid CookiesTreeModel::ScopedBatchUpdateNotifier::StartBatchUpdate() { 923b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor if (!batch_in_progress_) { 924b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor model_->NotifyObserverBeginBatch(); 925b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor batch_in_progress_ = true; 926b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor } 927b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor} 928b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 929b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor/////////////////////////////////////////////////////////////////////////////// 930b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor// CookiesTreeModel, public: 931b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas GregorCookiesTreeModel::CookiesTreeModel( 932b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor LocalDataContainer* data_container, 933b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor ExtensionSpecialStoragePolicy* special_storage_policy, 934b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor bool group_by_cookie_source) 935b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor : ui::TreeNodeModel<CookieTreeNode>(new CookieTreeRootNode(this)), 936b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor data_container_(data_container), 937b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor#if defined(ENABLE_EXTENSIONS) 938b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor special_storage_policy_(special_storage_policy), 939b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor#endif 940b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor group_by_cookie_source_(group_by_cookie_source), 941b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor batch_update_(0) { 942b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor data_container_->Init(this); 943a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor} 944a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor 945a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas GregorCookiesTreeModel::~CookiesTreeModel() { 9464800a5c79023271408af49797e09be32aca93232Douglas Gregor} 947f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler Carruth 9484800a5c79023271408af49797e09be32aca93232Douglas Gregor/////////////////////////////////////////////////////////////////////////////// 9494800a5c79023271408af49797e09be32aca93232Douglas Gregor// CookiesTreeModel, TreeModel methods (public): 9504800a5c79023271408af49797e09be32aca93232Douglas Gregor 951b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner// TreeModel methods: 952b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner// Returns the set of icons for the nodes in the tree. You only need override 953b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner// this if you don't want to use the default folder icons. 954b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattnervoid CookiesTreeModel::GetIcons(std::vector<gfx::ImageSkia>* icons) { 955b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner icons->push_back(*ResourceBundle::GetSharedInstance().GetNativeImageNamed( 956e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor IDR_DEFAULT_FAVICON).ToImageSkia()); 957e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor icons->push_back(*ResourceBundle::GetSharedInstance().GetNativeImageNamed( 9581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump IDR_COOKIE_ICON).ToImageSkia()); 959e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor icons->push_back(*ResourceBundle::GetSharedInstance().GetNativeImageNamed( 960e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor IDR_COOKIE_STORAGE_ICON).ToImageSkia()); 961e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor} 962e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 963e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor// Returns the index of the icon to use for |node|. Return -1 to use the 964e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor// default icon. The index is relative to the list of icons returned from 965e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor// GetIcons. 9661eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpint CookiesTreeModel::GetIconIndex(ui::TreeModelNode* node) { 967832d620b4ae0fc5fe28561b885b4cfc65cf5c9abDouglas Gregor CookieTreeNode* ct_node = static_cast<CookieTreeNode*>(node); 968e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor switch (ct_node->GetDetailedInfo().node_type) { 9691eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump case CookieTreeNode::DetailedInfo::TYPE_HOST: 970832d620b4ae0fc5fe28561b885b4cfc65cf5c9abDouglas Gregor return ORIGIN; 971e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor case CookieTreeNode::DetailedInfo::TYPE_COOKIE: 9721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return COOKIE; 973e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor case CookieTreeNode::DetailedInfo::TYPE_DATABASE: 974e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor return DATABASE; 975832d620b4ae0fc5fe28561b885b4cfc65cf5c9abDouglas Gregor case CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE: 976e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor return DATABASE; // close enough 977e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor case CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE: 9781eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return DATABASE; // ditto 979e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor case CookieTreeNode::DetailedInfo::TYPE_APPCACHE: 980e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor return DATABASE; // ditto 981e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor case CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB: 9821eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return DATABASE; // ditto 983e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor case CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM: 984e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor return DATABASE; // ditto 985e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor case CookieTreeNode::DetailedInfo::TYPE_QUOTA: 986e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor return -1; 987e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor case CookieTreeNode::DetailedInfo::TYPE_CHANNEL_ID: 9881eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return COOKIE; // It's kinda like a cookie? 989e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor case CookieTreeNode::DetailedInfo::TYPE_SERVICE_WORKER: 990e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor return DATABASE; // Just like appcache 991b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner default: 9921d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor break; 993bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor } 994bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor return -1; 9951d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor} 9962bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor 9977ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregorvoid CookiesTreeModel::DeleteAllStoredObjects() { 9987ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor NotifyObserverBeginBatch(); 9991d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor CookieTreeNode* root = GetRoot(); 1000e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor root->DeleteStoredObjects(); 10017ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor int num_children = root->child_count(); 10027ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor for (int i = num_children - 1; i >= 0; --i) 10037ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor delete Remove(root, root->GetChild(i)); 10047ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor NotifyObserverTreeNodeChanged(root); 10057ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor NotifyObserverEndBatch(); 10067ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor} 10077ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor 10087ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregorvoid CookiesTreeModel::DeleteCookieNode(CookieTreeNode* cookie_node) { 10097ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor if (cookie_node == GetRoot()) 10107ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor return; 10117ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor cookie_node->DeleteStoredObjects(); 10128538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl CookieTreeNode* parent_node = cookie_node->parent(); 10138538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl delete Remove(parent_node, cookie_node); 1014e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor if (parent_node->empty()) 1015e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor DeleteCookieNode(parent_node); 1016832d620b4ae0fc5fe28561b885b4cfc65cf5c9abDouglas Gregor} 1017bef35c91b594f66216f4aab303b71a6c5ab7abcfArgyrios Kyrtzidis 10187ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregorvoid CookiesTreeModel::UpdateSearchResults(const base::string16& filter) { 10197ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor CookieTreeNode* root = GetRoot(); 1020e95b9198b8b70ce0219cfb89483b41102e02dbf5Douglas Gregor ScopedBatchUpdateNotifier notifier(this, root); 10211d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor int num_children = root->child_count(); 1022e95b9198b8b70ce0219cfb89483b41102e02dbf5Douglas Gregor notifier.StartBatchUpdate(); 1023e95b9198b8b70ce0219cfb89483b41102e02dbf5Douglas Gregor for (int i = num_children - 1; i >= 0; --i) 1024cfa88f893915ceb8ae4ce2f17c46c24a4d67502fDmitri Gribenko delete Remove(root, root->GetChild(i)); 1025e95b9198b8b70ce0219cfb89483b41102e02dbf5Douglas Gregor 102610bc00fd45824f9b5cd139d63af8b0f6d28aaddaDouglas Gregor PopulateCookieInfoWithFilter(data_container(), ¬ifier, filter); 102710bc00fd45824f9b5cd139d63af8b0f6d28aaddaDouglas Gregor PopulateDatabaseInfoWithFilter(data_container(), ¬ifier, filter); 102810bc00fd45824f9b5cd139d63af8b0f6d28aaddaDouglas Gregor PopulateLocalStorageInfoWithFilter(data_container(), ¬ifier, filter); 102910bc00fd45824f9b5cd139d63af8b0f6d28aaddaDouglas Gregor PopulateSessionStorageInfoWithFilter(data_container(), ¬ifier, filter); 103010bc00fd45824f9b5cd139d63af8b0f6d28aaddaDouglas Gregor PopulateAppCacheInfoWithFilter(data_container(), ¬ifier, filter); 103110bc00fd45824f9b5cd139d63af8b0f6d28aaddaDouglas Gregor PopulateIndexedDBInfoWithFilter(data_container(), ¬ifier, filter); 103210bc00fd45824f9b5cd139d63af8b0f6d28aaddaDouglas Gregor PopulateFileSystemInfoWithFilter(data_container(), ¬ifier, filter); 103310bc00fd45824f9b5cd139d63af8b0f6d28aaddaDouglas Gregor PopulateQuotaInfoWithFilter(data_container(), ¬ifier, filter); 1034958bcaf3d4e0c1ae46de3e84e7c2a7638c3c5286Argyrios Kyrtzidis PopulateChannelIDInfoWithFilter(data_container(), ¬ifier, filter); 103510bc00fd45824f9b5cd139d63af8b0f6d28aaddaDouglas Gregor PopulateServiceWorkerUsageInfoWithFilter(data_container(), ¬ifier, filter); 103610bc00fd45824f9b5cd139d63af8b0f6d28aaddaDouglas Gregor} 103710bc00fd45824f9b5cd139d63af8b0f6d28aaddaDouglas Gregor 103810bc00fd45824f9b5cd139d63af8b0f6d28aaddaDouglas Gregor#if defined(ENABLE_EXTENSIONS) 103910bc00fd45824f9b5cd139d63af8b0f6d28aaddaDouglas Gregorconst extensions::ExtensionSet* CookiesTreeModel::ExtensionsProtectingNode( 1040e95b9198b8b70ce0219cfb89483b41102e02dbf5Douglas Gregor const CookieTreeNode& cookie_node) { 1041e95b9198b8b70ce0219cfb89483b41102e02dbf5Douglas Gregor if (!special_storage_policy_.get()) 10421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return NULL; 10431d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor 10441d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor CookieTreeNode::DetailedInfo info = cookie_node.GetDetailedInfo(); 10451d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor 10461d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor if (!TypeIsProtected(info.node_type)) 10471d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor return NULL; 10481d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor 10491d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor DCHECK(!info.origin.is_empty()); 10501d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor return special_storage_policy_->ExtensionsProtectingOrigin(info.origin); 10511d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor} 10521d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor#endif 10531d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor 10541d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregorvoid CookiesTreeModel::AddCookiesTreeObserver(Observer* observer) { 10551d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor cookies_observer_list_.AddObserver(observer); 10561d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor // Call super so that TreeNodeModel can notify, too. 10571d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor ui::TreeNodeModel<CookieTreeNode>::AddObserver(observer); 10581d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor} 1059ee097c1a3f5e02605dd585c0a9bf22976f09ccc2Douglas Gregor 1060ee097c1a3f5e02605dd585c0a9bf22976f09ccc2Douglas Gregorvoid CookiesTreeModel::RemoveCookiesTreeObserver(Observer* observer) { 10617ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor cookies_observer_list_.RemoveObserver(observer); 10627ae467f02b0f2ba3897ee03e0d011433789b5434Douglas Gregor // Call super so that TreeNodeModel doesn't have dead pointers. 1063ee097c1a3f5e02605dd585c0a9bf22976f09ccc2Douglas Gregor ui::TreeNodeModel<CookieTreeNode>::RemoveObserver(observer); 1064ee097c1a3f5e02605dd585c0a9bf22976f09ccc2Douglas Gregor} 1065ee097c1a3f5e02605dd585c0a9bf22976f09ccc2Douglas Gregor 1066ee097c1a3f5e02605dd585c0a9bf22976f09ccc2Douglas Gregorvoid CookiesTreeModel::PopulateAppCacheInfo(LocalDataContainer* container) { 1067ee097c1a3f5e02605dd585c0a9bf22976f09ccc2Douglas Gregor ScopedBatchUpdateNotifier notifier(this, GetRoot()); 1068ee097c1a3f5e02605dd585c0a9bf22976f09ccc2Douglas Gregor PopulateAppCacheInfoWithFilter(container, ¬ifier, base::string16()); 1069ee097c1a3f5e02605dd585c0a9bf22976f09ccc2Douglas Gregor} 1070ee097c1a3f5e02605dd585c0a9bf22976f09ccc2Douglas Gregor 1071ee097c1a3f5e02605dd585c0a9bf22976f09ccc2Douglas Gregorvoid CookiesTreeModel::PopulateCookieInfo(LocalDataContainer* container) { 1072ee097c1a3f5e02605dd585c0a9bf22976f09ccc2Douglas Gregor ScopedBatchUpdateNotifier notifier(this, GetRoot()); 1073ee097c1a3f5e02605dd585c0a9bf22976f09ccc2Douglas Gregor PopulateCookieInfoWithFilter(container, ¬ifier, base::string16()); 1074ee097c1a3f5e02605dd585c0a9bf22976f09ccc2Douglas Gregor} 1075ee097c1a3f5e02605dd585c0a9bf22976f09ccc2Douglas Gregor 1076ee097c1a3f5e02605dd585c0a9bf22976f09ccc2Douglas Gregorvoid CookiesTreeModel::PopulateDatabaseInfo(LocalDataContainer* container) { 1077ee097c1a3f5e02605dd585c0a9bf22976f09ccc2Douglas Gregor ScopedBatchUpdateNotifier notifier(this, GetRoot()); 10785f3d8224af99ad0d9107601c0c31b74693371cc1Douglas Gregor PopulateDatabaseInfoWithFilter(container, ¬ifier, base::string16()); 10795f3d8224af99ad0d9107601c0c31b74693371cc1Douglas Gregor} 10805f3d8224af99ad0d9107601c0c31b74693371cc1Douglas Gregor 10815f3d8224af99ad0d9107601c0c31b74693371cc1Douglas Gregorvoid CookiesTreeModel::PopulateLocalStorageInfo(LocalDataContainer* container) { 10825f3d8224af99ad0d9107601c0c31b74693371cc1Douglas Gregor ScopedBatchUpdateNotifier notifier(this, GetRoot()); 10835f3d8224af99ad0d9107601c0c31b74693371cc1Douglas Gregor PopulateLocalStorageInfoWithFilter(container, ¬ifier, base::string16()); 10845f3d8224af99ad0d9107601c0c31b74693371cc1Douglas Gregor} 10855f3d8224af99ad0d9107601c0c31b74693371cc1Douglas Gregor 10865f3d8224af99ad0d9107601c0c31b74693371cc1Douglas Gregorvoid CookiesTreeModel::PopulateSessionStorageInfo( 10875f3d8224af99ad0d9107601c0c31b74693371cc1Douglas Gregor LocalDataContainer* container) { 10885f3d8224af99ad0d9107601c0c31b74693371cc1Douglas Gregor ScopedBatchUpdateNotifier notifier(this, GetRoot()); 10895f3d8224af99ad0d9107601c0c31b74693371cc1Douglas Gregor PopulateSessionStorageInfoWithFilter(container, ¬ifier, base::string16()); 10905f3d8224af99ad0d9107601c0c31b74693371cc1Douglas Gregor} 10915f3d8224af99ad0d9107601c0c31b74693371cc1Douglas Gregor 10925f3d8224af99ad0d9107601c0c31b74693371cc1Douglas Gregorvoid CookiesTreeModel::PopulateIndexedDBInfo(LocalDataContainer* container) { 10931b2c3c0884e917ae5d59edde7d93b2af33c6a1b6Douglas Gregor ScopedBatchUpdateNotifier notifier(this, GetRoot()); 10941b2c3c0884e917ae5d59edde7d93b2af33c6a1b6Douglas Gregor PopulateIndexedDBInfoWithFilter(container, ¬ifier, base::string16()); 10951b2c3c0884e917ae5d59edde7d93b2af33c6a1b6Douglas Gregor} 10961b2c3c0884e917ae5d59edde7d93b2af33c6a1b6Douglas Gregor 10971b2c3c0884e917ae5d59edde7d93b2af33c6a1b6Douglas Gregorvoid CookiesTreeModel::PopulateFileSystemInfo(LocalDataContainer* container) { 10981b2c3c0884e917ae5d59edde7d93b2af33c6a1b6Douglas Gregor ScopedBatchUpdateNotifier notifier(this, GetRoot()); 10991b2c3c0884e917ae5d59edde7d93b2af33c6a1b6Douglas Gregor PopulateFileSystemInfoWithFilter(container, ¬ifier, base::string16()); 1100bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor} 1101bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor 1102bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregorvoid CookiesTreeModel::PopulateQuotaInfo(LocalDataContainer* container) { 1103bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor ScopedBatchUpdateNotifier notifier(this, GetRoot()); 1104bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor PopulateQuotaInfoWithFilter(container, ¬ifier, base::string16()); 1105bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor} 1106bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor 1107bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregorvoid CookiesTreeModel::PopulateChannelIDInfo( 1108bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor LocalDataContainer* container) { 1109bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor ScopedBatchUpdateNotifier notifier(this, GetRoot()); 1110bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor PopulateChannelIDInfoWithFilter(container, ¬ifier, base::string16()); 1111bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor} 1112bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor 1113bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregorvoid CookiesTreeModel::PopulateServiceWorkerUsageInfo( 1114bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor LocalDataContainer* container) { 1115bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor ScopedBatchUpdateNotifier notifier(this, GetRoot()); 1116bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor PopulateServiceWorkerUsageInfoWithFilter( 1117bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor container, ¬ifier, base::string16()); 1118bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor} 1119bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor 1120bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregorvoid CookiesTreeModel::PopulateFlashLSOInfo( 1121bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor LocalDataContainer* container) { 1122bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor ScopedBatchUpdateNotifier notifier(this, GetRoot()); 1123bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor PopulateFlashLSOInfoWithFilter(container, ¬ifier, base::string16()); 1124bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor} 1125bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor 1126bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregorvoid CookiesTreeModel::PopulateAppCacheInfoWithFilter( 1127bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor LocalDataContainer* container, 1128bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor ScopedBatchUpdateNotifier* notifier, 1129bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor const base::string16& filter) { 1130bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor using content::AppCacheInfo; 1131bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor typedef std::map<GURL, std::list<AppCacheInfo> > InfoByOrigin; 1132bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1133bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor 1134bbf38319edd4eddc55ec273934e990d7e84991deDouglas Gregor if (container->appcache_info_.empty()) 1135a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor return; 1136a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor 1137a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor notifier->StartBatchUpdate(); 1138a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor for (InfoByOrigin::iterator origin = container->appcache_info_.begin(); 1139a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor origin != container->appcache_info_.end(); ++origin) { 1140a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor base::string16 host_node_name = base::UTF8ToUTF16(origin->first.host()); 1141a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor if (filter.empty() || 1142a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor (host_node_name.find(filter) != base::string16::npos)) { 1143a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor CookieTreeHostNode* host_node = root->GetOrCreateHostNode(origin->first); 1144a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor CookieTreeAppCachesNode* appcaches_node = 1145a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor host_node->GetOrCreateAppCachesNode(); 1146a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor 1147a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor for (std::list<AppCacheInfo>::iterator info = origin->second.begin(); 1148a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor info != origin->second.end(); ++info) { 1149a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor appcaches_node->AddAppCacheNode( 1150a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor new CookieTreeAppCacheNode(origin->first, info)); 1151a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor } 1152a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor } 1153a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor } 1154a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor} 1155a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor 11564c0c7e86645dfa1719d17d70e009ab49347aba62Douglas Gregorvoid CookiesTreeModel::PopulateCookieInfoWithFilter( 1157a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor LocalDataContainer* container, 1158a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor ScopedBatchUpdateNotifier* notifier, 1159a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor const base::string16& filter) { 1160a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1161a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor 116231d375f056447d4e2418275d4913661d3bfedb3eDouglas Gregor notifier->StartBatchUpdate(); 1163b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor for (CookieList::iterator it = container->cookie_list_.begin(); 1164b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor it != container->cookie_list_.end(); ++it) { 1165b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor std::string source_string = it->Source(); 116639c497b6d5e99acecbe03ee173249ee21933e855Douglas Gregor if (source_string.empty() || !group_by_cookie_source_) { 116739c497b6d5e99acecbe03ee173249ee21933e855Douglas Gregor std::string domain = it->Domain(); 1168b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor if (domain.length() > 1 && domain[0] == '.') 1169b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor domain = domain.substr(1); 1170b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor 1171f7ccbad5d9949e7ddd1cbef43d482553b811e026Dylan Noblesmith // We treat secure cookies just the same as normal ones. 11721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump source_string = std::string(url::kHttpScheme) + 1173fbfd180495e7800975c6d9bdc6d24e706ef70e34Michael J. Spencer url::kStandardSchemeSeparator + domain + "/"; 1174b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor } 1175aba54a95e9d5e4dc9056abec6bb70ea777c4a7bcKovarththanan Rajaratnam 11761eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump GURL source(source_string); 1177e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor if (filter.empty() || (CookieTreeHostNode::TitleForUrl(source) 1178a71a7d8a1ce4474e7bdb680658fb58b6caf391d3Douglas Gregor .find(filter) != base::string16::npos)) { 117939c497b6d5e99acecbe03ee173249ee21933e855Douglas Gregor CookieTreeHostNode* host_node = root->GetOrCreateHostNode(source); 118039c497b6d5e99acecbe03ee173249ee21933e855Douglas Gregor CookieTreeCookiesNode* cookies_node = 1181ec312a1f0557b1d27f3eb6cf49acbf7e72696422Daniel Dunbar host_node->GetOrCreateCookiesNode(); 1182b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor CookieTreeCookieNode* new_cookie = new CookieTreeCookieNode(it); 118311a18f115e8974ef24e8d5bb549ed3289871efa4Kovarththanan Rajaratnam cookies_node->AddCookieNode(new_cookie); 1184992d91742129c1f77563df0b3d0a40b36fd13e3eArgyrios Kyrtzidis } 1185992d91742129c1f77563df0b3d0a40b36fd13e3eArgyrios Kyrtzidis } 1186992d91742129c1f77563df0b3d0a40b36fd13e3eArgyrios Kyrtzidis} 1187992d91742129c1f77563df0b3d0a40b36fd13e3eArgyrios Kyrtzidis 11888e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidisvoid CookiesTreeModel::PopulateDatabaseInfoWithFilter( 11898e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis LocalDataContainer* container, 11908e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis ScopedBatchUpdateNotifier* notifier, 11918e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis const base::string16& filter) { 11928e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 11938e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis 11948e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis if (container->database_info_list_.empty()) 1195f7ccbad5d9949e7ddd1cbef43d482553b811e026Dylan Noblesmith return; 11968e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis 11978e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis notifier->StartBatchUpdate(); 11988e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis for (DatabaseInfoList::iterator database_info = 11998e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis container->database_info_list_.begin(); 12008e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis database_info != container->database_info_list_.end(); 12018e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis ++database_info) { 12028e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis GURL origin(database_info->identifier.ToOrigin()); 12038e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis 12048e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis if (filter.empty() || (CookieTreeHostNode::TitleForUrl(origin) 1205745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor .find(filter) != base::string16::npos)) { 1206745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor CookieTreeHostNode* host_node = root->GetOrCreateHostNode(origin); 1207745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor CookieTreeDatabasesNode* databases_node = 1208745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor host_node->GetOrCreateDatabasesNode(); 1209745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor databases_node->AddDatabaseNode( 1210745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor new CookieTreeDatabaseNode(database_info)); 1211745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor } 1212745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor } 1213745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor} 1214745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor 1215745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregorvoid CookiesTreeModel::PopulateLocalStorageInfoWithFilter( 1216745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor LocalDataContainer* container, 1217a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor ScopedBatchUpdateNotifier* notifier, 1218745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor const base::string16& filter) { 1219745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1220a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor 1221745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor if (container->local_storage_info_list_.empty()) 1222745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor return; 1223745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor 1224745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor notifier->StartBatchUpdate(); 1225745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor for (LocalStorageInfoList::iterator local_storage_info = 1226745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor container->local_storage_info_list_.begin(); 1227745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor local_storage_info != container->local_storage_info_list_.end(); 1228745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor ++local_storage_info) { 1229bacc2c543c2236c5add893fabd8ecb798c1cdd76NAKAMURA Takumi const GURL& origin(local_storage_info->origin_url); 1230745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor 1231745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor if (filter.empty() || (CookieTreeHostNode::TitleForUrl(origin) 1232745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor .find(filter) != std::string::npos)) { 1233745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor CookieTreeHostNode* host_node = root->GetOrCreateHostNode(origin); 1234745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor CookieTreeLocalStoragesNode* local_storages_node = 1235a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor host_node->GetOrCreateLocalStoragesNode(); 1236745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor local_storages_node->AddLocalStorageNode( 1237745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor new CookieTreeLocalStorageNode(local_storage_info)); 1238a89b618a04409c93b3b3c56d606a97a317567436Argyrios Kyrtzidis } 1239a89b618a04409c93b3b3c56d606a97a317567436Argyrios Kyrtzidis } 1240a89b618a04409c93b3b3c56d606a97a317567436Argyrios Kyrtzidis} 1241a89b618a04409c93b3b3c56d606a97a317567436Argyrios Kyrtzidis 1242a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregorvoid CookiesTreeModel::PopulateSessionStorageInfoWithFilter( 1243a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor LocalDataContainer* container, 1244a89b618a04409c93b3b3c56d606a97a317567436Argyrios Kyrtzidis ScopedBatchUpdateNotifier* notifier, 1245a89b618a04409c93b3b3c56d606a97a317567436Argyrios Kyrtzidis const base::string16& filter) { 1246a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1247745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor 1248745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor if (container->session_storage_info_list_.empty()) 1249a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor return; 1250745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor 1251745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor notifier->StartBatchUpdate(); 1252745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor for (LocalStorageInfoList::iterator session_storage_info = 1253745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor container->session_storage_info_list_.begin(); 1254745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor session_storage_info != container->session_storage_info_list_.end(); 1255a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor ++session_storage_info) { 1256a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor const GURL& origin = session_storage_info->origin_url; 1257a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor 1258745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor if (filter.empty() || (CookieTreeHostNode::TitleForUrl(origin) 1259745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor .find(filter) != base::string16::npos)) { 1260745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor CookieTreeHostNode* host_node = root->GetOrCreateHostNode(origin); 1261745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor CookieTreeSessionStoragesNode* session_storages_node = 1262745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor host_node->GetOrCreateSessionStoragesNode(); 1263745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor session_storages_node->AddSessionStorageNode( 1264745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor new CookieTreeSessionStorageNode(session_storage_info)); 1265745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor } 1266745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor } 1267745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor} 1268745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor 1269745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregorvoid CookiesTreeModel::PopulateIndexedDBInfoWithFilter( 1270745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor LocalDataContainer* container, 1271745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor ScopedBatchUpdateNotifier* notifier, 1272745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor const base::string16& filter) { 1273745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1274745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor 1275745e6f168d0276c15fb72f3d90e3d93d60282b1bDouglas Gregor if (container->indexed_db_info_list_.empty()) 12761d9d9898ce2b338314161d92f39561a09a2a8b6fDouglas Gregor return; 1277a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor 1278a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor notifier->StartBatchUpdate(); 1279a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor for (IndexedDBInfoList::iterator indexed_db_info = 1280a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor container->indexed_db_info_list_.begin(); 1281a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor indexed_db_info != container->indexed_db_info_list_.end(); 1282a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor ++indexed_db_info) { 1283a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor const GURL& origin = indexed_db_info->origin_; 1284a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor 1285a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor if (filter.empty() || (CookieTreeHostNode::TitleForUrl(origin) 1286a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor .find(filter) != base::string16::npos)) { 1287a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor CookieTreeHostNode* host_node = root->GetOrCreateHostNode(origin); 1288a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor CookieTreeIndexedDBsNode* indexed_dbs_node = 1289a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor host_node->GetOrCreateIndexedDBsNode(); 12900a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor indexed_dbs_node->AddIndexedDBNode( 12910a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor new CookieTreeIndexedDBNode(indexed_db_info)); 129214f79002e58556798e86168c63e48d533287eda5Douglas Gregor } 12934fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor } 12944fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor} 12954fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 12964fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregorvoid CookiesTreeModel::PopulateChannelIDInfoWithFilter( 12974fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor LocalDataContainer* container, 12983397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl ScopedBatchUpdateNotifier* notifier, 12994fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor const base::string16& filter) { 13004fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 13014fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 13021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump if (container->channel_id_list_.empty()) 130374e976ba4b0d407bb798ea26476f618e256fc8c7Chris Lattner return; 130474e976ba4b0d407bb798ea26476f618e256fc8c7Chris Lattner 13054fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor notifier->StartBatchUpdate(); 13064fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor for (ChannelIDList::iterator channel_id_info = 13072596e429a61602312bdd149786045b8a90cd2d10Daniel Dunbar container->channel_id_list_.begin(); 13084fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor channel_id_info != container->channel_id_list_.end(); 13091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump ++channel_id_info) { 13101eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump GURL origin(channel_id_info->server_identifier()); 13115f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner if (!origin.is_valid()) { 13124fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor // Channel ID. Make a valid URL to satisfy the 13134fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor // CookieTreeRootNode::GetOrCreateHostNode interface. 13144fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor origin = GURL(std::string(url::kHttpsScheme) + 131574e976ba4b0d407bb798ea26476f618e256fc8c7Chris Lattner url::kStandardSchemeSeparator + 13164fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor channel_id_info->server_identifier() + "/"); 13174fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor } 13184fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor base::string16 title = CookieTreeHostNode::TitleForUrl(origin); 13191eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump if (filter.empty() || title.find(filter) != base::string16::npos) { 13205f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner CookieTreeHostNode* host_node = root->GetOrCreateHostNode(origin); 13214fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor CookieTreeChannelIDsNode* channel_ids_node = 13224fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor host_node->GetOrCreateChannelIDsNode(); 13231eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump channel_ids_node->AddChannelIDNode( 13245f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner new CookieTreeChannelIDNode(channel_id_info)); 13254fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor } 13264fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor } 13274fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor} 13281eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 132974e976ba4b0d407bb798ea26476f618e256fc8c7Chris Lattnervoid CookiesTreeModel::PopulateServiceWorkerUsageInfoWithFilter( 133074e976ba4b0d407bb798ea26476f618e256fc8c7Chris Lattner LocalDataContainer* container, 133174e976ba4b0d407bb798ea26476f618e256fc8c7Chris Lattner ScopedBatchUpdateNotifier* notifier, 133274e976ba4b0d407bb798ea26476f618e256fc8c7Chris Lattner const base::string16& filter) { 133374e976ba4b0d407bb798ea26476f618e256fc8c7Chris Lattner CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 13344fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 13354fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor if (container->service_worker_info_list_.empty()) 13364fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor return; 13374fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 13384fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor notifier->StartBatchUpdate(); 13394fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor for (ServiceWorkerUsageInfoList::iterator service_worker_info = 13404fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor container->service_worker_info_list_.begin(); 134114f79002e58556798e86168c63e48d533287eda5Douglas Gregor service_worker_info != container->service_worker_info_list_.end(); 134214f79002e58556798e86168c63e48d533287eda5Douglas Gregor ++service_worker_info) { 134314f79002e58556798e86168c63e48d533287eda5Douglas Gregor const GURL& origin = service_worker_info->origin; 134414f79002e58556798e86168c63e48d533287eda5Douglas Gregor 134514f79002e58556798e86168c63e48d533287eda5Douglas Gregor if (filter.empty() || (CookieTreeHostNode::TitleForUrl(origin) 1346c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor .find(filter) != base::string16::npos)) { 134714f79002e58556798e86168c63e48d533287eda5Douglas Gregor CookieTreeHostNode* host_node = root->GetOrCreateHostNode(origin); 134814f79002e58556798e86168c63e48d533287eda5Douglas Gregor CookieTreeServiceWorkersNode* service_workers_node = 13498538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl host_node->GetOrCreateServiceWorkersNode(); 135014f79002e58556798e86168c63e48d533287eda5Douglas Gregor service_workers_node->AddServiceWorkerNode( 135114f79002e58556798e86168c63e48d533287eda5Douglas Gregor new CookieTreeServiceWorkerNode(service_worker_info)); 135214f79002e58556798e86168c63e48d533287eda5Douglas Gregor } 135314f79002e58556798e86168c63e48d533287eda5Douglas Gregor } 13542d52be56ff595341be3c6cec337af6763804ce66Douglas Gregor} 1355a930dc9b46572cb6e5bb54f3d724e8fe23a6b66eDouglas Gregor 1356d9d2b679d0728ea7f539f38aaea38e26b8b08043Argyrios Kyrtzidisvoid CookiesTreeModel::PopulateFileSystemInfoWithFilter( 135710f3df54486385e6497c9e5f229ff816e5a6c511Argyrios Kyrtzidis LocalDataContainer* container, 135810f3df54486385e6497c9e5f229ff816e5a6c511Argyrios Kyrtzidis ScopedBatchUpdateNotifier* notifier, 1359c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor const base::string16& filter) { 136014f79002e58556798e86168c63e48d533287eda5Douglas Gregor CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 136114f79002e58556798e86168c63e48d533287eda5Douglas Gregor 136214f79002e58556798e86168c63e48d533287eda5Douglas Gregor if (container->file_system_info_list_.empty()) 136314f79002e58556798e86168c63e48d533287eda5Douglas Gregor return; 1364c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor 136514f79002e58556798e86168c63e48d533287eda5Douglas Gregor notifier->StartBatchUpdate(); 136614f79002e58556798e86168c63e48d533287eda5Douglas Gregor for (FileSystemInfoList::iterator file_system_info = 13678538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl container->file_system_info_list_.begin(); 136814f79002e58556798e86168c63e48d533287eda5Douglas Gregor file_system_info != container->file_system_info_list_.end(); 136914f79002e58556798e86168c63e48d533287eda5Douglas Gregor ++file_system_info) { 137014f79002e58556798e86168c63e48d533287eda5Douglas Gregor GURL origin(file_system_info->origin); 137114f79002e58556798e86168c63e48d533287eda5Douglas Gregor 137214f79002e58556798e86168c63e48d533287eda5Douglas Gregor if (filter.empty() || (CookieTreeHostNode::TitleForUrl(origin) 1373c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor .find(filter) != base::string16::npos)) { 137414f79002e58556798e86168c63e48d533287eda5Douglas Gregor CookieTreeHostNode* host_node = root->GetOrCreateHostNode(origin); 137514f79002e58556798e86168c63e48d533287eda5Douglas Gregor CookieTreeFileSystemsNode* file_systems_node = 137614f79002e58556798e86168c63e48d533287eda5Douglas Gregor host_node->GetOrCreateFileSystemsNode(); 137714f79002e58556798e86168c63e48d533287eda5Douglas Gregor file_systems_node->AddFileSystemNode( 1378c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor new CookieTreeFileSystemNode(file_system_info)); 137914f79002e58556798e86168c63e48d533287eda5Douglas Gregor } 138014f79002e58556798e86168c63e48d533287eda5Douglas Gregor } 13818538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl} 138214f79002e58556798e86168c63e48d533287eda5Douglas Gregor 1383c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregorvoid CookiesTreeModel::PopulateQuotaInfoWithFilter( 138414f79002e58556798e86168c63e48d533287eda5Douglas Gregor LocalDataContainer* container, 138514f79002e58556798e86168c63e48d533287eda5Douglas Gregor ScopedBatchUpdateNotifier* notifier, 1386f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler Carruth const base::string16& filter) { 1387f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler Carruth CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1388f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler Carruth 138914f79002e58556798e86168c63e48d533287eda5Douglas Gregor if (container->quota_info_list_.empty()) 139014f79002e58556798e86168c63e48d533287eda5Douglas Gregor return; 1391f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler Carruth 139214f79002e58556798e86168c63e48d533287eda5Douglas Gregor notifier->StartBatchUpdate(); 139314f79002e58556798e86168c63e48d533287eda5Douglas Gregor for (QuotaInfoList::iterator quota_info = container->quota_info_list_.begin(); 139414f79002e58556798e86168c63e48d533287eda5Douglas Gregor quota_info != container->quota_info_list_.end(); 139514f79002e58556798e86168c63e48d533287eda5Douglas Gregor ++quota_info) { 1396f60e9918690fcf02974bc1ebecd42c99d561855eDouglas Gregor if (filter.empty() || (base::UTF8ToUTF16(quota_info->host).find(filter) != 1397c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor base::string16::npos)) { 139814f79002e58556798e86168c63e48d533287eda5Douglas Gregor CookieTreeHostNode* host_node = 139914f79002e58556798e86168c63e48d533287eda5Douglas Gregor root->GetOrCreateHostNode(GURL("http://" + quota_info->host)); 1400cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor host_node->UpdateOrCreateQuotaNode(quota_info); 1401cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor } 1402cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor } 1403cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor} 1404cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1405b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregorvoid CookiesTreeModel::PopulateFlashLSOInfoWithFilter( 1406b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor LocalDataContainer* container, 1407b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor ScopedBatchUpdateNotifier* notifier, 1408b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor const base::string16& filter) { 1409cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot()); 1410facde171ae4b8926622a1bffa833732a06f1875bBenjamin Kramer 1411facde171ae4b8926622a1bffa833732a06f1875bBenjamin Kramer if (container->flash_lso_domain_list_.empty()) 1412cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor return; 1413cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1414cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor std::string filter_utf8 = base::UTF16ToUTF8(filter); 1415cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor notifier->StartBatchUpdate(); 1416cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor for (std::vector<std::string>::iterator it = 1417cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor container->flash_lso_domain_list_.begin(); 1418cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor it != container->flash_lso_domain_list_.end(); ++it) { 1419cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor if (filter_utf8.empty() || it->find(filter_utf8) != std::string::npos) { 1420cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor // Create a fake origin for GetOrCreateHostNode(). 1421cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor GURL origin("http://" + *it); 1422cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor CookieTreeHostNode* host_node = root->GetOrCreateHostNode(origin); 1423cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor host_node->GetOrCreateFlashLSONode(*it); 1424cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor } 1425cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor } 1426cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor} 1427cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 14285f9e272e632e951b1efe824cd16acb4d96077930Chris Lattnervoid CookiesTreeModel::NotifyObserverBeginBatch() { 1429cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor // Only notify the model once if we're batching in a nested manner. 1430cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor if (batch_update_++ == 0) { 1431cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor FOR_EACH_OBSERVER(Observer, 1432b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor cookies_observer_list_, 1433cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor TreeModelBeginBatch(this)); 1434cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor } 1435cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor} 1436cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 14375f9e272e632e951b1efe824cd16acb4d96077930Chris Lattnervoid CookiesTreeModel::NotifyObserverEndBatch() { 1438cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor // Only notify the observers if this is the outermost call to EndBatch() if 1439cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor // called in a nested manner. 1440cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor if (--batch_update_ == 0) { 14415f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner FOR_EACH_OBSERVER(Observer, 1442cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor cookies_observer_list_, 1443cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor TreeModelEndBatch(this)); 1444cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor } 1445cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor} 1446b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor