| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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/bookmarks/bookmark_codec.h" | 5 #include "chrome/browser/bookmarks/bookmark_codec.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "app/l10n_util.h" | 9 #include "app/l10n_util.h" |
| 10 #include "base/string_number_conversions.h" |
| 10 #include "base/string_util.h" | 11 #include "base/string_util.h" |
| 11 #include "base/values.h" | 12 #include "base/values.h" |
| 12 #include "chrome/browser/bookmarks/bookmark_model.h" | 13 #include "chrome/browser/bookmarks/bookmark_model.h" |
| 13 #include "googleurl/src/gurl.h" | 14 #include "googleurl/src/gurl.h" |
| 14 #include "grit/generated_resources.h" | 15 #include "grit/generated_resources.h" |
| 15 | 16 |
| 16 using base::Time; | 17 using base::Time; |
| 17 | 18 |
| 18 const wchar_t* BookmarkCodec::kRootsKey = L"roots"; | 19 const wchar_t* BookmarkCodec::kRootsKey = L"roots"; |
| 19 const wchar_t* BookmarkCodec::kRootFolderNameKey = L"bookmark_bar"; | 20 const wchar_t* BookmarkCodec::kRootFolderNameKey = L"bookmark_bar"; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 // If either the checksums differ or some IDs were missing/not unique, | 78 // If either the checksums differ or some IDs were missing/not unique, |
| 78 // reassign IDs. | 79 // reassign IDs. |
| 79 if (!ids_valid_ || computed_checksum() != stored_checksum()) | 80 if (!ids_valid_ || computed_checksum() != stored_checksum()) |
| 80 ReassignIDs(bb_node, other_folder_node); | 81 ReassignIDs(bb_node, other_folder_node); |
| 81 *max_id = maximum_id_ + 1; | 82 *max_id = maximum_id_ + 1; |
| 82 return success; | 83 return success; |
| 83 } | 84 } |
| 84 | 85 |
| 85 Value* BookmarkCodec::EncodeNode(const BookmarkNode* node) { | 86 Value* BookmarkCodec::EncodeNode(const BookmarkNode* node) { |
| 86 DictionaryValue* value = new DictionaryValue(); | 87 DictionaryValue* value = new DictionaryValue(); |
| 87 std::string id = Int64ToString(node->id()); | 88 std::string id = base::Int64ToString(node->id()); |
| 88 value->SetString(kIdKey, id); | 89 value->SetString(kIdKey, id); |
| 89 const string16& title = node->GetTitleAsString16(); | 90 const string16& title = node->GetTitleAsString16(); |
| 90 value->SetStringFromUTF16(kNameKey, title); | 91 value->SetStringFromUTF16(kNameKey, title); |
| 91 value->SetString(kDateAddedKey, | 92 value->SetString(kDateAddedKey, |
| 92 Int64ToString(node->date_added().ToInternalValue())); | 93 base::Int64ToString(node->date_added().ToInternalValue())); |
| 93 if (node->type() == BookmarkNode::URL) { | 94 if (node->type() == BookmarkNode::URL) { |
| 94 value->SetString(kTypeKey, kTypeURL); | 95 value->SetString(kTypeKey, kTypeURL); |
| 95 std::string url = node->GetURL().possibly_invalid_spec(); | 96 std::string url = node->GetURL().possibly_invalid_spec(); |
| 96 value->SetString(kURLKey, url); | 97 value->SetString(kURLKey, url); |
| 97 UpdateChecksumWithUrlNode(id, title, url); | 98 UpdateChecksumWithUrlNode(id, title, url); |
| 98 } else { | 99 } else { |
| 99 value->SetString(kTypeKey, kTypeFolder); | 100 value->SetString(kTypeKey, kTypeFolder); |
| 100 value->SetString(kDateModifiedKey, | 101 value->SetString(kDateModifiedKey, |
| 101 Int64ToString(node->date_group_modified(). | 102 base::Int64ToString(node->date_group_modified(). |
| 102 ToInternalValue())); | 103 ToInternalValue())); |
| 103 UpdateChecksumWithFolderNode(id, title); | 104 UpdateChecksumWithFolderNode(id, title); |
| 104 | 105 |
| 105 ListValue* child_values = new ListValue(); | 106 ListValue* child_values = new ListValue(); |
| 106 value->Set(kChildrenKey, child_values); | 107 value->Set(kChildrenKey, child_values); |
| 107 for (int i = 0; i < node->GetChildCount(); ++i) | 108 for (int i = 0; i < node->GetChildCount(); ++i) |
| 108 child_values->Append(EncodeNode(node->GetChild(i))); | 109 child_values->Append(EncodeNode(node->GetChild(i))); |
| 109 } | 110 } |
| 110 return value; | 111 return value; |
| 111 } | 112 } |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 } | 201 } |
| 201 } | 202 } |
| 202 | 203 |
| 203 maximum_id_ = std::max(maximum_id_, id); | 204 maximum_id_ = std::max(maximum_id_, id); |
| 204 | 205 |
| 205 string16 title; | 206 string16 title; |
| 206 value.GetStringAsUTF16(kNameKey, &title); | 207 value.GetStringAsUTF16(kNameKey, &title); |
| 207 | 208 |
| 208 std::string date_added_string; | 209 std::string date_added_string; |
| 209 if (!value.GetString(kDateAddedKey, &date_added_string)) | 210 if (!value.GetString(kDateAddedKey, &date_added_string)) |
| 210 date_added_string = Int64ToString(Time::Now().ToInternalValue()); | 211 date_added_string = base::Int64ToString(Time::Now().ToInternalValue()); |
| 211 base::Time date_added = base::Time::FromInternalValue( | 212 base::Time date_added = base::Time::FromInternalValue( |
| 212 StringToInt64(date_added_string)); | 213 StringToInt64(date_added_string)); |
| 213 #if !defined(OS_WIN) | 214 #if !defined(OS_WIN) |
| 214 // We changed the epoch for dates on Mac & Linux from 1970 to the Windows | 215 // We changed the epoch for dates on Mac & Linux from 1970 to the Windows |
| 215 // one of 1601. We assume any number we encounter from before 1970 is using | 216 // one of 1601. We assume any number we encounter from before 1970 is using |
| 216 // the old format, so we need to add the delta to it. | 217 // the old format, so we need to add the delta to it. |
| 217 // | 218 // |
| 218 // This code should be removed at some point: | 219 // This code should be removed at some point: |
| 219 // http://code.google.com/p/chromium/issues/detail?id=20264 | 220 // http://code.google.com/p/chromium/issues/detail?id=20264 |
| 220 if (date_added.ToInternalValue() < | 221 if (date_added.ToInternalValue() < |
| (...skipping 21 matching lines...) Expand all Loading... |
| 242 else | 243 else |
| 243 return false; // Node invalid. | 244 return false; // Node invalid. |
| 244 | 245 |
| 245 if (parent) | 246 if (parent) |
| 246 parent->Add(parent->GetChildCount(), node); | 247 parent->Add(parent->GetChildCount(), node); |
| 247 node->set_type(BookmarkNode::URL); | 248 node->set_type(BookmarkNode::URL); |
| 248 UpdateChecksumWithUrlNode(id_string, title, url_string); | 249 UpdateChecksumWithUrlNode(id_string, title, url_string); |
| 249 } else { | 250 } else { |
| 250 std::string last_modified_date; | 251 std::string last_modified_date; |
| 251 if (!value.GetString(kDateModifiedKey, &last_modified_date)) | 252 if (!value.GetString(kDateModifiedKey, &last_modified_date)) |
| 252 last_modified_date = Int64ToString(Time::Now().ToInternalValue()); | 253 last_modified_date = base::Int64ToString(Time::Now().ToInternalValue()); |
| 253 | 254 |
| 254 Value* child_values; | 255 Value* child_values; |
| 255 if (!value.Get(kChildrenKey, &child_values)) | 256 if (!value.Get(kChildrenKey, &child_values)) |
| 256 return false; | 257 return false; |
| 257 | 258 |
| 258 if (child_values->GetType() != Value::TYPE_LIST) | 259 if (child_values->GetType() != Value::TYPE_LIST) |
| 259 return false; | 260 return false; |
| 260 | 261 |
| 261 if (!node) { | 262 if (!node) { |
| 262 node = new BookmarkNode(id, GURL()); | 263 node = new BookmarkNode(id, GURL()); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 | 326 |
| 326 void BookmarkCodec::InitializeChecksum() { | 327 void BookmarkCodec::InitializeChecksum() { |
| 327 MD5Init(&md5_context_); | 328 MD5Init(&md5_context_); |
| 328 } | 329 } |
| 329 | 330 |
| 330 void BookmarkCodec::FinalizeChecksum() { | 331 void BookmarkCodec::FinalizeChecksum() { |
| 331 MD5Digest digest; | 332 MD5Digest digest; |
| 332 MD5Final(&digest, &md5_context_); | 333 MD5Final(&digest, &md5_context_); |
| 333 computed_checksum_ = MD5DigestToBase16(digest); | 334 computed_checksum_ = MD5DigestToBase16(digest); |
| 334 } | 335 } |
| OLD | NEW |