| 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/bookmarks/bookmark_html_writer.h" | 5 #include "chrome/browser/bookmarks/bookmark_html_writer.h" |
| 6 | 6 |
| 7 #include "base/base64.h" | 7 #include "base/base64.h" |
| 8 #include "base/callback.h" | 8 #include "base/callback.h" |
| 9 #include "base/file_path.h" | 9 #include "base/file_path.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 !static_cast<DictionaryValue*>(bookmarks_.get())->Get( | 107 !static_cast<DictionaryValue*>(bookmarks_.get())->Get( |
| 108 BookmarkCodec::kRootsKey, &roots) || | 108 BookmarkCodec::kRootsKey, &roots) || |
| 109 roots->GetType() != Value::TYPE_DICTIONARY) { | 109 roots->GetType() != Value::TYPE_DICTIONARY) { |
| 110 NOTREACHED(); | 110 NOTREACHED(); |
| 111 return; | 111 return; |
| 112 } | 112 } |
| 113 | 113 |
| 114 DictionaryValue* roots_d_value = static_cast<DictionaryValue*>(roots); | 114 DictionaryValue* roots_d_value = static_cast<DictionaryValue*>(roots); |
| 115 Value* root_folder_value; | 115 Value* root_folder_value; |
| 116 Value* other_folder_value; | 116 Value* other_folder_value; |
| 117 Value* synced_folder_value; |
| 117 if (!roots_d_value->Get(BookmarkCodec::kRootFolderNameKey, | 118 if (!roots_d_value->Get(BookmarkCodec::kRootFolderNameKey, |
| 118 &root_folder_value) || | 119 &root_folder_value) || |
| 119 root_folder_value->GetType() != Value::TYPE_DICTIONARY || | 120 root_folder_value->GetType() != Value::TYPE_DICTIONARY || |
| 120 !roots_d_value->Get(BookmarkCodec::kOtherBookmarkFolderNameKey, | 121 !roots_d_value->Get(BookmarkCodec::kOtherBookmarkFolderNameKey, |
| 121 &other_folder_value) || | 122 &other_folder_value) || |
| 122 other_folder_value->GetType() != Value::TYPE_DICTIONARY) { | 123 other_folder_value->GetType() != Value::TYPE_DICTIONARY || |
| 124 !roots_d_value->Get(BookmarkCodec::kSyncedBookmarkFolderNameKey, |
| 125 &synced_folder_value) || |
| 126 synced_folder_value->GetType() != Value::TYPE_DICTIONARY) { |
| 123 NOTREACHED(); | 127 NOTREACHED(); |
| 124 return; // Invalid type for root folder and/or other folder. | 128 return; // Invalid type for root folder and/or other folder. |
| 125 } | 129 } |
| 126 | 130 |
| 127 IncrementIndent(); | 131 IncrementIndent(); |
| 128 | 132 |
| 129 if (!WriteNode(*static_cast<DictionaryValue*>(root_folder_value), | 133 if (!WriteNode(*static_cast<DictionaryValue*>(root_folder_value), |
| 130 BookmarkNode::BOOKMARK_BAR) || | 134 BookmarkNode::BOOKMARK_BAR) || |
| 131 !WriteNode(*static_cast<DictionaryValue*>(other_folder_value), | 135 !WriteNode(*static_cast<DictionaryValue*>(other_folder_value), |
| 132 BookmarkNode::OTHER_NODE)) { | 136 BookmarkNode::OTHER_NODE) || |
| 137 !WriteNode(*static_cast<DictionaryValue*>(synced_folder_value), |
| 138 BookmarkNode::SYNCED)) { |
| 133 return; | 139 return; |
| 134 } | 140 } |
| 135 | 141 |
| 136 DecrementIndent(); | 142 DecrementIndent(); |
| 137 | 143 |
| 138 Write(kFolderChildrenEnd); | 144 Write(kFolderChildrenEnd); |
| 139 Write(kNewline); | 145 Write(kNewline); |
| 140 // File stream close is forced so that unit test could read it. | 146 // File stream close is forced so that unit test could read it. |
| 141 file_stream_.Close(); | 147 file_stream_.Close(); |
| 142 } | 148 } |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 279 // Folder. | 285 // Folder. |
| 280 std::string last_modified_date; | 286 std::string last_modified_date; |
| 281 Value* child_values; | 287 Value* child_values; |
| 282 if (!value.GetString(BookmarkCodec::kDateModifiedKey, | 288 if (!value.GetString(BookmarkCodec::kDateModifiedKey, |
| 283 &last_modified_date) || | 289 &last_modified_date) || |
| 284 !value.Get(BookmarkCodec::kChildrenKey, &child_values) || | 290 !value.Get(BookmarkCodec::kChildrenKey, &child_values) || |
| 285 child_values->GetType() != Value::TYPE_LIST) { | 291 child_values->GetType() != Value::TYPE_LIST) { |
| 286 NOTREACHED(); | 292 NOTREACHED(); |
| 287 return false; | 293 return false; |
| 288 } | 294 } |
| 289 if (folder_type != BookmarkNode::OTHER_NODE) { | 295 if (folder_type != BookmarkNode::OTHER_NODE && |
| 290 // The other folder name is not written out. This gives the effect of | 296 folder_type != BookmarkNode::SYNCED) { |
| 291 // making the contents of the 'other folder' be a sibling to the bookmark | 297 // The other/synced folder name are not written out. This gives the effect |
| 292 // bar folder. | 298 // of making the contents of the 'other folder' be a sibling to the |
| 299 // bookmark bar folder. |
| 293 if (!WriteIndent() || | 300 if (!WriteIndent() || |
| 294 !Write(kFolderStart) || | 301 !Write(kFolderStart) || |
| 295 !WriteTime(date_added_string) || | 302 !WriteTime(date_added_string) || |
| 296 !Write(kLastModified) || | 303 !Write(kLastModified) || |
| 297 !WriteTime(last_modified_date)) { | 304 !WriteTime(last_modified_date)) { |
| 298 return false; | 305 return false; |
| 299 } | 306 } |
| 300 if (folder_type == BookmarkNode::BOOKMARK_BAR) { | 307 if (folder_type == BookmarkNode::BOOKMARK_BAR) { |
| 301 if (!Write(kBookmarkBar)) | 308 if (!Write(kBookmarkBar)) |
| 302 return false; | 309 return false; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 322 if (!children->Get(i, &child_value) || | 329 if (!children->Get(i, &child_value) || |
| 323 child_value->GetType() != Value::TYPE_DICTIONARY) { | 330 child_value->GetType() != Value::TYPE_DICTIONARY) { |
| 324 NOTREACHED(); | 331 NOTREACHED(); |
| 325 return false; | 332 return false; |
| 326 } | 333 } |
| 327 if (!WriteNode(*static_cast<DictionaryValue*>(child_value), | 334 if (!WriteNode(*static_cast<DictionaryValue*>(child_value), |
| 328 BookmarkNode::FOLDER)) { | 335 BookmarkNode::FOLDER)) { |
| 329 return false; | 336 return false; |
| 330 } | 337 } |
| 331 } | 338 } |
| 332 if (folder_type != BookmarkNode::OTHER_NODE) { | 339 if (folder_type != BookmarkNode::OTHER_NODE && |
| 340 folder_type != BookmarkNode::SYNCED) { |
| 333 // Close out the folder. | 341 // Close out the folder. |
| 334 DecrementIndent(); | 342 DecrementIndent(); |
| 335 if (!WriteIndent() || | 343 if (!WriteIndent() || |
| 336 !Write(kFolderChildrenEnd) || | 344 !Write(kFolderChildrenEnd) || |
| 337 !Write(kNewline)) { | 345 !Write(kNewline)) { |
| 338 return false; | 346 return false; |
| 339 } | 347 } |
| 340 } | 348 } |
| 341 return true; | 349 return true; |
| 342 } | 350 } |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 376 NotificationType::PROFILE_DESTROYED, | 384 NotificationType::PROFILE_DESTROYED, |
| 377 Source<Profile>(profile_)); | 385 Source<Profile>(profile_)); |
| 378 } | 386 } |
| 379 | 387 |
| 380 BookmarkFaviconFetcher::~BookmarkFaviconFetcher() { | 388 BookmarkFaviconFetcher::~BookmarkFaviconFetcher() { |
| 381 } | 389 } |
| 382 | 390 |
| 383 void BookmarkFaviconFetcher::ExportBookmarks() { | 391 void BookmarkFaviconFetcher::ExportBookmarks() { |
| 384 ExtractUrls(profile_->GetBookmarkModel()->GetBookmarkBarNode()); | 392 ExtractUrls(profile_->GetBookmarkModel()->GetBookmarkBarNode()); |
| 385 ExtractUrls(profile_->GetBookmarkModel()->other_node()); | 393 ExtractUrls(profile_->GetBookmarkModel()->other_node()); |
| 394 ExtractUrls(profile_->GetBookmarkModel()->synced_node()); |
| 386 if (!bookmark_urls_.empty()) { | 395 if (!bookmark_urls_.empty()) { |
| 387 FetchNextFavicon(); | 396 FetchNextFavicon(); |
| 388 } else { | 397 } else { |
| 389 ExecuteWriter(); | 398 ExecuteWriter(); |
| 390 } | 399 } |
| 391 } | 400 } |
| 392 | 401 |
| 393 void BookmarkFaviconFetcher::Observe(NotificationType type, | 402 void BookmarkFaviconFetcher::Observe(NotificationType type, |
| 394 const NotificationSource& source, | 403 const NotificationSource& source, |
| 395 const NotificationDetails& details) { | 404 const NotificationDetails& details) { |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 // BookmarkModel isn't thread safe (nor would we want to lock it down | 485 // BookmarkModel isn't thread safe (nor would we want to lock it down |
| 477 // for the duration of the write), as such we make a copy of the | 486 // for the duration of the write), as such we make a copy of the |
| 478 // BookmarkModel using BookmarkCodec then write from that. | 487 // BookmarkModel using BookmarkCodec then write from that. |
| 479 if (fetcher == NULL) { | 488 if (fetcher == NULL) { |
| 480 fetcher = new BookmarkFaviconFetcher(profile, path, observer); | 489 fetcher = new BookmarkFaviconFetcher(profile, path, observer); |
| 481 fetcher->ExportBookmarks(); | 490 fetcher->ExportBookmarks(); |
| 482 } | 491 } |
| 483 } | 492 } |
| 484 | 493 |
| 485 } // namespace bookmark_html_writer | 494 } // namespace bookmark_html_writer |
| OLD | NEW |