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) { |
noyau (Ping after 24h)
2011/12/07 10:27:56
Maybe I do not understand the code enough, but it
sky
2011/12/07 16:36:53
See line 733. The mobile node is special cased.
noyau (Ping after 24h)
2011/12/07 16:49:33
Ah, I missed that line!
| |
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::SetMobileFolderVisible(bool value) { |
noyau (Ping after 24h)
2011/12/07 09:45:22
Maybe revisiting this method to be SetFolderVisibl
sky
2011/12/07 16:36:53
Will do.
| |
552 DCHECK(loaded_); | 534 DCHECK(loaded_); |
553 static_cast<MobileNode*>(mobile_node_)->set_visible(value); | 535 mobile_node_->set_visible(value); |
554 } | 536 } |
555 | 537 |
556 bool BookmarkModel::IsBookmarkedNoLock(const GURL& url) { | 538 bool BookmarkModel::IsBookmarkedNoLock(const GURL& url) { |
557 BookmarkNode tmp_node(url); | 539 BookmarkNode tmp_node(url); |
558 return (nodes_ordered_by_url_set_.find(&tmp_node) != | 540 return (nodes_ordered_by_url_set_.find(&tmp_node) != |
559 nodes_ordered_by_url_set_.end()); | 541 nodes_ordered_by_url_set_.end()); |
560 } | 542 } |
561 | 543 |
562 void BookmarkModel::RemoveNode(BookmarkNode* node, | 544 void BookmarkModel::RemoveNode(BookmarkNode* node, |
563 std::set<GURL>* removed_urls) { | 545 std::set<GURL>* removed_urls) { |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
733 } | 715 } |
734 | 716 |
735 bool BookmarkModel::IsValidIndex(const BookmarkNode* parent, | 717 bool BookmarkModel::IsValidIndex(const BookmarkNode* parent, |
736 int index, | 718 int index, |
737 bool allow_end) { | 719 bool allow_end) { |
738 return (parent && parent->is_folder() && | 720 return (parent && parent->is_folder() && |
739 (index >= 0 && (index < parent->child_count() || | 721 (index >= 0 && (index < parent->child_count() || |
740 (allow_end && index == parent->child_count())))); | 722 (allow_end && index == parent->child_count())))); |
741 } | 723 } |
742 | 724 |
743 BookmarkNode* BookmarkModel::CreatePermanentNode(BookmarkNode::Type type) { | 725 BookmarkPermanentNode* BookmarkModel::CreatePermanentNode( |
726 BookmarkNode::Type type) { | |
744 DCHECK(type == BookmarkNode::BOOKMARK_BAR || | 727 DCHECK(type == BookmarkNode::BOOKMARK_BAR || |
745 type == BookmarkNode::OTHER_NODE || | 728 type == BookmarkNode::OTHER_NODE || |
746 type == BookmarkNode::MOBILE); | 729 type == BookmarkNode::MOBILE); |
747 BookmarkNode* node; | 730 BookmarkPermanentNode* node = |
748 if (type == BookmarkNode::MOBILE) { | 731 new BookmarkPermanentNode(generate_next_node_id()); |
749 node = new MobileNode(generate_next_node_id()); | 732 if (type == BookmarkNode::MOBILE) |
750 node->set_title( | 733 node->set_visible(false); // Mobile node is initially hidden. |
751 l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME)); | 734 |
752 } else { | 735 int title_id; |
753 node = new BookmarkNode(generate_next_node_id(), GURL()); | 736 switch (type) { |
754 if (type == BookmarkNode::BOOKMARK_BAR) { | 737 case BookmarkNode::BOOKMARK_BAR: |
755 node->set_title(l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_FOLDER_NAME)); | 738 title_id = IDS_BOOKMARK_BAR_FOLDER_NAME; |
756 } else if (type == BookmarkNode::OTHER_NODE) { | 739 break; |
757 node->set_title( | 740 case BookmarkNode::OTHER_NODE: |
758 l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME)); | 741 title_id = IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME; |
759 } else { | 742 break; |
743 case BookmarkNode::MOBILE: | |
744 title_id = IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME; | |
745 break; | |
746 default: | |
760 NOTREACHED(); | 747 NOTREACHED(); |
761 } | 748 title_id = IDS_BOOKMARK_BAR_FOLDER_NAME; |
749 break; | |
762 } | 750 } |
751 node->set_title(l10n_util::GetStringUTF16(title_id)); | |
763 node->set_type(type); | 752 node->set_type(type); |
764 return node; | 753 return node; |
765 } | 754 } |
766 | 755 |
767 void BookmarkModel::OnFaviconDataAvailable( | 756 void BookmarkModel::OnFaviconDataAvailable( |
768 FaviconService::Handle handle, | 757 FaviconService::Handle handle, |
769 history::FaviconData favicon) { | 758 history::FaviconData favicon) { |
770 SkBitmap favicon_bitmap; | 759 SkBitmap favicon_bitmap; |
771 BookmarkNode* node = | 760 BookmarkNode* node = |
772 load_consumer_.GetClientData( | 761 load_consumer_.GetClientData( |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
849 nodes_ordered_by_url_set_.insert(node); | 838 nodes_ordered_by_url_set_.insert(node); |
850 for (int i = 0; i < node->child_count(); ++i) | 839 for (int i = 0; i < node->child_count(); ++i) |
851 PopulateNodesByURL(node->GetChild(i)); | 840 PopulateNodesByURL(node->GetChild(i)); |
852 } | 841 } |
853 | 842 |
854 int64 BookmarkModel::generate_next_node_id() { | 843 int64 BookmarkModel::generate_next_node_id() { |
855 return next_node_id_++; | 844 return next_node_id_++; |
856 } | 845 } |
857 | 846 |
858 BookmarkLoadDetails* BookmarkModel::CreateLoadDetails() { | 847 BookmarkLoadDetails* BookmarkModel::CreateLoadDetails() { |
859 BookmarkNode* bb_node = CreatePermanentNode(BookmarkNode::BOOKMARK_BAR); | 848 BookmarkPermanentNode* bb_node = |
860 BookmarkNode* other_node = CreatePermanentNode(BookmarkNode::OTHER_NODE); | 849 CreatePermanentNode(BookmarkNode::BOOKMARK_BAR); |
861 BookmarkNode* mobile_node = CreatePermanentNode(BookmarkNode::MOBILE); | 850 BookmarkPermanentNode* other_node = |
851 CreatePermanentNode(BookmarkNode::OTHER_NODE); | |
852 BookmarkPermanentNode* mobile_node = | |
853 CreatePermanentNode(BookmarkNode::MOBILE); | |
862 return new BookmarkLoadDetails(bb_node, other_node, mobile_node, | 854 return new BookmarkLoadDetails(bb_node, other_node, mobile_node, |
863 new BookmarkIndex(profile_), next_node_id_); | 855 new BookmarkIndex(profile_), next_node_id_); |
864 } | 856 } |
OLD | NEW |