| 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_model.h" | 5 #include "chrome/browser/bookmarks/bookmark_model.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <functional> | 8 #include <functional> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 } | 48 } |
| 49 | 49 |
| 50 BookmarkNode::BookmarkNode(int64 id, const GURL& url) | 50 BookmarkNode::BookmarkNode(int64 id, const GURL& url) |
| 51 : url_(url) { | 51 : url_(url) { |
| 52 Initialize(id); | 52 Initialize(id); |
| 53 } | 53 } |
| 54 | 54 |
| 55 BookmarkNode::~BookmarkNode() { | 55 BookmarkNode::~BookmarkNode() { |
| 56 } | 56 } |
| 57 | 57 |
| 58 bool BookmarkNode::IsVisible() const { |
| 59 return true; |
| 60 } |
| 61 |
| 58 void BookmarkNode::Initialize(int64 id) { | 62 void BookmarkNode::Initialize(int64 id) { |
| 59 id_ = id; | 63 id_ = id; |
| 60 type_ = url_.is_empty() ? FOLDER : URL; | 64 type_ = url_.is_empty() ? FOLDER : URL; |
| 61 date_added_ = Time::Now(); | 65 date_added_ = Time::Now(); |
| 62 is_favicon_loaded_ = false; | 66 is_favicon_loaded_ = false; |
| 63 favicon_load_handle_ = 0; | 67 favicon_load_handle_ = 0; |
| 64 } | 68 } |
| 65 | 69 |
| 66 void BookmarkNode::InvalidateFavicon() { | 70 void BookmarkNode::InvalidateFavicon() { |
| 67 favicon_ = SkBitmap(); | 71 favicon_ = SkBitmap(); |
| 68 is_favicon_loaded_ = false; | 72 is_favicon_loaded_ = false; |
| 69 } | 73 } |
| 70 | 74 |
| 71 // BookmarkModel -------------------------------------------------------------- | |
| 72 | |
| 73 namespace { | 75 namespace { |
| 74 | 76 |
| 75 // Comparator used when sorting bookmarks. Folders are sorted first, then | 77 // Comparator used when sorting bookmarks. Folders are sorted first, then |
| 76 // bookmarks. | 78 // bookmarks. |
| 77 class SortComparator : public std::binary_function<const BookmarkNode*, | 79 class SortComparator : public std::binary_function<const BookmarkNode*, |
| 78 const BookmarkNode*, | 80 const BookmarkNode*, |
| 79 bool> { | 81 bool> { |
| 80 public: | 82 public: |
| 81 explicit SortComparator(icu::Collator* collator) : collator_(collator) { } | 83 explicit SortComparator(icu::Collator* collator) : collator_(collator) { } |
| 82 | 84 |
| 83 // Returns true if lhs preceeds rhs. | 85 // Returns true if lhs preceeds rhs. |
| 84 bool operator() (const BookmarkNode* n1, const BookmarkNode* n2) { | 86 bool operator() (const BookmarkNode* n1, const BookmarkNode* n2) { |
| 85 if (n1->type() == n2->type()) { | 87 if (n1->type() == n2->type()) { |
| 86 // Types are the same, compare the names. | 88 // Types are the same, compare the names. |
| 87 if (!collator_) | 89 if (!collator_) |
| 88 return n1->GetTitle() < n2->GetTitle(); | 90 return n1->GetTitle() < n2->GetTitle(); |
| 89 return l10n_util::CompareString16WithCollator( | 91 return l10n_util::CompareString16WithCollator( |
| 90 collator_, n1->GetTitle(), n2->GetTitle()) == UCOL_LESS; | 92 collator_, n1->GetTitle(), n2->GetTitle()) == UCOL_LESS; |
| 91 } | 93 } |
| 92 // Types differ, sort such that folders come first. | 94 // Types differ, sort such that folders come first. |
| 93 return n1->is_folder(); | 95 return n1->is_folder(); |
| 94 } | 96 } |
| 95 | 97 |
| 96 private: | 98 private: |
| 97 icu::Collator* collator_; | 99 icu::Collator* collator_; |
| 98 }; | 100 }; |
| 99 | 101 |
| 102 // MobileNode ------------------------------------------------------------------ |
| 103 |
| 104 // The visibility of the mobile node changes based on sync state, requiring a |
| 105 // special subclass. |
| 106 class MobileNode : public BookmarkNode { |
| 107 public: |
| 108 explicit MobileNode(int64 id); |
| 109 virtual ~MobileNode(); |
| 110 |
| 111 // BookmarkNode overrides: |
| 112 virtual bool IsVisible() const OVERRIDE; |
| 113 |
| 114 private: |
| 115 bool visible_; |
| 116 |
| 117 DISALLOW_COPY_AND_ASSIGN(MobileNode); |
| 118 }; |
| 119 |
| 120 MobileNode::MobileNode(int64 id) |
| 121 : BookmarkNode(id, GURL()), |
| 122 visible_(false) { |
| 123 } |
| 124 |
| 125 MobileNode::~MobileNode() { |
| 126 } |
| 127 |
| 128 bool MobileNode::IsVisible() const { |
| 129 return visible_ || !empty(); |
| 130 } |
| 131 |
| 100 } // namespace | 132 } // namespace |
| 101 | 133 |
| 134 // BookmarkModel -------------------------------------------------------------- |
| 135 |
| 102 BookmarkModel::BookmarkModel(Profile* profile) | 136 BookmarkModel::BookmarkModel(Profile* profile) |
| 103 : profile_(profile), | 137 : profile_(profile), |
| 104 loaded_(false), | 138 loaded_(false), |
| 105 file_changed_(false), | 139 file_changed_(false), |
| 106 root_(GURL()), | 140 root_(GURL()), |
| 107 bookmark_bar_node_(NULL), | 141 bookmark_bar_node_(NULL), |
| 108 other_node_(NULL), | 142 other_node_(NULL), |
| 109 mobile_node_(NULL), | 143 mobile_node_(NULL), |
| 110 next_node_id_(1), | 144 next_node_id_(1), |
| 111 observers_(ObserverList<BookmarkModelObserver>::NOTIFY_EXISTING_ONLY), | 145 observers_(ObserverList<BookmarkModelObserver>::NOTIFY_EXISTING_ONLY), |
| (...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 696 bool allow_end) { | 730 bool allow_end) { |
| 697 return (parent && parent->is_folder() && | 731 return (parent && parent->is_folder() && |
| 698 (index >= 0 && (index < parent->child_count() || | 732 (index >= 0 && (index < parent->child_count() || |
| 699 (allow_end && index == parent->child_count())))); | 733 (allow_end && index == parent->child_count())))); |
| 700 } | 734 } |
| 701 | 735 |
| 702 BookmarkNode* BookmarkModel::CreatePermanentNode(BookmarkNode::Type type) { | 736 BookmarkNode* BookmarkModel::CreatePermanentNode(BookmarkNode::Type type) { |
| 703 DCHECK(type == BookmarkNode::BOOKMARK_BAR || | 737 DCHECK(type == BookmarkNode::BOOKMARK_BAR || |
| 704 type == BookmarkNode::OTHER_NODE || | 738 type == BookmarkNode::OTHER_NODE || |
| 705 type == BookmarkNode::MOBILE); | 739 type == BookmarkNode::MOBILE); |
| 706 BookmarkNode* node = new BookmarkNode(generate_next_node_id(), GURL()); | 740 BookmarkNode* node; |
| 707 node->set_type(type); | 741 if (type == BookmarkNode::MOBILE) { |
| 708 if (type == BookmarkNode::BOOKMARK_BAR) { | 742 node = new MobileNode(generate_next_node_id()); |
| 709 node->set_title(l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_FOLDER_NAME)); | |
| 710 } else if (type == BookmarkNode::OTHER_NODE) { | |
| 711 node->set_title( | |
| 712 l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME)); | |
| 713 } else { | |
| 714 node->set_title( | 743 node->set_title( |
| 715 l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME)); | 744 l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME)); |
| 745 } else { |
| 746 node = new BookmarkNode(generate_next_node_id(), GURL()); |
| 747 if (type == BookmarkNode::BOOKMARK_BAR) { |
| 748 node->set_title(l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_FOLDER_NAME)); |
| 749 } else if (type == BookmarkNode::OTHER_NODE) { |
| 750 node->set_title( |
| 751 l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME)); |
| 752 } else { |
| 753 NOTREACHED(); |
| 754 } |
| 716 } | 755 } |
| 756 node->set_type(type); |
| 717 return node; | 757 return node; |
| 718 } | 758 } |
| 719 | 759 |
| 720 void BookmarkModel::OnFaviconDataAvailable( | 760 void BookmarkModel::OnFaviconDataAvailable( |
| 721 FaviconService::Handle handle, | 761 FaviconService::Handle handle, |
| 722 history::FaviconData favicon) { | 762 history::FaviconData favicon) { |
| 723 SkBitmap favicon_bitmap; | 763 SkBitmap favicon_bitmap; |
| 724 BookmarkNode* node = | 764 BookmarkNode* node = |
| 725 load_consumer_.GetClientData( | 765 load_consumer_.GetClientData( |
| 726 profile_->GetFaviconService(Profile::EXPLICIT_ACCESS), handle); | 766 profile_->GetFaviconService(Profile::EXPLICIT_ACCESS), handle); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 808 return next_node_id_++; | 848 return next_node_id_++; |
| 809 } | 849 } |
| 810 | 850 |
| 811 BookmarkLoadDetails* BookmarkModel::CreateLoadDetails() { | 851 BookmarkLoadDetails* BookmarkModel::CreateLoadDetails() { |
| 812 BookmarkNode* bb_node = CreatePermanentNode(BookmarkNode::BOOKMARK_BAR); | 852 BookmarkNode* bb_node = CreatePermanentNode(BookmarkNode::BOOKMARK_BAR); |
| 813 BookmarkNode* other_node = CreatePermanentNode(BookmarkNode::OTHER_NODE); | 853 BookmarkNode* other_node = CreatePermanentNode(BookmarkNode::OTHER_NODE); |
| 814 BookmarkNode* mobile_node = CreatePermanentNode(BookmarkNode::MOBILE); | 854 BookmarkNode* mobile_node = CreatePermanentNode(BookmarkNode::MOBILE); |
| 815 return new BookmarkLoadDetails(bb_node, other_node, mobile_node, | 855 return new BookmarkLoadDetails(bb_node, other_node, mobile_node, |
| 816 new BookmarkIndex(profile_), next_node_id_); | 856 new BookmarkIndex(profile_), next_node_id_); |
| 817 } | 857 } |
| OLD | NEW |