| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/webui/cookies_tree_model_util.h" | 5 #include "chrome/browser/ui/webui/cookies_tree_model_util.h" |
| 6 | 6 |
| 7 #include "base/i18n/time_formatting.h" | 7 #include "base/i18n/time_formatting.h" |
| 8 #include "base/string_number_conversions.h" | 8 #include "base/string_number_conversions.h" |
| 9 #include "base/string_split.h" | 9 #include "base/string_split.h" |
| 10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 static const char kKeyManifest[] = "manifest"; | 34 static const char kKeyManifest[] = "manifest"; |
| 35 | 35 |
| 36 static const char kKeyAccessed[] = "accessed"; | 36 static const char kKeyAccessed[] = "accessed"; |
| 37 static const char kKeyCreated[] = "created"; | 37 static const char kKeyCreated[] = "created"; |
| 38 static const char kKeyExpires[] = "expires"; | 38 static const char kKeyExpires[] = "expires"; |
| 39 static const char kKeyModified[] = "modified"; | 39 static const char kKeyModified[] = "modified"; |
| 40 | 40 |
| 41 static const char kKeyPersistent[] = "persistent"; | 41 static const char kKeyPersistent[] = "persistent"; |
| 42 static const char kKeyTemporary[] = "temporary"; | 42 static const char kKeyTemporary[] = "temporary"; |
| 43 | 43 |
| 44 static const char kKeyTotalUsage[] = "totalUsage"; | |
| 45 static const char kKeyTemporaryUsage[] = "temporaryUsage"; | |
| 46 static const char kKeyPersistentUsage[] = "persistentUsage"; | |
| 47 static const char kKeyPersistentQuota[] = "persistentQuota"; | |
| 48 | |
| 49 static const int64 kNegligibleUsage = 1024; // 1KiB | |
| 50 | |
| 51 // Encodes a pointer value into a hex string. | 44 // Encodes a pointer value into a hex string. |
| 52 std::string PointerToHexString(const void* pointer) { | 45 std::string PointerToHexString(const void* pointer) { |
| 53 return base::HexEncode(&pointer, sizeof(pointer)); | 46 return base::HexEncode(&pointer, sizeof(pointer)); |
| 54 } | 47 } |
| 55 | 48 |
| 56 // Decodes a pointer from a hex string. | 49 // Decodes a pointer from a hex string. |
| 57 void* HexStringToPointer(const std::string& str) { | 50 void* HexStringToPointer(const std::string& str) { |
| 58 std::vector<uint8> buffer; | 51 std::vector<uint8> buffer; |
| 59 if (!base::HexStringToBytes(str, &buffer) || | 52 if (!base::HexStringToBytes(str, &buffer) || |
| 60 buffer.size() != sizeof(void*)) { | 53 buffer.size() != sizeof(void*)) { |
| 61 return NULL; | 54 return NULL; |
| 62 } | 55 } |
| 63 | 56 |
| 64 return *reinterpret_cast<void**>(&buffer[0]); | 57 return *reinterpret_cast<void**>(&buffer[0]); |
| 65 } | 58 } |
| 66 | 59 |
| 67 } // namespace | 60 } // namespace |
| 68 | 61 |
| 69 namespace cookies_tree_model_util { | 62 namespace cookies_tree_model_util { |
| 70 | 63 |
| 71 std::string GetTreeNodeId(CookieTreeNode* node) { | 64 std::string GetTreeNodeId(CookieTreeNode* node) { |
| 72 return PointerToHexString(node); | 65 return PointerToHexString(node); |
| 73 } | 66 } |
| 74 | 67 |
| 75 bool GetCookieTreeNodeDictionary(const CookieTreeNode& node, | 68 void GetCookieTreeNodeDictionary(const CookieTreeNode& node, |
| 76 DictionaryValue* dict) { | 69 DictionaryValue* dict) { |
| 77 // Use node's address as an id for WebUI to look it up. | 70 // Use node's address as an id for WebUI to look it up. |
| 78 dict->SetString(kKeyId, PointerToHexString(&node)); | 71 dict->SetString(kKeyId, PointerToHexString(&node)); |
| 79 dict->SetString(kKeyTitle, node.GetTitle()); | 72 dict->SetString(kKeyTitle, node.GetTitle()); |
| 80 dict->SetBoolean(kKeyHasChildren, !node.empty()); | 73 dict->SetBoolean(kKeyHasChildren, !node.empty()); |
| 81 | 74 |
| 82 switch (node.GetDetailedInfo().node_type) { | 75 switch (node.GetDetailedInfo().node_type) { |
| 83 case CookieTreeNode::DetailedInfo::TYPE_ORIGIN: { | 76 case CookieTreeNode::DetailedInfo::TYPE_ORIGIN: { |
| 84 dict->SetString(kKeyType, "origin"); | 77 dict->SetString(kKeyType, "origin"); |
| 85 #if defined(OS_MACOSX) | 78 #if defined(OS_MACOSX) |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 l10n_util::GetStringUTF8( | 183 l10n_util::GetStringUTF8( |
| 191 IDS_COOKIES_FILE_SYSTEM_USAGE_NONE)); | 184 IDS_COOKIES_FILE_SYSTEM_USAGE_NONE)); |
| 192 dict->SetString(kKeyTemporary, | 185 dict->SetString(kKeyTemporary, |
| 193 file_system_info.has_temporary ? | 186 file_system_info.has_temporary ? |
| 194 UTF16ToUTF8(ui::FormatBytes( | 187 UTF16ToUTF8(ui::FormatBytes( |
| 195 file_system_info.usage_temporary)) : | 188 file_system_info.usage_temporary)) : |
| 196 l10n_util::GetStringUTF8( | 189 l10n_util::GetStringUTF8( |
| 197 IDS_COOKIES_FILE_SYSTEM_USAGE_NONE)); | 190 IDS_COOKIES_FILE_SYSTEM_USAGE_NONE)); |
| 198 break; | 191 break; |
| 199 } | 192 } |
| 200 case CookieTreeNode::DetailedInfo::TYPE_QUOTA: { | |
| 201 dict->SetString(kKeyType, "quota"); | |
| 202 dict->SetString(kKeyIcon, "chrome://theme/IDR_COOKIE_STORAGE_ICON"); | |
| 203 | |
| 204 const BrowsingDataQuotaHelper::QuotaInfo& quota_info = | |
| 205 *node.GetDetailedInfo().quota_info; | |
| 206 if (quota_info.temporary_usage + quota_info.persistent_usage <= | |
| 207 kNegligibleUsage) | |
| 208 return false; | |
| 209 | |
| 210 dict->SetString(kKeyOrigin, quota_info.host); | |
| 211 dict->SetString(kKeyTotalUsage, | |
| 212 UTF16ToUTF8(ui::FormatBytes( | |
| 213 quota_info.temporary_usage + | |
| 214 quota_info.persistent_usage))); | |
| 215 dict->SetString(kKeyTemporaryUsage, | |
| 216 UTF16ToUTF8(ui::FormatBytes( | |
| 217 quota_info.temporary_usage))); | |
| 218 dict->SetString(kKeyPersistentUsage, | |
| 219 UTF16ToUTF8(ui::FormatBytes( | |
| 220 quota_info.persistent_usage))); | |
| 221 break; | |
| 222 } | |
| 223 default: | 193 default: |
| 224 #if defined(OS_MACOSX) | 194 #if defined(OS_MACOSX) |
| 225 dict->SetString(kKeyIcon, "chrome://theme/IDR_BOOKMARK_BAR_FOLDER"); | 195 dict->SetString(kKeyIcon, "chrome://theme/IDR_BOOKMARK_BAR_FOLDER"); |
| 226 #endif | 196 #endif |
| 227 break; | 197 break; |
| 228 } | 198 } |
| 229 return true; | |
| 230 } | 199 } |
| 231 | 200 |
| 232 void GetChildNodeList(CookieTreeNode* parent, int start, int count, | 201 void GetChildNodeList(CookieTreeNode* parent, int start, int count, |
| 233 ListValue* nodes) { | 202 ListValue* nodes) { |
| 234 for (int i = 0; i < count; ++i) { | 203 for (int i = 0; i < count; ++i) { |
| 235 DictionaryValue* dict = new DictionaryValue; | 204 DictionaryValue* dict = new DictionaryValue; |
| 236 CookieTreeNode* child = parent->GetChild(start + i); | 205 CookieTreeNode* child = parent->GetChild(start + i); |
| 237 if (GetCookieTreeNodeDictionary(*child, dict)) | 206 GetCookieTreeNodeDictionary(*child, dict); |
| 238 nodes->Append(dict); | 207 nodes->Append(dict); |
| 239 else | |
| 240 delete dict; | |
| 241 } | 208 } |
| 242 } | 209 } |
| 243 | 210 |
| 244 CookieTreeNode* GetTreeNodeFromPath(CookieTreeNode* root, | 211 CookieTreeNode* GetTreeNodeFromPath(CookieTreeNode* root, |
| 245 const std::string& path) { | 212 const std::string& path) { |
| 246 std::vector<std::string> node_ids; | 213 std::vector<std::string> node_ids; |
| 247 base::SplitString(path, ',', &node_ids); | 214 base::SplitString(path, ',', &node_ids); |
| 248 | 215 |
| 249 CookieTreeNode* child = NULL; | 216 CookieTreeNode* child = NULL; |
| 250 CookieTreeNode* parent = root; | 217 CookieTreeNode* parent = root; |
| 251 int child_index = -1; | 218 int child_index = -1; |
| 252 | 219 |
| 253 // Validate the tree path and get the node pointer. | 220 // Validate the tree path and get the node pointer. |
| 254 for (size_t i = 0; i < node_ids.size(); ++i) { | 221 for (size_t i = 0; i < node_ids.size(); ++i) { |
| 255 child = reinterpret_cast<CookieTreeNode*>( | 222 child = reinterpret_cast<CookieTreeNode*>( |
| 256 HexStringToPointer(node_ids[i])); | 223 HexStringToPointer(node_ids[i])); |
| 257 | 224 |
| 258 child_index = parent->GetIndexOf(child); | 225 child_index = parent->GetIndexOf(child); |
| 259 if (child_index == -1) | 226 if (child_index == -1) |
| 260 break; | 227 break; |
| 261 | 228 |
| 262 parent = child; | 229 parent = child; |
| 263 } | 230 } |
| 264 | 231 |
| 265 return child_index >= 0 ? child : NULL; | 232 return child_index >= 0 ? child : NULL; |
| 266 } | 233 } |
| 267 | 234 |
| 268 } // namespace cookies_tree_model_util | 235 } // namespace cookies_tree_model_util |
| OLD | NEW |