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 |