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 |