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 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 collator_, n1->GetTitle(), n2->GetTitle()) == UCOL_LESS; | 92 collator_, n1->GetTitle(), n2->GetTitle()) == UCOL_LESS; |
93 } | 93 } |
94 // Types differ, sort such that folders come first. | 94 // Types differ, sort such that folders come first. |
95 return n1->is_folder(); | 95 return n1->is_folder(); |
96 } | 96 } |
97 | 97 |
98 private: | 98 private: |
99 icu::Collator* collator_; | 99 icu::Collator* collator_; |
100 }; | 100 }; |
101 | 101 |
102 // MobileNode ------------------------------------------------------------------ | 102 } // namespace |
103 | 103 |
104 // The visibility of the mobile node changes based on sync state, requiring a | 104 // BookmarkPermanentNode ------------------------------------------------------- |
105 // special subclass. | |
106 class MobileNode : public BookmarkNode { | |
107 public: | |
108 explicit MobileNode(int64 id); | |
109 virtual ~MobileNode(); | |
110 | 105 |
111 void set_visible(bool value) { visible_ = value; } | 106 BookmarkPermanentNode::BookmarkPermanentNode(int64 id) |
112 | |
113 // BookmarkNode overrides: | |
114 virtual bool IsVisible() const OVERRIDE; | |
115 | |
116 private: | |
117 bool visible_; | |
118 | |
119 DISALLOW_COPY_AND_ASSIGN(MobileNode); | |
120 }; | |
121 | |
122 MobileNode::MobileNode(int64 id) | |
123 : BookmarkNode(id, GURL()), | 107 : BookmarkNode(id, GURL()), |
124 visible_(false) { | 108 visible_(true) { |
125 } | 109 } |
126 | 110 |
127 MobileNode::~MobileNode() { | 111 BookmarkPermanentNode::~BookmarkPermanentNode() { |
128 } | 112 } |
129 | 113 |
130 bool MobileNode::IsVisible() const { | 114 bool BookmarkPermanentNode::IsVisible() const { |
131 return visible_ || !empty(); | 115 return visible_ || !empty(); |
132 } | 116 } |
133 | 117 |
134 } // namespace | |
135 | |
136 // BookmarkModel -------------------------------------------------------------- | 118 // BookmarkModel -------------------------------------------------------------- |
137 | 119 |
138 BookmarkModel::BookmarkModel(Profile* profile) | 120 BookmarkModel::BookmarkModel(Profile* profile) |
139 : profile_(profile), | 121 : profile_(profile), |
140 loaded_(false), | 122 loaded_(false), |
141 file_changed_(false), | 123 file_changed_(false), |
142 root_(GURL()), | 124 root_(GURL()), |
143 bookmark_bar_node_(NULL), | 125 bookmark_bar_node_(NULL), |
144 other_node_(NULL), | 126 other_node_(NULL), |
145 mobile_node_(NULL), | 127 mobile_node_(NULL), |
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
541 return; | 523 return; |
542 | 524 |
543 index_->GetBookmarksWithTitlesMatching(text, max_count, matches); | 525 index_->GetBookmarksWithTitlesMatching(text, max_count, matches); |
544 } | 526 } |
545 | 527 |
546 void BookmarkModel::ClearStore() { | 528 void BookmarkModel::ClearStore() { |
547 registrar_.RemoveAll(); | 529 registrar_.RemoveAll(); |
548 store_ = NULL; | 530 store_ = NULL; |
549 } | 531 } |
550 | 532 |
551 void BookmarkModel::SetMobileFolderVisible(bool value) { | 533 void BookmarkModel::SetPermanentNodeVisibile(BookmarkNode::Type type, |
| 534 bool value) { |
552 DCHECK(loaded_); | 535 DCHECK(loaded_); |
553 static_cast<MobileNode*>(mobile_node_)->set_visible(value); | 536 switch (type) { |
| 537 case BookmarkNode::BOOKMARK_BAR: |
| 538 bookmark_bar_node_->set_visible(value); |
| 539 break; |
| 540 case BookmarkNode::OTHER_NODE: |
| 541 other_node_->set_visible(value); |
| 542 break; |
| 543 case BookmarkNode::MOBILE: |
| 544 mobile_node_->set_visible(value); |
| 545 break; |
| 546 default: |
| 547 NOTREACHED(); |
| 548 } |
554 } | 549 } |
555 | 550 |
556 bool BookmarkModel::IsBookmarkedNoLock(const GURL& url) { | 551 bool BookmarkModel::IsBookmarkedNoLock(const GURL& url) { |
557 BookmarkNode tmp_node(url); | 552 BookmarkNode tmp_node(url); |
558 return (nodes_ordered_by_url_set_.find(&tmp_node) != | 553 return (nodes_ordered_by_url_set_.find(&tmp_node) != |
559 nodes_ordered_by_url_set_.end()); | 554 nodes_ordered_by_url_set_.end()); |
560 } | 555 } |
561 | 556 |
562 void BookmarkModel::RemoveNode(BookmarkNode* node, | 557 void BookmarkModel::RemoveNode(BookmarkNode* node, |
563 std::set<GURL>* removed_urls) { | 558 std::set<GURL>* removed_urls) { |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
733 } | 728 } |
734 | 729 |
735 bool BookmarkModel::IsValidIndex(const BookmarkNode* parent, | 730 bool BookmarkModel::IsValidIndex(const BookmarkNode* parent, |
736 int index, | 731 int index, |
737 bool allow_end) { | 732 bool allow_end) { |
738 return (parent && parent->is_folder() && | 733 return (parent && parent->is_folder() && |
739 (index >= 0 && (index < parent->child_count() || | 734 (index >= 0 && (index < parent->child_count() || |
740 (allow_end && index == parent->child_count())))); | 735 (allow_end && index == parent->child_count())))); |
741 } | 736 } |
742 | 737 |
743 BookmarkNode* BookmarkModel::CreatePermanentNode(BookmarkNode::Type type) { | 738 BookmarkPermanentNode* BookmarkModel::CreatePermanentNode( |
| 739 BookmarkNode::Type type) { |
744 DCHECK(type == BookmarkNode::BOOKMARK_BAR || | 740 DCHECK(type == BookmarkNode::BOOKMARK_BAR || |
745 type == BookmarkNode::OTHER_NODE || | 741 type == BookmarkNode::OTHER_NODE || |
746 type == BookmarkNode::MOBILE); | 742 type == BookmarkNode::MOBILE); |
747 BookmarkNode* node; | 743 BookmarkPermanentNode* node = |
748 if (type == BookmarkNode::MOBILE) { | 744 new BookmarkPermanentNode(generate_next_node_id()); |
749 node = new MobileNode(generate_next_node_id()); | 745 if (type == BookmarkNode::MOBILE) |
750 node->set_title( | 746 node->set_visible(false); // Mobile node is initially hidden. |
751 l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME)); | 747 |
752 } else { | 748 int title_id; |
753 node = new BookmarkNode(generate_next_node_id(), GURL()); | 749 switch (type) { |
754 if (type == BookmarkNode::BOOKMARK_BAR) { | 750 case BookmarkNode::BOOKMARK_BAR: |
755 node->set_title(l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_FOLDER_NAME)); | 751 title_id = IDS_BOOKMARK_BAR_FOLDER_NAME; |
756 } else if (type == BookmarkNode::OTHER_NODE) { | 752 break; |
757 node->set_title( | 753 case BookmarkNode::OTHER_NODE: |
758 l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME)); | 754 title_id = IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME; |
759 } else { | 755 break; |
| 756 case BookmarkNode::MOBILE: |
| 757 title_id = IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME; |
| 758 break; |
| 759 default: |
760 NOTREACHED(); | 760 NOTREACHED(); |
761 } | 761 title_id = IDS_BOOKMARK_BAR_FOLDER_NAME; |
| 762 break; |
762 } | 763 } |
| 764 node->set_title(l10n_util::GetStringUTF16(title_id)); |
763 node->set_type(type); | 765 node->set_type(type); |
764 return node; | 766 return node; |
765 } | 767 } |
766 | 768 |
767 void BookmarkModel::OnFaviconDataAvailable( | 769 void BookmarkModel::OnFaviconDataAvailable( |
768 FaviconService::Handle handle, | 770 FaviconService::Handle handle, |
769 history::FaviconData favicon) { | 771 history::FaviconData favicon) { |
770 SkBitmap favicon_bitmap; | 772 SkBitmap favicon_bitmap; |
771 BookmarkNode* node = | 773 BookmarkNode* node = |
772 load_consumer_.GetClientData( | 774 load_consumer_.GetClientData( |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
849 nodes_ordered_by_url_set_.insert(node); | 851 nodes_ordered_by_url_set_.insert(node); |
850 for (int i = 0; i < node->child_count(); ++i) | 852 for (int i = 0; i < node->child_count(); ++i) |
851 PopulateNodesByURL(node->GetChild(i)); | 853 PopulateNodesByURL(node->GetChild(i)); |
852 } | 854 } |
853 | 855 |
854 int64 BookmarkModel::generate_next_node_id() { | 856 int64 BookmarkModel::generate_next_node_id() { |
855 return next_node_id_++; | 857 return next_node_id_++; |
856 } | 858 } |
857 | 859 |
858 BookmarkLoadDetails* BookmarkModel::CreateLoadDetails() { | 860 BookmarkLoadDetails* BookmarkModel::CreateLoadDetails() { |
859 BookmarkNode* bb_node = CreatePermanentNode(BookmarkNode::BOOKMARK_BAR); | 861 BookmarkPermanentNode* bb_node = |
860 BookmarkNode* other_node = CreatePermanentNode(BookmarkNode::OTHER_NODE); | 862 CreatePermanentNode(BookmarkNode::BOOKMARK_BAR); |
861 BookmarkNode* mobile_node = CreatePermanentNode(BookmarkNode::MOBILE); | 863 BookmarkPermanentNode* other_node = |
| 864 CreatePermanentNode(BookmarkNode::OTHER_NODE); |
| 865 BookmarkPermanentNode* mobile_node = |
| 866 CreatePermanentNode(BookmarkNode::MOBILE); |
862 return new BookmarkLoadDetails(bb_node, other_node, mobile_node, | 867 return new BookmarkLoadDetails(bb_node, other_node, mobile_node, |
863 new BookmarkIndex(profile_), next_node_id_); | 868 new BookmarkIndex(profile_), next_node_id_); |
864 } | 869 } |
OLD | NEW |