| Index: chrome/browser/cookies_tree_model.cc
|
| ===================================================================
|
| --- chrome/browser/cookies_tree_model.cc (revision 36552)
|
| +++ chrome/browser/cookies_tree_model.cc (working copy)
|
| @@ -14,6 +14,7 @@
|
| #include "app/tree_node_model.h"
|
| #include "base/linked_ptr.h"
|
| #include "base/string_util.h"
|
| +#include "chrome/browser/in_process_webkit/webkit_context.h"
|
| #include "chrome/browser/net/chrome_url_request_context.h"
|
| #include "chrome/browser/profile.h"
|
| #include "grit/app_resources.h"
|
| @@ -114,6 +115,22 @@
|
| } // namespace
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| +// CookieTreeLocalStorageNode, public:
|
| +
|
| +CookieTreeLocalStorageNode::CookieTreeLocalStorageNode(
|
| + BrowsingDataLocalStorageHelper::LocalStorageInfo* local_storage_info)
|
| + : CookieTreeNode(UTF8ToWide(
|
| + !local_storage_info->origin.empty() ?
|
| + local_storage_info->origin :
|
| + local_storage_info->database_identifier)),
|
| + local_storage_info_(local_storage_info) {
|
| +}
|
| +
|
| +void CookieTreeLocalStorageNode::DeleteStoredObjects() {
|
| + GetModel()->DeleteLocalStorage(local_storage_info_->file_path);
|
| +}
|
| +
|
| +///////////////////////////////////////////////////////////////////////////////
|
| // CookieTreeRootNode, public:
|
| CookieTreeOriginNode* CookieTreeRootNode::GetOrCreateOriginNode(
|
| const std::wstring& origin) {
|
| @@ -155,6 +172,17 @@
|
| return retval;
|
| }
|
|
|
| +CookieTreeLocalStoragesNode*
|
| + CookieTreeOriginNode::GetOrCreateLocalStoragesNode() {
|
| + if (local_storages_child_)
|
| + return local_storages_child_;
|
| + // need to make a LocalStorages node, add it to the tree, and return it
|
| + CookieTreeLocalStoragesNode* retval = new CookieTreeLocalStoragesNode;
|
| + GetModel()->Add(this, cookies_child_ ? 1 : 0, retval);
|
| + local_storages_child_ = retval;
|
| + return retval;
|
| +}
|
| +
|
| ///////////////////////////////////////////////////////////////////////////////
|
| // CookieTreeCookiesNode, public:
|
|
|
| @@ -173,17 +201,50 @@
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| +// CookieTreeLocalStoragesNode, public:
|
| +
|
| +CookieTreeLocalStoragesNode::CookieTreeLocalStoragesNode()
|
| + : CookieTreeNode(l10n_util::GetString(IDS_COOKIES_LOCAL_STORAGE)) {
|
| +}
|
| +
|
| +void CookieTreeLocalStoragesNode::AddLocalStorageNode(
|
| + CookieTreeLocalStorageNode* new_child) {
|
| + std::vector<CookieTreeNode*>::iterator local_storage_iterator =
|
| + lower_bound(children().begin(),
|
| + children().end(),
|
| + new_child,
|
| + CookieTreeLocalStorageNode::CookieNodeComparator());
|
| + GetModel()->Add(this,
|
| + (local_storage_iterator - children().begin()),
|
| + new_child);
|
| +}
|
| +
|
| +///////////////////////////////////////////////////////////////////////////////
|
| // CookieTreeCookieNode, private
|
|
|
| bool CookieTreeCookieNode::CookieNodeComparator::operator() (
|
| const CookieTreeNode* lhs, const CookieTreeNode* rhs) {
|
| - return (static_cast<const CookieTreeCookieNode*>(lhs)->
|
| - cookie_->second.Name() <
|
| - static_cast<const CookieTreeCookieNode*>(rhs)->
|
| - cookie_->second.Name());
|
| + const CookieTreeCookieNode* left =
|
| + static_cast<const CookieTreeCookieNode*>(lhs);
|
| + const CookieTreeCookieNode* right =
|
| + static_cast<const CookieTreeCookieNode*>(rhs);
|
| + return (left->cookie_->second.Name() < right->cookie_->second.Name());
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| +// CookieTreeLocalStorageNode, private
|
| +
|
| +bool CookieTreeLocalStorageNode::CookieNodeComparator::operator() (
|
| + const CookieTreeNode* lhs, const CookieTreeNode* rhs) {
|
| + const CookieTreeLocalStorageNode* left =
|
| + static_cast<const CookieTreeLocalStorageNode*>(lhs);
|
| + const CookieTreeLocalStorageNode* right =
|
| + static_cast<const CookieTreeLocalStorageNode*>(rhs);
|
| + return (left->local_storage_info_->origin <
|
| + right->local_storage_info_->origin);
|
| +}
|
| +
|
| +///////////////////////////////////////////////////////////////////////////////
|
| // CookiesTreeModel, public:
|
|
|
| CookiesTreeModel::CookiesTreeModel(Profile* profile)
|
| @@ -191,8 +252,15 @@
|
| new CookieTreeRootNode(this))),
|
| profile_(profile) {
|
| LoadCookies();
|
| + local_storage_model_ = new BrowsingDataLocalStorageHelper(profile_);
|
| + local_storage_model_->StartFetching(NewCallback(
|
| + this, &CookiesTreeModel::OnStorageModelInfoLoaded));
|
| }
|
|
|
| +CookiesTreeModel::~CookiesTreeModel() {
|
| + local_storage_model_->CancelNotification();
|
| +}
|
| +
|
| ///////////////////////////////////////////////////////////////////////////////
|
| // CookiesTreeModel, TreeModel methods (public):
|
|
|
| @@ -218,6 +286,8 @@
|
| case CookieTreeNode::DetailedInfo::TYPE_COOKIE:
|
| return COOKIE;
|
| break;
|
| + case CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE:
|
| + // TODO(bulach): add an icon for local storage.
|
| default:
|
| return -1;
|
| }
|
| @@ -283,11 +353,50 @@
|
| delete Remove(parent_node, cookie_node_index);
|
| }
|
|
|
| +void CookiesTreeModel::DeleteLocalStorage(const FilePath& file_path) {
|
| + local_storage_model_->DeleteLocalStorageFile(file_path);
|
| +}
|
| +
|
| +void CookiesTreeModel::DeleteAllLocalStorage() {
|
| + local_storage_model_->DeleteAllLocalStorageFiles();
|
| +}
|
| +
|
| void CookiesTreeModel::UpdateSearchResults(const std::wstring& filter) {
|
| CookieTreeNode* root = GetRoot();
|
| int num_children = root->GetChildCount();
|
| for (int i = num_children - 1; i >= 0; --i)
|
| delete Remove(root, i);
|
| LoadCookiesWithFilter(filter);
|
| + PopulateLocalStorageInfoWithFilter(filter);
|
| NotifyObserverTreeNodeChanged(root);
|
| }
|
| +
|
| +void CookiesTreeModel::OnStorageModelInfoLoaded(
|
| + const LocalStorageInfoList& local_storage_info) {
|
| + local_storage_info_list_ = local_storage_info;
|
| + PopulateLocalStorageInfoWithFilter(L"");
|
| +}
|
| +
|
| +void CookiesTreeModel::PopulateLocalStorageInfoWithFilter(
|
| + const std::wstring& filter) {
|
| + CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(GetRoot());
|
| + for (LocalStorageInfoList::iterator local_storage_info =
|
| + local_storage_info_list_.begin();
|
| + local_storage_info != local_storage_info_list_.end();
|
| + ++local_storage_info) {
|
| + std::string origin =
|
| + !local_storage_info->host.empty() ?
|
| + local_storage_info->host :
|
| + local_storage_info->database_identifier;
|
| + if (!filter.size() ||
|
| + (UTF8ToWide(origin).find(filter) != std::wstring::npos)) {
|
| + CookieTreeOriginNode* origin_node = root->GetOrCreateOriginNode(
|
| + UTF8ToWide(local_storage_info->host));
|
| + CookieTreeLocalStoragesNode* local_storages_node =
|
| + origin_node->GetOrCreateLocalStoragesNode();
|
| + local_storages_node->AddLocalStorageNode(
|
| + new CookieTreeLocalStorageNode(&(*local_storage_info)));
|
| + }
|
| + }
|
| + NotifyObserverTreeNodeChanged(root);
|
| +}
|
|
|